Skip to content

Commit b076189

Browse files
committed
feat: hidden filter button if filter is empty
1 parent 6d64ede commit b076189

File tree

3 files changed

+30
-29
lines changed

3 files changed

+30
-29
lines changed

src/hooks/useShelters/useShelters.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@ const useShelters = () => {
1717

1818
const refresh = useCallback(
1919
(config: AxiosRequestConfig<any> = {}, append: boolean = false) => {
20+
const { search, ...rest } = (config ?? {}).params ?? {};
2021
if (!append) setLoading(true);
2122
api
2223
.get<IServerResponse<any>>('/shelters', {
2324
...config,
2425
params: {
2526
orderBy: 'prioritySum',
2627
order: 'desc',
27-
...(config.params ?? {}),
28+
search: search ?? new URLSearchParams(window.location.search),
29+
...rest,
2830
},
2931
})
3032
.then(({ data }) => {

src/pages/Home/Home.tsx

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
1+
import { useCallback, useContext, useMemo, useState } from 'react';
22
import { useNavigate, useSearchParams } from 'react-router-dom';
33
import { RotateCw, LogOutIcon } from 'lucide-react';
44
import qs from 'qs';
@@ -21,16 +21,18 @@ const initialFilterData: IFilterFormProps = {
2121

2222
const Home = () => {
2323
const { data: shelters, loading, refresh } = useShelters();
24-
const [searchParams, setSearchParams] = useSearchParams();
2524
const {
2625
loading: loadingSession,
2726
refreshSession,
2827
session,
2928
} = useContext(SessionContext);
30-
const [searchValue, setSearchValue] = useState<string>('');
3129
const [isModalOpen, setOpenModal] = useState<boolean>(false);
32-
const [filterData, setFilterData] =
33-
useState<IFilterFormProps>(initialFilterData);
30+
const [, setSearchParams] = useSearchParams();
31+
const [filterData, setFilterData] = useState<IFilterFormProps>({
32+
...initialFilterData,
33+
...qs.parse(new URLSearchParams(window.location.search).toString()),
34+
});
35+
3436
const [, setSearch] = useThrottle<string>(
3537
{
3638
throttle: 400,
@@ -48,7 +50,6 @@ const Home = () => {
4850
const navigate = useNavigate();
4951

5052
const clearSearch = useCallback(() => {
51-
setSearchValue('');
5253
setSearch('');
5354
setFilterData(initialFilterData);
5455
setSearchParams('');
@@ -63,7 +64,6 @@ const Home = () => {
6364
(values: IFilterFormProps) => {
6465
setOpenModal(false);
6566
setFilterData(values);
66-
console.log(values);
6767
const searchQuery = qs.stringify(values, {
6868
skipNulls: true,
6969
});
@@ -82,7 +82,7 @@ const Home = () => {
8282
...shelters.filters,
8383
page: shelters.page + 1,
8484
perPage: shelters.perPage,
85-
search: searchValue ? searchValue : '',
85+
search: qs.stringify(filterData),
8686
};
8787

8888
refresh(
@@ -91,11 +91,7 @@ const Home = () => {
9191
},
9292
true
9393
);
94-
}, [refresh, searchValue, shelters.filters, shelters.page, shelters.perPage]);
95-
96-
useEffect(() => {
97-
console.log(searchParams.toString());
98-
}, [searchParams]);
94+
}, [refresh, filterData, shelters.filters, shelters.page, shelters.perPage]);
9995

10096
return (
10197
<div className="flex flex-col h-screen items-center">
@@ -147,9 +143,9 @@ const Home = () => {
147143
count={shelters.count}
148144
data={shelters.results}
149145
onFetchMoreData={handleFetchMore}
150-
searchValue={searchValue}
146+
searchValue={filterData.search}
151147
onSearchValueChange={(v) => {
152-
setSearchValue(v);
148+
setFilterData((prev) => ({ ...prev, search: v }));
153149
setSearch(v);
154150
}}
155151
onSelectShelter={(s) => navigate(`/abrigo/${s.id}`)}

src/pages/Home/components/ShelterListView/ShelterListView.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
import { Button } from '@/components/ui/button';
1111
import { cn } from '@/lib/utils';
1212
import { IShelterListViewProps } from './types';
13+
import { useSearchParams } from 'react-router-dom';
1314

1415
const ShelterListView = React.forwardRef<HTMLDivElement, IShelterListViewProps>(
1516
(props, ref) => {
@@ -28,6 +29,8 @@ const ShelterListView = React.forwardRef<HTMLDivElement, IShelterListViewProps>(
2829
...rest
2930
} = props;
3031

32+
const [searchParams] = useSearchParams();
33+
3134
return (
3235
<div className={cn(className, 'flex flex-col gap-2')}>
3336
<h1 className="text-[#2f2f2f] font-semibold text-2xl">
@@ -51,23 +54,23 @@ const ShelterListView = React.forwardRef<HTMLDivElement, IShelterListViewProps>(
5154
<Button
5255
variant="ghost"
5356
size="sm"
54-
className="flex gap-2 items-center [&_svg]:stroke-blue-500"
57+
className="flex gap-2 items-center text-blue-500 hover:text-blue-600 active:text-blue-700"
5558
onClick={onOpenModal}
5659
>
57-
<ListFilter className="h-5 w-5" />
58-
<h1 className="font-semibold text-[16px] text-blue-500">Filtros</h1>
60+
<ListFilter className="h-5 w-5 stroke-blue-500" />
61+
Filtros
5962
</Button>
60-
<Button
61-
variant="ghost"
62-
size="sm"
63-
className="flex gap-2 items-center [&_svg]:stroke-blue-500"
64-
onClick={onClearSearch}
65-
>
66-
<CircleAlert className="h-5 w-5" />
67-
<h1 className="font-semibold text-[16px] text-blue-500">
63+
{searchParams.toString() && (
64+
<Button
65+
variant="ghost"
66+
size="sm"
67+
className="flex gap-2 items-center text-blue-500 hover:text-blue-600 active:text-blue-700"
68+
onClick={onClearSearch}
69+
>
70+
<CircleAlert className="h-5 w-5 stroke-blue-500" />
6871
Limpar Filtros
69-
</h1>
70-
</Button>
72+
</Button>
73+
)}
7174
</div>
7275
<main ref={ref} className="flex flex-col gap-4" {...rest}>
7376
{loading ? (

0 commit comments

Comments
 (0)