@@ -17,6 +17,12 @@ const transformers = {
17
17
fromQuery : ( value : string ) => value . toLowerCase ( ) === 'true' ,
18
18
toQuery : ( value : boolean ) => ( value ? 'true' : 'false' ) ,
19
19
} ,
20
+ object : {
21
+ fromQuery : ( value : string ) => {
22
+ return JSON . parse ( value ) ;
23
+ } ,
24
+ toQuery : ( value : object ) => JSON . stringify ( value ) ,
25
+ } ,
20
26
} ;
21
27
22
28
function useQueryParam < T > ( { name, defaultValue } : { name : string ; defaultValue : T } ) {
@@ -35,30 +41,26 @@ function useQueryParam<T>({ name, defaultValue }: { name: string; defaultValue:
35
41
} ) ;
36
42
}
37
43
38
- function useQueryParamOrStorage < T > ( { name, storageName, defaultValue } : { name : string ; storageName : string ; defaultValue ? : T } ) {
44
+ function useQueryParamOrStorage < T > ( { name, storageName, defaultValue } : { name : string ; storageName : string ; defaultValue : T } ) {
39
45
const type = typeof defaultValue ;
40
46
const transformer = transformers [ type as keyof typeof transformers ] ?? transformers . string ;
41
47
42
48
const storageRef = useStorage ( storageName , defaultValue ) ;
43
- const storageDefaultValue = storageRef . value ?? defaultValue ;
49
+ const proxyDefaultValue = transformer . toQuery ( defaultValue as never ) ;
50
+ const proxy = useRouteQuery ( name , proxyDefaultValue ) ;
44
51
45
- const proxy = useRouteQuery ( name , transformer . toQuery ( storageDefaultValue as never ) ) ;
52
+ const r = ref ( defaultValue ) ;
46
53
47
- const ref = computed < T > ( {
48
- get ( ) {
49
- return transformer . fromQuery ( proxy . value ) as unknown as T ;
50
- } ,
51
- set ( value ) {
54
+ watch ( r ,
55
+ ( value ) => {
52
56
proxy . value = transformer . toQuery ( value as never ) ;
57
+ storageRef . value = value as never ;
53
58
} ,
54
- } ) ;
59
+ { deep : true } ) ;
55
60
56
- watch (
57
- ref ,
58
- ( newValue ) => {
59
- storageRef . value = newValue ;
60
- } ,
61
- ) ;
61
+ r . value = ( proxy . value && proxy . value !== proxyDefaultValue
62
+ ? transformer . fromQuery ( proxy . value ) as unknown as T
63
+ : storageRef . value as T ) as never ;
62
64
63
- return ref ;
65
+ return r ;
64
66
}
0 commit comments