import { useCallback, useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import useHomeFiltersStore from '../../../stores/use-home-filters-store'; import styles from '../home.module.css'; const BoxModal = ({ isBoardsBoxModal }: { isBoardsBoxModal: boolean }) => { const { t } = useTranslation(); const [showFilterModal, setShowFilterModal] = useState(false); const modalRef = useRef(null); const buttonRef = useRef(null); const { showNsfwBoardsOnly, setShowNsfwBoardsOnly, showWorksafeBoardsOnly, setShowWorksafeBoardsOnly, useCatalog, setUseCatalog, showWorksafeContentOnly, setShowWorksafeContentOnly, showNsfwContentOnly, setShowNsfwContentOnly, } = useHomeFiltersStore(); const handleClickOutside = useCallback( (event: MouseEvent) => { if (modalRef.current && !modalRef.current.contains(event.target as Node) && buttonRef.current && !buttonRef.current.contains(event.target as Node)) { setShowFilterModal(false); } }, [modalRef, buttonRef, setShowFilterModal], ); useEffect(() => { document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [handleClickOutside]); return ( <> !showFilterModal && setShowFilterModal(true)}> {isBoardsBoxModal ? t('filter') : t('options')} ▼ {showFilterModal && (
{isBoardsBoxModal ? ( <>
{ setShowNsfwBoardsOnly(false); setShowWorksafeBoardsOnly(false); setShowFilterModal(false); }} > {t('show_all_boards')}
{ if (showWorksafeBoardsOnly) { setShowWorksafeBoardsOnly(false); } setShowNsfwBoardsOnly(!showNsfwBoardsOnly); setShowFilterModal(false); }} > {t('show_nsfw_boards_only')}
{ if (showNsfwBoardsOnly) { setShowNsfwBoardsOnly(false); } setShowWorksafeBoardsOnly(!showWorksafeBoardsOnly); setShowFilterModal(false); }} > {t('show_worksafe_boards_only')}
{ setUseCatalog(!useCatalog); setShowFilterModal(false); }} > {t('use_catalog')}
) : ( <>
{ if (showNsfwContentOnly) { setShowNsfwContentOnly(false); } setShowWorksafeContentOnly(!showWorksafeContentOnly); setShowFilterModal(false); }} > {t('show_worksafe_content_only')}
{ if (showWorksafeContentOnly) { setShowWorksafeContentOnly(false); } setShowNsfwContentOnly(!showNsfwContentOnly); setShowFilterModal(false); }} > {t('show_nsfw_content_only')}
{ setShowWorksafeContentOnly(false); setShowNsfwContentOnly(false); setShowFilterModal(false); }} > {t('show_all_content')}
)}
)} ); }; export default BoxModal;