Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
14843 stevensc 1
import axios from 'axios'
2
import { useState, useEffect } from 'react'
14991 stevensc 3
import { useDispatch } from 'react-redux'
4
import { addNotification } from '../redux/notification/notification.actions'
7215 stevensc 5
 
14991 stevensc 6
function useDataFetching({ url = '', params = null }) {
7215 stevensc 7
 
14843 stevensc 8
	const [loading, setLoading] = useState(true)
9
	const [results, setResults] = useState([])
14991 stevensc 10
	const dispatch = useDispatch()
7215 stevensc 11
 
14843 stevensc 12
	useEffect(() => {
13
		const fetchData = async () => {
14
			try {
14991 stevensc 15
				const { data } = await axios.get(url, { params })
14843 stevensc 16
				if (!data.success) {
14991 stevensc 17
					typeof data.data === 'string'
18
						?
19
						dispatch(addNotification({
20
							style: 'danger',
21
							msg: data.data
22
						}))
23
						: Object.entries(data.data).map(([key, value]) =>
24
							value.map(err =>
25
								dispatch(addNotification({
26
									style: 'danger',
27
									msg: `${key}: ${err}`
28
								}))
29
							)
30
						)
14843 stevensc 31
					setLoading(false)
32
					return
33
				}
34
				setLoading(false)
35
				setResults(data.data)
36
			} catch (error) {
37
				setLoading(false)
14991 stevensc 38
				dispatch(addNotification({
39
					style: 'danger',
40
					msg: error
41
				}))
42
				return
14843 stevensc 43
			}
44
			setLoading(false)
45
		}
7215 stevensc 46
 
14843 stevensc 47
		fetchData()
48
	}, [])
7215 stevensc 49
 
14843 stevensc 50
	return {
51
		loading,
52
		results
53
	}
7215 stevensc 54
}
55
 
14843 stevensc 56
export default useDataFetching