import mitt from 'mitt'; import { CORE_PLAYER_INITIAL_STATE } from '../components/core-player/types'; import { MediaStore } from '../store/media-store'; import { MediaStateExternalInitializers, MediaStateSetters } from '../types'; import { MediaEvents } from '../types/emitters'; import { MediaState } from '../types/media-state'; export const NO_OP = () => []; /** Indicator that split volumes into a high or down meaning */ export const MIN_VOLUME = 50; /** Playback Rates for media */ export const PLAYBACK_RATES = [1, 1.2, 1.5, 1.7, 2]; /** Period of time(in ms), after which controls are hidden */ export const OVERLAY_HIDE_DELAY = 3000; export const PROGRESS_BAR_DIVIDER = 100; export const DEFAULT_EVENT_ANIMATION_DURATION = 300; export const DEFAULT_PIP_SIZE: Record<'width' | 'height', number> = { width: 320, height: 180, }; /** By default volume is a number from [0,1] interval. Multiplier is used to get more simple values */ export const VOLUME_MULTIPLIER = 100; /** The time between onProgress callbacks, in milliseconds */ export const PROGRESS_INTERVAL = 50; /** Seconds that should be skipped when using Forward/Rewind buttons */ export const SECONDS_TO_SKIP = 10; // Constants for testing /** Constant data-testid for `` */ export const CENTERED_PLAY_BUTTON = 'CENTERED_PLAY_BUTTON'; /** Constant data-testid for `ReactPlayer` */ export const REACT_PLAYER = 'REACT_PLAYER'; /** Constant data-testid for */ export const PLAY_ANIMATION = 'PLAY_ANIMATION'; /** Constant data-testid for */ export const PAUSE_ANIMATION = 'PAUSE_ANIMATION'; /** Constant data-testid for */ export const PLAY_PAUSE_REPLAY = 'PLAY_PAUSE_REPLAY'; /** Constant data-testid for Icon */ export const REPLAY_ICON = 'REPLAY_ICON'; /** Constant data-testid for Icon */ export const PAUSE_ICON = 'PAUSE_ICON'; /** Constant data-testid for Icon */ export const PLAY_ICON = 'PLAY_ICON'; /** Constant data-testid for */ export const CONTROLS = 'CONTROLS'; /** Constant data-testid for */ export const BOTTOM_CONTROL_BUTTONS = 'BOTTOM_CONTROL_BUTTONS'; /** Constant data-testid for */ export const MEDIA_CONTAINER = 'MEDIA_CONTAINER'; /** Constant data-testid for */ export const PIP_BUTTON = 'PIP_BUTTON'; /** Constant data-testid for */ export const PROGRESS_BAR = 'PROGRESS_BAR'; /** Constant data-testid for */ export const DRAGGABLE_POPOVER = 'DRAGGABLE_POPOVER'; /** Constant data-testid for */ export const FULLSCREEN_BUTTON = 'FULLSCREEN_BUTTON'; export const DEFAULT_MEDIA_STATE: MediaState = { currentTime: 0, playbackRate: 1, startTime: 0, endTime: 0, duration: 0, volume: 1, emitter: mitt(), ready: false, isPlaying: false, isMuted: false, hasPlayedOrSeeked: false, isPip: false, hasPipTriggeredByClick: true, showControls: true, showPipControls: false, isFullscreen: false, currentTimeAlarm: 0, nextTimeAlarm: 0, }; export const DEFAULT_MEDIA_STATE_SETTERS: MediaStateSetters = { play: NO_OP, pause: NO_OP, mute: NO_OP, unmute: NO_OP, setPlaybackRate: NO_OP, setVolume: NO_OP, setCurrentTime: NO_OP, setHasPipTriggeredByClick: NO_OP, setStartTime: NO_OP, setEndTime: NO_OP, setDuration: NO_OP, requestPip: NO_OP, exitPip: NO_OP, requestFullscreen: NO_OP, exitFullscreen: NO_OP, setShowControls: NO_OP, setShowPipControls: NO_OP, _setReady: NO_OP, _handleProgress: NO_OP, getListener: () => ({ addEventListener: NO_OP, removeEventListener: NO_OP }), setMediaType: NO_OP, setIsAudio: NO_OP, replaceAlarms: NO_OP, setIsPipEnabled: NO_OP, setIsFullscreen: NO_OP, }; export const DEFAULT_EXTERNAL_STATE_SETTERS: MediaStateExternalInitializers = { reactPlayerRef: { current: null }, playPromiseRef: { current: undefined }, mediaContainerRef: { current: null }, getHighlightColorBlended: undefined, onStoreUpdate: NO_OP, alarms: [], markActivity: NO_OP, /** Store last mouse activity */ lastActivityRef: { current: 0 }, /** Marks mouse activity for the PIP player */ markPipActivity: NO_OP, /** Store last mouse activity of the PIP player */ lastPipActivityRef: { current: 0 }, mediaType: 'video', isAudio: false, isPipEnabled: true, }; export const DEFAULT_MEDIA_STORE_CONTEXT: MediaStore = { ...DEFAULT_MEDIA_STATE, ...DEFAULT_MEDIA_STATE_SETTERS, ...DEFAULT_EXTERNAL_STATE_SETTERS, initialState: CORE_PLAYER_INITIAL_STATE, };