mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
feat(web): store accordion state in search params (#6435)
* keep admin settings accordion state in search params * refactor: sync implementation * fix: avoid mutating svelte's internal search params * add query parameter to enum --------- Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
This commit is contained in:
parent
6e7865519a
commit
a9e6657a37
9 changed files with 132 additions and 41 deletions
33
web/src/lib/utils.ts
Normal file
33
web/src/lib/utils.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import { goto } from '$app/navigation';
|
||||
import { page } from '$app/stores';
|
||||
import { get } from 'svelte/store';
|
||||
|
||||
interface UpdateParamAction {
|
||||
param: string;
|
||||
value: string;
|
||||
add: boolean;
|
||||
}
|
||||
|
||||
const getParamValues = (param: string) =>
|
||||
new Set((get(page).url.searchParams.get(param) || '').split(' ').filter((x) => x !== ''));
|
||||
|
||||
export const hasParamValue = (param: string, value: string) => getParamValues(param).has(value);
|
||||
|
||||
export const updateParamList = async ({ param, value, add }: UpdateParamAction) => {
|
||||
const values = getParamValues(param);
|
||||
|
||||
if (add) {
|
||||
values.add(value);
|
||||
} else {
|
||||
values.delete(value);
|
||||
}
|
||||
|
||||
const searchParams = new URLSearchParams(get(page).url.searchParams);
|
||||
searchParams.set(param, [...values.values()].join(' '));
|
||||
|
||||
if (values.size === 0) {
|
||||
searchParams.delete(param);
|
||||
}
|
||||
|
||||
await goto(`?${searchParams.toString()}`, { replaceState: true, noScroll: true, keepFocus: true });
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue