@@ -10,31 +10,36 @@ function withSearchParams(
10
10
searchParams ?: string | URLSearchParams | Record < string , string >
11
11
) {
12
12
return ( props : { children : ReactNode } ) => (
13
- < NuqsTestingAdapter searchParams = { searchParams } { ...props } />
13
+ < NuqsTestingAdapter
14
+ searchParams = { searchParams }
15
+ { ...props }
16
+ />
14
17
)
15
18
}
16
19
17
- describe ( 'useQueryStates' , ( ) => {
18
- const defaults = {
19
- str : 'foo' ,
20
- obj : { initial : 'state' } ,
21
- arr : [
22
- {
23
- initial : 'state'
24
- }
25
- ]
26
- }
20
+ const defaults = {
21
+ str : 'foo' ,
22
+ obj : { initial : 'state' } ,
23
+ arr : [
24
+ {
25
+ initial : 'state'
26
+ }
27
+ ]
28
+ }
27
29
28
- const hook = ( ) => {
29
- return useQueryStates ( {
30
- str : parseAsString . withDefault ( defaults . str ) ,
31
- obj : parseAsJson < any > ( x => x ) . withDefault ( defaults . obj ) ,
32
- arr : parseAsArrayOf ( parseAsJson < any > ( x => x ) ) . withDefault ( defaults . arr )
33
- } )
34
- }
30
+ const hook = ( { defaultValue } = { defaultValue : defaults . str } ) => {
31
+ return useQueryStates ( {
32
+ str : parseAsString . withDefault ( defaultValue ) ,
33
+ obj : parseAsJson < any > ( x => x ) . withDefault ( defaults . obj ) ,
34
+ arr : parseAsArrayOf ( parseAsJson < any > ( x => x ) ) . withDefault ( defaults . arr )
35
+ } )
36
+ }
35
37
38
+ describe ( 'useQueryStates' , ( ) => {
36
39
it ( 'should have referential equality on default values' , ( ) => {
37
- const { result } = renderHook ( hook , { wrapper : NuqsTestingAdapter } )
40
+ const { result } = renderHook ( hook , {
41
+ wrapper : NuqsTestingAdapter
42
+ } )
38
43
const [ state ] = result . current
39
44
expect ( state . str ) . toBe ( defaults . str )
40
45
expect ( state . obj ) . toBe ( defaults . obj )
@@ -77,4 +82,17 @@ describe('useQueryStates', () => {
77
82
expect ( obj ) . toBe ( initialObj )
78
83
expect ( arr ) . toBe ( initialArr )
79
84
} )
85
+
86
+ it ( 'should keep referential equality when default changes for another key' , ( ) => {
87
+ const { result, rerender } = renderHook ( hook , {
88
+ wrapper : withSearchParams ( )
89
+ } )
90
+ expect ( result . current [ 0 ] . str ) . toBe ( 'foo' )
91
+ rerender ( { defaultValue : 'b' } )
92
+ const [ state ] = result . current
93
+ expect ( state . str ) . toBe ( 'b' )
94
+ expect ( state . obj ) . toBe ( defaults . obj )
95
+ expect ( state . arr ) . toBe ( defaults . arr )
96
+ expect ( state . arr [ 0 ] ) . toBe ( defaults . arr [ 0 ] )
97
+ } )
80
98
} )
0 commit comments