Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { createContext, useCallback } from "react";

import { useFetch } from "@hooks";

export const GoalsContext = createContext();

export default function GoalsProvider({ url, children }) {
  const { data, loading: loading, mutate } = useFetch(url, { items: [] });
  const { items: goals, link_add, total } = data;

  const addGoal = useCallback(
    (newGoal) => {
      const newGoals = [newGoal, ...goals];
      mutate({ ...data, items: newGoals });
    },
    [goals, mutate]
  );

  const deleteGoal = useCallback(
    (goalId) => {
      const newGoals = goals.filter((goal) => goal.id !== goalId);
      mutate({ ...data, items: newGoals });
    },
    [goals, mutate]
  );

  const updateGoal = useCallback(
    (updatedGoal) => {
      const newGoals = goals.map((goal) =>
        goal.id === updatedGoal.id ? updatedGoal : goal
      );
      mutate({ ...data, items: newGoals });
    },
    [goals, mutate]
  );

  const getGoalById = useCallback(
    (goalId) => goals.find((goal) => goal.id === goalId),
    [goals]
  );

  return (
    <GoalsContext.Provider
      value={{
        loading,
        goals,
        addUrl: link_add,
        total,
        addGoal,
        deleteGoal,
        updateGoal,
        getGoalById,
      }}
    >
      {children}
    </GoalsContext.Provider>
  );
}