"use client" import { FC, ReactNode, useState } from "react" import { MediaElement, MediaOption, Subtitle } from "../../lib/types" import DropUp from "../action/DropUp" import InputRadio from "../input/InputRadio" import ControlButton from "../input/ControlButton" import IconCC from "../icon/IconCC" import IconClose from "../icon/IconClose" import IconCog from "../icon/IconCog" import IconChevron from "../icon/IconChevron" import IconSettings from "../icon/IconSettings" import classNames from "classnames" import Button from "../action/Button" import IconLoop from "../icon/IconLoop" import IconShare from "components/icon/IconShare" import Link from "next/link" import IconNewTab from "components/icon/IconNewTab" import { useRouter } from 'next/navigation' interface Props { roomId: string playing: MediaElement currentSrc: MediaOption setCurrentSrc: (src: MediaOption) => void currentSub: Subtitle setCurrentSub: (sub: Subtitle) => void loop: boolean setLoop: (loop: boolean) => void interaction: (touch: boolean) => void playbackRate: number setPlaybackRate: (playbackRate: number) => void menuOpen: boolean setMenuOpen: (open: boolean) => void } interface Tab { icon: ReactNode title: ReactNode content: ReactNode } const PlayerMenu: FC = ({ roomId, playing, currentSrc, setCurrentSrc, currentSub, setCurrentSub, loop, setLoop, interaction, playbackRate, setPlaybackRate, menuOpen, setMenuOpen, }) => { const [tab, setTab] = useState(-1) const router = useRouter() const tabs: Tab[] = [ { icon: , title: "Playback rate", content: ( setPlaybackRate(parseFloat(rate))} interaction={interaction} /> ), }, { icon: , title: "Loop", content: ( ), }, { icon: , title: "Open embed", content: (
Open full player in new tab Open embed player in new tab
) } ] if (playing.src.length > 1) { tabs.push({ icon: , title: "Resolution", content: ( option.resolution)} setValue={(resolution) => { const newSrc = playing.src.find( (src) => src.resolution === resolution ) if (newSrc) { setCurrentSrc(newSrc) } else { console.error( "Impossible resolution", resolution, "not found in", playing ) } }} interaction={interaction} /> ), }) } if (playing.sub.length > 1) { tabs.push({ icon: , title: "Subtitle", content: ( sub.lang)} setValue={(lang) => { const newSub = playing.sub.find((sub) => sub.lang === lang) if (newSub) { setCurrentSub(newSub) } else { console.error("Impossible sub", newSub, "not found in", playing) } }} interaction={interaction} /> ), }) } const displayIcon = (icon: ReactNode, className: string = "") => { return
{icon}
} return ( } >
{tab >= 0 && ( <> setTab(-1)} interaction={interaction} > {displayIcon(tabs[tab].icon, "ml-1")}
{tabs[tab].title}
)} setMenuOpen(false)} interaction={interaction} >
{tab < 0 && tabs.map((t, index) => ( setTab(index)} interaction={interaction} className={"flex flex-row items-center"} > {displayIcon(t.icon)} {t.title} ))} {tab >= 0 && tabs[tab].content}
) } export default PlayerMenu