|
@@ -65,10 +65,12 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
externalRef
|
|
externalRef
|
|
) => {
|
|
) => {
|
|
const [player, playerRef] = useVideoJsPlayer(videoJsConfig)
|
|
const [player, playerRef] = useVideoJsPlayer(videoJsConfig)
|
|
- const cachedPlayerVolume = usePersonalDataStore((state) => state.cachedPlayerVolume)
|
|
|
|
- const updateCachedPlayerVolume = usePersonalDataStore((state) => state.actions.updateCachedPlayerVolume)
|
|
|
|
|
|
+ const currentVolume = usePersonalDataStore((state) => state.currentVolume)
|
|
|
|
+ const cachedVolume = usePersonalDataStore((state) => state.cachedVolume)
|
|
|
|
+ const setCurrentVolume = usePersonalDataStore((state) => state.actions.setCurrentVolume)
|
|
|
|
+ const setCachedVolume = usePersonalDataStore((state) => state.actions.setCachedVolume)
|
|
|
|
+ const [volumeToSave, setVolumeToSave] = useState(0)
|
|
|
|
|
|
- const [volume, setVolume] = useState(cachedPlayerVolume)
|
|
|
|
const [isPlaying, setIsPlaying] = useState(false)
|
|
const [isPlaying, setIsPlaying] = useState(false)
|
|
const [videoTime, setVideoTime] = useState(0)
|
|
const [videoTime, setVideoTime] = useState(0)
|
|
const [isFullScreen, setIsFullScreen] = useState(false)
|
|
const [isFullScreen, setIsFullScreen] = useState(false)
|
|
@@ -315,26 +317,29 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
|
|
|
|
const handler = (event: Event) => {
|
|
const handler = (event: Event) => {
|
|
if (event.type === CustomVideojsEvents.Muted) {
|
|
if (event.type === CustomVideojsEvents.Muted) {
|
|
- setVolume(0)
|
|
|
|
|
|
+ if (currentVolume) {
|
|
|
|
+ setCachedVolume(currentVolume)
|
|
|
|
+ }
|
|
|
|
+ setCurrentVolume(0)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
if (event.type === CustomVideojsEvents.Unmuted) {
|
|
if (event.type === CustomVideojsEvents.Unmuted) {
|
|
- setVolume(cachedPlayerVolume || VOLUME_STEP)
|
|
|
|
|
|
+ setCurrentVolume(cachedVolume || VOLUME_STEP)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
if (event.type === CustomVideojsEvents.VolumeIncrease || CustomVideojsEvents.VolumeDecrease) {
|
|
if (event.type === CustomVideojsEvents.VolumeIncrease || CustomVideojsEvents.VolumeDecrease) {
|
|
- setVolume(player.volume())
|
|
|
|
|
|
+ setCurrentVolume(player.volume())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
player.on(events, handler)
|
|
player.on(events, handler)
|
|
return () => {
|
|
return () => {
|
|
player.off(events, handler)
|
|
player.off(events, handler)
|
|
}
|
|
}
|
|
- }, [cachedPlayerVolume, volume, player])
|
|
|
|
|
|
+ }, [currentVolume, player, cachedVolume, setCachedVolume, setCurrentVolume])
|
|
|
|
|
|
const debouncedVolumeChange = useRef(
|
|
const debouncedVolumeChange = useRef(
|
|
debounce((volume: number) => {
|
|
debounce((volume: number) => {
|
|
- updateCachedPlayerVolume(volume)
|
|
|
|
|
|
+ setVolumeToSave(volume)
|
|
}, 125)
|
|
}, 125)
|
|
)
|
|
)
|
|
// update volume on mouse input
|
|
// update volume on mouse input
|
|
@@ -342,15 +347,18 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
if (!player || isInBackground) {
|
|
if (!player || isInBackground) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- player?.volume(volume)
|
|
|
|
|
|
+ player?.volume(currentVolume)
|
|
|
|
|
|
- if (volume) {
|
|
|
|
|
|
+ debouncedVolumeChange.current(currentVolume)
|
|
|
|
+ if (currentVolume) {
|
|
player.muted(false)
|
|
player.muted(false)
|
|
- debouncedVolumeChange.current(volume)
|
|
|
|
} else {
|
|
} else {
|
|
|
|
+ if (volumeToSave) {
|
|
|
|
+ setCachedVolume(volumeToSave)
|
|
|
|
+ }
|
|
player.muted(true)
|
|
player.muted(true)
|
|
}
|
|
}
|
|
- }, [isInBackground, player, volume])
|
|
|
|
|
|
+ }, [currentVolume, volumeToSave, isInBackground, player, setCachedVolume])
|
|
|
|
|
|
// button/input handlers
|
|
// button/input handlers
|
|
const handlePlayPause = () => {
|
|
const handlePlayPause = () => {
|
|
@@ -363,15 +371,15 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
}
|
|
}
|
|
|
|
|
|
const handleChangeVolume = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
const handleChangeVolume = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
- setVolume(Number(event.target.value))
|
|
|
|
|
|
+ setCurrentVolume(Number(event.target.value))
|
|
}
|
|
}
|
|
|
|
|
|
const handleMute = (event: React.MouseEvent) => {
|
|
const handleMute = (event: React.MouseEvent) => {
|
|
event.stopPropagation()
|
|
event.stopPropagation()
|
|
- if (volume === 0) {
|
|
|
|
- setVolume(cachedPlayerVolume || 0.05)
|
|
|
|
|
|
+ if (currentVolume === 0) {
|
|
|
|
+ setCurrentVolume(cachedVolume || 0.05)
|
|
} else {
|
|
} else {
|
|
- setVolume(0)
|
|
|
|
|
|
+ setCurrentVolume(0)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -398,10 +406,10 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
}
|
|
}
|
|
|
|
|
|
const renderVolumeButton = () => {
|
|
const renderVolumeButton = () => {
|
|
- if (volume === 0) {
|
|
|
|
|
|
+ if (currentVolume === 0) {
|
|
return <StyledSvgPlayerSoundOff />
|
|
return <StyledSvgPlayerSoundOff />
|
|
} else {
|
|
} else {
|
|
- return volume <= 0.5 ? <SvgPlayerSoundHalf /> : <SvgPlayerSoundOn />
|
|
|
|
|
|
+ return currentVolume <= 0.5 ? <SvgPlayerSoundHalf /> : <SvgPlayerSoundOn />
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -411,7 +419,7 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
<Container isFullScreen={isFullScreen} className={className} isInBackground={isInBackground}>
|
|
<Container isFullScreen={isFullScreen} className={className} isInBackground={isInBackground}>
|
|
<div data-vjs-player>
|
|
<div data-vjs-player>
|
|
{showBigPlayButton && (
|
|
{showBigPlayButton && (
|
|
- <BigPlayButtonOverlay>
|
|
|
|
|
|
+ <BigPlayButtonOverlay onClick={handlePlayPause}>
|
|
<BigPlayButton onClick={handlePlayPause}>
|
|
<BigPlayButton onClick={handlePlayPause}>
|
|
<SvgPlayerPlay />
|
|
<SvgPlayerPlay />
|
|
</BigPlayButton>
|
|
</BigPlayButton>
|
|
@@ -447,7 +455,7 @@ const VideoPlayerComponent: React.ForwardRefRenderFunction<HTMLVideoElement, Vid
|
|
step={0.01}
|
|
step={0.01}
|
|
max={1}
|
|
max={1}
|
|
min={0}
|
|
min={0}
|
|
- value={volume}
|
|
|
|
|
|
+ value={currentVolume}
|
|
onChange={handleChangeVolume}
|
|
onChange={handleChangeVolume}
|
|
type="range"
|
|
type="range"
|
|
/>
|
|
/>
|