deer social fork for personal usage. but you might see a use idk. github mirror
1import {useCallback} from 'react'
2
3import {useDialogStateControlContext} from '#/state/dialogs'
4import {useLightboxControls} from './lightbox'
5import {useModalControls} from './modals'
6import {useComposerControls} from './shell/composer'
7import {useSetDrawerOpen} from './shell/drawer-open'
8
9/**
10 * returns true if something was closed
11 * (used by the android hardware back btn)
12 */
13export function useCloseAnyActiveElement() {
14 const {closeLightbox} = useLightboxControls()
15 const {closeModal} = useModalControls()
16 const {closeComposer} = useComposerControls()
17 const {closeAllDialogs} = useDialogStateControlContext()
18 const setDrawerOpen = useSetDrawerOpen()
19 return useCallback(() => {
20 if (closeLightbox()) {
21 return true
22 }
23 if (closeModal()) {
24 return true
25 }
26 if (closeAllDialogs()) {
27 return true
28 }
29 if (closeComposer()) {
30 return true
31 }
32 setDrawerOpen(false)
33 return false
34 }, [closeLightbox, closeModal, closeComposer, setDrawerOpen, closeAllDialogs])
35}
36
37/**
38 * used to clear out any modals, eg for a navigation
39 */
40export function useCloseAllActiveElements() {
41 const {closeLightbox} = useLightboxControls()
42 const {closeAllModals} = useModalControls()
43 const {closeComposer} = useComposerControls()
44 const {closeAllDialogs: closeAlfDialogs} = useDialogStateControlContext()
45 const setDrawerOpen = useSetDrawerOpen()
46 return useCallback(() => {
47 closeLightbox()
48 closeAllModals()
49 closeComposer()
50 closeAlfDialogs()
51 setDrawerOpen(false)
52 }, [
53 closeLightbox,
54 closeAllModals,
55 closeComposer,
56 closeAlfDialogs,
57 setDrawerOpen,
58 ])
59}