Rev 3041 | 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);
setCurrentResource(null);
};
const onAdd = async (uuid, resource) => {
try {
const newResources = await addResource(uuid, resource);
setResources(newResources);
clearModal();
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }));
}
};
const onEdit = async (resource) => {
try {
console.log('Editing');
const newResources = await editResource(currentResource.link_edit, resource);
console.log(newResources);
setResources(newResources);
clearModal();
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }));
}
};
const onDelete = async () => {
try {
const newResources = await deleteResource(currentResource.link_delete);
setResources(newResources);
clearModal();
} catch (error) {
dispatch(addNotification({ style: 'danger', msg: error.message }));
}
};
useEffect(() => {
setResources(defaultResources);
}, [defaultResources]);
return {
showModal,
modalState,
onAdd,
onEdit,
onDelete,
clearModal,
resources,
currentResource
};
}