Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

index.js 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { Box } from '@mui/system';
  2. import Head from 'next/head';
  3. import { useState } from 'react';
  4. import FilterSort from '../../components/filter-sort/FilterSort';
  5. import LoadingSpinner from '../../components/loader/basic-spinner/LoadSpinner';
  6. import ProductsGrid from '../../components/products-grid/ProductsGrid';
  7. import ProductsHero from '../../components/products-hero/ProductsHero';
  8. import { useInfiniteProducts } from '../../hooks/useInfiniteQuery';
  9. const Products = () => {
  10. const [filter, setFilter] = useState('');
  11. const [sort, setSort] = useState('');
  12. const { data, isLoading, fetchNextPage, hasNextPage } = useInfiniteProducts(
  13. filter,
  14. sort
  15. );
  16. const handleProductTypeChange = (event) => {
  17. const filterText = event.target.value;
  18. setFilter(filterText);
  19. };
  20. const handleSortChange = (event) => {
  21. const sort = event.target.value;
  22. setSort(sort);
  23. };
  24. return (
  25. <Box
  26. sx={{
  27. display: 'flex',
  28. flexDirection: 'column',
  29. }}
  30. >
  31. <Head>
  32. <title>NextJS template</title>
  33. <meta name="description" content="Random data with pagination..." />
  34. </Head>
  35. <ProductsHero />
  36. <FilterSort
  37. handleProductTypeChange={handleProductTypeChange}
  38. productType={filter}
  39. sort={sort}
  40. handleSortChange={handleSortChange}
  41. />
  42. {isLoading ? (
  43. <LoadingSpinner />
  44. ) : (
  45. <ProductsGrid
  46. allProducts={data}
  47. sort={sort}
  48. productType={filter}
  49. fetchNextPage={fetchNextPage}
  50. hasNextPage={hasNextPage}
  51. />
  52. )}
  53. </Box>
  54. );
  55. };
  56. export default Products;