Proyectos de Subversion LeadersLinked - SPA

Rev

Autoría | Ultima modificación | Ver Log |

import React, { useMemo, useState } from 'react';
import { useSelector } from 'react-redux';
import { Typography } from '@mui/material';
import { CheckCircle } from '@mui/icons-material';

import { TopicContainer, TopicsGrid } from './UI';
import EmptySection from '../../../components/UI/EmptySection';
import SlidesCarousel from './slides/slides-carousel';

const Slides = ({ capsuleId = '' }) => {
  const [showCarousel, setShowCarousel] = useState(false);
  const [currentSlideIndex, setCurrentSlideIndex] = useState(0);

  const slides = useSelector(({ microlearning }) =>
    microlearning.slidesAllIds
      .map((uuid) => microlearning.slideById[uuid])
      .sort((a, b) => a.order - b.order)
  );
  const labels = useSelector(({ intl }) => intl.labels);

  const filteredSlides = useMemo(() => {
    if (!capsuleId) {
      return slides;
    }

    return slides.filter((capsule) => capsule.capsuleId === capsuleId);
  }, [capsuleId, slides]);

  if (!filteredSlides.length) {
    return <EmptySection message={labels.datatable_szerorecords} />;
  }

  const handleShowCarousel = (index = 0) => {
    setCurrentSlideIndex(index);
    setShowCarousel(true);
  };

  const handleHideCarousel = () => {
    setCurrentSlideIndex(0);
    setShowCarousel(false);
  };

  return (
    <TopicsGrid>
      {filteredSlides.map((slide, index) => (
        <SlidesItem key={slide.uuid} slide={slide} onClick={() => handleShowCarousel(index)} />
      ))}
      <SlidesCarousel
        onClose={handleHideCarousel}
        slides={filteredSlides}
        show={showCarousel}
        currentSlideIndex={currentSlideIndex}
      />
    </TopicsGrid>
  );
};

const SlidesItem = ({ slide, onClick }) => {
  const { name, background, file, completed } = slide;

  return (
    <TopicContainer onClick={onClick} style={{ cursor: 'pointer' }}>
      <div className='c-header'>
        <Typography variant='h3' title={name}>
          {name}
        </Typography>
      </div>
      <div className='c-body'>
        {completed ? <CheckCircle color='success' /> : null}
        <img src={background || file} alt='' />
      </div>
    </TopicContainer>
  );
};

export default Slides;