Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3040 | Ir a la última revisión | | Comparar con el anterior | 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'
3041 stevensc 3
 
3040 stevensc 4
import { addNotification } from '@store/notification/notification.actions'
5
 
6
export function useResource({
7
  defaultResources = [],
8
  addResource,
9
  editResource,
10
  deleteResource
11
}) {
12
  const [resources, setResources] = useState(defaultResources)
13
  const [modalState, setModalState] = useState(null)
14
  const [currentResource, setCurrentResource] = useState(null)
15
  const dispatch = useDispatch()
16
 
17
  const showModal = (type, resource = null) => {
18
    setCurrentResource(resource)
19
    setModalState(modalState === type ? null : type)
20
  }
21
 
3041 stevensc 22
  const clearModal = () => {
23
    showModal(null)
24
    setCurrentResource(null)
25
  }
3040 stevensc 26
 
27
  const onAdd = async (uuid, resource) => {
28
    try {
29
      const newResources = await addResource(uuid, resource)
30
      setResources(newResources)
3041 stevensc 31
      clearModal()
3040 stevensc 32
    } catch (error) {
33
      dispatch(addNotification({ style: 'danger', msg: error.message }))
34
    }
35
  }
36
 
37
  const onEdit = async (resource) => {
38
    try {
3041 stevensc 39
      console.log('Editing')
3040 stevensc 40
      const newResources = await editResource(
41
        currentResource.link_edit,
42
        resource
43
      )
3041 stevensc 44
      console.log(newResources)
3040 stevensc 45
      setResources(newResources)
3041 stevensc 46
      clearModal()
3040 stevensc 47
    } catch (error) {
48
      dispatch(addNotification({ style: 'danger', msg: error.message }))
49
    }
50
  }
51
 
52
  const onDelete = async () => {
53
    try {
54
      const newResources = await deleteResource(currentResource.link_delete)
55
      setResources(newResources)
3041 stevensc 56
      clearModal()
3040 stevensc 57
    } catch (error) {
58
      dispatch(addNotification({ style: 'danger', msg: error.message }))
59
    }
60
  }
61
 
62
  useEffect(() => {
63
    setResources(defaultResources)
64
  }, [defaultResources])
65
 
66
  return {
67
    showModal,
68
    modalState,
69
    onAdd,
70
    onEdit,
71
    onDelete,
72
    clearModal,
73
    resources,
74
    currentResource
75
  }
76
}