Skip to content

Commit 16ad2bc

Browse files
authored
Merge pull request Expensify#54593 from bernhardoj/fix/54335-dont-automatically-unpause-focus-trap
Don't automatically unpause focus trap
2 parents 7b9e55e + 5ba513c commit 16ad2bc

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

patches/focus-trap+7.5.4.patch

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,22 @@
11
diff --git a/node_modules/focus-trap/dist/focus-trap.esm.js b/node_modules/focus-trap/dist/focus-trap.esm.js
2-
index 10d56db..a6d76d8 100644
2+
index 10d56db..975151c 100644
33
--- a/node_modules/focus-trap/dist/focus-trap.esm.js
44
+++ b/node_modules/focus-trap/dist/focus-trap.esm.js
5+
@@ -71,12 +71,12 @@ var activeFocusTraps = {
6+
trapStack.push(trap);
7+
}
8+
},
9+
- deactivateTrap: function deactivateTrap(trapStack, trap) {
10+
+ deactivateTrap: function deactivateTrap(trapStack, trap, unpauseOnDeactivate) {
11+
var trapIndex = trapStack.indexOf(trap);
12+
if (trapIndex !== -1) {
13+
trapStack.splice(trapIndex, 1);
14+
}
15+
- if (trapStack.length > 0) {
16+
+ if (trapStack.length > 0 && unpauseOnDeactivate) {
17+
trapStack[trapStack.length - 1].unpause();
18+
}
19+
}
520
@@ -100,8 +100,8 @@ var isKeyForward = function isKeyForward(e) {
621
var isKeyBackward = function isKeyBackward(e) {
722
return isTabEvent(e) && e.shiftKey;
@@ -13,7 +28,15 @@ index 10d56db..a6d76d8 100644
1328
};
1429

1530
// Array.find/findIndex() are not supported on IE; this replicates enough
16-
@@ -283,7 +283,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
31+
@@ -153,6 +153,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
32+
var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;
33+
var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;
34+
var config = _objectSpread2({
35+
+ unpauseOnDeactivate: true,
36+
returnFocusOnDeactivate: true,
37+
escapeDeactivates: true,
38+
delayInitialFocus: true,
39+
@@ -283,7 +284,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
1740
return node;
1841
};
1942
var getInitialFocusNode = function getInitialFocusNode() {
@@ -22,7 +45,7 @@ index 10d56db..a6d76d8 100644
2245

2346
// false explicitly indicates we want no initialFocus at all
2447
if (node === false) {
25-
@@ -744,7 +744,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
48+
@@ -744,7 +745,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
2649
// that caused the focus trap activation.
2750
state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () {
2851
tryFocus(getInitialFocusNode());
@@ -31,7 +54,16 @@ index 10d56db..a6d76d8 100644
3154
doc.addEventListener('focusin', checkFocusIn, true);
3255
doc.addEventListener('mousedown', checkPointerDown, {
3356
capture: true,
34-
@@ -880,7 +880,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
57+
@@ -868,7 +869,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
58+
state.active = false;
59+
state.paused = false;
60+
updateObservedNodes();
61+
- activeFocusTraps.deactivateTrap(trapStack, trap);
62+
+ activeFocusTraps.deactivateTrap(trapStack, trap, config.unpauseOnDeactivate);
63+
var onDeactivate = getOption(options, 'onDeactivate');
64+
var onPostDeactivate = getOption(options, 'onPostDeactivate');
65+
var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');
66+
@@ -880,7 +881,7 @@ var createFocusTrap = function createFocusTrap(elements, userOptions) {
3567
tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));
3668
}
3769
onPostDeactivate === null || onPostDeactivate === void 0 || onPostDeactivate();
@@ -41,7 +73,7 @@ index 10d56db..a6d76d8 100644
4173
if (returnFocus && checkCanReturnFocus) {
4274
checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);
4375
diff --git a/node_modules/focus-trap/index.d.ts b/node_modules/focus-trap/index.d.ts
44-
index 400db1b..69f4b94 100644
76+
index 400db1b..78b38d9 100644
4577
--- a/node_modules/focus-trap/index.d.ts
4678
+++ b/node_modules/focus-trap/index.d.ts
4779
@@ -16,7 +16,7 @@ declare module 'focus-trap' {
@@ -53,7 +85,19 @@ index 400db1b..69f4b94 100644
5385

5486
type MouseEventToBoolean = (event: MouseEvent | TouchEvent) => boolean;
5587
type KeyboardEventToBoolean = (event: KeyboardEvent) => boolean;
56-
@@ -185,7 +185,7 @@ declare module 'focus-trap' {
88+
@@ -135,6 +135,11 @@ declare module 'focus-trap' {
89+
* in the trap.
90+
*/
91+
fallbackFocus?: FocusTarget;
92+
+ /**
93+
+ * By default, the previous focus trap on the stack will be unpaused
94+
+ * when the current active trap is deactivated.
95+
+ */
96+
+ unpauseOnDeactivate?: boolean;
97+
/**
98+
* Default: `true`. If `false`, when the trap is deactivated,
99+
* focus will *not* return to the element that had focus before activation.
100+
@@ -185,7 +190,7 @@ declare module 'focus-trap' {
57101
* This prevents elements within the focusable element from capturing
58102
* the event that triggered the focus trap activation.
59103
*/

src/components/FocusTrap/FocusTrapForModal/index.web.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ function FocusTrapForModal({children, active, initialFocus = false}: FocusTrapFo
1515
clickOutsideDeactivates: true,
1616
initialFocus,
1717
fallbackFocus: document.body,
18+
unpauseOnDeactivate: false,
1819
setReturnFocus: (element) => {
1920
if (ReportActionComposeFocusManager.isFocused()) {
2021
return false;

src/components/FocusTrap/FocusTrapForScreen/index.web.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ function FocusTrapForScreen({children, focusTrapSettings}: FocusTrapProps) {
5050
delayInitialFocus: CONST.ANIMATED_TRANSITION,
5151
initialFocus: false,
5252
setReturnFocus: false,
53+
unpauseOnDeactivate: false,
5354
...(focusTrapSettings?.focusTrapOptions ?? {}),
5455
}}
5556
>

0 commit comments

Comments
 (0)