web_lib

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

commit 8fb36e9be5ddd9e6fe07722e3ce690957df11c78
parent f65d883c49be82e76b4a750ad614ef000790432a
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Fri,  7 Mar 2025 10:35:57 +0000

utils: edit app route encoding utils, navigation route param types

Diffstat:
Mutils/src/app/types/app.ts | 8+++++---
Mutils/src/app/util.ts | 23+++++++++++++++--------
2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/utils/src/app/types/app.ts b/utils/src/app/types/app.ts @@ -52,12 +52,14 @@ export type LoadingDimension = GeometryDimension | `glyph-send-button`; //@todo export type LayerGlyphBasisKind = `_a` | `_d` | `_pl`; -export type NavigationRouteParamNostrPublicKey = `nostr_pk`; -export type NavigationRouteParamRecordKey = `rkey`; + export type NavigationRouteParamId = `id`; +export type NavigationRouteParamField = `field`; +export type NavigationRouteParamRef = `ref`; export type NavigationRouteParamLat = `lat`; export type NavigationRouteParamLng = `lng`; -export type NavigationRouteParamKey = NavigationRouteParamNostrPublicKey | NavigationRouteParamId | NavigationRouteParamRecordKey | NavigationRouteParamLat | NavigationRouteParamLng; +export type NavigationRouteParamNostrPublicKey = `key_nostr`; +export type NavigationRouteParamKey = NavigationRouteParamId | NavigationRouteParamField | NavigationRouteParamRef | NavigationRouteParamLat | NavigationRouteParamLng | NavigationRouteParamNostrPublicKey; export type NavigationParamTuple = [NavigationRouteParamKey, string]; export type NavigationPreviousParam<T extends string> = { route: T, label?: string; params?: NavigationParamTuple[] } diff --git a/utils/src/app/util.ts b/utils/src/app/util.ts @@ -96,14 +96,21 @@ export const value_constrain_textarea = (regex_charset: RegExp, value: string): .join("\n"); }; -export const encode_qp = (params_list?: NavigationParamTuple[]): string => { - const params = (params_list || []).filter(i => i[0] && i[1]) - if (!params.length) return ``; - return params.map(([k, v], index) => `${index === 0 ? `?` : ``}&${k.trim()}=${encodeURI(v.trim())}`).join(``).trim(); -}; - -export const encode_qp_route = <T extends string>(route: T, params_list?: NavigationParamTuple[]): string => { - return `${route}/${encode_qp(params_list)}`.replaceAll(`//`, `/`) +export const encode_query_params = (params_list: NavigationParamTuple[] = []): string => { + let query = ""; + for (const [k, v] of params_list) { + if (k && v) { + if (query) query += `&`; + query += `${k.trim()}=${encodeURIComponent(v.trim())}`; + } + } + return query ? `?${query}` : ``; +}; + +export const encode_route = <T extends string>(route: T, params_list?: NavigationParamTuple[]): string => { + const query = encode_query_params(params_list); + if (!query) return route; + return `${route === `/` ? `/` : route.replace(/\/+$/, ``)}${query}`; }; export const fmt_trellis = (hide_border_t: boolean, hide_border_b: boolean): string => {