58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
const ARTIKEL_QUERY_KEY = 'dashfront:artikel-query';
|
|
|
|
export function queryFromParams(searchParams) {
|
|
return {
|
|
target: searchParams.get('target') ?? '',
|
|
filter: searchParams.get('filter') ?? '',
|
|
offset: Math.max(0, Number(searchParams.get('offset')) || 0),
|
|
};
|
|
}
|
|
|
|
export function buildSearchUrl(target, filter = '', offset = 0) {
|
|
const params = new URLSearchParams();
|
|
if (target) params.set('target', target);
|
|
if (filter) params.set('filter', filter);
|
|
if (offset > 0) params.set('offset', String(offset));
|
|
const qs = params.toString();
|
|
return qs ? `/artikel?${qs}` : '/artikel';
|
|
}
|
|
|
|
export function readArtikelQuery() {
|
|
try {
|
|
const raw = localStorage.getItem(ARTIKEL_QUERY_KEY);
|
|
return raw ? JSON.parse(raw) : null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function writeArtikelQuery({ target, filter = '', offset = 0 }) {
|
|
try {
|
|
if (!target || target.trim().length < 3) {
|
|
localStorage.removeItem(ARTIKEL_QUERY_KEY);
|
|
return;
|
|
}
|
|
localStorage.setItem(
|
|
ARTIKEL_QUERY_KEY,
|
|
JSON.stringify({ target, filter, offset }),
|
|
);
|
|
} catch {
|
|
// ignore quota / private mode
|
|
}
|
|
}
|
|
|
|
export function clearArtikelQuery() {
|
|
try {
|
|
localStorage.removeItem(ARTIKEL_QUERY_KEY);
|
|
} catch {
|
|
// ignore
|
|
}
|
|
}
|
|
|
|
/** Build `/artikel?target=…` from the last stored query, or plain `/artikel`. */
|
|
export function artikelQueryPath() {
|
|
const query = readArtikelQuery();
|
|
if (!query?.target || query.target.trim().length < 3) return '/artikel';
|
|
return buildSearchUrl(query.target, query.filter ?? '', query.offset ?? 0);
|
|
}
|