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";
3320 stevensc 2
 
3416 stevensc 3
import { useFetch } from "@hooks";
3320 stevensc 4
 
3416 stevensc 5
export const HabitProgressContext = createContext();
3320 stevensc 6
 
7
export default function HabitProgressProvider({ url, name, children }) {
3416 stevensc 8
  const { data, loading, mutate } = useFetch(url, {
9
    link_add: "",
3320 stevensc 10
    items: [],
3416 stevensc 11
    total: 0,
12
  });
3320 stevensc 13
 
3416 stevensc 14
  const { link_add, items, total } = data;
3320 stevensc 15
 
16
  const addItem = useCallback(
17
    (newItem) => {
3416 stevensc 18
      const newItems = [newItem, ...items];
19
      mutate({ ...data, items: newItems });
3320 stevensc 20
    },
21
    [items, mutate]
3416 stevensc 22
  );
3320 stevensc 23
 
24
  const removeItem = useCallback(
25
    (itemId) => {
3416 stevensc 26
      const newItems = items.filter((item) => item.id !== itemId);
27
      mutate({ ...data, items: newItems });
3320 stevensc 28
    },
29
    [items, mutate]
3416 stevensc 30
  );
3320 stevensc 31
 
32
  const editItem = useCallback(
33
    (updatedItem) => {
34
      const newItems = items.map((item) =>
3328 stevensc 35
        item.id === updatedItem.id ? { ...item, ...updatedItem } : item
3416 stevensc 36
      );
37
      mutate({ ...data, items: newItems });
3320 stevensc 38
    },
39
    [items, mutate]
3416 stevensc 40
  );
3320 stevensc 41
 
42
  const getItemById = useCallback(
43
    (itemId) => items.find((item) => item.id === itemId),
44
    [items]
3416 stevensc 45
  );
3320 stevensc 46
 
47
  return (
48
    <HabitProgressContext.Provider
49
      value={{
3416 stevensc 50
        loading: loading,
3320 stevensc 51
        addUrl: link_add,
52
        registers: items,
53
        addItem,
54
        editItem,
55
        removeItem,
56
        getItemById,
57
        habitName: name,
3416 stevensc 58
        total,
3320 stevensc 59
      }}
60
    >
61
      {children}
62
    </HabitProgressContext.Provider>
3416 stevensc 63
  );
3320 stevensc 64
}