Rev 3274 | Rev 3432 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React from "react";
import { useSelector } from "react-redux";
import { useLocation } from "react-router-dom";
import { Search } from "@mui/icons-material";
import { Grid } from "@mui/material";
import { debounce } from "@utils";
import { useFetch, useSearchQuery } from "@hooks";
import Input from "@components/UI/inputs/Input";
import Spinner from "@components/UI/Spinner";
import Pagination from "@components/common/Pagination";
import SearchList from "@components/search/SearchList";
import SearchFilters from "@components/search/SearchFilters";
const SearchPage = () => {
const { search, pathname } = useLocation();
const labels = useSelector(({ intl }) => intl.labels);
const { loading, data } = useFetch(pathname + search, {
current: { items: [] },
total: {
pages: 1,
},
});
const { setParam, getParam } = useSearchQuery();
const handleSearch = debounce((e) => setParam("keyword", e.target.value));
return (
<>
<Input
icon={<Search />}
variant="search"
onChange={handleSearch}
placeholder={labels.search}
defaultValue={getParam("keyword")}
/>
<Grid container spacing={1}>
<Grid item xs={12} md={4} display="flex" direction="column" gap={1}>
<SearchFilters />
</Grid>
<Grid item xs={12} md={8} display="flex" direction="column" gap={1}>
{loading ? (
<Spinner />
) : (
<>
<SearchList items={data.current.items} />
<Pagination
page={data.current?.page}
pages={data.total.pages}
onChange={(page) => setParam("page", page)}
/>
</>
)}
</Grid>
</Grid>
</>
);
};
export default SearchPage;