Rev 3513 | Rev 3658 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import { useRef, useState, useMemo } from 'react';
import { useFetch } from '@shared/hooks';
import { useDebouncedSearchParam } from '@shared/hooks/useDebouncedSearchParam';
const CAPSULES_ROUTES = {
pending: {
link: '/microlearning/capsules-pending',
params: {
order_field: 'added_on',
order_direction: 'desc'
}
},
progress: {
link: '/microlearning/capsules-in-progress',
params: {}
},
completed: {
link: '/microlearning/capsules-completed',
params: {
order_field: 'last_access_on',
order_direction: 'desc'
}
}
};
const CAPSULES_CATEGORIES = [
{
label: 'Pendiente',
value: 'pending'
},
{
label: 'En curso',
value: 'progress'
},
{
label: 'Finalizado',
value: 'completed'
}
];
export function useMicrolearning() {
const [category, setCategory] = useState(CAPSULES_CATEGORIES[0].value);
const {
inputValue: searchTerm,
setInputValue: setSearchTerm,
debouncedValue: debouncedSearchTerm
} = useDebouncedSearchParam('search', 500);
const capsulesRoutes = useRef(CAPSULES_ROUTES);
const capsuleCategories = useRef(CAPSULES_CATEGORIES);
const { data: rawCapsules, loading: capsulesLoading } = useFetch(
capsulesRoutes.current[category].link,
{ initialParams: capsulesRoutes.current[category].params }
);
const capsules = useMemo(() => {
if (!rawCapsules) return [];
if (!debouncedSearchTerm) return rawCapsules;
return rawCapsules.filter((capsule) =>
capsule.name?.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
);
}, [rawCapsules, debouncedSearchTerm]);
const { data: currentCapsule, loading: currentCapsuleLoading } = useFetch(
'/microlearning/last-capsule-in-progress'
);
const changeCategory = (value) => {
setCategory(value);
};
return {
capsules: capsules || [],
currentCapsule,
capsulesLoading,
currentCapsuleLoading,
category,
categories: capsuleCategories.current,
changeCategory,
searchCapsules: setSearchTerm,
searchTerm
};
}