Autoría | Ultima modificación | Ver Log |
import React, { useEffect, useMemo, useState } from 'react';
import { useModal, useAlert } from '@app/modules/shared/hooks';
import { deleteKnowledge } from '../services';
import { useFetch, useSearchQuery } from '@hooks';
import { debounce } from '@utils';
import { KnowledgeForm } from '../components';
export function useKnowledges() {
const [knowledges, setKnowledges] = useState([]);
const { getParam, setParam } = useSearchQuery();
const { data, isLoading: loading } = useFetch('/knowledge-area?search=' + getParam('search'));
const { showModal } = useModal();
const { showSuccess, showError } = useAlert();
const categories = useMemo(() => {
const categories = [{ label: 'Todas', value: '' }];
const results = data.categories
.filter(({ uuid }) => data.categories_with_edition.includes(uuid))
.map(({ uuid, name }) => ({
label: name,
value: uuid
}));
categories.push(...results);
return categories;
}, [data.categories]);
const handleSearchKnowledge = debounce((value) => setParam('search', value), 500);
const setPage = (page) => setParam('page', page);
const onDeleteKnowledge = async (url) => {
try {
const message = await deleteKnowledge(url);
showSuccess(message);
} catch (error) {
showError(error.message);
}
};
const handleAddKnowledge = (url) => {
showModal(
'Agregar Conocimiento',
<KnowledgeForm
onComplete={(newKnowledge) => {
setKnowledges((prev) => [...prev, newKnowledge]);
}}
categories={categories}
url={url}
/>
);
};
const handleEditKnowledge = (url) => {
showModal(
'Editar Conocimiento',
<KnowledgeForm
onComplete={(newKnowledge) => {
setKnowledges((prev) => {
const index = prev.findIndex((knowledge) => knowledge.uuid === newKnowledge.uuid);
prev[index] = newKnowledge;
return [...prev];
});
}}
categories={categories}
url={url}
/>
);
};
const handleDeleteKnowledge = (url) => {
showModal('Eliminar Conocimiento', <p>¿Está seguro que desea eliminar este conocimiento?</p>);
};
useEffect(() => {
if (data) setKnowledges(data.knowledges);
}, [data]);
return {
categories,
knowledges,
loading,
page: data.page,
pages: data.total_pages,
setPage,
searchKnowledge: handleSearchKnowledge,
deleteKnowledge: handleDeleteKnowledge,
addKnowledge: handleAddKnowledge,
editKnowledge: handleEditKnowledge
};
}