Skip to content

Commit 9953d1f

Browse files
authored
Merge pull request #173 from CodeitPart3/FIX-COMPONENT-172-JIN
[fix] 상세 필터 페이지 이동 시에도 유지되는 버그 수정
2 parents 2e0b744 + a550fd7 commit 9953d1f

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

src/components/Alert/Alert.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ function Alert({ userId }: AlertProps) {
6868
) : (
6969
<InactiveAlarmIcon className="h-6" />
7070
)}
71-
{/* <AlarmIcon className="h-6" /> */}
7271
</button>
7372
{showDropdown && (
7473
<div

src/components/Dropdown/FilterDropdownContent.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ChangeEvent, useMemo, useState } from "react";
22

33
import DatePicker from "react-datepicker";
4+
import { useLocation, useSearchParams } from "react-router-dom";
45

56
import TextField from "../TextField";
67

@@ -23,15 +24,10 @@ function FilterDropdownContent({
2324
onClose,
2425
onClickApplyButton,
2526
}: FilterDropdownContentProps) {
26-
const {
27-
selectedAreas,
28-
startDate,
29-
minPay,
30-
setAreas,
31-
setStartDate,
32-
setMinPay,
33-
reset,
34-
} = useFilterStore();
27+
const { pathname } = useLocation();
28+
const { selectedAreas, startDate, minPay, setFilters, reset } =
29+
useFilterStore();
30+
const [, setSearchParams] = useSearchParams();
3531
const [payFilter, setPayFilter] = useState(minPay);
3632
const [startDateFilter, setStartDateFilter] = useState(startDate);
3733
const [areasFilter, setAreasFilter] = useState<string[]>(selectedAreas);
@@ -66,9 +62,12 @@ function FilterDropdownContent({
6662
};
6763

6864
const applyButtonHandler = () => {
69-
setMinPay(payFilter);
70-
setStartDate(startDateFilter);
71-
setAreas(areasFilter);
65+
setFilters({
66+
selectedAreas: areasFilter,
67+
startDate: startDateFilter,
68+
minPay: payFilter,
69+
pathname,
70+
});
7271
onClickApplyButton();
7372
};
7473

@@ -78,6 +77,10 @@ function FilterDropdownContent({
7877
setStartDateFilter(null);
7978
setAreasFilter([]);
8079
refetch();
80+
setSearchParams((prev) => {
81+
prev.set("page", "1");
82+
return prev;
83+
});
8184
};
8285

8386
return (

src/components/NoticeSearchResultHeader.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { useMemo, useRef, useState } from "react";
1+
import { useEffect, useMemo, useRef, useState } from "react";
22

3-
import { useSearchParams } from "react-router-dom";
3+
import { useLocation, useSearchParams } from "react-router-dom";
44

55
import Button from "@/components/Button";
66
import FilterDropdownContent from "@/components/Dropdown/FilterDropdownContent";
@@ -26,9 +26,17 @@ export default function NoticeSearchResultHeader({
2626
onChangeSort,
2727
refetch,
2828
}: TotalNoticeSectionProps) {
29+
const { pathname } = useLocation();
30+
2931
const [, setSearchParams] = useSearchParams();
3032
const [showFilter, setShowFilter] = useState<boolean>(false);
31-
const { minPay, selectedAreas, startDate } = useFilterStore();
33+
const {
34+
pathname: filterPathname,
35+
minPay,
36+
selectedAreas,
37+
startDate,
38+
reset,
39+
} = useFilterStore();
3240

3341
const buttonRef = useRef<HTMLButtonElement>(null);
3442
const wrapperRef = useRef<HTMLDivElement>(null);
@@ -68,6 +76,12 @@ export default function NoticeSearchResultHeader({
6876
setShowFilter(false);
6977
};
7078

79+
useEffect(() => {
80+
if (pathname !== filterPathname) {
81+
reset();
82+
}
83+
}, [pathname, filterPathname, reset]);
84+
7185
return (
7286
<div>
7387
<div className="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 sm:gap-0 mb-4 ">

src/store/useFilterStore.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,19 @@ interface FilterState {
77
selectedAreas: string[];
88
startDate: Date | null;
99
minPay: string | null;
10+
pathname: string | null;
1011
getFilters: () => {
1112
address?: string[] | null;
1213
hourlyPayGte?: number;
1314
startsAtGte?: string;
15+
pathname?: string;
1416
};
17+
setFilters: (filters: {
18+
selectedAreas?: string[];
19+
startDate?: Date | null;
20+
minPay?: string | null;
21+
pathname?: string;
22+
}) => void;
1523
setAreas: (areas: string[]) => void;
1624
setStartDate: (date: Date | null) => void;
1725
setMinPay: (pay: string | null) => void;
@@ -22,6 +30,7 @@ export const useFilterStore = create<FilterState>((set, get) => ({
2230
selectedAreas: [],
2331
startDate: null,
2432
minPay: null,
33+
pathname: null,
2534

2635
getFilters: () => {
2736
const { selectedAreas, startDate, minPay } = get();
@@ -43,11 +52,18 @@ export const useFilterStore = create<FilterState>((set, get) => ({
4352
setAreas: (areas) => set({ selectedAreas: areas }),
4453
setStartDate: (date) => set({ startDate: date }),
4554
setMinPay: (pay) => set({ minPay: pay }),
55+
setFilters: (nextFilters) => {
56+
set((filters) => ({
57+
...filters,
58+
...nextFilters,
59+
}));
60+
},
4661

4762
reset: () =>
4863
set({
4964
selectedAreas: [],
5065
startDate: null,
5166
minPay: null,
67+
pathname: null,
5268
}),
5369
}));

0 commit comments

Comments
 (0)