Proyectos de Subversion LeadersLinked - SPA

Rev

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
  };
}