Skip to content

Commit aeb8822

Browse files
Diego Dariodiegodario88
Diego Dario
authored andcommitted
feat: add multi option for priority queryParam
1 parent ba55a4b commit aeb8822

File tree

3 files changed

+36
-32
lines changed

3 files changed

+36
-32
lines changed

src/pages/Home/Home.tsx

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import { BurgerMenu, Footer, Header } from '@/components';
77
import { useShelters, useThrottle } from '@/hooks';
88
import { Button } from '@/components/ui/button';
99
import { Filter, ShelterListView } from './components';
10-
import { IFilterFormProps } from './components/Filter/types';
10+
import { IFilterFormProps, IFilterSubmittionForm } from './components/Filter/types';
1111

1212
const initialFilterData: IFilterFormProps = {
1313
search: '',
14-
priority: null,
14+
priority: [],
1515
supplyCategoryIds: [],
1616
supplyIds: [],
1717
shelterStatus: [],
@@ -54,29 +54,45 @@ const Home = () => {
5454
[shelters.page, shelters.perPage, shelters.count]
5555
);
5656

57+
const factorySearchArgs = useCallback((values: IFilterFormProps) => {
58+
const searchQueryArgs: IFilterSubmittionForm = {
59+
search: values.search,
60+
priority: values.priority.join(),
61+
supplyCategoryIds: values.supplyCategoryIds,
62+
supplyIds: values.supplyIds,
63+
shelterStatus: values.shelterStatus,
64+
cities: values.cities
65+
}
66+
67+
return searchQueryArgs;
68+
}, [])
69+
5770
const onSubmitFilterForm = useCallback(
5871
(values: IFilterFormProps) => {
5972
setOpenModal(false);
6073
setFilterData(values);
61-
const searchQuery = qs.stringify(values, {
74+
75+
const searchQuery = qs.stringify(factorySearchArgs(values), {
6276
skipNulls: true,
6377
});
78+
6479
setSearchParams(searchQuery);
80+
6581
refresh({
6682
params: {
6783
search: searchQuery,
6884
},
6985
});
7086
},
71-
[refresh, setSearchParams]
87+
[refresh, setSearchParams, factorySearchArgs]
7288
);
7389

7490
const handleFetchMore = useCallback(() => {
7591
const params = {
7692
...shelters.filters,
7793
page: shelters.page + 1,
7894
perPage: shelters.perPage,
79-
search: qs.stringify(filterData),
95+
search: qs.stringify(factorySearchArgs(filterData)),
8096
};
8197

8298
refresh(
@@ -85,7 +101,7 @@ const Home = () => {
85101
},
86102
true
87103
);
88-
}, [refresh, filterData, shelters.filters, shelters.page, shelters.perPage]);
104+
}, [refresh, filterData, shelters.filters, shelters.page, shelters.perPage, factorySearchArgs]);
89105

90106
return (
91107
<div className="flex flex-col h-screen items-center">

src/pages/Home/components/Filter/Filter.tsx

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import {
1919
import {
2020
IFilterFormikProps,
2121
IFilterProps,
22-
ISelectField,
2322
ShelterAvailabilityStatus,
2423
} from './types';
2524
import { priorityOptions } from '@/lib/utils';
@@ -66,12 +65,10 @@ const Filter = (props: IFilterProps) => {
6665
{
6766
initialValues: {
6867
cities: data.cities ?? [],
69-
priority: data.priority
70-
? {
71-
label: priorityOpts[data.priority],
72-
value: data.priority,
73-
}
74-
: null,
68+
priority: data.priority.map((p: string) => ({
69+
label: priorityOpts[Number(p) as SupplyPriority],
70+
value: p,
71+
})),
7572
search: data.search,
7673
shelterStatus: data.shelterStatus.map((s) => ({
7774
label: ShelterAvailabilityStatusMapped[s],
@@ -103,16 +100,15 @@ const Filter = (props: IFilterProps) => {
103100
cities,
104101
} = values;
105102
onSubmit({
106-
priority: priority?.value ? +priority.value : null,
103+
priority: priority.map((p) => p.value),
107104
search,
108105
shelterStatus: shelterStatus.map((s) => s.value),
109106
supplyCategoryIds: supplyCategories.map((s) => s.value),
110107
supplyIds: supplies.map((s) => s.value),
111108
cities,
112109
});
113110
},
114-
}
115-
);
111+
});
116112

117113
const supplyOptions = useMemo(() => {
118114
return supplies
@@ -187,20 +183,14 @@ const Filter = (props: IFilterProps) => {
187183
<Select
188184
placeholder="Selecione"
189185
value={values.priority}
186+
isMulti
190187
options={Object.entries(priorityOpts).map(
191-
([priority, label]) =>
192-
({
193-
label,
194-
value: +priority,
195-
} as ISelectField<SupplyPriority>)
188+
([priority, label]) => ({
189+
label,
190+
value: priority,
191+
}),
196192
)}
197-
onChange={(v) => {
198-
const newValue = {
199-
...v,
200-
value: v ? +v.value : SupplyPriority.Urgent,
201-
};
202-
setFieldValue('priority', newValue);
203-
}}
193+
onChange={(v) => setFieldValue('priority', v)}
204194
/>
205195
</div>
206196
<div className="flex flex-col gap-1 w-full">

src/pages/Home/components/Filter/types.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { SupplyPriority } from '@/service/supply/types';
2-
31
export type ShelterAvailabilityStatus = 'available' | 'unavailable' | 'waiting';
42

53
export interface ISelectField<T = string> {
@@ -9,7 +7,7 @@ export interface ISelectField<T = string> {
97

108
export interface IFilterFormProps {
119
search: string;
12-
priority: SupplyPriority | null;
10+
priority: string[];
1311
supplyCategoryIds: string[];
1412
supplyIds: string[];
1513
shelterStatus: ShelterAvailabilityStatus[];
@@ -18,7 +16,7 @@ export interface IFilterFormProps {
1816

1917
export interface IFilterFormikProps {
2018
search: string;
21-
priority: ISelectField<SupplyPriority> | null;
19+
priority: ISelectField[];
2220
supplyCategories: ISelectField[];
2321
supplies: ISelectField[];
2422
shelterStatus: ISelectField<ShelterAvailabilityStatus>[];

0 commit comments

Comments
 (0)