Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3416 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3432 stevensc 1
import React, { createContext, useCallback } from 'react'
2
import { useFetch } from '@hooks'
3140 stevensc 3
 
3432 stevensc 4
export const PurposesContext = createContext()
3140 stevensc 5
 
6
export default function PurposesProvider({ url, children }) {
3432 stevensc 7
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] })
8
  const { items: purposes, link_add, total } = data
3140 stevensc 9
 
10
  const addPurpose = useCallback(
11
    (newPurpose) => {
3432 stevensc 12
      const newPurposes = [newPurpose, ...purposes]
13
      mutate({ ...data, items: newPurposes })
3140 stevensc 14
    },
15
    [purposes, mutate]
3432 stevensc 16
  )
3140 stevensc 17
 
3150 stevensc 18
  const removePurpose = useCallback(
3140 stevensc 19
    (purposeId) => {
3432 stevensc 20
      const newPurposes = purposes.filter((purpose) => purpose.id !== purposeId)
21
      mutate({ ...data, items: newPurposes })
3140 stevensc 22
    },
23
    [purposes, mutate]
3432 stevensc 24
  )
3140 stevensc 25
 
26
  const updatePurpose = useCallback(
27
    (updatedPurpose) => {
28
      const newPurposes = purposes.map((purpose) =>
29
        purpose.id === updatedPurpose.id ? updatedPurpose : purpose
3432 stevensc 30
      )
31
      mutate({ ...data, items: newPurposes })
3140 stevensc 32
    },
33
    [purposes, mutate]
3432 stevensc 34
  )
3140 stevensc 35
 
36
  const getPurposeById = useCallback(
37
    (purposeId) => purposes.find((purpose) => purpose.id === purposeId),
38
    [purposes]
3432 stevensc 39
  )
3140 stevensc 40
 
41
  return (
42
    <PurposesContext.Provider
43
      value={{
44
        loading,
45
        purposes,
46
        addUrl: link_add,
47
        total,
48
        addPurpose,
3150 stevensc 49
        removePurpose,
3140 stevensc 50
        updatePurpose,
3432 stevensc 51
        getPurposeById
3140 stevensc 52
      }}
53
    >
54
      {children}
55
    </PurposesContext.Provider>
3432 stevensc 56
  )
3140 stevensc 57
}