Proyectos de Subversion LeadersLinked - SPA

Rev

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

import React, { useEffect, useRef, useState } from 'react'
import { IconButton } from '@mui/material'
import {
  Pause,
  PlayArrowRounded,
  VolumeOff,
  VolumeUp
} from '@mui/icons-material'
import styled, { css } from 'styled-components'
import { REEL_SIZES } from '../../../constants/feed'

const ReelContainer = styled.div`
  border-radius: 20px;
  background-color: #000;
  position: relative;
  overflow: hidden;
  cursor: pointer;
  video {
    width: 100%;
    height: 100%;
    object-fit: ${({ preview }) => (preview ? 'cover' : 'contain')};
  }

  ${({ size }) =>
    size === REEL_SIZES.sm &&
    css`
      height: 150px;
      width: 50px;
    `}

  ${({ size }) =>
    size === REEL_SIZES.md &&
    css`
      height: 250px;
      width: 150px;
    `}

  ${({ size }) =>
    size === REEL_SIZES.lg &&
    css`
      height: 350px;
      width: 250px;
    `}
`

const PlayButton = styled(IconButton)`
  position: absolute !important;
  top: 0.5rem;
  right: 0.5rem;
`

const MuteButton = styled(PlayButton)`
  bottom: 0.5rem;
  top: inherit;
`

const ReelItem = ({
  reel = {},
  autoPlay = false,
  controls = false,
  onSelect = () => {},
  onEnded = () => {},
  preview = false,
  size = REEL_SIZES.md
}) => {
  const [isPlaying, setIsPlaying] = useState(autoPlay)
  const [isMuted, setIsMuted] = useState(false)
  const videoRef = useRef(null)

  const handleMute = () => {
    setIsMuted(!isMuted)
  }

  const handlePlay = () => {
    isPlaying ? videoRef.current.pause() : videoRef.current?.play()
    setIsPlaying(!isPlaying)
  }

  useEffect(() => {
    !reel.url && videoRef.current.pause()
  }, [reel])

  return (
    <ReelContainer
      preview={preview}
      size={size}
      onClickCapture={() => onSelect(reel)}
    >
      <video
        src={reel.url}
        autoPlay={autoPlay}
        muted={isMuted}
        controls={false}
        ref={videoRef}
        onEnded={onEnded}
      />

      {controls ? (
        <>
          <PlayButton onClickCapture={handlePlay}>
            {isPlaying ? <Pause /> : <PlayArrowRounded />}
          </PlayButton>

          <MuteButton onClickCapture={handleMute}>
            {isMuted ? <VolumeOff /> : <VolumeUp />}
          </MuteButton>
        </>
      ) : null}
    </ReelContainer>
  )
}

export default ReelItem