Proyectos de Subversion LeadersLinked - Backend

Rev

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