Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3072 | Rev 3274 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3070 stevensc 1
import React from 'react'
2
import { useSelector } from 'react-redux'
3
import { useLocation } from 'react-router-dom'
979 stevensc 4
import { Search } from '@mui/icons-material'
2806 stevensc 5
import { Grid } from '@mui/material'
5 stevensc 6
 
3070 stevensc 7
import { debounce } from '@utils'
8
import { useFetch, useSearchQuery } from '@hooks'
9
 
2864 stevensc 10
import Input from '@components/UI/inputs/Input'
3070 stevensc 11
import Spinner from '@components/UI/Spinner'
2964 stevensc 12
import Pagination from '@components/common/Pagination'
3070 stevensc 13
import SearchList from '@components/search/SearchList'
14
import SearchFilters from '@components/search/SearchFilters'
5 stevensc 15
 
16
const SearchPage = () => {
970 stevensc 17
  const { search, pathname } = useLocation()
979 stevensc 18
  const labels = useSelector(({ intl }) => intl.labels)
5 stevensc 19
 
3070 stevensc 20
  const { isLoading, data } = useFetch(pathname + search, {
21
    current: { items: [] },
22
    total: {
23
      pages: 1
24
    }
25
  })
970 stevensc 26
 
3074 stevensc 27
  const { setParam, getParam } = useSearchQuery()
970 stevensc 28
 
3070 stevensc 29
  const handleSearch = debounce((e) => setParam('keyword', e.target.value))
970 stevensc 30
 
5 stevensc 31
  return (
32
    <>
2806 stevensc 33
      <Input
2864 stevensc 34
        icon={<Search />}
3070 stevensc 35
        variant='search'
36
        onChange={handleSearch}
2806 stevensc 37
        placeholder={labels.search}
3074 stevensc 38
        defaultValue={getParam('keyword')}
2806 stevensc 39
      />
1191 stevensc 40
 
3070 stevensc 41
      <Grid container spacing={2}>
3072 stevensc 42
        <Grid item xs={12} md={4} display='flex' direction='column' gap={1}>
3070 stevensc 43
          <SearchFilters />
2806 stevensc 44
        </Grid>
1191 stevensc 45
 
3072 stevensc 46
        <Grid item xs={12} md={8} display='flex' direction='column' gap={1}>
3070 stevensc 47
          {isLoading ? (
2864 stevensc 48
            <Spinner />
2806 stevensc 49
          ) : (
50
            <>
3070 stevensc 51
              <SearchList items={data.current.items} />
2964 stevensc 52
              <Pagination
3070 stevensc 53
                page={data.current?.page}
54
                pages={data.total.pages}
55
                onChange={(page) => setParam('page', page)}
2806 stevensc 56
              />
57
            </>
58
          )}
1191 stevensc 59
        </Grid>
2806 stevensc 60
      </Grid>
5 stevensc 61
    </>
485 stevensc 62
  )
63
}
5 stevensc 64
 
485 stevensc 65
export default SearchPage