Rev 3041 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
import { addNotification } from '@store/notification/notification.actions'
export function useResource({
defaultResources = [],
addResource,
editResource,
deleteResource
}) {
const [resources, setResources] = useState(defaultResources)
const [modalState, setModalState] = useState(null)
const [currentResource, setCurrentResource] = useState(null)
const dispatch = useDispatch()
const showModal = (type, resource = null) => {
setCurrentResource(resource)
setModalState(modalState === type ? null : type)
}
const clearModal = () => showModal(null)
const onAdd = async (uuid, resource) => {
try {
const newResources = await addResource(uuid, resource)
setResources(newResources)
showModal(null)
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }))
}
}
const onEdit = async (resource) => {
try {
const newResources = await editResource(
currentResource.link_edit,
resource
)
setResources(newResources)
showModal(null)
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }))
}
}
const onDelete = async () => {
try {
const newResources = await deleteResource(currentResource.link_delete)
setResources(newResources)
showModal(null)
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }))
}
}
useEffect(() => {
setResources(defaultResources)
}, [defaultResources])
return {
showModal,
modalState,
onAdd,
onEdit,
onDelete,
clearModal,
resources,
currentResource
}
}