import { Box, IconButton, Tooltip } from "@mui/material"; import { useRef, useState } from "react"; import ReactPlayer from "react-player"; import { Close, Facebook, Fullscreen, PictureInPictureAlt, PlayCircleOutline, YouTube as YouTubeIcon, } from "@mui/icons-material"; import screenfull from "screenfull"; import { findDOMNode } from "react-dom"; import { regex } from "../../../lib/regex"; import { useWidth } from "../../ContextProvider"; export default function Player(props: { url: string }) { const [pip, setPip] = useState(false); const [play, setPlay] = useState(false); const [width] = useWidth(); const player = useRef(null); const { url } = props; const mode = (regex.facebook.videos.some((regexp) => url.match(regexp)) && "facebook") || "youtube"; const buttons = [ { title: "Full Screen (press ESC/F11 to exit)", icon: , onClick: () => { const Player = findDOMNode(player.current); Player instanceof Element && screenfull.request(Player); }, }, { title: "Picture in Picture", icon: , onClick: () => { setPip(!pip); }, hidden: !ReactPlayer.canEnablePIP(url), }, { title: "Close", icon: , onClick: () => { setPlay(false); }, }, ]; return (
{play && (
{ { youtube: , facebook: , }[mode] }

{{ youtube: "Youtube", facebook: "Facebook" }[mode]}

{buttons.map( (btn) => !btn.hidden && ( {btn.icon} ) )}
)} { setPlay(true); }} playIcon={ { youtube: ( ), facebook: , }[mode] } playing={play} />
); }