Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
7002 stevensc 1
import React, { useState, useRef, useEffect } from 'react'
2
import { axios, jsonToParams } from '../../utils'
7003 stevensc 3
import { Col, Container, Row } from 'react-bootstrap'
4
import { useHistory, useLocation } from 'react-router-dom'
7002 stevensc 5
 
6
import Spinner from '../../components/UI/Spinner'
7
import SearchItem from '../../components/search/SearchItem'
8
import SearchInput from '../../components/UI/SearchInput'
9
import EmptySection from '../../components/UI/EmptySection'
10
import PaginationComponent from '../../components/UI/PaginationComponent'
11
 
12
const SearchPage = () => {
13
  const [entities, setEntities] = useState([])
14
  const [loading, setLoading] = useState(true)
15
  const [category, setCategory] = useState('user')
7003 stevensc 16
  const [entity, setEntity] = useState('')
7002 stevensc 17
  const [currentPage, setCurrentPage] = useState(1)
18
  const [pages, setPages] = useState(1)
19
  const activeFilters = useRef([])
20
  const addressFilter = useRef([])
21
 
22
  const { search, pathname } = useLocation()
7003 stevensc 23
  const history = useHistory()
7002 stevensc 24
 
7003 stevensc 25
  const params = new URLSearchParams(search)
26
  const keyword = params.get('keyword')
7002 stevensc 27
 
28
  const loadEntities = async (page = 1) => {
29
    setLoading(true)
30
    setCurrentPage(page)
31
 
32
    const urlParams = { page, keyword }
33
 
34
    addressFilter.current.forEach(({ name, type }) => {
35
      urlParams[type] = name
36
    })
37
    activeFilters.current.forEach(({ name, value }) => {
38
      urlParams[name] = value
39
    })
40
 
41
    await axios
42
      .get(`/search/entity/${category}?${jsonToParams(urlParams)}`)
43
      .then((response) => {
44
        const { success, data } = response.data
7003 stevensc 45
 
7002 stevensc 46
        if (success) {
47
          setEntities(data.current.items)
48
          setPages(data.total.pages)
49
        }
50
      })
51
    setLoading(false)
52
  }
53
 
54
  const onChangePageHandler = (currentPage) => {
55
    setCurrentPage(currentPage)
56
  }
57
 
7005 stevensc 58
  const onSubmitHandler = (e) => {
59
    e.preventDefault()
7003 stevensc 60
    history.push({ pathname, search: `?keyword=${entity}` })
61
  }
62
 
7002 stevensc 63
  useEffect(() => {
7003 stevensc 64
    loadEntities()
65
  }, [keyword])
7002 stevensc 66
 
67
  return (
68
    <>
7003 stevensc 69
      <Container as="main">
7004 stevensc 70
        <SearchInput
7003 stevensc 71
          as="form"
72
          onSubmit={onSubmitHandler}
73
          onChange={(e) => setEntity(e.target.value)}
74
          value={entity}
75
          placeholder="¿Que desea encontrar?"
7004 stevensc 76
          style={{ backgroundColor: 'var(--bg-color)' }}
7003 stevensc 77
        />
7006 stevensc 78
        <Row className="mt-3">
7003 stevensc 79
          <Col as="aside" md="4">
80
            <div></div>
81
          </Col>
82
          <Col as="section" md="8">
83
            <div className="posts-section">
84
              {loading && <Spinner />}
85
              {entities.length ? (
86
                entities.map((entity) => (
87
                  <SearchItem
88
                    key={entity.id}
89
                    onChangePage={onChangePageHandler}
90
                    {...entity}
91
                  />
92
                ))
93
              ) : (
94
                <EmptySection message="No hay resultados" />
95
              )}
96
            </div>
97
            <PaginationComponent
98
              pages={pages}
99
              currentActivePage={currentPage}
100
              onChangePage={loadEntities}
101
              isRow
102
            />
103
          </Col>
104
        </Row>
7002 stevensc 105
      </Container>
106
    </>
107
  )
108
}
109
 
110
export default SearchPage