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";
3209 stevensc 2
 
3416 stevensc 3
import { useFetch } from "@hooks";
3209 stevensc 4
 
3416 stevensc 5
export const GoalsContext = createContext();
3209 stevensc 6
 
7
export default function GoalsProvider({ url, children }) {
3416 stevensc 8
  const { data, loading: loading, mutate } = useFetch(url, { items: [] });
9
  const { items: goals, link_add, total } = data;
3209 stevensc 10
 
11
  const addGoal = useCallback(
12
    (newGoal) => {
3416 stevensc 13
      const newGoals = [newGoal, ...goals];
14
      mutate({ ...data, items: newGoals });
3209 stevensc 15
    },
16
    [goals, mutate]
3416 stevensc 17
  );
3209 stevensc 18
 
19
  const deleteGoal = useCallback(
20
    (goalId) => {
3416 stevensc 21
      const newGoals = goals.filter((goal) => goal.id !== goalId);
22
      mutate({ ...data, items: newGoals });
3209 stevensc 23
    },
24
    [goals, mutate]
3416 stevensc 25
  );
3209 stevensc 26
 
27
  const updateGoal = useCallback(
28
    (updatedGoal) => {
29
      const newGoals = goals.map((goal) =>
30
        goal.id === updatedGoal.id ? updatedGoal : goal
3416 stevensc 31
      );
32
      mutate({ ...data, items: newGoals });
3209 stevensc 33
    },
34
    [goals, mutate]
3416 stevensc 35
  );
3209 stevensc 36
 
37
  const getGoalById = useCallback(
38
    (goalId) => goals.find((goal) => goal.id === goalId),
39
    [goals]
3416 stevensc 40
  );
3209 stevensc 41
 
42
  return (
43
    <GoalsContext.Provider
44
      value={{
45
        loading,
46
        goals,
47
        addUrl: link_add,
48
        total,
49
        addGoal,
50
        deleteGoal,
51
        updateGoal,
3416 stevensc 52
        getGoalById,
3209 stevensc 53
      }}
54
    >
55
      {children}
56
    </GoalsContext.Provider>
3416 stevensc 57
  );
3209 stevensc 58
}