Skip to content

Commit

Permalink
fix(api): call onAfterClose after previousActiveElement is focused (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
limonte committed Sep 28, 2018
1 parent e308afb commit 68c83ed
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 23 deletions.
27 changes: 15 additions & 12 deletions src/globalState.js
Expand Up @@ -6,17 +6,20 @@ export default globalState

// Restore previous active (focused) element
export const restoreActiveElement = () => {
const x = window.scrollX
const y = window.scrollY
globalState.restoreFocusTimeout = setTimeout(() => {
if (globalState.previousActiveElement && globalState.previousActiveElement.focus) {
globalState.previousActiveElement.focus()
globalState.previousActiveElement = null
} else if (document.body) {
document.body.focus()
return new Promise(resolve => {
const x = window.scrollX
const y = window.scrollY
globalState.restoreFocusTimeout = setTimeout(() => {
if (globalState.previousActiveElement && globalState.previousActiveElement.focus) {
globalState.previousActiveElement.focus()
globalState.previousActiveElement = null
} else if (document.body) {
document.body.focus()
}
resolve()
}, RESTORE_FOCUS_TIMEOUT) // issues/900
if (typeof x !== 'undefined' && typeof y !== 'undefined') { // IE doesn't have scrollX/scrollY support
window.scrollTo(x, y)
}
}, RESTORE_FOCUS_TIMEOUT) // issues/900
if (typeof x !== 'undefined' && typeof y !== 'undefined') { // IE doesn't have scrollX/scrollY support
window.scrollTo(x, y)
}
})
}
19 changes: 12 additions & 7 deletions src/staticMethods/close.js
Expand Up @@ -24,9 +24,11 @@ const close = (onClose, onAfterClose) => {

const removePopupAndResetState = () => {
if (!dom.isToast()) {
restoreActiveElement()
restoreActiveElement().then(() => triggerOnAfterClose(onAfterClose))
globalState.keydownTarget.removeEventListener('keydown', globalState.keydownHandler, { capture: globalState.keydownListenerCapture })
globalState.keydownHandlerAdded = false
} else {
triggerOnAfterClose(onAfterClose)
}

if (container.parentNode) {
Expand All @@ -48,12 +50,6 @@ const close = (onClose, onAfterClose) => {
undoIOSfix()
unsetAriaHidden()
}

if (onAfterClose !== null && typeof onAfterClose === 'function') {
setTimeout(() => {
onAfterClose()
})
}
}

// If animation is supported, animate
Expand All @@ -69,6 +65,15 @@ const close = (onClose, onAfterClose) => {
removePopupAndResetState()
}
}

const triggerOnAfterClose = (onAfterClose) => {
if (onAfterClose !== null && typeof onAfterClose === 'function') {
setTimeout(() => {
onAfterClose()
})
}
}

export {
close,
close as closePopup,
Expand Down
6 changes: 2 additions & 4 deletions test/qunit/focus.js
Expand Up @@ -86,10 +86,8 @@ QUnit.test('focusCancel', (assert) => {
// text: 'I should trap focus inside myself and restore previousActiveElement when I\'m closed',
// timer: 1,
// onAfterClose: () => {
// setTimeout(() => {
// assert.equal(document.activeElement, buttonModal)
// done()
// }, RESTORE_FOCUS_TIMEOUT)
// assert.equal(document.activeElement, buttonModal)
// done()
// }
// })
// })
Expand Down

0 comments on commit 68c83ed

Please sign in to comment.