@@ -6,17 +6,13 @@ import { createFocusTrapOptions } from "../utils/focusTrapComponent";
6
6
export interface UseFocusTrap {
7
7
/**
8
8
* Activates the focus trap.
9
- *
10
- * @see https://github.com/focus-trap/focus-trap#trapactivate
11
9
*/
12
- activate : ( options ?: Parameters < FocusTrap [ "activate" ] > [ 0 ] ) => void ;
10
+ activate : ( ) => void ;
13
11
14
12
/**
15
13
* Deactivates the focus trap.
16
- *
17
- * @see https://github.com/focus-trap/focus-trap#trapdeactivate
18
14
*/
19
- deactivate : ( options ?: Parameters < FocusTrap [ "deactivate" ] > [ 0 ] ) => void ;
15
+ deactivate : ( ) => void ;
20
16
21
17
/**
22
18
* By default, the host element will be used as the focus-trap element, but if the focus-trap element needs to be a different element, use this method prior to activating to set the focus-trap element.
@@ -110,13 +106,23 @@ export const useFocusTrap = <T extends FocusTrapComponent>(
110
106
111
107
controller . onConnected ( ( ) => {
112
108
if ( component [ options . triggerProp ] && focusTrap ) {
113
- focusTrap . activate ( ) ;
109
+ utils . activate ( ) ;
114
110
}
115
111
} ) ;
116
112
117
- controller . onDisconnected ( ( ) => focusTrap ?. deactivate ( ) ) ;
113
+ controller . onUpdate ( ( changes ) => {
114
+ if ( component . hasUpdated && changes . has ( "focusTrapDisabled" ) ) {
115
+ if ( component . focusTrapDisabled ) {
116
+ utils . deactivate ( ) ;
117
+ } else {
118
+ utils . activate ( ) ;
119
+ }
120
+ }
121
+ } ) ;
122
+
123
+ controller . onDisconnected ( ( ) => utils . deactivate ( ) ) ;
118
124
119
- return {
125
+ const utils : UseFocusTrap = {
120
126
activate : ( ) => {
121
127
const targetEl = focusTrapEl || component . el ;
122
128
@@ -158,5 +164,7 @@ export const useFocusTrap = <T extends FocusTrapComponent>(
158
164
return focusTrap ?. updateContainerElements ( effectiveContainers ) ;
159
165
} ,
160
166
} ;
167
+
168
+ return utils ;
161
169
} ) ;
162
170
} ;
0 commit comments