refactor: standardize state property names across core, HTML, and React packages

Remove 'media' prefix from state mediator properties (mediaPaused -> paused, mediaMuted -> muted, etc.) and action types (mediaplayrequest -> playrequest) for cleaner, more consistent API across all platform implementations.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Christian Pillsbury
2025-09-08 17:15:40 -07:00
committed by Christian Pillsbury
co-authored by Claude
parent 74dea64ddd
commit ad7aa79b61
7 changed files with 31 additions and 31 deletions
+6 -6
View File
@@ -38,10 +38,10 @@ export type FacadeProp<T, S = T, D = T> = ReadonlyFacadeProp<T, D> & {
};
export type StateMediator = {
mediaPaused: FacadeProp<HTMLMediaElement['paused']>;
mediaMuted: FacadeProp<HTMLMediaElement['muted']>;
mediaVolume: FacadeProp<HTMLMediaElement['volume']>;
mediaVolumeLevel: ReadonlyFacadeProp<'high' | 'medium' | 'low' | 'off'>;
paused: FacadeProp<HTMLMediaElement['paused']>;
muted: FacadeProp<HTMLMediaElement['muted']>;
volume: FacadeProp<HTMLMediaElement['volume']>;
volumeLevel: ReadonlyFacadeProp<'high' | 'medium' | 'low' | 'off'>;
};
export function createMediaStore({
@@ -49,7 +49,7 @@ export function createMediaStore({
stateMediator,
}: {
media?: any;
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'mediaPaused'>;
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'paused'>;
}) {
const stateOwners: StateOwners = {};
const store = map<any>({});
@@ -137,7 +137,7 @@ export function createMediaStore({
}
function getInitialState(
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'mediaPaused'>,
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'paused'>,
stateOwners: any,
) {
let initialState: any = {};
@@ -1,5 +1,5 @@
export const audible = {
mediaMuted: {
muted: {
get(stateOwners: any) {
const { media } = stateOwners;
return media?.muted ?? false;
@@ -12,11 +12,11 @@ export const audible = {
mediaEvents: ['volumechange'],
actions: {
/** @TODO Refactor me to play more nicely with side effects that don't/can't correlate with set() API or aren't simple 1:1 with getter vs. setter (CJP) */
mediamuterequest: () => true,
mediaunmuterequest: () => false,
muterequest: () => true,
unmuterequest: () => false,
},
},
mediaVolume: {
volume: {
get(stateOwners: any) {
const { media } = stateOwners;
return media?.volume ?? 1.0;
@@ -30,13 +30,13 @@ export const audible = {
mediaEvents: ['volumechange'],
actions: {
/** @TODO Refactor me to play more nicely with side effects that don't/can't correlate with set() API (CJP) */
mediavolumerequest: (
volumerequest: (
{ detail }: Pick<CustomEvent<any>, 'detail'> = { detail: 0 },
) => +detail,
},
},
// NOTE: This could be (re)implemented as "derived state" in some manner (e.g. selectors but also other patterns/conventions) if preferred. (CJP)
mediaVolumeLevel: {
volumeLevel: {
get(stateOwners: any) {
const { media } = stateOwners;
if (typeof media?.volume == 'undefined') return 'high';
@@ -1,5 +1,5 @@
export const playable = {
mediaPaused: {
paused: {
get(stateOwners: any) {
const { media } = stateOwners;
return media?.paused ?? true;
@@ -11,8 +11,8 @@ export const playable = {
mediaEvents: ['play', 'playing', 'pause', 'emptied'],
actions: {
/** @TODO Refactor me to play more nicely with side effects that don't/can't correlate with set() API (CJP) */
mediaplayrequest: () => false,
mediapauserequest: () => true,
playrequest: () => false,
pauserequest: () => true,
},
},
};
@@ -56,16 +56,16 @@ export const useMuteButtonState: StateHook<{
muted: boolean;
volumeLevel: string;
}> = {
keys: ['mediaMuted', 'mediaVolumeLevel'],
keys: ['muted', 'volumeLevel'],
transform: (rawState, mediaStore) => ({
muted: rawState.mediaMuted ?? false,
volumeLevel: rawState.mediaVolumeLevel ?? 'off',
muted: rawState.muted ?? false,
volumeLevel: rawState.volumeLevel ?? 'off',
requestMute() {
const type = 'mediamuterequest';
const type = 'muterequest';
mediaStore.dispatch({ type });
},
requestUnmute() {
const type = 'mediaunmuterequest';
const type = 'unmuterequest';
mediaStore.dispatch({ type });
},
}),
@@ -44,15 +44,15 @@ export class PlayButtonBase extends MediaChromeButton {
* Handles media store state subscription and transformation
*/
export const usePlayButtonState: StateHook<{ paused: boolean }> = {
keys: ['mediaPaused'],
keys: ['paused'],
transform: (rawState, mediaStore) => ({
paused: rawState.mediaPaused ?? true,
paused: rawState.paused ?? true,
requestPlay() {
const type = 'mediaplayrequest';
const type = 'playrequest';
mediaStore.dispatch({ type });
},
requestPause() {
const type = 'mediapauserequest';
const type = 'pauserequest';
mediaStore.dispatch({ type });
},
}),
@@ -5,16 +5,16 @@ import { toConnectedComponent } from '../utils/component-factory';
export const useMuteButtonState = (_props: any) => {
/** @TODO Fix type issues with hooks (CJP) */
const volumeLevel = useMediaSelector(
(state: any) => state.mediaVolumeLevel,
(state: any) => state.volumeLevel,
) as string;
const muted = useMediaSelector((state: any) => state.mediaMuted) as boolean;
const muted = useMediaSelector((state: any) => state.muted) as boolean;
const dispatch = useMediaDispatch();
const requestMute = React.useCallback(() => {
dispatch({ type: 'mediamuterequest' });
dispatch({ type: 'muterequest' });
}, [dispatch]);
const requestUnmute = React.useCallback(() => {
dispatch({ type: 'mediaunmuterequest' });
dispatch({ type: 'unmuterequest' });
}, [dispatch]);
return {
@@ -5,15 +5,15 @@ import { toConnectedComponent } from '../utils/component-factory';
export const usePlayButtonState = (_props: any) => {
/** @TODO Fix type issues with hooks (CJP) */
const paused = useMediaSelector(
(state: any) => typeof state.mediaPaused !== 'boolean' || state.mediaPaused,
(state: any) => typeof state.paused !== 'boolean' || state.paused,
) as boolean;
const dispatch = useMediaDispatch();
const requestPlay = React.useCallback(() => {
dispatch({ type: 'mediaplayrequest' });
dispatch({ type: 'playrequest' });
}, [dispatch]);
const requestPause = React.useCallback(() => {
dispatch({ type: 'mediapauserequest' });
dispatch({ type: 'pauserequest' });
}, [dispatch]);
return {