Skip to content

Commit 8c7b7b5

Browse files
fix: fixed focusTrap in nested modals (#341)
1 parent 67bf8ec commit 8c7b7b5

File tree

3 files changed

+5
-18
lines changed

3 files changed

+5
-18
lines changed

packages/vue-final-modal/src/Modal.ts

-1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,5 @@ export type Modal = {
7676
modalId?: ModalId
7777
hideOverlay: Ref<boolean | undefined> | undefined
7878
overlayVisible: Ref<boolean>
79-
focus: () => void
8079
toggle: (show?: boolean) => Promise<string>
8180
}

packages/vue-final-modal/src/components/CoreModal/CoreModal.vue

+2-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const {
5252
5353
const vfmRootEl = ref<HTMLDivElement>()
5454
55-
const { focus, focusLast, blur } = useFocusTrap(props, { focusEl: vfmRootEl, openedModals })
55+
const { focus, blur } = useFocusTrap(props, { focusEl: vfmRootEl })
5656
const { zIndex, refreshZIndex, resetZIndex } = useZIndex(props)
5757
const { enableBodyScroll, disableBodyScroll } = useLockScroll(props, { lockScrollEl: vfmRootEl })
5858
const { modelValueLocal } = useModelValue(props, emit)
@@ -83,7 +83,6 @@ const {
8383
},
8484
onLeave() {
8585
deleteFromOpenedModals(getModalInstance())
86-
focusLast()
8786
resetZIndex()
8887
emitEvent('closed')
8988
resolveToggle('closed')
@@ -161,7 +160,7 @@ onBeforeUnmount(() => {
161160
deleteFromModals(modalInstance)
162161
deleteFromOpenedModals(modalInstance)
163162
deleteFromOpenedModalOverlays(modalInstance)
164-
focusLast()
163+
blur()
165164
openLastOverlay()
166165
})
167166
</script>
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
import type { ComputedRef, Ref } from 'vue'
1+
import type { Ref } from 'vue'
22
import { useFocusTrap as _useFocusTrap } from '@vueuse/integrations/useFocusTrap'
33
import type CoreModal from './CoreModal.vue'
4-
import type { Modal } from '~/Modal'
54

65
export function useFocusTrap(
76
props: InstanceType<typeof CoreModal>['$props'],
87
options: {
98
focusEl: Ref<undefined | HTMLDivElement>
10-
openedModals: ComputedRef<Modal>[]
119
},
1210
) {
1311
if (props.focusTrap === false) {
1412
return {
1513
focus() {},
16-
focusLast() {},
1714
blur() {},
1815
}
1916
}
2017

21-
const { focusEl, openedModals } = options
18+
const { focusEl } = options
2219
const { hasFocus, activate, deactivate } = _useFocusTrap(focusEl, props.focusTrap)
2320

2421
function focus() {
@@ -27,18 +24,10 @@ export function useFocusTrap(
2724
})
2825
}
2926

30-
function focusLast() {
31-
// If there are still nested modals opened, focus the last opened modal
32-
if (openedModals.length <= 0)
33-
return
34-
const modal = openedModals[openedModals.length - 1]
35-
modal?.value.focus()
36-
}
37-
3827
function blur() {
3928
if (hasFocus.value)
4029
deactivate()
4130
}
4231

43-
return { focus, focusLast, blur }
32+
return { focus, blur }
4433
}

0 commit comments

Comments
 (0)