Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3432 | | Comparar con el anterior | Ultima modificación | Ver Log |

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