[#204] fixed query string parsing
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,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 {
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user