Proyectos de Subversion LeadersLinked - SPA

Rev

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

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