@@ -90,6 +90,25 @@ describe('useDisclosure', () => {
9090 expect ( result . current . state . isExpanded ) . toBe ( false ) ;
9191 } ) ;
9292
93+ it ( 'should keep panel hidden when toggling disabled state' , ( ) => {
94+ let { result, rerender} = renderHook ( ( { isDisabled} : { isDisabled : boolean } ) => {
95+ let state = useDisclosureState ( { } ) ;
96+ return useDisclosure ( { isDisabled} , state , ref ) ;
97+ } , { initialProps : { isDisabled : false } } ) ;
98+
99+ act ( ( ) => {
100+ rerender ( { isDisabled : true } ) ;
101+ } ) ;
102+
103+ expect ( result . current . panelProps . hidden ) . toBe ( true ) ;
104+
105+ act ( ( ) => {
106+ rerender ( { isDisabled : false } ) ;
107+ } ) ;
108+
109+ expect ( result . current . panelProps . hidden ) . toBe ( true ) ;
110+ } ) ;
111+
93112 it ( 'should set correct IDs for accessibility' , ( ) => {
94113 let { result} = renderHook ( ( ) => {
95114 let state = useDisclosureState ( { } ) ;
@@ -111,27 +130,27 @@ describe('useDisclosure', () => {
111130 writable : true ,
112131 configurable : true
113132 } ) ;
114-
133+
115134 const ref = { current : document . createElement ( 'div' ) } ;
116-
135+
117136 const { result} = renderHook ( ( ) => {
118137 const state = useDisclosureState ( { } ) ;
119138 const disclosure = useDisclosure ( { } , state , ref ) ;
120139 return { state, disclosure} ;
121140 } ) ;
122-
141+
123142 expect ( result . current . state . isExpanded ) . toBe ( false ) ;
124143 expect ( ref . current . getAttribute ( 'hidden' ) ) . toBe ( 'until-found' ) ;
125-
144+
126145 // Simulate the 'beforematch' event
127146 act ( ( ) => {
128147 const event = new Event ( 'beforematch' , { bubbles : true } ) ;
129148 ref . current . dispatchEvent ( event ) ;
130149 } ) ;
131-
150+
132151 expect ( result . current . state . isExpanded ) . toBe ( true ) ;
133152 expect ( ref . current . hasAttribute ( 'hidden' ) ) . toBe ( false ) ;
134-
153+
135154 Object . defineProperty ( document . body , 'onbeforematch' , {
136155 value : originalOnBeforeMatch ,
137156 writable : true ,
@@ -148,31 +167,31 @@ describe('useDisclosure', () => {
148167 writable : true ,
149168 configurable : true
150169 } ) ;
151-
170+
152171 const ref = { current : document . createElement ( 'div' ) } ;
153-
172+
154173 const onExpandedChange = jest . fn ( ) ;
155-
174+
156175 const { result} = renderHook ( ( ) => {
157176 const state = useDisclosureState ( { isExpanded : false , onExpandedChange} ) ;
158177 const disclosure = useDisclosure ( { isExpanded : false } , state , ref ) ;
159178 return { state, disclosure} ;
160179 } ) ;
161-
180+
162181 expect ( result . current . state . isExpanded ) . toBe ( false ) ;
163182 expect ( ref . current . getAttribute ( 'hidden' ) ) . toBe ( 'until-found' ) ;
164-
183+
165184 // Simulate the 'beforematch' event
166185 act ( ( ) => {
167186 const event = new Event ( 'beforematch' , { bubbles : true } ) ;
168187 ref . current . dispatchEvent ( event ) ;
169188 } ) ;
170-
189+
171190 expect ( result . current . state . isExpanded ) . toBe ( false ) ;
172191 expect ( ref . current . getAttribute ( 'hidden' ) ) . toBe ( 'until-found' ) ;
173192 expect ( onExpandedChange ) . toHaveBeenCalledTimes ( 1 ) ;
174193 expect ( onExpandedChange ) . toHaveBeenCalledWith ( true ) ;
175-
194+
176195 Object . defineProperty ( document . body , 'onbeforematch' , {
177196 value : originalOnBeforeMatch ,
178197 writable : true ,
0 commit comments