Proyectos de Subversion LeadersLinked - SPA

Rev

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