36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { searchTerritoryHref } from './search-territory.ts';
|
|
/** Only a query string is carried; the return destination is always local. */
|
|
export function catalogueDetailHref(
|
|
path: string,
|
|
query: string,
|
|
pageUrl?: string,
|
|
): string {
|
|
if (pageUrl) {
|
|
const page = new URL(
|
|
pageUrl,
|
|
'https://portal.invalid',
|
|
).searchParams.get('page');
|
|
if (
|
|
page &&
|
|
/^[1-9]\d*$/.test(page) &&
|
|
Number.isSafeInteger(Number(page))
|
|
) {
|
|
const params = new URLSearchParams(query);
|
|
params.set('page', page);
|
|
query = params.toString();
|
|
}
|
|
}
|
|
return query
|
|
? `${path}?catalogue_query=${encodeURIComponent(query)}`
|
|
: path;
|
|
}
|
|
export function catalogueReturnHref(base: string, pageUrl: string): string {
|
|
const query = new URL(pageUrl, 'https://portal.invalid').searchParams.get(
|
|
'catalogue_query',
|
|
);
|
|
return searchTerritoryHref(
|
|
base + (query ? `?${new URLSearchParams(query).toString()}` : ''),
|
|
pageUrl,
|
|
);
|
|
}
|