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:
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 => {