diff --git a/app/components/ReleasePlayer/MediaPlayer.module.css b/app/components/ReleasePlayer/MediaPlayer.module.css index 8b42dc2..6049bbe 100644 --- a/app/components/ReleasePlayer/MediaPlayer.module.css +++ b/app/components/ReleasePlayer/MediaPlayer.module.css @@ -487,7 +487,7 @@ position: absolute; top: -100%; - left: calc(2 * var(--base)); + left: calc(4 * var(--base)); width: calc(10 * var(--base)); height: calc(2.5 * var(--base)); diff --git a/app/components/ReleasePlayer/ReleasePlayerCustom.tsx b/app/components/ReleasePlayer/ReleasePlayerCustom.tsx index 069192b..45fa590 100644 --- a/app/components/ReleasePlayer/ReleasePlayerCustom.tsx +++ b/app/components/ReleasePlayer/ReleasePlayerCustom.tsx @@ -20,6 +20,7 @@ import { MediaChromeDialog, MediaLoadingIndicator, MediaSeekBackwardButton, + MediaChromeButton, } from "media-chrome/react"; import { MediaPlaybackRateMenu, @@ -168,6 +169,42 @@ export const ReleasePlayerCustom = (props: { } } + function _prevEpisode() { + if (!episode.available || !episode.selected) return; + + const curEpIdx = episode.available.findIndex( + (el) => el.position == episode.selected.position + ); + + if (curEpIdx == -1 || curEpIdx == 0 || episode.available.length == 0) + return; + + setEpisode({ + selected: episode.available[curEpIdx - 1], + available: episode.available, + }); + } + + function _nextEpisode() { + if (!episode.available || !episode.selected) return; + + const curEpIdx = episode.available.findIndex( + (el) => el.position == episode.selected.position + ); + + if ( + curEpIdx == -1 || + episode.available.length == 0 || + curEpIdx == episode.available.length - 1 + ) + return; + + setEpisode({ + selected: episode.available[curEpIdx + 1], + available: episode.available, + }); + } + return ( <Card className=""> <div className="flex items-center justify-center w-full h-full"> @@ -356,6 +393,15 @@ export const ReleasePlayerCustom = (props: { </div> </MediaChromeDialog> <MediaControlBar className={`${Styles["media-control-bar"]}`}> + <MediaChromeButton + className={`${Styles["media-button"]} w-[calc(2*var(--base))] z-[2]`} + onClick={() => _prevEpisode()} + > + <div slot="tooltip-content">Предыдущая серия</div> + <span + className={`${Styles["svg"]} iconify solar--skip-previous-outline w-[calc(0.9*var(--base))] h-[calc(0.9*var(--base))]`} + ></span> + </MediaChromeButton> <MediaPlayButton mediaPaused={true} className={`${Styles["media-button"]} ${Styles["media-play-button"]}`} @@ -400,6 +446,15 @@ export const ReleasePlayerCustom = (props: { </g> </svg> </MediaPlayButton> + <MediaChromeButton + className={`${Styles["media-button"]} w-[calc(2*var(--base))] z-[2]`} + onClick={() => _nextEpisode()} + > + <div slot="tooltip-content">Следующая серия</div> + <span + className={`${Styles["svg"]} iconify solar--skip-next-outline w-[calc(0.9*var(--base))] h-[calc(0.9*var(--base))]`} + ></span> + </MediaChromeButton> <MediaMuteButton className={`${Styles["media-button"]} ${Styles["media-mute-button"]}`} noTooltip={true}