Skip to content

Commit 184fe14

Browse files
authored
Ensure hooks in the FocusTrap component only apply when mounted (#2331)
* ensure hooks in the `FocusTrap` component only apply when mounted * update changelog
1 parent 7e150e4 commit 184fe14

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

packages/@headlessui-vue/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313
- Allow root containers from the `Dialog` component in the `FocusTrap` component ([#2322](https://github.com/tailwindlabs/headlessui/pull/2322))
1414
- Cleanup internal TypeScript types ([#2329](https://github.com/tailwindlabs/headlessui/pull/2329))
1515
- Fix restore focus to buttons in Safari, when `Dialog` component closes ([#2326](https://github.com/tailwindlabs/headlessui/pull/2326))
16+
- Ensure hooks in the `FocusTrap` component only apply when mounted ([#2331](https://github.com/tailwindlabs/headlessui/pull/2331))
1617

1718
## [1.7.11] - 2023-02-24
1819

packages/@headlessui-vue/src/components/focus-trap/focus-trap.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,17 @@ export let FocusTrap = Object.assign(
8484

8585
let ownerDocument = computed(() => getOwnerDocument(container))
8686

87+
let mounted = ref(false)
88+
onMounted(() => (mounted.value = true))
89+
onUnmounted(() => (mounted.value = false))
90+
8791
useRestoreFocus(
8892
{ ownerDocument },
89-
computed(() => Boolean(props.features & Features.RestoreFocus))
93+
computed(() => mounted.value && Boolean(props.features & Features.RestoreFocus))
9094
)
9195
let previousActiveElement = useInitialFocus(
9296
{ ownerDocument, container, initialFocus: computed(() => props.initialFocus) },
93-
computed(() => Boolean(props.features & Features.InitialFocus))
97+
computed(() => mounted.value && Boolean(props.features & Features.InitialFocus))
9498
)
9599
useFocusLock(
96100
{
@@ -99,7 +103,7 @@ export let FocusTrap = Object.assign(
99103
containers: props.containers,
100104
previousActiveElement,
101105
},
102-
computed(() => Boolean(props.features & Features.FocusLock))
106+
computed(() => mounted.value && Boolean(props.features & Features.FocusLock))
103107
)
104108

105109
let direction = useTabDirection()
@@ -132,6 +136,7 @@ export let FocusTrap = Object.assign(
132136
}
133137

134138
function handleBlur(e: FocusEvent) {
139+
if (!mounted.value) return
135140
let allContainers = resolveContainers(props.containers)
136141
if (dom(container) instanceof HTMLElement) allContainers.add(dom(container)!)
137142

0 commit comments

Comments
 (0)