Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
6734 stevensc 1
import React, { useEffect, useState } from 'react'
2
import { useDispatch, useSelector } from 'react-redux'
3
import { debounce } from '../../utils'
4
import { searchEntities } from '../../services/items'
5
import { addNotification } from '../../redux/notification/notification.actions'
6725 stevensc 6
 
6734 stevensc 7
import Spinner from '../../components/UI/Spinner'
8
import SearchBar from '../../components/UI/SearchBar'
6725 stevensc 9
import TitleSection from '../../components/UI/TitleSection'
6734 stevensc 10
import EmptySection from '../../components/UI/EmptySection'
11
import ProfileItem from '../../components/profile/ProfileItem'
6736 stevensc 12
import LoaderContainer from '../../components/UI/LoaderContainer'
6885 stevensc 13
import PaginationComponent from '../../components/UI/PaginationComponent'
6725 stevensc 14
 
15
const PeopleYouMayKnowPage = () => {
6734 stevensc 16
  const [peopleYouMayKnow, setPeopleYouMayKnow] = useState([])
6885 stevensc 17
  const [currentPage, setCurrentPage] = useState(1)
18
  const [totalPages, setTotalPages] = useState(1)
6734 stevensc 19
  const [loading, setLoading] = useState(false)
20
  const [search, setSearch] = useState('')
21
 
6725 stevensc 22
  const labels = useSelector(({ intl }) => intl.labels)
6734 stevensc 23
  const dispatch = useDispatch()
6725 stevensc 24
 
6885 stevensc 25
  const getPeopleYouMayKnow = async (search = '', page = 1) => {
6734 stevensc 26
    setLoading(true)
27
    try {
28
      const { success, data } = await searchEntities(
29
        'connection/people-you-may-know',
6885 stevensc 30
        search,
31
        page
6734 stevensc 32
      )
6725 stevensc 33
 
6734 stevensc 34
      if (!success) {
35
        dispatch(addNotification({ style: 'danger', msg: data }))
36
        setLoading(false)
37
        return
38
      }
39
 
6885 stevensc 40
      setPeopleYouMayKnow(data.current.items)
41
      setCurrentPage(data.current.page)
42
      setTotalPages(data.total.pages)
6734 stevensc 43
    } catch (error) {
44
      console.log(error)
45
      throw new Error(error)
46
    } finally {
47
      setLoading(false)
48
    }
49
  }
50
 
51
  const handleSearch = debounce((value) => setSearch(value), 500)
52
 
6885 stevensc 53
  const onChangePageHandler = (currentPage) => {
54
    setCurrentPage(currentPage)
55
  }
56
 
6734 stevensc 57
  useEffect(() => {
6885 stevensc 58
    getPeopleYouMayKnow(search, currentPage)
59
  }, [search, currentPage])
6734 stevensc 60
 
6725 stevensc 61
  return (
62
    <main className="companies-info container">
63
      <TitleSection title={labels.people_you_may_know} />
6734 stevensc 64
      <SearchBar onChange={handleSearch} />
65
      {loading ? (
6736 stevensc 66
        <LoaderContainer>
67
          <Spinner />
68
        </LoaderContainer>
6734 stevensc 69
      ) : (
70
        <ul className="companies-list">
71
          {peopleYouMayKnow.length ? (
72
            peopleYouMayKnow.map(({ id, ...rest }) => (
73
              <ProfileItem
74
                key={id}
75
                isTopData
76
                {...rest}
7084 stevensc 77
                fetchCallback={() => getPeopleYouMayKnow(search, currentPage)}
6734 stevensc 78
              />
79
            ))
80
          ) : (
81
            <EmptySection
82
              align="left"
83
              message={labels.datatable_szerorecords}
84
            />
85
          )}
86
        </ul>
87
      )}
6885 stevensc 88
      <PaginationComponent
89
        isRow
90
        pages={totalPages}
91
        currentActivePage={currentPage}
92
        onChangePage={onChangePageHandler}
93
      />
6725 stevensc 94
    </main>
95
  )
96
}
97
 
98
export default PeopleYouMayKnowPage