Proyectos de Subversion LeadersLinked - Backend

Rev

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

import axios from 'axios'
import { useState, useEffect } from 'react'
import { useDispatch } from 'react-redux'
import { addNotification } from '../redux/notification/notification.actions'

function useDataFetching({ url = '', params = null }) {

        const [loading, setLoading] = useState(true)
        const [results, setResults] = useState([])
        const dispatch = useDispatch()

        useEffect(() => {
                const fetchData = async () => {
                        try {
                                const { data } = await axios.get(url, { params })
                                if (!data.success) {
                                        typeof data.data === 'string'
                                                ?
                                                dispatch(addNotification({
                                                        style: 'danger',
                                                        msg: data.data
                                                }))
                                                : Object.entries(data.data).map(([key, value]) =>
                                                        value.map(err =>
                                                                dispatch(addNotification({
                                                                        style: 'danger',
                                                                        msg: `${key}: ${err}`
                                                                }))
                                                        )
                                                )
                                        setLoading(false)
                                        return
                                }
                                setLoading(false)
                                setResults(data.data)
                        } catch (error) {
                                setLoading(false)
                                dispatch(addNotification({
                                        style: 'danger',
                                        msg: error
                                }))
                                return
                        }
                        setLoading(false)
                }

                fetchData()
        }, [])

        return {
                loading,
                results
        }
}

export default useDataFetching