Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3694 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3719 stevensc 1
import React, { useEffect, useRef, useState } from 'react';
2
import { IconButton } from '@mui/material';
3
import Pause from '@mui/icons-material/Pause';
4
import PlayArrowRounded from '@mui/icons-material/PlayArrowRounded';
5
import VolumeOff from '@mui/icons-material/VolumeOff';
6
import VolumeUp from '@mui/icons-material/VolumeUp';
7
import styled, { css } from 'styled-components';
8
import { REEL_SIZES } from '../../../constants/feed';
9
 
10
const ReelContainer = styled.div`
11
  border-radius: 20px;
12
  background-color: #000;
13
  position: relative;
14
  overflow: hidden;
15
  cursor: pointer;
16
  video {
17
    width: 100%;
18
    height: 100%;
19
    object-fit: ${({ preview }) => (preview ? 'cover' : 'contain')};
20
  }
21
 
22
  ${({ size }) =>
23
    size === REEL_SIZES.sm &&
24
    css`
25
      height: 150px;
26
      width: 50px;
27
    `}
28
 
29
  ${({ size }) =>
30
    size === REEL_SIZES.md &&
31
    css`
32
      height: 250px;
33
      width: 150px;
34
    `}
35
 
36
  ${({ size }) =>
37
    size === REEL_SIZES.lg &&
38
    css`
39
      height: 350px;
40
      width: 250px;
41
    `}
42
`;
43
 
44
const PlayButton = styled(IconButton)`
45
  position: absolute !important;
46
  top: 0.5rem;
47
  right: 0.5rem;
48
`;
49
 
50
const MuteButton = styled(PlayButton)`
51
  bottom: 0.5rem;
52
  top: inherit;
53
`;
54
 
55
const ReelItem = ({
56
  reel = {},
57
  autoPlay = false,
58
  controls = false,
59
  onSelect = () => {},
60
  onEnded = () => {},
61
  preview = false,
62
  size = REEL_SIZES.md
63
}) => {
64
  const [isPlaying, setIsPlaying] = useState(autoPlay);
65
  const [isMuted, setIsMuted] = useState(false);
66
  const videoRef = useRef(null);
67
 
68
  const handleMute = () => {
69
    setIsMuted(!isMuted);
70
  };
71
 
72
  const handlePlay = () => {
73
    isPlaying ? videoRef.current.pause() : videoRef.current?.play();
74
    setIsPlaying(!isPlaying);
75
  };
76
 
77
  useEffect(() => {
78
    !reel.url && videoRef.current.pause();
79
  }, [reel]);
80
 
81
  return (
82
    <ReelContainer preview={preview} size={size} onClickCapture={() => onSelect(reel)}>
83
      <video
84
        src={reel.url}
85
        autoPlay={autoPlay}
86
        muted={isMuted}
87
        controls={false}
88
        ref={videoRef}
89
        onEnded={onEnded}
90
      />
91
 
92
      {controls ? (
93
        <>
94
          <PlayButton onClickCapture={handlePlay}>
95
            {isPlaying ? <Pause /> : <PlayArrowRounded />}
96
          </PlayButton>
97
 
98
          <MuteButton onClickCapture={handleMute}>
99
            {isMuted ? <VolumeOff /> : <VolumeUp />}
100
          </MuteButton>
101
        </>
102
      ) : null}
103
    </ReelContainer>
104
  );
105
};
106
 
107
export default ReelItem;