Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3416 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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