Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
14174 stevensc 1
import React from 'react'
2
import { useEffect, useState } from 'react'
3
import { useForm } from 'react-hook-form'
4
import axios from 'axios'
5
import Follower from './follower/Follower'
6
import PaginationComponent from '../../shared/PaginationComponent'
7
import ContentTitle from '../../shared/ContentTitle'
8
import Spinner from '../../shared/Spinner'
7545 stevensc 9
 
10
const Followers = ({ backendVars }) => {
16793 stevensc 11
  let axiosThrottle = null
7806 stevensc 12
 
16793 stevensc 13
  const { table_link, allowDelete } = backendVars
7806 stevensc 14
 
16793 stevensc 15
  const [followers, setFollowers] = useState([])
16
  const [loading, setLoading] = useState(true)
17
  const [pages] = useState(1)
18
  const [currentPage, setCurrentPage] = useState(1)
7806 stevensc 19
 
16793 stevensc 20
  const { register, watch } = useForm()
7545 stevensc 21
 
16793 stevensc 22
  useEffect(() => {
23
    fetchFollowers()
24
    return () => clearTimeout(axiosThrottle)
25
  }, [currentPage])
7545 stevensc 26
 
16793 stevensc 27
  const fetchFollowers = async () => {
28
    setLoading(true)
29
    let params = {
30
      params: {
31
        page: currentPage
32
      }
33
    }
34
    if (watch('search')) {
35
      params = { params: { ...params.params, search: watch('search') } }
36
    }
37
    await axios.get(table_link, params).then(({ data }) => {
38
      if (data.success) {
39
        setFollowers(data.data.items)
40
      }
41
    })
42
    setLoading(false)
43
  }
7545 stevensc 44
 
16793 stevensc 45
  const handleSearch = () => {
46
    clearTimeout(axiosThrottle)
47
    axiosThrottle = setTimeout(() => {
48
      fetchFollowers()
49
    }, 500)
50
  }
7545 stevensc 51
 
16793 stevensc 52
  const deleteFollower = (email) => {
53
    setFollowers(followers.filter((follower) => follower.email !== email))
54
  }
7545 stevensc 55
 
16793 stevensc 56
  const handleChangePage = (newPage) => {
57
    setCurrentPage(newPage)
58
  }
7806 stevensc 59
 
16793 stevensc 60
  return (
61
    <ContentTitle title="Seguidores">
62
      <div className="company-title">
63
        <div className="section_admin_title_buttons">
64
          <form
65
            name="form-connection-search"
66
            id="form-connection-search"
67
            onSubmit={(event) => event.preventDefault()}
68
          >
69
            <div className="form-group">
70
              <input
71
                type="text"
72
                name="search"
73
                id="search"
74
                className="form-control"
75
                placeholder="Buscar"
76
                ref={register}
77
                onChange={handleSearch}
78
              />
79
            </div>
80
          </form>
81
        </div>
82
      </div>
7545 stevensc 83
 
16793 stevensc 84
      <div className="row position-relative">
85
        {loading ? (
86
          <Spinner />
87
        ) : (
88
          followers.map(({ first_name, last_name, email, actions }, index) => (
89
            <Follower
90
              key={index}
91
              first_name={first_name}
92
              last_name={last_name}
93
              email={email}
94
              actions={actions}
95
              allowDelete={allowDelete}
96
              deleteFollower={deleteFollower}
97
            />
98
          ))
99
        )}
100
        <PaginationComponent
101
          pages={pages}
102
          currentPage={currentPage}
103
          onChangePage={handleChangePage}
104
        />
105
      </div>
106
    </ContentTitle>
107
  )
14174 stevensc 108
}
7545 stevensc 109
 
16793 stevensc 110
export default Followers