diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-11-16 08:18:59 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 08:18:59 -0800 |
commit | a84b2f9f2f64b1d434c5adbb12af6f7d76ba42ea (patch) | |
tree | e430b8032350caa18b8cdd3140a4d94c96dfd6ce /src/state/modals | |
parent | 0de8d40981fecdeaec92307bafe121ccb2091b45 (diff) | |
download | voidsky-a84b2f9f2f64b1d434c5adbb12af6f7d76ba42ea.tar.zst |
Close active elems (react-query refactor) (#1926)
* Refactor closeAny and closeAllActiveElements * Add close lightbox * Switch to hooks * Fixes
Diffstat (limited to 'src/state/modals')
-rw-r--r-- | src/state/modals/index.tsx | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx index 9dd3e4195..fa86aaa31 100644 --- a/src/state/modals/index.tsx +++ b/src/state/modals/index.tsx @@ -213,10 +213,12 @@ const ModalContext = React.createContext<{ const ModalControlContext = React.createContext<{ openModal: (modal: Modal) => void - closeModal: () => void + closeModal: () => boolean + closeAllModals: () => void }>({ openModal: () => {}, - closeModal: () => {}, + closeModal: () => false, + closeAllModals: () => {}, }) /** @@ -226,6 +228,13 @@ export let unstable__openModal: (modal: Modal) => void = () => { throw new Error(`ModalContext is not initialized`) } +/** + * @deprecated DO NOT USE THIS unless you have no other choice. + */ +export let unstable__closeModal: () => boolean = () => { + throw new Error(`ModalContext is not initialized`) +} + export function Provider({children}: React.PropsWithChildren<{}>) { const [isModalActive, setIsModalActive] = React.useState(false) const [activeModals, setActiveModals] = React.useState<Modal[]>([]) @@ -238,17 +247,25 @@ export function Provider({children}: React.PropsWithChildren<{}>) { [setIsModalActive, setActiveModals], ) - unstable__openModal = openModal - const closeModal = React.useCallback(() => { let totalActiveModals = 0 + let wasActive = isModalActive setActiveModals(activeModals => { activeModals = activeModals.slice(0, -1) totalActiveModals = activeModals.length return activeModals }) setIsModalActive(totalActiveModals > 0) - }, [setIsModalActive, setActiveModals]) + return wasActive + }, [setIsModalActive, setActiveModals, isModalActive]) + + const closeAllModals = React.useCallback(() => { + setActiveModals([]) + setIsModalActive(false) + }, [setActiveModals, setIsModalActive]) + + unstable__openModal = openModal + unstable__closeModal = closeModal const state = React.useMemo( () => ({ @@ -262,8 +279,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { () => ({ openModal, closeModal, + closeAllModals, }), - [openModal, closeModal], + [openModal, closeModal, closeAllModals], ) return ( |