mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
fix(media-store): resolve TypeScript error in dispatch method
- Add proper type predicate to filter for FacadeProp objects - Use type assertion for setter calls to handle generic state objects - Improve type safety by replacing 'any' types with proper interfaces - Fix TS2345 error: "Argument of type 'number | boolean' is not assignable to parameter of type 'never'" - Maintain runtime flexibility while preserving compile-time type checking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
committed by
Christian Pillsbury
co-authored by
Claude
parent
4662dbcbb1
commit
3fd26eb654
@@ -31,7 +31,9 @@ export type FacadeProp<T, S = T, D = T> = ReadonlyFacadeProp<T, D> & {
|
|||||||
set: FacadeSetter<S>;
|
set: FacadeSetter<S>;
|
||||||
/** @TODO We probably need to refactor this for more complex cases where we can't simply translate to a setter */
|
/** @TODO We probably need to refactor this for more complex cases where we can't simply translate to a setter */
|
||||||
actions: {
|
actions: {
|
||||||
[k: string]: (val: CustomEvent<any>) => ReturnType<FacadeGetter<T, D>>;
|
[k: string]: (
|
||||||
|
val: Pick<CustomEvent<any>, 'type' | 'detail'>,
|
||||||
|
) => ReturnType<FacadeGetter<T, D>>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -49,7 +51,7 @@ export function createMediaStore({
|
|||||||
media?: any;
|
media?: any;
|
||||||
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'mediaPaused'>;
|
stateMediator: Partial<StateMediator> & Pick<StateMediator, 'mediaPaused'>;
|
||||||
}) {
|
}) {
|
||||||
const stateOwners: any = {};
|
const stateOwners: StateOwners = {};
|
||||||
const store = map<any>({});
|
const store = map<any>({});
|
||||||
const stateUpdateHandlers: Record<string, () => void> = {};
|
const stateUpdateHandlers: Record<string, () => void> = {};
|
||||||
const keys = Object.keys(stateMediator);
|
const keys = Object.keys(stateMediator);
|
||||||
@@ -90,18 +92,23 @@ export function createMediaStore({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dispatch(action: any) {
|
dispatch(action: Pick<CustomEvent<any>, 'type' | 'detail'>) {
|
||||||
const { type, detail } = action;
|
const { type, detail } = action;
|
||||||
|
|
||||||
if (type === 'mediaelementchangerequest') {
|
if (type === 'mediaelementchangerequest') {
|
||||||
updateStateOwners({ media: detail });
|
updateStateOwners({ media: detail });
|
||||||
} else {
|
} else {
|
||||||
for (const stateObject of Object.values(stateMediator).filter(
|
for (const stateObject of Object.values(stateMediator).filter(
|
||||||
(stateMediator) => 'set' in stateMediator,
|
(
|
||||||
|
stateMediatorEntry,
|
||||||
|
): stateMediatorEntry is FacadeProp<any, any, any> =>
|
||||||
|
'set' in stateMediatorEntry,
|
||||||
)) {
|
)) {
|
||||||
const { set, actions } = stateObject;
|
const { set, actions } = stateObject;
|
||||||
if (type in actions) {
|
if (actions[type]) {
|
||||||
set(actions[type as keyof typeof actions](), stateOwners);
|
const actionFn = actions[type];
|
||||||
|
const actionValue = actionFn(action);
|
||||||
|
(set as FacadeSetter<any>)(actionValue, stateOwners);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user