Proyectos de Subversion LeadersLinked - SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3452 stevensc 1
import React, { useEffect, useMemo, useState } from 'react';
2
 
3
import { useModal, useAlert } from '@app/modules/shared/hooks';
4
import { deleteKnowledge } from '../services';
5
import { useFetch, useSearchQuery } from '@hooks';
6
import { debounce } from '@utils';
7
 
8
import { KnowledgeForm } from '../components';
9
 
10
export function useKnowledges() {
11
  const [knowledges, setKnowledges] = useState([]);
12
  const { getParam, setParam } = useSearchQuery();
13
  const { data, isLoading: loading } = useFetch('/knowledge-area?search=' + getParam('search'));
14
 
15
  const { showModal } = useModal();
16
  const { showSuccess, showError } = useAlert();
17
 
18
  const categories = useMemo(() => {
19
    const categories = [{ label: 'Todas', value: '' }];
20
 
21
    const results = data.categories
22
      .filter(({ uuid }) => data.categories_with_edition.includes(uuid))
23
      .map(({ uuid, name }) => ({
24
        label: name,
25
        value: uuid
26
      }));
27
 
28
    categories.push(...results);
29
 
30
    return categories;
31
  }, [data.categories]);
32
 
33
  const handleSearchKnowledge = debounce((value) => setParam('search', value), 500);
34
 
35
  const setPage = (page) => setParam('page', page);
36
 
37
  const onDeleteKnowledge = async (url) => {
38
    try {
39
      const message = await deleteKnowledge(url);
40
      showSuccess(message);
41
    } catch (error) {
42
      showError(error.message);
43
    }
44
  };
45
 
46
  const handleAddKnowledge = (url) => {
47
    showModal(
48
      'Agregar Conocimiento',
49
      <KnowledgeForm
50
        onComplete={(newKnowledge) => {
51
          setKnowledges((prev) => [...prev, newKnowledge]);
52
        }}
53
        categories={categories}
54
        url={url}
55
      />
56
    );
57
  };
58
 
59
  const handleEditKnowledge = (url) => {
60
    showModal(
61
      'Editar Conocimiento',
62
      <KnowledgeForm
63
        onComplete={(newKnowledge) => {
64
          setKnowledges((prev) => {
65
            const index = prev.findIndex((knowledge) => knowledge.uuid === newKnowledge.uuid);
66
            prev[index] = newKnowledge;
67
            return [...prev];
68
          });
69
        }}
70
        categories={categories}
71
        url={url}
72
      />
73
    );
74
  };
75
 
76
  const handleDeleteKnowledge = (url) => {
77
    showModal('Eliminar Conocimiento', <p>¿Está seguro que desea eliminar este conocimiento?</p>);
78
  };
79
 
80
  useEffect(() => {
81
    if (data) setKnowledges(data.knowledges);
82
  }, [data]);
83
 
84
  return {
85
    categories,
86
    knowledges,
87
    loading,
88
    page: data.page,
89
    pages: data.total_pages,
90
    setPage,
91
    searchKnowledge: handleSearchKnowledge,
92
    deleteKnowledge: handleDeleteKnowledge,
93
    addKnowledge: handleAddKnowledge,
94
    editKnowledge: handleEditKnowledge
95
  };
96
}