mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
prevent catalog filter with empty value
This commit is contained in:
@@ -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>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user