Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3513 | Rev 3658 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3512 stevensc 1
import { useRef, useState, useMemo } from 'react';
3494 stevensc 2
 
3512 stevensc 3
import { useFetch } from '@shared/hooks';
4
import { useDebouncedSearchParam } from '@shared/hooks/useDebouncedSearchParam';
3494 stevensc 5
 
6
const CAPSULES_ROUTES = {
7
  pending: {
8
    link: '/microlearning/capsules-pending',
9
    params: {
10
      order_field: 'added_on',
11
      order_direction: 'desc'
12
    }
13
  },
14
  progress: {
15
    link: '/microlearning/capsules-in-progress',
16
    params: {}
17
  },
18
  completed: {
19
    link: '/microlearning/capsules-completed',
20
    params: {
21
      order_field: 'last_access_on',
22
      order_direction: 'desc'
23
    }
24
  }
25
};
26
 
27
const CAPSULES_CATEGORIES = [
28
  {
29
    label: 'Pendiente',
30
    value: 'pending'
31
  },
32
  {
33
    label: 'En curso',
34
    value: 'progress'
35
  },
36
  {
37
    label: 'Finalizado',
38
    value: 'completed'
39
  }
40
];
41
 
42
export function useMicrolearning() {
43
  const [category, setCategory] = useState(CAPSULES_CATEGORIES[0].value);
3512 stevensc 44
  const {
45
    inputValue: searchTerm,
46
    setInputValue: setSearchTerm,
47
    debouncedValue: debouncedSearchTerm
48
  } = useDebouncedSearchParam('search', 500);
49
 
3495 stevensc 50
  const capsulesRoutes = useRef(CAPSULES_ROUTES);
51
  const capsuleCategories = useRef(CAPSULES_CATEGORIES);
3494 stevensc 52
 
3512 stevensc 53
  const { data: rawCapsules, loading: capsulesLoading } = useFetch(
3511 stevensc 54
    capsulesRoutes.current[category].link,
55
    { initialParams: capsulesRoutes.current[category].params }
56
  );
57
 
3512 stevensc 58
  const capsules = useMemo(() => {
3513 stevensc 59
    if (!rawCapsules) return [];
60
    if (!debouncedSearchTerm) return rawCapsules;
61
    return rawCapsules.filter((capsule) =>
3514 stevensc 62
      capsule.name?.toLowerCase().includes(debouncedSearchTerm.toLowerCase())
3512 stevensc 63
    );
64
  }, [rawCapsules, debouncedSearchTerm]);
65
 
3494 stevensc 66
  const { data: currentCapsule, loading: currentCapsuleLoading } = useFetch(
67
    '/microlearning/last-capsule-in-progress'
68
  );
69
 
70
  const changeCategory = (value) => {
71
    setCategory(value);
72
  };
73
 
74
  return {
3513 stevensc 75
    capsules: capsules || [],
3494 stevensc 76
    currentCapsule,
3500 stevensc 77
    capsulesLoading,
78
    currentCapsuleLoading,
3494 stevensc 79
    category,
3495 stevensc 80
    categories: capsuleCategories.current,
3494 stevensc 81
    changeCategory,
3512 stevensc 82
    searchCapsules: setSearchTerm,
83
    searchTerm
3494 stevensc 84
  };
85
}