diff --git a/src/views/catalog/catalog-filters/catalog-filters.tsx b/src/views/catalog/catalog-filters/catalog-filters.tsx index c44aa579..683b8373 100644 --- a/src/views/catalog/catalog-filters/catalog-filters.tsx +++ b/src/views/catalog/catalog-filters/catalog-filters.tsx @@ -5,15 +5,21 @@ import { isAllView, isCatalogView } from '../../../lib/utils/view-utils'; import useCatalogFiltersStore from '../../../stores/use-catalog-filters-store'; import styles from './catalog-filters.module.css'; -const FiltersTable = ({ onSave }: { onSave: () => void }) => { +const FiltersTable = ({ + localFilterItems, + setLocalFilterItems, + onSave, +}: { + localFilterItems: any[]; + setLocalFilterItems: React.Dispatch>; + onSave: () => void; +}) => { const { t } = useTranslation(); - const { filterItems, saveAndApplyFilters } = useCatalogFiltersStore(); - - const [localFilterItems, setLocalFilterItems] = useState(filterItems); + const { saveAndApplyFilters } = useCatalogFiltersStore(); const handleAddFilter = useCallback(() => { setLocalFilterItems((prev) => [...prev, { text: '', enabled: true }]); - }, []); + }, [setLocalFilterItems]); const handleSave = useCallback(() => { const nonEmptyFilters = localFilterItems.filter((item) => item.text.trim() !== ''); @@ -21,22 +27,31 @@ const FiltersTable = ({ onSave }: { onSave: () => void }) => { onSave(); }, [saveAndApplyFilters, localFilterItems, onSave]); - const updateLocalFilterItem = useCallback((index: number, item: any) => { - setLocalFilterItems((prev) => prev.map((f, i) => (i === index ? item : f))); - }, []); + const updateLocalFilterItem = useCallback( + (index: number, item: any) => { + setLocalFilterItems((prev) => prev.map((f, i) => (i === index ? item : f))); + }, + [setLocalFilterItems], + ); - const removeLocalFilterItem = useCallback((index: number) => { - setLocalFilterItems((prev) => prev.filter((_, i) => i !== index)); - }, []); + const removeLocalFilterItem = useCallback( + (index: number) => { + setLocalFilterItems((prev) => prev.filter((_, i) => i !== index)); + }, + [setLocalFilterItems], + ); - const moveLocalFilterItemUp = useCallback((index: number) => { - if (index === 0) return; - setLocalFilterItems((prev) => { - const newItems = [...prev]; - [newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]]; - return newItems; - }); - }, []); + const moveLocalFilterItemUp = useCallback( + (index: number) => { + if (index === 0) return; + setLocalFilterItems((prev) => { + const newItems = [...prev]; + [newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]]; + return newItems; + }); + }, + [setLocalFilterItems], + ); return ( @@ -100,12 +115,38 @@ const FiltersTable = ({ onSave }: { onSave: () => void }) => { const FiltersModal = ({ closeModal }: { closeModal: () => void }) => { const { t } = useTranslation(); - const { showAdultBoards, setShowAdultBoards, showGoreBoards, setShowGoreBoards, showTextOnlyThreads, setShowTextOnlyThreads } = useCatalogFiltersStore(); + const { showAdultBoards, setShowAdultBoards, showGoreBoards, setShowGoreBoards, showTextOnlyThreads, setShowTextOnlyThreads, filterItems, saveAndApplyFilters } = + useCatalogFiltersStore(); + + const [localShowAdultBoards, setLocalShowAdultBoards] = useState(showAdultBoards); + const [localShowGoreBoards, setLocalShowGoreBoards] = useState(showGoreBoards); + const [localShowTextOnlyThreads, setLocalShowTextOnlyThreads] = useState(showTextOnlyThreads); + const [localFilterItems, setLocalFilterItems] = useState(filterItems); + const location = useLocation(); const params = useParams(); const isInCatalogView = isCatalogView(location.pathname, params); const isInAllView = isAllView(location.pathname, params); + const handleSave = useCallback(() => { + setShowAdultBoards(localShowAdultBoards); + setShowGoreBoards(localShowGoreBoards); + setShowTextOnlyThreads(localShowTextOnlyThreads); + const nonEmptyFilters = localFilterItems.filter((item) => item.text.trim() !== ''); + saveAndApplyFilters(nonEmptyFilters); + closeModal(); + }, [ + localShowAdultBoards, + localShowGoreBoards, + localShowTextOnlyThreads, + localFilterItems, + setShowAdultBoards, + setShowGoreBoards, + setShowTextOnlyThreads, + saveAndApplyFilters, + closeModal, + ]); + return ( <>
@@ -118,7 +159,7 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => { {isInCatalogView && (
@@ -127,20 +168,20 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => {
)}
- {isInCatalogView && } + {isInCatalogView && } );