Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3568 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';
import Slider from 'react-slick';
import styled from 'styled-components';
import IconButton from '@mui/material/IconButton';
import NavigateNextIcon from '@mui/icons-material/NavigateNext';
import NavigateBeforeIcon from '@mui/icons-material/NavigateBefore';
import { Typography } from '@mui/material';
import { CapsuleItem } from './CapsuleItem';

const StyledSlider = styled(Slider)`
  display: grid;
  column-gap: 10px;
  grid-template-rows: 2rem auto;
  grid-template-columns: 1fr 30px 30px;

  .slick-list {
    grid-row: 2/3;
    grid-column: 1/4;
    padding: 1.5rem 0 0;
  }
  .slick-track {
    display: flex;
    gap: 1rem;
  }
`;

const ArrowButton = styled(IconButton)`
  border: 1px solid var(--font-color) !important;
  color: var(--font-color) !important;
  grid-row: 1;
  transition: all 200ms ease;

  &:hover {
    background-color: var(--font-color) !important;
    color: var(--bg-color) !important;
  }
`;

const StyledNextArrow = styled(ArrowButton)`
  grid-column: 3;
`;

const StyledPrevArrow = styled(ArrowButton)`
  grid-column: 2;
`;

const NextArrow = ({ onClick }) => {
  return (
    <StyledNextArrow onClick={onClick}>
      <NavigateNextIcon />
    </StyledNextArrow>
  );
};

const PrevArrow = ({ onClick }) => {
  return (
    <StyledPrevArrow onClick={onClick}>
      <NavigateBeforeIcon />
    </StyledPrevArrow>
  );
};

export function CapsulesList({ capsules = [], onEnroll = () => {} }) {
  const settings = {
    infinite: true,
    speed: 1500,
    slidesToShow: capsules?.length < 4 ? capsules?.length : 4,
    slidesToScroll: capsules?.length < 4 ? capsules?.length : 4,
    nextArrow: <NextArrow />,
    prevArrow: <PrevArrow />,
    responsive: [
      {
        breakpoint: 768,
        settings: {
          slidesToShow: 2,
          slidesToScroll: 2,
          initialSlide: 0
        }
      },
      {
        breakpoint: 1024,
        settings: {
          slidesToShow: 3,
          slidesToScroll: 3,
          initialSlide: 0
        }
      }
    ]
  };

  if (!capsules || !capsules.length) {
    return <Typography>No hay cápsulas disponibles</Typography>;
  }

  return (
    <StyledSlider {...settings}>
      {capsules?.map((capsule, index) => (
        <CapsuleItem capsule={capsule} onComplete={onEnroll} key={index} />
      ))}
    </StyledSlider>
  );
}