diff --git a/packages/core/media-store/src/component-state-definitions/fullscreen-button.ts b/packages/core/media-store/src/component-state-definitions/fullscreen-button.ts new file mode 100644 index 00000000..1929a917 --- /dev/null +++ b/packages/core/media-store/src/component-state-definitions/fullscreen-button.ts @@ -0,0 +1,36 @@ +export interface FullscreenButtonState { + fullscreen: boolean; +} + +export interface FullscreenButtonMethods { + requestEnterFullscreen: () => void; + requestExitFullscreen: () => void; +} + +export interface FullscreenButtonStateDefinition { + keys: string[]; + stateTransform: (rawState: any) => FullscreenButtonState; + createRequestMethods: ( + dispatch: (action: { type: string; detail?: any }) => void, + ) => FullscreenButtonMethods; +} + +/** + * FullscreenButton state definition + * Defines the core state logic that can be shared between implementations + */ +export const fullscreenButtonStateDefinition: FullscreenButtonStateDefinition = + { + keys: ['fullscreen'], + + stateTransform: (rawState: any): FullscreenButtonState => ({ + fullscreen: rawState.fullscreen ?? false, + }), + + createRequestMethods: (dispatch): FullscreenButtonMethods => ({ + requestEnterFullscreen: () => + dispatch({ type: 'fullscreenrequest', detail: true }), + requestExitFullscreen: () => + dispatch({ type: 'fullscreenrequest', detail: false }), + }), + }; diff --git a/packages/core/media-store/src/index.ts b/packages/core/media-store/src/index.ts index e286b794..474f72ea 100644 --- a/packages/core/media-store/src/index.ts +++ b/packages/core/media-store/src/index.ts @@ -6,4 +6,5 @@ export * from './state-mediators/temporal'; export * from './component-state-definitions/play-button'; export * from './component-state-definitions/mute-button'; export * from './component-state-definitions/volume-range'; -export * from './component-state-definitions/time-range'; \ No newline at end of file +export * from './component-state-definitions/time-range'; +export * from './component-state-definitions/fullscreen-button'; \ No newline at end of file