diff --git a/packages/html/html/src/components/media-play-button.ts b/packages/html/html/src/components/media-play-button.ts
index c619a1e8..e8789e5f 100644
--- a/packages/html/html/src/components/media-play-button.ts
+++ b/packages/html/html/src/components/media-play-button.ts
@@ -4,6 +4,7 @@ import {
PropsHook,
} from '../utils/component-factory';
import { MediaChromeButton } from './media-chrome-button';
+import { playButtonStateDefinition } from './state-definitions/play-button';
export class PlayButtonBase extends MediaChromeButton {
_state:
@@ -44,17 +45,10 @@ export class PlayButtonBase extends MediaChromeButton {
* Handles media store state subscription and transformation
*/
export const usePlayButtonState: StateHook<{ paused: boolean }> = {
- keys: ['paused'],
+ keys: playButtonStateDefinition.keys,
transform: (rawState, mediaStore) => ({
- paused: rawState.paused ?? true,
- requestPlay() {
- const type = 'playrequest';
- mediaStore.dispatch({ type });
- },
- requestPause() {
- const type = 'pauserequest';
- mediaStore.dispatch({ type });
- },
+ ...playButtonStateDefinition.stateTransform(rawState),
+ ...playButtonStateDefinition.createRequestMethods(mediaStore.dispatch),
}),
};
diff --git a/packages/react/react/src/components/PlayButton.tsx b/packages/react/react/src/components/PlayButton.tsx
index e29155b5..6db29649 100644
--- a/packages/react/react/src/components/PlayButton.tsx
+++ b/packages/react/react/src/components/PlayButton.tsx
@@ -1,52 +1,25 @@
import {
shallowEqual,
- // useMediaDispatch,
useMediaSelector,
useMediaStore,
} from '@vjs-10/react-media-store';
import * as React from 'react';
import { toConnectedComponent } from '../utils/component-factory';
-
-/**
- * PlayButton state hook - equivalent to React's usePlayButtonState
- * Handles media store state subscription and transformation
- */
-export const playButtonStateDef = {
- keys: ['paused'],
- stateTransform: (rawState: any) => ({
- paused: rawState.paused ?? true,
- }),
- /** @TODO Consider "promoting" this up to state-mediator defs + media store (CJP) */
- requestMethods: (mediaStore: ReturnType) => {
- return {
- requestPlay() {
- const type = 'playrequest';
- mediaStore.dispatch({ type });
- },
- requestPause() {
- const type = 'pauserequest';
- mediaStore.dispatch({ type });
- },
- };
- },
-} as const;
+import { playButtonStateDefinition } from './state-definitions/play-button';
export const usePlayButtonState = (_props: any) => {
const mediaStore = useMediaStore();
/** @TODO Fix type issues with hooks (CJP) */
const mediaState = useMediaSelector(
- playButtonStateDef.stateTransform,
+ playButtonStateDefinition.stateTransform,
shallowEqual,
);
- const [methods, setMethods] = React.useState(
- playButtonStateDef.requestMethods(mediaStore),
+ const methods = React.useMemo(
+ () => playButtonStateDefinition.createRequestMethods(mediaStore.dispatch),
+ [mediaStore],
);
- React.useEffect(() => {
- setMethods(playButtonStateDef.requestMethods(mediaStore));
- }, [mediaStore]);
-
return {
paused: mediaState.paused,
requestPlay: methods.requestPlay,