Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6366 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
5388 stevensc 1
import React, { useState, useRef, useEffect } from 'react'
5122 stevensc 2
import { useLocation } from 'react-router-dom'
3
import { axios, jsonToParams } from '../../../utils'
4
import Spinner from '../../../shared/loading-spinner/Spinner'
6372 stevensc 5
import EntityTemplate from '../../components/entity-template/EntityTemplate'
5122 stevensc 6
import PaginationComponent from '../../../shared/pagination/PaginationComponent'
5388 stevensc 7
import EmptySection from '../../../shared/empty-section/EmptySection'
6363 stevensc 8
import FiltersSidebar from '../../components/FiltersSidebar'
1 www 9
 
6363 stevensc 10
const MainSection = ({ filters }) => {
5122 stevensc 11
  const [entities, setEntities] = useState([])
12
  const [loading, setLoading] = useState(true)
6366 stevensc 13
  const [category, setCategory] = useState('user')
5122 stevensc 14
  const [currentPage, setCurrentPage] = useState(1)
15
  const [pages, setPages] = useState(1)
6363 stevensc 16
 
5122 stevensc 17
  const activeFilters = useRef([])
18
  const addressFilter = useRef([])
6363 stevensc 19
 
5122 stevensc 20
  const location = useLocation()
6363 stevensc 21
 
1 www 22
  // getting keyword
5122 stevensc 23
  const locationParams = new URLSearchParams(location.search)
24
  const keyword = locationParams.get('keyword')
2275 stevensc 25
 
1018 stevensc 26
  useEffect(() => {
5122 stevensc 27
    loadEntities()
6366 stevensc 28
  }, [keyword])
1 www 29
 
30
  const loadEntities = async (page = 1) => {
5122 stevensc 31
    setLoading(true)
1 www 32
    setCurrentPage(page)
5122 stevensc 33
    const urlParams = {
1 www 34
      page,
6363 stevensc 35
      keyword,
1 www 36
    }
37
    addressFilter.current.forEach(({ name, type }) => {
38
      urlParams[type] = name
5122 stevensc 39
    })
1 www 40
    activeFilters.current.forEach(({ name, value }) => {
41
      urlParams[name] = value
5122 stevensc 42
    })
1 www 43
    await axios
6366 stevensc 44
      .get(`/search/entity/${category}?${jsonToParams(urlParams)}`)
1 www 45
      .then((response) => {
5122 stevensc 46
        const responseData = response.data
1 www 47
        if (responseData.success) {
5122 stevensc 48
          setEntities(responseData.data.current.items)
49
          setPages(responseData.data.total.pages)
1 www 50
        }
5122 stevensc 51
      })
52
    setLoading(false)
53
  }
1 www 54
 
55
  const onChangePageHandler = (currentPage) => {
5122 stevensc 56
    setCurrentPage(currentPage)
57
  }
1 www 58
 
59
  return (
5389 stevensc 60
    <main className="main-section-data container px-0 mt-3">
6363 stevensc 61
      <FiltersSidebar
6366 stevensc 62
        onChange={(category) => setCategory(category)}
63
        onComplete={loadEntities}
6363 stevensc 64
      />
5388 stevensc 65
      <div className="main-ws-sec">
66
        <div className="posts-section">
67
          {loading && <Spinner />}
6363 stevensc 68
          {entities.length ? (
69
            entities.map((entity) => (
5390 stevensc 70
              <EntityTemplate
71
                entity={entity}
72
                key={entity.id}
73
                onChangePage={onChangePageHandler}
74
              />
5388 stevensc 75
            ))
6363 stevensc 76
          ) : (
77
            <EmptySection message="No hay resultados" />
78
          )}
5388 stevensc 79
        </div>
80
        <PaginationComponent
81
          pages={pages}
82
          currentActivePage={currentPage}
83
          onChangePage={loadEntities}
84
        />
85
      </div>
86
      <div className="right-sidebar" />
87
    </main>
5122 stevensc 88
  )
89
}
1 www 90
 
5122 stevensc 91
export default MainSection