Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3432 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 3432 Rev 3719
Línea 1... Línea 1...
1
import React, { createContext, useCallback } from 'react'
1
import React, { createContext, useCallback } from 'react';
2
 
2
 
3
import { useFetch } from '@hooks'
3
import { useFetch } from '@hooks';
4
 
4
 
5
export const HabitsContext = createContext()
5
export const HabitsContext = createContext();
6
 
6
 
7
export default function HabitsProvider({ url, children }) {
7
export default function HabitsProvider({ url, children }) {
8
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] })
8
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] });
9
  const { items: habits, link_add, total } = data
9
  const { items: habits, link_add, total } = data;
10
 
10
 
11
  const addHabit = useCallback(
11
  const addHabit = useCallback(
12
    (newHabit) => {
12
    (newHabit) => {
13
      const newHabits = [newHabit, ...habits]
13
      const newHabits = [newHabit, ...habits];
14
      mutate({ ...data, items: newHabits })
14
      mutate({ ...data, items: newHabits });
15
    },
15
    },
16
    [habits, mutate]
16
    [habits, mutate]
17
  )
17
  );
18
 
18
 
19
  const removeHabit = useCallback(
19
  const removeHabit = useCallback(
20
    (habitId) => {
20
    (habitId) => {
21
      const newHabits = habits.filter((habit) => habit.id !== habitId)
21
      const newHabits = habits.filter((habit) => habit.id !== habitId);
22
      mutate({ ...data, items: newHabits })
22
      mutate({ ...data, items: newHabits });
23
    },
23
    },
24
    [habits, mutate]
24
    [habits, mutate]
25
  )
25
  );
26
 
26
 
27
  const updateHabit = useCallback(
27
  const updateHabit = useCallback(
28
    (updatedHabit) => {
28
    (updatedHabit) => {
29
      const newHabits = habits.map((habit) =>
29
      const newHabits = habits.map((habit) =>
30
        habit.id === updatedHabit.id ? updatedHabit : habit
30
        habit.id === updatedHabit.id ? updatedHabit : habit
31
      )
31
      );
32
      mutate({ ...data, items: newHabits })
32
      mutate({ ...data, items: newHabits });
33
    },
33
    },
34
    [habits, mutate]
34
    [habits, mutate]
35
  )
35
  );
36
 
36
 
37
  const getHabitById = useCallback(
37
  const getHabitById = useCallback(
38
    (habitId) => habits.find((habit) => habit.id === habitId),
38
    (habitId) => habits.find((habit) => habit.id === habitId),
39
    [habits]
39
    [habits]
40
  )
40
  );
41
 
41
 
42
  return (
42
  return (
43
    <HabitsContext.Provider
43
    <HabitsContext.Provider
44
      value={{
44
      value={{
45
        loading,
45
        loading,
46
        habits,
46
        habits,
47
        addUrl: link_add,
47
        addUrl: link_add,
48
        total,
48
        total,
49
        addHabit,
49
        addHabit,
50
        removeHabit,
50
        removeHabit,
51
        updateHabit,
51
        updateHabit,
52
        getHabitById
52
        getHabitById
53
      }}
53
      }}
54
    >
54
    >
55
      {children}
55
      {children}
56
    </HabitsContext.Provider>
56
    </HabitsContext.Provider>
57
  )
57
  );
58
}
58
}