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(
persist<CatalogFiltersStore>(
(set, get) => ({
(set) => ({
showTextOnlyThreads: false,
setShowTextOnlyThreads: (value: boolean) => set({ showTextOnlyThreads: value }),
showAdultBoards: false,
@@ -32,11 +32,13 @@ const useCatalogFiltersStore = create(
filterText: '',
setFilterText: (value: string) => set({ filterText: value }),
filterItems: [],
setFilterItems: (items: FilterItem[]) => set({ filterItems: items }),
setFilterItems: (items: FilterItem[]) => {
const nonEmptyItems = items.filter((item) => item.text.trim() !== '');
set({ filterItems: nonEmptyItems });
},
saveAndApplyFilters: (items: FilterItem[]) => {
set({ filterItems: items });
console.log('Filters saved and applied:', items);
// Example: refreshCatalog();
const nonEmptyItems = items.filter((item) => item.text.trim() !== '');
set({ filterItems: nonEmptyItems });
},
}),
{
@@ -140,9 +140,13 @@
margin: 0 2px;
padding: 1px;
outline: none;
border: 1px solid #aaa;
border: var(--reply-modal-field-input-border, revert);
font-size: 11px;
width: 180px;
width: 200px;
}
.filtersTable input[type='text']:focus {
border: var(--reply-modal-field-input-border-focus, revert);
}
.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 { useTranslation } from 'react-i18next';
import { isAllView, isCatalogView } from '../../../lib/utils/view-utils';
@@ -8,32 +8,30 @@ import styles from './catalog-filters.module.css';
const FiltersTable = () => {
const { t } = useTranslation();
const { filterItems, saveAndApplyFilters } = useCatalogFiltersStore();
const [localFilterItems, setLocalFilterItems] = useState<any[]>([]);
useEffect(() => {
setLocalFilterItems(filterItems);
}, [filterItems]);
const [localFilterItems, setLocalFilterItems] = useState(filterItems);
const handleAddFilter = useCallback(() => {
setLocalFilterItems([...localFilterItems, { text: '', enabled: true }]);
}, [localFilterItems]);
setLocalFilterItems((prev) => [...prev, { text: '', enabled: true }]);
}, []);
const handleSave = useCallback(() => {
saveAndApplyFilters(localFilterItems);
const nonEmptyFilters = localFilterItems.filter((item) => item.text.trim() !== '');
saveAndApplyFilters(nonEmptyFilters);
}, [saveAndApplyFilters, localFilterItems]);
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) => {
setLocalFilterItems((items) => items.filter((_, i) => i !== index));
setLocalFilterItems((prev) => prev.filter((_, i) => i !== index));
}, []);
const moveLocalFilterItemUp = useCallback((index: number) => {
if (index === 0) return;
setLocalFilterItems((items) => {
const newItems = [...items];
setLocalFilterItems((prev) => {
const newItems = [...prev];
[newItems[index - 1], newItems[index]] = [newItems[index], newItems[index - 1]];
return newItems;
});
@@ -134,7 +132,7 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => {
</div>
)}
</div>
<FiltersTable />
{isInCatalogView && <FiltersTable />}
</div>
</>
);