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
import { useFetch } from '@hooks'
2
import { useFetch } from '@hooks';
3
 
3
 
4
export const PurposesContext = createContext()
4
export const PurposesContext = createContext();
5
 
5
 
6
export default function PurposesProvider({ url, children }) {
6
export default function PurposesProvider({ url, children }) {
7
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] })
7
  const { data, isLoading: loading, mutate } = useFetch(url, { items: [] });
8
  const { items: purposes, link_add, total } = data
8
  const { items: purposes, link_add, total } = data;
9
 
9
 
10
  const addPurpose = useCallback(
10
  const addPurpose = useCallback(
11
    (newPurpose) => {
11
    (newPurpose) => {
12
      const newPurposes = [newPurpose, ...purposes]
12
      const newPurposes = [newPurpose, ...purposes];
13
      mutate({ ...data, items: newPurposes })
13
      mutate({ ...data, items: newPurposes });
14
    },
14
    },
15
    [purposes, mutate]
15
    [purposes, mutate]
16
  )
16
  );
17
 
17
 
18
  const removePurpose = useCallback(
18
  const removePurpose = useCallback(
19
    (purposeId) => {
19
    (purposeId) => {
20
      const newPurposes = purposes.filter((purpose) => purpose.id !== purposeId)
20
      const newPurposes = purposes.filter((purpose) => purpose.id !== purposeId);
21
      mutate({ ...data, items: newPurposes })
21
      mutate({ ...data, items: newPurposes });
22
    },
22
    },
23
    [purposes, mutate]
23
    [purposes, mutate]
24
  )
24
  );
25
 
25
 
26
  const updatePurpose = useCallback(
26
  const updatePurpose = useCallback(
27
    (updatedPurpose) => {
27
    (updatedPurpose) => {
28
      const newPurposes = purposes.map((purpose) =>
28
      const newPurposes = purposes.map((purpose) =>
29
        purpose.id === updatedPurpose.id ? updatedPurpose : purpose
29
        purpose.id === updatedPurpose.id ? updatedPurpose : purpose
30
      )
30
      );
31
      mutate({ ...data, items: newPurposes })
31
      mutate({ ...data, items: newPurposes });
32
    },
32
    },
33
    [purposes, mutate]
33
    [purposes, mutate]
34
  )
34
  );
35
 
35
 
36
  const getPurposeById = useCallback(
36
  const getPurposeById = useCallback(
37
    (purposeId) => purposes.find((purpose) => purpose.id === purposeId),
37
    (purposeId) => purposes.find((purpose) => purpose.id === purposeId),
38
    [purposes]
38
    [purposes]
39
  )
39
  );
40
 
40
 
41
  return (
41
  return (
42
    <PurposesContext.Provider
42
    <PurposesContext.Provider
43
      value={{
43
      value={{
44
        loading,
44
        loading,
45
        purposes,
45
        purposes,
46
        addUrl: link_add,
46
        addUrl: link_add,
47
        total,
47
        total,
48
        addPurpose,
48
        addPurpose,
49
        removePurpose,
49
        removePurpose,
50
        updatePurpose,
50
        updatePurpose,
51
        getPurposeById
51
        getPurposeById
52
      }}
52
      }}
53
    >
53
    >
54
      {children}
54
      {children}
55
    </PurposesContext.Provider>
55
    </PurposesContext.Provider>
56
  )
56
  );
57
}
57
}