Proyectos de Subversion LeadersLinked - Backend

Rev

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