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 HabitsContext = createContext();

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

  const addHabit = useCallback(
    (newHabit) => {
      const newHabits = [newHabit, ...habits];
      mutate({ ...data, items: newHabits });
    },
    [habits, mutate]
  );

  const removeHabit = useCallback(
    (habitId) => {
      const newHabits = habits.filter((habit) => habit.id !== habitId);
      mutate({ ...data, items: newHabits });
    },
    [habits, mutate]
  );

  const updateHabit = useCallback(
    (updatedHabit) => {
      const newHabits = habits.map((habit) =>
        habit.id === updatedHabit.id ? updatedHabit : habit
      );
      mutate({ ...data, items: newHabits });
    },
    [habits, mutate]
  );

  const getHabitById = useCallback(
    (habitId) => habits.find((habit) => habit.id === habitId),
    [habits]
  );

  return (
    <HabitsContext.Provider
      value={{
        loading,
        habits,
        addUrl: link_add,
        total,
        addHabit,
        removeHabit,
        updateHabit,
        getHabitById,
      }}
    >
      {children}
    </HabitsContext.Provider>
  );
}