Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3041 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3040 stevensc 1
import { useEffect, useState } from 'react'
2
import { useDispatch } from 'react-redux'
3
import { addNotification } from '@store/notification/notification.actions'
4
 
5
export function useResource({
6
  defaultResources = [],
7
  addResource,
8
  editResource,
9
  deleteResource
10
}) {
11
  const [resources, setResources] = useState(defaultResources)
12
  const [modalState, setModalState] = useState(null)
13
  const [currentResource, setCurrentResource] = useState(null)
14
  const dispatch = useDispatch()
15
 
16
  const showModal = (type, resource = null) => {
17
    setCurrentResource(resource)
18
    setModalState(modalState === type ? null : type)
19
  }
20
 
21
  const clearModal = () => showModal(null)
22
 
23
  const onAdd = async (uuid, resource) => {
24
    try {
25
      const newResources = await addResource(uuid, resource)
26
      setResources(newResources)
27
      showModal(null)
28
    } catch (error) {
29
      dispatch(addNotification({ style: 'danger', msg: error.message }))
30
    }
31
  }
32
 
33
  const onEdit = async (resource) => {
34
    try {
35
      const newResources = await editResource(
36
        currentResource.link_edit,
37
        resource
38
      )
39
      setResources(newResources)
40
      showModal(null)
41
    } catch (error) {
42
      dispatch(addNotification({ style: 'danger', msg: error.message }))
43
    }
44
  }
45
 
46
  const onDelete = async () => {
47
    try {
48
      const newResources = await deleteResource(currentResource.link_delete)
49
      setResources(newResources)
50
      showModal(null)
51
    } catch (error) {
52
      dispatch(addNotification({ style: 'danger', msg: error.message }))
53
    }
54
  }
55
 
56
  useEffect(() => {
57
    setResources(defaultResources)
58
  }, [defaultResources])
59
 
60
  return {
61
    showModal,
62
    modalState,
63
    onAdd,
64
    onEdit,
65
    onDelete,
66
    clearModal,
67
    resources,
68
    currentResource
69
  }
70
}