Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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