47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import {useCallback} from 'react'
|
|
|
|
import {useDialogStateControlContext} from '#/state/dialogs'
|
|
import {useLightboxControls} from '#/components/Lightbox/state'
|
|
import {useComposerControls} from './shell/composer'
|
|
import {useSetDrawerOpen} from './shell/drawer-open'
|
|
|
|
/**
|
|
* returns true if something was closed
|
|
* (used by the android hardware back btn)
|
|
*/
|
|
export function useCloseAnyActiveElement() {
|
|
const {closeLightbox} = useLightboxControls()
|
|
const {closeComposer} = useComposerControls()
|
|
const {closeAllDialogs} = useDialogStateControlContext()
|
|
const setDrawerOpen = useSetDrawerOpen()
|
|
return useCallback(() => {
|
|
if (closeLightbox()) {
|
|
return true
|
|
}
|
|
if (closeAllDialogs()) {
|
|
return true
|
|
}
|
|
if (closeComposer()) {
|
|
return true
|
|
}
|
|
setDrawerOpen(false)
|
|
return false
|
|
}, [closeLightbox, closeComposer, setDrawerOpen, closeAllDialogs])
|
|
}
|
|
|
|
/**
|
|
* used to clear out any modals, eg for a navigation
|
|
*/
|
|
export function useCloseAllActiveElements() {
|
|
const {closeLightbox} = useLightboxControls()
|
|
const {closeComposer} = useComposerControls()
|
|
const {closeAllDialogs: closeAlfDialogs} = useDialogStateControlContext()
|
|
const setDrawerOpen = useSetDrawerOpen()
|
|
return useCallback(() => {
|
|
closeLightbox()
|
|
closeComposer()
|
|
closeAlfDialogs()
|
|
setDrawerOpen(false)
|
|
}, [closeLightbox, closeComposer, closeAlfDialogs, setDrawerOpen])
|
|
}
|