Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3719 stevensc 1
import React from 'react';
2
import { useNavigate } from 'react-router-dom';
3
 
4
import { useAlert, useAlertModal, useApi, useModal } from '@shared/hooks';
5
import { debounce } from '@shared/utils';
6
import {
7
  getMyGroups,
8
  saveGroup as saveGroupService,
9
  deleteGroup as deleteGroupService
10
} from '@groups/services';
11
 
12
import { AddGroupForm } from '@groups/components';
13
 
14
export const useMyGroups = () => {
15
  const navigate = useNavigate();
16
 
17
  const { showModal, closeModal } = useModal();
18
  const { showAlert, closeAlert } = useAlertModal();
19
  const { showError, showSuccess } = useAlert();
20
 
21
  const {
22
    data: groups,
23
    loading,
24
    execute
25
  } = useApi(getMyGroups, {
26
    autoFetch: true
27
  });
28
 
29
  const { execute: saveGroup } = useApi(saveGroupService, {
30
    onSuccess: (message) => {
31
      showSuccess(message);
32
      closeModal();
33
      execute();
34
    },
35
    onError: (error) => {
36
      showError(error.message);
37
    }
38
  });
39
 
40
  const { execute: executeDeleteGroup } = useApi(deleteGroupService, {
41
    onSuccess: (message) => {
42
      showSuccess(message);
43
      closeAlert();
44
      execute();
45
    },
46
    onError: (error) => {
47
      showError(error.message);
48
    }
49
  });
50
 
51
  const addGroup = () => {
52
    showModal('Agregar grupo', <AddGroupForm onSubmit={saveGroup} />);
53
  };
54
 
55
  const editGroup = (url) => {
56
    navigate(url);
57
  };
58
 
59
  const deleteGroup = (url) => {
60
    showAlert({
61
      title: '¿Estás seguro de querer eliminar este grupo?',
62
      onConfirm: () => executeDeleteGroup(url),
63
      onCancel: closeAlert
64
    });
65
  };
66
 
67
  const viewGroup = (url) => {
68
    navigate(url);
69
  };
70
 
71
  const searchGroups = debounce((value) => {
72
    execute({ search: value });
73
  }, 500);
74
 
75
  return { groups, loading, addGroup, editGroup, deleteGroup, viewGroup, searchGroups };
76
};