From 5c762c013900e79d507bcb7c1a9474d246283f58 Mon Sep 17 00:00:00 2001 From: danielriosr <68661990+danielriosr@users.noreply.github.com> Date: Wed, 6 May 2026 14:18:48 -0400 Subject: [PATCH] feat(library): filter for enabled only --- src/modules/library/api/useFilteredMods.ts | 9 +++++++-- src/modules/library/components/FilterPopover.tsx | 13 +++++++++++++ src/stores/libraryFilter.ts | 11 ++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/modules/library/api/useFilteredMods.ts b/src/modules/library/api/useFilteredMods.ts index 2f28d10..d5fca8b 100644 --- a/src/modules/library/api/useFilteredMods.ts +++ b/src/modules/library/api/useFilteredMods.ts @@ -5,7 +5,8 @@ import { sortMods } from "@/modules/library/utils"; import { useLibraryFilterStore } from "@/stores"; export function useFilteredMods(mods: InstalledMod[], searchQuery: string): InstalledMod[] { - const { selectedTags, selectedChampions, selectedMaps, sort } = useLibraryFilterStore(); + const { selectedTags, selectedChampions, selectedMaps, showOnlyEnabled, sort } = + useLibraryFilterStore(); return useMemo(() => { let result = mods; @@ -17,6 +18,10 @@ export function useFilteredMods(mods: InstalledMod[], searchQuery: string): Inst ); } + if (showOnlyEnabled) { + result = result.filter((mod) => mod.enabled); + } + if (selectedTags.size > 0) { result = result.filter((mod) => mod.tags.some((t) => selectedTags.has(t))); } @@ -28,5 +33,5 @@ export function useFilteredMods(mods: InstalledMod[], searchQuery: string): Inst } return sortMods(result, sort); - }, [mods, searchQuery, selectedTags, selectedChampions, selectedMaps, sort]); + }, [mods, searchQuery, selectedTags, selectedChampions, selectedMaps, showOnlyEnabled, sort]); } diff --git a/src/modules/library/components/FilterPopover.tsx b/src/modules/library/components/FilterPopover.tsx index 7554af8..9643926 100644 --- a/src/modules/library/components/FilterPopover.tsx +++ b/src/modules/library/components/FilterPopover.tsx @@ -36,6 +36,8 @@ export function FilterPopover({ filterOptions }: FilterPopoverProps) { toggleChampion, toggleMap, clearFilters, + showOnlyEnabled, + setShowOnlyEnabled, } = useLibraryFilterStore(); const hasActive = useHasActiveFilters(); const [champSearch, setChampSearch] = useState(""); @@ -94,6 +96,17 @@ export function FilterPopover({ filterOptions }: FilterPopoverProps) {
+
+ +
+ + +
{tags.map((tag) => ( diff --git a/src/stores/libraryFilter.ts b/src/stores/libraryFilter.ts index dc3ad93..fabd8ba 100644 --- a/src/stores/libraryFilter.ts +++ b/src/stores/libraryFilter.ts @@ -12,6 +12,7 @@ interface LibraryFilterStore { selectedTags: Set; selectedChampions: Set; selectedMaps: Set; + showOnlyEnabled: boolean; sort: SortConfig; toggleTag: (tag: string) => void; @@ -21,6 +22,7 @@ interface LibraryFilterStore { setChampions: (champions: Set) => void; setMaps: (maps: Set) => void; clearFilters: () => void; + setShowOnlyEnabled: (show: boolean) => void; setSort: (sort: SortConfig) => void; } @@ -28,6 +30,7 @@ export const useLibraryFilterStore = create((set) => ({ selectedTags: new Set(), selectedChampions: new Set(), selectedMaps: new Set(), + showOnlyEnabled: false, sort: { field: "priority", direction: "desc" }, toggleTag: (tag) => @@ -63,13 +66,19 @@ export const useLibraryFilterStore = create((set) => ({ selectedTags: new Set(), selectedChampions: new Set(), selectedMaps: new Set(), + showOnlyEnabled: false, }), + setShowOnlyEnabled: (show) => set({ showOnlyEnabled: show }), setSort: (sort) => set({ sort }), })); export function useHasActiveFilters() { return useLibraryFilterStore( - (s) => s.selectedTags.size > 0 || s.selectedChampions.size > 0 || s.selectedMaps.size > 0, + (s) => + s.selectedTags.size > 0 || + s.selectedChampions.size > 0 || + s.selectedMaps.size > 0 || + s.showOnlyEnabled, ); }