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

export default function HabitProgressProvider({ url, name, children }) {
  const { data, loading, mutate } = useFetch(url, {
    link_add: "",
    items: [],
    total: 0,
  });

  const { link_add, items, total } = data;

  const addItem = useCallback(
    (newItem) => {
      const newItems = [newItem, ...items];
      mutate({ ...data, items: newItems });
    },
    [items, mutate]
  );

  const removeItem = useCallback(
    (itemId) => {
      const newItems = items.filter((item) => item.id !== itemId);
      mutate({ ...data, items: newItems });
    },
    [items, mutate]
  );

  const editItem = useCallback(
    (updatedItem) => {
      const newItems = items.map((item) =>
        item.id === updatedItem.id ? { ...item, ...updatedItem } : item
      );
      mutate({ ...data, items: newItems });
    },
    [items, mutate]
  );

  const getItemById = useCallback(
    (itemId) => items.find((item) => item.id === itemId),
    [items]
  );

  return (
    <HabitProgressContext.Provider
      value={{
        loading: loading,
        addUrl: link_add,
        registers: items,
        addItem,
        editItem,
        removeItem,
        getItemById,
        habitName: name,
        total,
      }}
    >
      {children}
    </HabitProgressContext.Provider>
  );
}