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>
);
}