Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3511 stevensc 1
import React, { useCallback, useEffect, useRef } from 'react';
3481 stevensc 2
import { useSelector } from 'react-redux';
3
import { Box, Typography } from '@mui/material';
4
 
3511 stevensc 5
import { useFetch } from '@shared/hooks';
3481 stevensc 6
 
3511 stevensc 7
import { List } from '@shared/components';
8
import { DetailTag } from '@microlearning/components';
9
 
3505 stevensc 10
export function TimelinePage() {
3481 stevensc 11
  const loaderRef = useRef(null);
12
 
3511 stevensc 13
  const { data, loading, refetch } = useFetch('/microlearning/timeline');
14
 
3481 stevensc 15
  const fetchData = useCallback(
16
    (url = '') => {
17
      if (isLoading || !url) return;
18
 
19
      setIsLoading(true);
20
 
3505 stevensc 21
      api
3481 stevensc 22
        .get(`${url}?page=${currentPage}`)
3505 stevensc 23
        .then((data) => {
3481 stevensc 24
          setCurrentPage((prevCurrentPage) => prevCurrentPage + 1);
25
          setTotalPages(data.total.pages);
26
          setItems((prevItems) => [...prevItems, ...data.current.items]);
27
        })
28
        .catch((err) => console.log(err.message))
29
        .finally(() => setIsLoading(false));
30
    },
31
    [currentPage, isLoading, totalPages, linkTimeline]
32
  );
33
 
34
  useEffect(() => {
35
    if (isIntercepting) fetchData(linkTimeline);
36
  }, [isIntercepting]);
37
 
38
  return (
39
    <>
40
      <Typography variant='h2'>Linea de tiempo</Typography>
41
 
42
      <Box
43
        display='flex'
44
        flexDirection='column'
45
        gap={1}
46
        width='100%'
47
        mt={2}
48
        maxHeight='60vh'
49
        overflow='auto'
50
      >
51
        <TimelineList items={items} />
52
 
53
        <div ref={loaderRef}>{currentPage < totalPages ? <Spinner /> : null}</div>
54
      </Box>
55
    </>
56
  );
3505 stevensc 57
}
3481 stevensc 58
 
59
const TimelineList = ({ items = [] }) => {
60
  const labels = useSelector(({ intl }) => intl.labels);
61
 
62
  return (
3505 stevensc 63
    <List
64
      items={items}
65
      emptyMessage={labels.datatable_szerorecords}
66
      renderItem={({ activity, added_on }, i) => (
3481 stevensc 67
        <DetailTag key={i} title={activity} label={added_on} />
3505 stevensc 68
      )}
69
    />
3481 stevensc 70
  );
71
};