Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { Box, Button, Typography } from '@mui/material';

import { useModal } from '@shared/hooks';
import { useCapsule } from '@microlearning/hooks';
import { parse } from '@shared/utils';

import {
  Card,
  CardActions,
  CardContent,
  CardMedia,
  CommentList,
  Spinner
} from '@shared/components';
import { CapsuleCommentForm, SlideForm } from '@microlearning/components';

export function CapsuleDetailsPage() {
  const { uuid } = useParams();
  const navigate = useNavigate();

  const { capsule, loading, addComment, removeComment } = useCapsule(uuid);

  const { showModal } = useModal();

  const showContent = () => {
    if (!capsule?.slides?.length) return;
    if (capsule?.slides?.length > 1 || capsule?.slides[0]?.type !== 'video') {
      return navigate(`/microlearning/capsules/${uuid}`);
    }
    const firstSlide = capsule.slides[0];
    showModal(firstSlide.name, <SlideForm uuid={firstSlide.uuid} autoPlay />);
  };

  if (loading || !capsule) return <Spinner />;

  return (
    <Card>
      <CardMedia
        src={capsule.image}
        alt={`${capsule.name} capsule`}
        sx={{
          aspectRatio: 1 / 0.5,
          objectFit: 'contain',
          objectPosition: 'center'
        }}
      />
      <CardContent>
        <Typography variant='h1'>{capsule.name}</Typography>
        <Typography>{parse(capsule.description)}</Typography>
        {capsule?.slides?.length > 0 && (
          <Button
            variant='contained'
            color='primary'
            onClick={showContent}
            style={{ marginTop: 1, width: '100%' }}
          >
            Ver contenido
          </Button>
        )}
      </CardContent>

      <CardActions>
        <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, width: '100%' }}>
          <CapsuleCommentForm onSubmit={addComment} />
          <CommentList comments={capsule.comments} onDelete={removeComment} />
        </Box>
      </CardActions>
    </Card>
  );
}