fix: update queryParams

This commit is contained in:
ShareVB 2024-07-14 23:30:34 +02:00
parent 72df50ba51
commit c6b75ca3ba

View file

@ -17,6 +17,12 @@ const transformers = {
fromQuery: (value: string) => value.toLowerCase() === 'true', fromQuery: (value: string) => value.toLowerCase() === 'true',
toQuery: (value: boolean) => (value ? 'true' : 'false'), toQuery: (value: boolean) => (value ? 'true' : 'false'),
}, },
object: {
fromQuery: (value: string) => {
return JSON.parse(value);
},
toQuery: (value: object) => JSON.stringify(value),
},
}; };
function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue: T }) { function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue: T }) {
@ -35,30 +41,26 @@ function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue:
}); });
} }
function useQueryParamOrStorage<T>({ name, storageName, defaultValue }: { name: string; storageName: string; defaultValue?: T }) { function useQueryParamOrStorage<T>({ name, storageName, defaultValue }: { name: string; storageName: string; defaultValue: T }) {
const type = typeof defaultValue; const type = typeof defaultValue;
const transformer = transformers[type as keyof typeof transformers] ?? transformers.string; const transformer = transformers[type as keyof typeof transformers] ?? transformers.string;
const storageRef = useStorage(storageName, defaultValue); const storageRef = useStorage(storageName, defaultValue);
const storageDefaultValue = storageRef.value ?? defaultValue; const proxyDefaultValue = transformer.toQuery(defaultValue as never);
const proxy = useRouteQuery(name, proxyDefaultValue);
const proxy = useRouteQuery(name, transformer.toQuery(storageDefaultValue as never)); const r = ref(defaultValue);
const ref = computed<T>({ watch(r,
get() { (value) => {
return transformer.fromQuery(proxy.value) as unknown as T;
},
set(value) {
proxy.value = transformer.toQuery(value as never); proxy.value = transformer.toQuery(value as never);
storageRef.value = value as never;
}, },
}); { deep: true });
watch( r.value = (proxy.value && proxy.value !== proxyDefaultValue
ref, ? transformer.fromQuery(proxy.value) as unknown as T
(newValue) => { : storageRef.value as T) as never;
storageRef.value = newValue;
},
);
return ref; return r;
} }