diff --git a/src/components/catalog-filters/catalog-filters.tsx b/src/components/catalog-filters/catalog-filters.tsx
index 188ec343..d64e69d3 100644
--- a/src/components/catalog-filters/catalog-filters.tsx
+++ b/src/components/catalog-filters/catalog-filters.tsx
@@ -5,7 +5,7 @@ import styles from './catalog-filters.module.css';
const FiltersTable = ({ onSave }: { onSave: () => void }) => {
const { t } = useTranslation();
- const { filterItems, saveAndApplyFilters } = useCatalogFiltersStore();
+ const { filterItems, saveAndApplyFilters, currentSubplebbitAddress } = useCatalogFiltersStore();
const [localFilterItems, setLocalFilterItems] = useState(
filterItems.map((item) => ({
@@ -127,7 +127,9 @@ const FiltersTable = ({ onSave }: { onSave: () => void }) => {
×
-
{item.count > 0 && `x${item.count}`} |
+
+ {currentSubplebbitAddress && (item.subplebbitCounts?.get(currentSubplebbitAddress) ?? 0) > 0 && `x${item.subplebbitCounts?.get(currentSubplebbitAddress)}`}
+ |
))}
diff --git a/src/stores/use-catalog-filters-store.ts b/src/stores/use-catalog-filters-store.ts
index edb50748..c736b3b8 100644
--- a/src/stores/use-catalog-filters-store.ts
+++ b/src/stores/use-catalog-filters-store.ts
@@ -50,7 +50,50 @@ const useCatalogFiltersStore = create(
filteredCount: 0,
filteredCids: new Set(),
currentSubplebbitAddress: null,
- setCurrentSubplebbitAddress: (address: string | null) => set({ currentSubplebbitAddress: address }),
+ setCurrentSubplebbitAddress: (address: string | null) => {
+ const prevAddress = get().currentSubplebbitAddress;
+
+ if (address !== prevAddress) {
+ set((state) => {
+ if (address) {
+ const updatedFilterItems = state.filterItems.map((item) => {
+ const newItem = { ...item };
+
+ // Ensure subplebbitCounts is a Map
+ if (!newItem.subplebbitCounts || !(newItem.subplebbitCounts instanceof Map)) {
+ newItem.subplebbitCounts = new Map(Array.isArray(newItem.subplebbitCounts) ? newItem.subplebbitCounts : []);
+ }
+
+ // Ensure subplebbitFilteredCids is a Map
+ if (!newItem.subplebbitFilteredCids || !(newItem.subplebbitFilteredCids instanceof Map)) {
+ newItem.subplebbitFilteredCids = new Map();
+ }
+
+ // Now safely check if the address exists in the map
+ if (!newItem.subplebbitCounts.has(address)) {
+ newItem.subplebbitFilteredCids.set(address, new Set());
+ newItem.subplebbitCounts.set(address, 0);
+ }
+
+ return newItem;
+ });
+
+ return {
+ currentSubplebbitAddress: address,
+ filterItems: updatedFilterItems,
+ filteredCount: 0,
+ };
+ }
+
+ return { currentSubplebbitAddress: address };
+ });
+
+ get().recalcFilteredCount();
+ get().updateFilter();
+ } else {
+ set({ currentSubplebbitAddress: address });
+ }
+ },
searchText: '',
setSearchFilter: (text: string) => {
set({ searchText: text });
@@ -100,6 +143,9 @@ const useCatalogFiltersStore = create(
filter: (comment: Comment) => {
if (!comment?.cid) return true;
+ const currentSubplebbit = state.currentSubplebbitAddress;
+
+ // Apply search filter
if (state.searchText.trim() !== '') {
const searchPattern = state.searchText.toLowerCase();
const title = comment?.title?.toLowerCase() || '';
@@ -110,21 +156,36 @@ const useCatalogFiltersStore = create(
}
}
+ // Apply content filters
const { filterItems } = state;
let shouldHide = false;
+
for (let i = 0; i < filterItems.length; i++) {
const item = filterItems[i];
if (item.enabled && item.text.trim() !== '') {
const pattern = item.text.toLowerCase();
const title = comment?.title?.toLowerCase() || '';
const content = comment?.content?.toLowerCase() || '';
+
if (title.includes(pattern) || content.includes(pattern)) {
+ // If we have a current subplebbit and this is a match, increment the count
+ if (currentSubplebbit && comment.subplebbitAddress === currentSubplebbit) {
+ // We need to use a timeout to avoid modifying state during a state update
+ setTimeout(() => {
+ const filterIndex = filterItems.findIndex((f) => f.text === item.text && f.enabled);
+ if (filterIndex !== -1) {
+ get().incrementFilterCount(filterIndex, comment.cid, comment.subplebbitAddress);
+ }
+ }, 0);
+ }
+
if (item.hide) {
shouldHide = true;
}
}
}
}
+
return !shouldHide;
},
}));