[#204] fixed query string parsing

This commit is contained in:
Gani Georgiev
2022-08-01 14:20:21 +03:00
parent d35134e913
commit 9d0ea7635b
18 changed files with 661 additions and 787 deletions
+1 -1
View File
@@ -138,7 +138,7 @@ function showTooltip(node, data) {
getTooltip().classList.add("active");
refreshTooltip(node, data);
}, (!isNaN(data.delay) ? data.delay : 250));
}, (!isNaN(data.delay) ? data.delay : 200));
}
export default function tooltip(node, tooltipData) {
@@ -1,16 +1,14 @@
<script>
import { link } from "svelte-spa-router";
import { replace } from "svelte-spa-router";
import { link, replace, querystring } from "svelte-spa-router";
import FullPage from "@/components/base/FullPage.svelte";
import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper";
import Field from "@/components/base/Field.svelte";
import { addErrorToast } from "@/stores/toasts";
const queryParams = CommonHelper.getQueryParams(window.location?.href);
const queryParams = new URLSearchParams($querystring);
let email = queryParams.demoEmail || "";
let password = queryParams.demoPassword || "";
let email = queryParams.get("demoEmail") || "";
let password = queryParams.get("demoPassword") || "";
let isLoading = false;
function login() {
+7 -8
View File
@@ -1,4 +1,5 @@
<script>
import { replace, querystring } from "svelte-spa-router";
import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper";
import { pageTitle } from "@/stores/app";
@@ -11,22 +12,20 @@
import SettingsSidebar from "@/components/settings/SettingsSidebar.svelte";
import AdminUpsertPanel from "@/components/admins/AdminUpsertPanel.svelte";
const queryParams = CommonHelper.getQueryParams(window.location?.href);
$pageTitle = "Admins";
const queryParams = new URLSearchParams($querystring);
let adminUpsertPanel;
let admins = [];
let isLoading = false;
let filter = queryParams.filter || "";
let sort = queryParams.sort || "-created";
let filter = queryParams.get("filter") || "";
let sort = queryParams.get("sort") || "-created";
$: if (sort !== -1 && filter !== -1) {
// keep listing params in sync
CommonHelper.replaceClientQueryParams({
filter: filter,
sort: sort,
});
const query = new URLSearchParams({ filter, sort }).toString();
replace("/settings/admins?" + query);
loadAdmins();
}
+10 -9
View File
@@ -1,11 +1,11 @@
<script>
import { replace, querystring } from "svelte-spa-router";
import {
collections,
activeCollection,
isCollectionsLoading,
loadCollections,
} from "@/stores/collections";
import CommonHelper from "@/utils/CommonHelper";
import tooltip from "@/actions/tooltip";
import { pageTitle } from "@/stores/app";
import Searchbar from "@/components/base/Searchbar.svelte";
@@ -16,17 +16,17 @@
import RecordUpsertPanel from "@/components/records/RecordUpsertPanel.svelte";
import RecordsList from "@/components/records/RecordsList.svelte";
const queryParams = CommonHelper.getQueryParams(window.location?.href);
$pageTitle = "Collections";
const queryParams = new URLSearchParams($querystring);
let collectionUpsertPanel;
let collectionDocsPanel;
let recordPanel;
let recordsList;
let filter = queryParams.filter || "";
let sort = queryParams.sort || "-created";
let selectedCollectionId = queryParams.collectionId;
let filter = queryParams.get("filter") || "";
let sort = queryParams.get("sort") || "-created";
let selectedCollectionId = queryParams.get("collectionId") || "";
$: viewableCollections = $collections.filter((c) => c.name != import.meta.env.PB_PROFILE_COLLECTION);
@@ -37,11 +37,12 @@
// keep the url params in sync
$: if (sort || filter || $activeCollection?.id) {
CommonHelper.replaceClientQueryParams({
collectionId: $activeCollection?.id,
const query = new URLSearchParams({
collectionId: $activeCollection?.id || "",
filter: filter,
sort: sort,
});
}).toString();
replace("/collections?" + query);
}
function reset() {
+8 -9
View File
@@ -1,4 +1,5 @@
<script>
import { replace, querystring } from "svelte-spa-router";
import { Collection } from "pocketbase";
import ApiClient from "@/utils/ApiClient";
import CommonHelper from "@/utils/CommonHelper";
@@ -14,11 +15,11 @@
import RecordUpsertPanel from "@/components/records/RecordUpsertPanel.svelte";
import RecordFieldCell from "@/components/records/RecordFieldCell.svelte";
const queryParams = CommonHelper.getQueryParams(window.location?.href);
const excludedProfileFields = ["id", "userId", "created", "updated"];
$pageTitle = "Users";
const queryParams = new URLSearchParams($querystring);
const excludedProfileFields = ["id", "userId", "created", "updated"];
let userUpsertPanel;
let collectionUpsertPanel;
let recordUpsertPanel;
@@ -26,17 +27,15 @@
let currentPage = 1;
let totalItems = 0;
let isLoadingUsers = false;
let filter = queryParams.filter || "";
let sort = queryParams.sort || "-created";
let filter = queryParams.get("filter") || "";
let sort = queryParams.get("sort") || "-created";
let profileCollection = new Collection();
let isLoadingProfileCollection = false;
$: if (sort !== -1 && filter !== -1) {
// keep query params
CommonHelper.replaceClientQueryParams({
filter: filter,
sort: sort,
});
const query = new URLSearchParams({ filter, sort }).toString();
replace("/users?" + query);
loadUsers();
}
+1 -1
View File
@@ -456,7 +456,6 @@ a,
border-radius: var(--baseRadius);
color: var(--txtPrimaryColor);
font-size: 1.2rem;
overflow: hidden;
@include shadowize();
i {
font-size: inherit;
@@ -465,6 +464,7 @@ a,
width: 100%;
height: 100%;
border-radius: inherit;
overflow: hidden;
}
&.thumb-sm {
--thumbSize: 32px;
+1 -22
View File
@@ -1,24 +1,3 @@
@keyframes tooltipHide {
100% {
opacity: 0;
visibility: hidden;
transform: scale(0.9);
}
}
@keyframes tooltipShow {
0% {
opacity: 0;
visibility: hidden;
transform: scale(0.9);
}
100% {
opacity: 1;
visibility: visible;
transform: scale(1);
}
}
.app-tooltip {
position: fixed;
z-index: 999999;
@@ -40,7 +19,7 @@
transition: opacity var(--baseAnimationSpeed),
visibility var(--baseAnimationSpeed),
transform var(--baseAnimationSpeed);
transform: scale(0.9);
transform: scale(0.94);
white-space: pre-line;
@include hide();
&.active {
-102
View File
@@ -600,108 +600,6 @@ export default class CommonHelper {
})
}
/**
* Returns the query string (without "?") for the provided url.
*
* @param {String} [url]
* @return {String}
*/
static getQueryString(url) {
let queryStartPos = url.indexOf("?");
if (queryStartPos < 0) {
return "";
}
let hashStartPos = url.indexOf("#");
return url.substring(queryStartPos + 1, (hashStartPos > queryStartPos ? hashStartPos : url.length));
}
/**
* Very simple and robust query params parser
* (suppors encoded object and array params too).
*
* @param {String} url
* @return {Object}
*/
static getQueryParams(url) {
let result = {};
let params = CommonHelper.getQueryString(url).split("&");
for (let i in params) {
let parts = params[i].split("=");
if (parts.length === 2) {
let val = decodeURIComponent(parts[1]);
if (val.startsWith("{") || val.startsWith("[")) {
try {
val = JSON.parse(val);
} catch (e) {
}
}
result[decodeURIComponent(parts[0])] = val;
}
}
return result;
}
/**
* Updates the query parameter of the provided url.
*
* @param {String} url
* @param {Object} params
* @param {Boolean} [extend]
* @return {String}
*/
static setQueryParams(url, params, extend = true) {
let oldQueryString = CommonHelper.getQueryString(url);
let oldParams = extend && oldQueryString ? CommonHelper.getQueryParams(url) : {};
let resultParams = Object.assign(oldParams, params);
let newQueryString = "";
for (let param in resultParams) {
if (CommonHelper.isEmpty(resultParams[param])) {
continue;
}
if (newQueryString) {
newQueryString += "&";
}
newQueryString += encodeURIComponent(param) + "=";
if (CommonHelper.isObject(resultParams[param])) {
newQueryString += encodeURIComponent(JSON.stringify(resultParams[param]));
} else {
newQueryString += encodeURIComponent(resultParams[param]);
}
}
newQueryString = newQueryString ? ("?" + newQueryString) : "";
// append the new query string to the url
if (CommonHelper.isEmpty(oldQueryString)) {
return url + newQueryString;
}
// replace old query strung with the new one
return url.replace("?" + oldQueryString, newQueryString);
}
/**
* Replaces the current url query params.
*
* @param {Object} params
*/
static replaceClientQueryParams(params) {
let url = CommonHelper.setQueryParams(window.location.href, params);
window.location.replace(url);
}
/**
* Parses and returns the decoded jwt payload data.
*