web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

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:
Mapps-lib/package.json | 1+
Mapps-lib/src/lib/index.ts | 1+
Aapps-lib/src/lib/stores/client.ts | 3+++
Mapps-lib/src/lib/utils/client.ts | 30+++++++++++++++++++++++++++---
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