@@ -179,6 +179,35 @@ 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+ } ) ;
182211 } ) ;
183212
184213 it ( 'contextMenu works' , ( ) => {
@@ -1009,6 +1038,34 @@ describe('Trigger.Basic', () => {
10091038 expect ( document . querySelector ( '.rc-trigger-popup' ) ) . toBeTruthy ( ) ;
10101039 } ) ;
10111040
1041+ it ( 'temporarily hides a controlled popup without changing its open state' , ( ) => {
1042+ const onOpenChange = jest . fn ( ) ;
1043+ const Demo = ( { disabled = false } ) => (
1044+ < Trigger
1045+ disabled = { disabled }
1046+ onOpenChange = { onOpenChange }
1047+ popup = { < strong > trigger</ strong > }
1048+ popupVisible
1049+ >
1050+ { ( { open } ) => < div data-open = { open } /> }
1051+ </ Trigger >
1052+ ) ;
1053+
1054+ const { container, rerender } = render ( < Demo /> ) ;
1055+
1056+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'true' ) ;
1057+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
1058+
1059+ rerender ( < Demo disabled /> ) ;
1060+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'false' ) ;
1061+ expect ( isPopupHidden ( ) ) . toBeTruthy ( ) ;
1062+
1063+ rerender ( < Demo /> ) ;
1064+ expect ( container . firstChild ) . toHaveAttribute ( 'data-open' , 'true' ) ;
1065+ expect ( isPopupHidden ( ) ) . toBeFalsy ( ) ;
1066+ expect ( onOpenChange ) . not . toHaveBeenCalled ( ) ;
1067+ } ) ;
1068+
10121069 describe ( 'click window to hide' , ( ) => {
10131070 it ( 'should hide' , async ( ) => {
10141071 const onOpenChange = jest . fn ( ) ;
0 commit comments