Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3508 stevensc 1
import React from 'react';
3571 stevensc 2
import { useNavigate, useParams } from 'react-router-dom';
3
import { Box, Button, Typography } from '@mui/material';
3505 stevensc 4
 
5
import { useCapsule } from '@microlearning/hooks';
3510 stevensc 6
import { parse } from '@shared/utils';
3505 stevensc 7
 
3571 stevensc 8
import {
9
  Card,
10
  CardActions,
11
  CardContent,
12
  CardMedia,
13
  CommentList,
14
  Spinner
15
} from '@shared/components';
16
import { CapsuleCommentForm, SlideForm } from '@microlearning/components';
17
import { useModal } from '@shared/hooks';
3505 stevensc 18
 
3571 stevensc 19
export function CapsuleDetailsPage() {
3505 stevensc 20
  const { uuid } = useParams();
3571 stevensc 21
  const navigate = useNavigate();
3505 stevensc 22
 
3538 stevensc 23
  const { capsule, loading, addComment, deleteComment } = useCapsule(uuid);
3505 stevensc 24
 
3571 stevensc 25
  const { showModal } = useModal();
26
 
27
  const showContent = () => {
3572 stevensc 28
    if (!capsule?.slides?.length) return;
29
    if (capsule?.slides?.length > 1 || capsule?.slides[0]?.type !== 'video') {
3571 stevensc 30
      return navigate(`/microlearning/capsules/${uuid}`);
31
    }
32
    const firstSlide = capsule.slides[0];
3653 stevensc 33
    showModal(firstSlide.name, <SlideForm slideUuid={firstSlide.uuid} autoPlay />);
3571 stevensc 34
  };
35
 
3506 stevensc 36
  if (loading || !capsule) return <Spinner />;
3505 stevensc 37
 
38
  return (
3527 stevensc 39
    <Card>
3533 stevensc 40
      <CardMedia
41
        src={capsule.image}
42
        alt={`${capsule.name} capsule`}
43
        sx={{
44
          aspectRatio: 1 / 0.5,
45
          objectFit: 'contain',
46
          objectPosition: 'center'
47
        }}
48
      />
3527 stevensc 49
      <CardContent>
50
        <Typography variant='h1'>{capsule.name}</Typography>
51
        <Typography>{parse(capsule.description)}</Typography>
3654 stevensc 52
        {capsule?.slides?.length > 0 && (
53
          <Button variant='contained' color='primary' onClick={showContent}>
54
            Ver contenido
55
          </Button>
56
        )}
57
      </CardContent>
3505 stevensc 58
 
3654 stevensc 59
      <CardActions>
3533 stevensc 60
        <Box sx={{ mt: 1, display: 'flex', flexDirection: 'column', gap: 1 }}>
3548 stevensc 61
          <CapsuleCommentForm onSubmit={addComment} />
3554 stevensc 62
          <CommentList comments={capsule.comments} onDelete={deleteComment} />
3533 stevensc 63
        </Box>
3571 stevensc 64
      </CardActions>
3527 stevensc 65
    </Card>
3505 stevensc 66
  );
67
}