mirror of
https://github.com/jeffvli/feishin.git
synced 2026-06-16 16:34:24 +02:00
59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import clsx from 'clsx';
|
|
import { lazy, MouseEvent, Suspense } from 'react';
|
|
|
|
import styles from './playerbar.module.css';
|
|
|
|
import { CenterControls } from '/@/renderer/features/player/components/center-controls';
|
|
import { LeftControls } from '/@/renderer/features/player/components/left-controls';
|
|
import { RightControls } from '/@/renderer/features/player/components/right-controls';
|
|
import { useIsMobile } from '/@/renderer/hooks/use-is-mobile';
|
|
import { Spinner } from '/@/shared/components/spinner/spinner';
|
|
|
|
const MobilePlayerbar = lazy(() =>
|
|
import('./mobile-playerbar').then((module) => ({
|
|
default: module.MobilePlayerbar,
|
|
})),
|
|
);
|
|
import { useFullScreenPlayerStore, useSetFullScreenPlayerStore } from '/@/renderer/store';
|
|
import { usePlayerbarOpenDrawer } from '/@/renderer/store';
|
|
import { PlaybackSelectors } from '/@/shared/constants/playback-selectors';
|
|
|
|
export const Playerbar = () => {
|
|
const playerbarOpenDrawer = usePlayerbarOpenDrawer();
|
|
const { expanded: isFullScreenPlayerExpanded } = useFullScreenPlayerStore();
|
|
const setFullScreenPlayerStore = useSetFullScreenPlayerStore();
|
|
const isMobile = useIsMobile();
|
|
|
|
const handleToggleFullScreenPlayer = (e?: KeyboardEvent | MouseEvent<HTMLDivElement>) => {
|
|
e?.stopPropagation();
|
|
setFullScreenPlayerStore({ expanded: !isFullScreenPlayerExpanded });
|
|
};
|
|
|
|
if (isMobile) {
|
|
return (
|
|
<Suspense fallback={<Spinner />}>
|
|
<MobilePlayerbar />
|
|
</Suspense>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={clsx(styles.container, PlaybackSelectors.mediaPlayer)}
|
|
onClick={playerbarOpenDrawer ? handleToggleFullScreenPlayer : undefined}
|
|
>
|
|
<div className={styles.controlsGrid}>
|
|
<div className={styles.leftGridItem}>
|
|
<LeftControls />
|
|
</div>
|
|
<div className={styles.centerGridItem}>
|
|
<CenterControls />
|
|
</div>
|
|
<div className={styles.rightGridItem}>
|
|
<RightControls />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|