/* eslint-disable @typescript-eslint/no-empty-function */ import { createContext, useCallback, useContext, useEffect, useState, } from 'react'; import type { PropsWithChildren } from 'react'; import ShortcutsModal from '@/components/shortcuts-modal'; import ContactModal from '@/components/contact-modal'; import QuickSearch from '@/components/quick-search'; import { ImportModal } from '@/components/import'; import { LoginModal } from '@/components/login-modal'; type ModalContextValue = { triggerShortcutsModal: () => void; triggerContactModal: () => void; triggerQuickSearchModal: (visible?: boolean) => void; triggerImportModal: () => void; triggerLoginModal: () => void; }; type ModalContextProps = PropsWithChildren>; type ModalMap = { contact: boolean; shortcuts: boolean; quickSearch: boolean; import: boolean; login: boolean; }; export const ModalContext = createContext({ triggerShortcutsModal: () => {}, triggerContactModal: () => {}, triggerQuickSearchModal: () => {}, triggerImportModal: () => {}, triggerLoginModal: () => {}, }); export const useModal = () => useContext(ModalContext); export const ModalProvider = ({ children, }: PropsWithChildren) => { const [modalMap, setModalMap] = useState({ contact: false, shortcuts: false, quickSearch: false, import: false, login: false, }); const triggerHandler = useCallback( (key: keyof ModalMap, visible?: boolean) => { setModalMap({ ...modalMap, [key]: visible ?? !modalMap[key], }); }, [modalMap] ); useEffect(() => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore window.triggerHandler = () => triggerHandler('login'); }, [triggerHandler]); return ( { triggerHandler('shortcuts'); }, triggerContactModal: () => { triggerHandler('contact'); }, triggerQuickSearchModal: (visible?) => { triggerHandler('quickSearch', visible); }, triggerImportModal: () => { triggerHandler('import'); }, triggerLoginModal: () => { triggerHandler('login'); }, }} > { triggerHandler('contact', false); }} > { triggerHandler('shortcuts', false); }} > { triggerHandler('quickSearch', false); }} > { triggerHandler('import', false); }} > { triggerHandler('login', false); }} /> {children} ); }; export default ModalProvider;