From fdcb8cef23738ada03f8597efd2a7eb4ffebba99 Mon Sep 17 00:00:00 2001 From: Kalidou Diagne Date: Thu, 17 Aug 2023 18:25:05 +0200 Subject: [PATCH] allow only one selected theme --- components/project/project-filters-bar.tsx | 26 ++++++++++++++++++++-- components/project/project-list.tsx | 2 +- state/useProjectFiltersState.ts | 20 +++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/components/project/project-filters-bar.tsx b/components/project/project-filters-bar.tsx index e76b439..8f25e06 100644 --- a/components/project/project-filters-bar.tsx +++ b/components/project/project-filters-bar.tsx @@ -13,6 +13,7 @@ import { } from "@/state/useProjectFiltersState" import { useDebounce } from "react-use" +import { ProjectStatusType } from "@/lib/types" import { cn, queryStringToObject } from "@/lib/utils" import { Icons } from "../icons" @@ -58,12 +59,33 @@ export const ThemesButtonMapping: Record< }, } +export const ThemesStatusMapping: Record< + ProjectStatusType, + { + label: string + icon: any + } +> = { + active: { + label: "Active", + icon: , + }, + archived: { + label: "Archived", + icon: , + }, + inactive: { + label: "Inactive", + icon: , + }, +} + const FilterButtons = ({ searchQuery, }: { searchQuery?: string }): JSX.Element => { - const { toggleFilter, activeFilters } = useProjectFiltersState( + const { activeFilters, onSelectTheme } = useProjectFiltersState( (state) => state ) @@ -78,7 +100,7 @@ const FilterButtons = ({ variant={variant} size="lg" onClick={() => { - toggleFilter({ tag: "themes", value: key, searchQuery }) + onSelectTheme(key, searchQuery ?? "") }} >
diff --git a/components/project/project-list.tsx b/components/project/project-list.tsx index dfe533d..1c9d60b 100644 --- a/components/project/project-list.tsx +++ b/components/project/project-list.tsx @@ -42,7 +42,7 @@ export default function ProjectList() { />
-
+
{tags?.themes?.map((theme, index) => { const { label } = ThemesButtonMapping?.[theme] const icon = TagsIconMapping?.[theme] diff --git a/state/useProjectFiltersState.ts b/state/useProjectFiltersState.ts index e9445a5..0fa6577 100644 --- a/state/useProjectFiltersState.ts +++ b/state/useProjectFiltersState.ts @@ -40,6 +40,7 @@ interface ProjectActionsProps { toggleFilter: ({ tag, value, searchQuery }: toggleFilterProps) => void setFilterFromQueryString: (filters: Partial) => void onFilterProject: (searchPattern: string) => void + onSelectTheme: (theme: string, searchPattern?: string) => void } const createURLQueryString = (params: Partial): string => { @@ -176,6 +177,25 @@ export const useProjectFiltersState = create< projects: filteredProjects, } }), + onSelectTheme: (theme: string, searchQuery = "") => { + set((state: any) => { + const activeFilters = { + ...state.activeFilters, + themes: [theme], + } + + const filteredProjects = filterProjects({ + searchPattern: searchQuery ?? "", + activeFilters, + }) + + return { + ...state, + activeFilters, + projects: filteredProjects, + } + }) + }, onFilterProject: (searchPattern: string) => { set((state: any) => { const filteredProjects = filterProjects({