mirror of
https://github.com/KuekHaoYang/KVideo.git
synced 2026-08-15 00:33:44 +08:00
107 lines
3.4 KiB
TypeScript
107 lines
3.4 KiB
TypeScript
import React from 'react';
|
|
import { DesktopControls } from './DesktopControls';
|
|
import { useDesktopPlayerState } from '../hooks/useDesktopPlayerState';
|
|
import { useDesktopPlayerLogic } from '../hooks/useDesktopPlayerLogic';
|
|
|
|
interface DesktopControlsWrapperProps {
|
|
state: ReturnType<typeof useDesktopPlayerState>['state'];
|
|
logic: ReturnType<typeof useDesktopPlayerLogic>;
|
|
refs: ReturnType<typeof useDesktopPlayerState>['refs'];
|
|
}
|
|
|
|
export function DesktopControlsWrapper({ state, logic, refs }: DesktopControlsWrapperProps) {
|
|
const {
|
|
isPlaying,
|
|
currentTime,
|
|
duration,
|
|
volume,
|
|
isMuted,
|
|
isFullscreen,
|
|
showControls,
|
|
playbackRate,
|
|
showSpeedMenu,
|
|
showMoreMenu,
|
|
showVolumeBar,
|
|
isPiPSupported,
|
|
isAirPlaySupported,
|
|
setShowSpeedMenu,
|
|
setShowMoreMenu,
|
|
} = state;
|
|
|
|
const {
|
|
togglePlay,
|
|
skipForward,
|
|
skipBackward,
|
|
toggleMute,
|
|
handleVolumeChange,
|
|
handleVolumeMouseDown,
|
|
toggleFullscreen,
|
|
togglePictureInPicture,
|
|
showAirPlayMenu,
|
|
changePlaybackSpeed,
|
|
handleCopyLink,
|
|
handleProgressClick,
|
|
handleProgressMouseDown,
|
|
startSpeedMenuTimeout,
|
|
clearSpeedMenuTimeout,
|
|
formatTime,
|
|
} = logic;
|
|
|
|
const {
|
|
progressBarRef,
|
|
volumeBarRef,
|
|
moreMenuTimeoutRef,
|
|
} = refs;
|
|
|
|
const speeds = [0.5, 0.75, 1, 1.25, 1.5, 2];
|
|
|
|
return (
|
|
<DesktopControls
|
|
showControls={showControls}
|
|
isPlaying={isPlaying}
|
|
currentTime={currentTime}
|
|
duration={duration}
|
|
volume={volume}
|
|
isMuted={isMuted}
|
|
isFullscreen={isFullscreen}
|
|
playbackRate={playbackRate}
|
|
showSpeedMenu={showSpeedMenu}
|
|
showMoreMenu={showMoreMenu}
|
|
showVolumeBar={showVolumeBar}
|
|
isPiPSupported={isPiPSupported}
|
|
isAirPlaySupported={isAirPlaySupported}
|
|
progressBarRef={progressBarRef}
|
|
volumeBarRef={volumeBarRef}
|
|
onTogglePlay={togglePlay}
|
|
onSkipForward={skipForward}
|
|
onSkipBackward={skipBackward}
|
|
onToggleMute={toggleMute}
|
|
onVolumeChange={handleVolumeChange}
|
|
onVolumeMouseDown={handleVolumeMouseDown}
|
|
onToggleFullscreen={toggleFullscreen}
|
|
onTogglePictureInPicture={togglePictureInPicture}
|
|
onShowAirPlayMenu={showAirPlayMenu}
|
|
onToggleSpeedMenu={() => setShowSpeedMenu(!showSpeedMenu)}
|
|
onToggleMoreMenu={() => setShowMoreMenu(!showMoreMenu)}
|
|
onSpeedChange={changePlaybackSpeed}
|
|
onCopyLink={handleCopyLink}
|
|
onProgressClick={handleProgressClick}
|
|
onProgressMouseDown={handleProgressMouseDown}
|
|
onSpeedMenuMouseEnter={clearSpeedMenuTimeout}
|
|
onSpeedMenuMouseLeave={startSpeedMenuTimeout}
|
|
onMoreMenuMouseEnter={() => {
|
|
if (moreMenuTimeoutRef.current) {
|
|
clearTimeout(moreMenuTimeoutRef.current);
|
|
}
|
|
}}
|
|
onMoreMenuMouseLeave={() => {
|
|
moreMenuTimeoutRef.current = setTimeout(() => {
|
|
setShowMoreMenu(false);
|
|
}, 300);
|
|
}}
|
|
formatTime={formatTime}
|
|
speeds={speeds}
|
|
/>
|
|
);
|
|
}
|