Files
mtdb_movie/common/resources/client/player/state/player-store-options.ts
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

40 lines
1.7 KiB
TypeScript
Executable File

import {MediaItem, YoutubeMediaItem} from '@common/player/media-item';
import {PlayerInitialData} from '@common/player/utils/player-local-storage';
import type {PlayerState} from '@common/player/state/player-state';
import {YouTubePlayerState} from '@common/player/providers/youtube/youtube-types';
import {PlayerEvents} from '@common/player/state/player-events';
// all listeners specified by user will get full player state passed
// along with original event payload, so it needs a separate type
type ListenersWithState = {
[K in keyof PlayerEvents]: PlayerEvents[K] extends void | undefined | never
? (payload: {state: PlayerState}) => void
: (payload: PlayerEvents[K] & {state: PlayerState}) => void;
};
// makes it easier to access sourceEvent for user without having to use "in" operator to narrow types
type Listeners = Omit<ListenersWithState, 'error'> & {
error: (payload: {state: PlayerState; sourceEvent?: any}) => void;
};
export interface PlayerStoreOptions {
persistQueueInLocalStorage?: boolean;
autoPlay?: boolean;
initialData?: PlayerInitialData;
listeners?: Partial<Listeners>;
defaultVolume?: number;
pauseWhileSeeking?: boolean;
onBeforePlayNext?: (media?: MediaItem) => boolean | undefined;
onBeforePlayPrevious?: (media?: MediaItem) => boolean | undefined;
onDestroy?: () => void;
setMediaSessionMetadata?: (mediaItem: MediaItem) => void;
onBeforePlay?: () => Promise<void> | undefined;
loadMoreMediaItems?: (
mediaItem?: MediaItem
) => Promise<MediaItem[] | undefined>;
youtube?: {
srcResolver?: (mediaItem: YoutubeMediaItem) => Promise<YoutubeMediaItem>;
onStateChange?: (state: YouTubePlayerState) => void;
useCookies?: boolean;
};
}