import React, { useCallback, useEffect, useMemo, useState } from 'react'; import TagsPanel from '../tags/TagsPanel'; import CorrespondentsPanel from '../correspondents/CorrespondentsPanel'; import PanelHeader from '../ui/PanelHeader'; const TAGS_MODAL = 'tags'; const CORRESPONDENTS_MODAL = 'correspondents'; export const useManagementModals = ({ locationPathname, tags, refreshTags, onTagCreate, onTagUpdate, onTagDelete, correspondents, refreshCorrespondents, onCorrespondentCreate, onCorrespondentUpdate, onCorrespondentDelete, setStatusMessage, }) => { const [activeModal, setActiveModal] = useState(null); const openTagsModal = useCallback(() => setActiveModal(TAGS_MODAL), []); const openCorrespondentsModal = useCallback( () => setActiveModal(CORRESPONDENTS_MODAL), [], ); const closeActiveModal = useCallback(() => setActiveModal(null), []); useEffect(() => { setActiveModal(null); }, [locationPathname]); useEffect(() => { if (!activeModal) { return undefined; } const handleKeyDown = (event) => { if (event.key === 'Escape') { event.preventDefault(); setActiveModal(null); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [activeModal]); const tagModal = useMemo(() => { if (activeModal !== TAGS_MODAL) { return null; } return (
event.stopPropagation()} > Close )} />
); }, [ activeModal, closeActiveModal, onTagCreate, onTagDelete, onTagUpdate, refreshTags, setStatusMessage, tags, ]); const correspondentsModal = useMemo(() => { if (activeModal !== CORRESPONDENTS_MODAL) { return null; } return (
event.stopPropagation()} > Close )} />
); }, [ activeModal, closeActiveModal, correspondents, onCorrespondentCreate, onCorrespondentDelete, onCorrespondentUpdate, refreshCorrespondents, setStatusMessage, ]); const managementModals = ( <> {tagModal} {correspondentsModal} ); return { managementModals, openTagsModal, openCorrespondentsModal, closeActiveModal, activeModal, }; }; export default useManagementModals;