Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3694 | 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/Search';
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 { isLoading, 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 size={{ xs: 12, md: 4 }} sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
          <SearchFilters />
        </Grid>

        <Grid size={{ xs: 12, md: 8 }} sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
          {isLoading ? (
            <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;