prevent catalog filter with empty value

This commit is contained in:
Tom (plebeius.eth)
2024-09-05 16:01:45 +02:00
parent cb6fd503d7
commit 8f0efaf15f
3 changed files with 24 additions and 20 deletions
+7 -5
View File
@@ -22,7 +22,7 @@ interface CatalogFiltersStore {
const useCatalogFiltersStore = create( const useCatalogFiltersStore = create(
persist<CatalogFiltersStore>( persist<CatalogFiltersStore>(
(set, get) => ({ (set) => ({
showTextOnlyThreads: false, showTextOnlyThreads: false,
setShowTextOnlyThreads: (value: boolean) => set({ showTextOnlyThreads: value }), setShowTextOnlyThreads: (value: boolean) => set({ showTextOnlyThreads: value }),
showAdultBoards: false, showAdultBoards: false,
@@ -32,11 +32,13 @@ const useCatalogFiltersStore = create(
filterText: '', filterText: '',
setFilterText: (value: string) => set({ filterText: value }), setFilterText: (value: string) => set({ filterText: value }),
filterItems: [], filterItems: [],
setFilterItems: (items: FilterItem[]) => set({ filterItems: items }), setFilterItems: (items: FilterItem[]) => {
const nonEmptyItems = items.filter((item) => item.text.trim() !== '');
set({ filterItems: nonEmptyItems });
},
saveAndApplyFilters: (items: FilterItem[]) => { saveAndApplyFilters: (items: FilterItem[]) => {
set({ filterItems: items }); const nonEmptyItems = items.filter((item) => item.text.trim() !== '');
console.log('Filters saved and applied:', items); set({ filterItems: nonEmptyItems });
// Example: refreshCatalog();
}, },
}), }),
{ {
@@ -140,9 +140,13 @@
margin: 0 2px; margin: 0 2px;
padding: 1px; padding: 1px;
outline: none; outline: none;
border: 1px solid #aaa; border: var(--reply-modal-field-input-border, revert);
font-size: 11px; font-size: 11px;
width: 180px; width: 200px;
}
.filtersTable input[type='text']:focus {
border: var(--reply-modal-field-input-border-focus, revert);
} }
.filtersTable span { .filtersTable span {
@@ -1,4 +1,4 @@
import { useState, useCallback, useEffect } from 'react'; import { useState, useCallback } from 'react';
import { useLocation, useParams } from 'react-router-dom'; import { useLocation, useParams } from 'react-router-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { isAllView, isCatalogView } from '../../../lib/utils/view-utils'; import { isAllView, isCatalogView } from '../../../lib/utils/view-utils';
@@ -8,32 +8,30 @@ import styles from './catalog-filters.module.css';
const FiltersTable = () => { const FiltersTable = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const { filterItems, saveAndApplyFilters } = useCatalogFiltersStore(); const { filterItems, saveAndApplyFilters } = useCatalogFiltersStore();
const [localFilterItems, setLocalFilterItems] = useState<any[]>([]);
useEffect(() => { const [localFilterItems, setLocalFilterItems] = useState(filterItems);
setLocalFilterItems(filterItems);
}, [filterItems]);
const handleAddFilter = useCallback(() => { const handleAddFilter = useCallback(() => {
setLocalFilterItems([...localFilterItems, { text: '', enabled: true }]); setLocalFilterItems((prev) => [...prev, { text: '', enabled: true }]);
}, [localFilterItems]); }, []);
const handleSave = useCallback(() => { const handleSave = useCallback(() => {
saveAndApplyFilters(localFilterItems); const nonEmptyFilters = localFilterItems.filter((item) => item.text.trim() !== '');
saveAndApplyFilters(nonEmptyFilters);
}, [saveAndApplyFilters, localFilterItems]); }, [saveAndApplyFilters, localFilterItems]);
const updateLocalFilterItem = useCallback((index: number, item: any) => { const updateLocalFilterItem = useCallback((index: number, item: any) => {
setLocalFilterItems((items) => items.map((f, i) => (i === index ? item : f))); setLocalFilterItems((prev) => prev.map((f, i) => (i === index ? item : f)));
}, []); }, []);
const removeLocalFilterItem = useCallback((index: number) => { const removeLocalFilterItem = useCallback((index: number) => {
setLocalFilterItems((items) => items.filter((_, i) => i !== index)); setLocalFilterItems((prev) => prev.filter((_, i) => i !== index));
}, []); }, []);
const moveLocalFilterItemUp = useCallback((index: number) => { const moveLocalFilterItemUp = useCallback((index: number) => {
if (index === 0) return; if (index === 0) return;
setLocalFilterItems((items) => { setLocalFilterItems((prev) => {
const newItems = [...items]; const newItems = [...prev];
[newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]]; [newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]];
return newItems; return newItems;
}); });
@@ -134,7 +132,7 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => {
</div> </div>
)} )}
</div> </div>
<FiltersTable /> {isInCatalogView && <FiltersTable />}
</div> </div>
</> </>
); );