From 9aa135bad044a9bb2587a6a3e69e7a1ac45fdab8 Mon Sep 17 00:00:00 2001 From: punpunkeshin05 <97283645+punpunkeshin05@users.noreply.github.com> Date: Thu, 22 Feb 2024 16:55:30 +0700 Subject: [PATCH 1/5] feat: filter on home page --- src/app/home/page.tsx | 23 ++++++++++--- src/components/Main/Filter.tsx | 62 ++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index ba3bad39..35c95f14 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -9,15 +9,28 @@ import Search from "@/components/Search/PetSearch"; import { usePetsQuery } from "@/hooks/queries/usePetsQuery"; import MainLayout from "@/layouts/MainLayout"; import { useNavigate } from "react-router-dom"; - +import { filterState } from "@/types/filter"; +import { useState } from "react"; import PetList from "@/components/Main/CardList/PetList"; import PetSuggestionList from "@/components/Main/CardList/PetSuggestionList"; // Page const MainPage = () => { const navigate = useNavigate(); - - const { data, isLoading } = usePetsQuery(); + + const [filters, setFilters] = useState({ + dog: false, + cat: false, + male: false, + female: false, + white: false, + black: false, + brown: false, + blonde: false, + minAge: 0, + maxAge: 30, + }); + const { data, isLoading } = usePetsQuery(filters); return ( <> @@ -32,7 +45,7 @@ const MainPage = () => { - + @@ -51,7 +64,7 @@ const MainPage = () => {
diff --git a/src/components/Main/Filter.tsx b/src/components/Main/Filter.tsx index ad11f85d..c7d95316 100644 --- a/src/components/Main/Filter.tsx +++ b/src/components/Main/Filter.tsx @@ -1,43 +1,71 @@ import Button from "@/components/Button"; -import { useState } from "react"; +import { filterState } from "@/types/filter"; +import { all } from "node_modules/axios/index.d.cts"; -const Filter = () => { - // There are 3 states for filtering in home search (all, dog, cat) - const [filter, setFilter] = useState("all"); +interface FilterProps { + filters: filterState; + setFilters: (filters: filterState) => void; +} + +const Filter: React.FC = ({filters, setFilters}) => { + + const allSelected = filters.dog && filters.cat; + const catSelected = filters.cat && !filters.dog; + const dogSelected = filters.dog && !filters.cat; return (
); From b68105ed379c75a305338a80eafdc77e7bab6fa3 Mon Sep 17 00:00:00 2001 From: punpunkeshin05 <97283645+punpunkeshin05@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:16:40 +0700 Subject: [PATCH 2/5] fix: linter --- src/app/home/page.tsx | 11 +++---- src/components/Main/Filter.tsx | 53 +++++++++++++++------------------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 35c95f14..0af4d6af 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -3,21 +3,21 @@ import Button from "@/components/Button"; import Container from "@/components/Container"; import Divider from "@/components/Divider"; import Banner from "@/components/Main/Banner"; +import PetList from "@/components/Main/CardList/PetList"; +import PetSuggestionList from "@/components/Main/CardList/PetSuggestionList"; import Filter from "@/components/Main/Filter"; import Heading from "@/components/Pets/Heading"; import Search from "@/components/Search/PetSearch"; import { usePetsQuery } from "@/hooks/queries/usePetsQuery"; import MainLayout from "@/layouts/MainLayout"; -import { useNavigate } from "react-router-dom"; import { filterState } from "@/types/filter"; import { useState } from "react"; -import PetList from "@/components/Main/CardList/PetList"; -import PetSuggestionList from "@/components/Main/CardList/PetSuggestionList"; +import { useNavigate } from "react-router-dom"; // Page const MainPage = () => { const navigate = useNavigate(); - + const [filters, setFilters] = useState({ dog: false, cat: false, @@ -30,6 +30,7 @@ const MainPage = () => { minAge: 0, maxAge: 30, }); + const { data, isLoading } = usePetsQuery(filters); return ( @@ -45,7 +46,7 @@ const MainPage = () => { - +
diff --git a/src/components/Main/Filter.tsx b/src/components/Main/Filter.tsx index c7d95316..e76f5793 100644 --- a/src/components/Main/Filter.tsx +++ b/src/components/Main/Filter.tsx @@ -1,14 +1,15 @@ import Button from "@/components/Button"; import { filterState } from "@/types/filter"; -import { all } from "node_modules/axios/index.d.cts"; interface FilterProps { filters: filterState; setFilters: (filters: filterState) => void; } -const Filter: React.FC = ({filters, setFilters}) => { - +const Filter: React.FC = ({ + filters, + setFilters, +}: FilterProps) => { const allSelected = filters.dog && filters.cat; const catSelected = filters.cat && !filters.dog; const dogSelected = filters.dog && !filters.cat; @@ -25,47 +26,41 @@ const Filter: React.FC = ({filters, setFilters}) => { : "flex-col bg-white px-2.5 text-xs text-accent-gray" } shrink-0`} rounded="2xl" - onClick={() => setFilters( - { + onClick={() => + setFilters({ ...filters, dog: !allSelected, cat: !allSelected, - } - )} + }) + } />