File tree Expand file tree Collapse file tree 5 files changed +108
-9
lines changed
Expand file tree Collapse file tree 5 files changed +108
-9
lines changed Original file line number Diff line number Diff line change @@ -26,10 +26,13 @@ export interface ReactiveRouteOptions {
2626
2727export interface ReactiveRouteOptionsWithTransform < V , R > extends ReactiveRouteOptions {
2828 /**
29- * Function to transform data before return
29+ * Function to transform data before return, or an object with one or both functions:
30+ * `get` to transform data before returning, and `set` to transform data before setting
3031 */
31- transform ?: ( ( val : V ) => R ) | {
32- get : ( value : V ) => R
33- set : ( value : R ) => V
34- }
32+ transform ?:
33+ | ( ( val : V ) => R )
34+ | ( {
35+ get ?: ( value : V ) => R
36+ set ?: ( value : R ) => V
37+ } )
3538}
Original file line number Diff line number Diff line change @@ -65,6 +65,44 @@ describe('useRouteParams', () => {
6565 expect ( object . value ) . toEqual ( { foo : 'baz' } )
6666 } )
6767
68+ it ( 'should handle transform with only get' , async ( ) => {
69+ let route = getRoute ( {
70+ search : 'VUE3' ,
71+ } )
72+ const router = { replace : ( r : any ) => route = r } as any
73+
74+ const search = useRouteParams ( 'search' , undefined , {
75+ transform : {
76+ get : ( value : string ) => value . toLowerCase ( ) ,
77+ } ,
78+ router,
79+ route,
80+ } )
81+
82+ expect ( search . value ) . toBe ( 'vue3' )
83+ expect ( route . params . search ) . toBe ( 'VUE3' )
84+ } )
85+
86+ it ( 'should handle transform with only set' , async ( ) => {
87+ let route = getRoute ( )
88+ const router = { replace : ( r : any ) => route = r } as any
89+
90+ const search = useRouteParams ( 'search' , undefined , {
91+ transform : {
92+ set : ( value : string ) => value . toLowerCase ( ) ,
93+ } ,
94+ router,
95+ route,
96+ } )
97+
98+ search . value = 'VUE3'
99+ expect ( search . value ) . toBe ( 'vue3' )
100+
101+ await nextTick ( )
102+
103+ expect ( route . params . search ) . toBe ( 'vue3' )
104+ } )
105+
68106 it ( 'should re-evaluate the value immediately' , ( ) => {
69107 let route = getRoute ( )
70108 const router = { replace : ( r : any ) => route = r } as any
Original file line number Diff line number Diff line change @@ -36,8 +36,18 @@ export function useRouteParams<
3636 transform,
3737 } = options
3838
39- const transformGet = transform && 'get' in transform ? transform . get : transform ?? ( ( value : T ) => value as any as K )
40- const transformSet = transform && 'set' in transform ? transform . set : ( value : K ) => value as any as T
39+ let transformGet = ( value : T ) => value as unknown as K
40+ let transformSet = ( value : K ) => value as unknown as T
41+
42+ if ( typeof transform === 'function' ) {
43+ transformGet = transform
44+ }
45+ else if ( transform ) {
46+ if ( transform . get )
47+ transformGet = transform . get
48+ if ( transform . set )
49+ transformSet = transform . set
50+ }
4151
4252 if ( ! _queue . has ( router ) )
4353 _queue . set ( router , new Map ( ) )
Original file line number Diff line number Diff line change @@ -63,6 +63,44 @@ describe('useRouteQuery', () => {
6363 expect ( object . value ) . toEqual ( { foo : 'baz' } )
6464 } )
6565
66+ it ( 'should handle transform with only get' , async ( ) => {
67+ let route = getRoute ( {
68+ search : 'VUE3' ,
69+ } )
70+ const router = { replace : ( r : any ) => route = r } as any
71+
72+ const search = useRouteQuery ( 'search' , undefined , {
73+ transform : {
74+ get : ( value : string ) => value . toLowerCase ( ) ,
75+ } ,
76+ router,
77+ route,
78+ } )
79+
80+ expect ( search . value ) . toBe ( 'vue3' )
81+ expect ( route . query . search ) . toBe ( 'VUE3' )
82+ } )
83+
84+ it ( 'should handle transform with only set' , async ( ) => {
85+ let route = getRoute ( )
86+ const router = { replace : ( r : any ) => route = r } as any
87+
88+ const search = useRouteQuery ( 'search' , undefined , {
89+ transform : {
90+ set : ( value : string ) => value . toLowerCase ( ) ,
91+ } ,
92+ router,
93+ route,
94+ } )
95+
96+ search . value = 'VUE3'
97+ expect ( search . value ) . toBe ( 'vue3' )
98+
99+ await nextTick ( )
100+
101+ expect ( route . query . search ) . toBe ( 'vue3' )
102+ } )
103+
66104 it ( 'should re-evaluate the value immediately' , ( ) => {
67105 let route = getRoute ( {
68106 search : 'vue3' ,
Original file line number Diff line number Diff line change @@ -36,8 +36,18 @@ export function useRouteQuery<
3636 transform,
3737 } = options
3838
39- const transformGet = transform && 'get' in transform ? transform . get : transform ?? ( ( value : T ) => value as any as K )
40- const transformSet = transform && 'set' in transform ? transform . set : ( value : K ) => value as any as T
39+ let transformGet = ( value : T ) => value as unknown as K
40+ let transformSet = ( value : K ) => value as unknown as T
41+
42+ if ( typeof transform === 'function' ) {
43+ transformGet = transform
44+ }
45+ else if ( transform ) {
46+ if ( transform . get )
47+ transformGet = transform . get
48+ if ( transform . set )
49+ transformSet = transform . set
50+ }
4151
4252 if ( ! _queue . has ( router ) )
4353 _queue . set ( router , new Map ( ) )
You can’t perform that action at this time.
0 commit comments