commit d7337fc7021319da38fea6b7b62713eb70110d40
parent 9202ff9aa943454332a71f3dc3728487bf849147
Author: triesap <137732411+triesap@users.noreply.github.com>
Date: Thu, 29 Aug 2024 10:47:53 +0000
apps-lib: add app query paramaters store
Diffstat:
4 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/apps-lib/package.json b/apps-lib/package.json
@@ -43,6 +43,7 @@
"dependencies": {
"@sveltekit-i18n/base": "^1.3.7",
"@sveltekit-i18n/parser-icu": "^1.0.8",
+ "@radroots/sveltekit-search-params": "workspace:*",
"@radroots/theme": "workspace:*"
},
"publishConfig": {
diff --git a/apps-lib/src/lib/index.ts b/apps-lib/src/lib/index.ts
@@ -8,6 +8,7 @@ export { default as trellis_row_display_value } from "./components/trellis_row_d
export { default as trellis_row_label } from "./components/trellis_row_label.svelte"
export { default as trellis_title } from "./components/trellis_title.svelte"
export { default as trellis_touch } from "./components/trellis_touch.svelte"
+export * from "./stores/client"
export * from "./types/client"
export * from "./types/components"
export * from "./types/trellis"
diff --git a/apps-lib/src/lib/stores/client.ts b/apps-lib/src/lib/stores/client.ts
@@ -0,0 +1,3 @@
+import { queryParameters } from "@radroots/sveltekit-search-params";
+
+export const app_qp = queryParameters();
diff --git a/apps-lib/src/lib/utils/client.ts b/apps-lib/src/lib/utils/client.ts
@@ -1,4 +1,4 @@
-import type { LabelFieldKind } from "$lib/types/client";
+import type { AnchorRoute, LabelFieldKind, NavigationParamTuple, NavigationRouteParamKey } from "$lib/types/client";
import type { ColorMode, ThemeKey, ThemeLayer } from "@radroots/theme";
export const sleep = async (ms: number): Promise<void> => {
@@ -35,4 +35,28 @@ export function parse_layer(layer?: number): ThemeLayer {
export function fmt_trellis(hide_border_t: boolean, hide_border_b: boolean): string {
return `${hide_border_t ? `group-first:border-t-0` : `group-first:border-t-line`} ${hide_border_b ? `group-last:border-b-0` : `group-last:border-b-line`}`;
-};
-\ No newline at end of file
+};
+
+export function encode_qp(params_list?: NavigationParamTuple[]): string {
+ if (!params_list || !params_list.length) return ``;
+ const params = params_list.filter(i => i[0] && i[1])
+ let urlp = ``;
+ if (params_list.length) for (const [i, [k, v]] of params.entries()) urlp += `${i === 0 ? `?` : ``}&${k.trim()}=${encodeURI(v.trim())}`.trim();
+ return urlp;
+}
+
+export const decode_qp = (query_param: string): AnchorRoute => {
+ const route = decodeURI(query_param).replaceAll(`//`, `/`);
+ return `/${route.charAt(0) === `/` ? route.slice(1) : route}`;
+};
+
+export function parse_qp(param: string): NavigationRouteParamKey | undefined {
+ switch (param) {
+ case "cmd":
+ case "pk":
+ case "id":
+ return param;
+ default:
+ return undefined;
+ }
+}
+\ No newline at end of file