@@ -179,6 +179,36 @@ describe('Trigger.Basic', () => {
179179 trigger ( document , '.rc-trigger-popup' , 'pointerEnter' ) ;
180180 expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
181181 } ) ;
182+
183+ it ( 'temporarily hides while disabled and restores without mouse leave' , ( ) => {
184+ const onOpenChange = jest . fn ( ) ;
185+ const Demo = ( { disabled = false } ) => (
186+ < Trigger
187+ action = { [ 'hover' ] }
188+ disabled = { disabled }
189+ onOpenChange = { onOpenChange }
190+ popup = { < strong > trigger</ strong > }
191+ >
192+ < div className = "target" > hover</ div >
193+ </ Trigger >
194+ ) ;
195+
196+ const { container, rerender } = render ( < Demo /> ) ;
197+
198+ trigger ( container , '.target' , 'mouseEnter' ) ;
199+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
200+ expect ( onOpenChange ) . toHaveBeenCalledWith ( true ) ;
201+ onOpenChange . mockReset ( ) ;
202+
203+ rerender ( < Demo disabled /> ) ;
204+ expect ( isPopupHidden ( ) ) . toBeTruthy ( ) ;
205+ expect ( onOpenChange ) . not . toHaveBeenCalled ( ) ;
206+
207+ rerender ( < Demo /> ) ;
208+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
209+ expect ( onOpenChange ) . not . toHaveBeenCalled ( ) ;
210+ } ) ;
211+
182212 } ) ;
183213
184214 it ( 'contextMenu works' , ( ) => {
@@ -1009,6 +1039,34 @@ describe('Trigger.Basic', () => {
10091039 expect ( document . querySelector ( '.rc-trigger-popup' ) ) . toBeTruthy ( ) ;
10101040 } ) ;
10111041
1042+ it ( 'temporarily hides a controlled popup without changing its open state' , ( ) => {
1043+ const onOpenChange = jest . fn ( ) ;
1044+ const Demo = ( { disabled = false } ) => (
1045+ < Trigger
1046+ disabled = { disabled }
1047+ onOpenChange = { onOpenChange }
1048+ popup = { < strong > trigger</ strong > }
1049+ popupVisible
1050+ >
1051+ { ( { open } ) => < div data-open = { open } /> }
1052+ </ Trigger >
1053+ ) ;
1054+
1055+ const { container, rerender } = render ( < Demo /> ) ;
1056+
1057+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'true' ) ;
1058+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
1059+
1060+ rerender ( < Demo disabled /> ) ;
1061+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'false' ) ;
1062+ expect ( isPopupHidden ( ) ) . toBeTruthy ( ) ;
1063+
1064+ rerender ( < Demo /> ) ;
1065+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'true' ) ;
1066+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
1067+ expect ( onOpenChange ) . not . toHaveBeenCalled ( ) ;
1068+ } ) ;
1069+
10121070 describe ( 'click window to hide' , ( ) => {
10131071 it ( 'should hide' , async ( ) => {
10141072 const onOpenChange = jest . fn ( ) ;
0 commit comments