added typedef for subobject types
extracted popup functions # Conflicts: # front/package-lock.json # front/package.json # front/src/iframe_api.ts
This commit is contained in:
parent
1a1ab30574
commit
2de2d114a1
6 changed files with 304 additions and 139 deletions
48
front/src/Api/iframe/IframeApiContribution.ts
Normal file
48
front/src/Api/iframe/IframeApiContribution.ts
Normal file
|
@ -0,0 +1,48 @@
|
|||
import type { IframeEvent, IframeEventMap, IframeResponseEventMap } from '../Events/IframeEvent';
|
||||
import type * as tg from "generic-type-guard";
|
||||
|
||||
|
||||
export type PossibleSubobjects = "zone" | "chat" | "ui"
|
||||
|
||||
export function sendToWorkadventure(content: IframeEvent<keyof IframeEventMap>) {
|
||||
window.parent.postMessage(content, "*")
|
||||
}
|
||||
type GuardedType<Guard extends tg.TypeGuard<unknown>> = Guard extends tg.TypeGuard<infer T> ? T : never
|
||||
|
||||
export function apiCallback<T extends tg.TypeGuard<unknown>>(callbackData: IframeCallbackContribution<T>) {
|
||||
|
||||
return callbackData
|
||||
}
|
||||
|
||||
export interface IframeCallbackContribution<Guard extends tg.TypeGuard<unknown>, T = GuardedType<Guard>> {
|
||||
|
||||
type: keyof IframeResponseEventMap,
|
||||
typeChecker: Guard,
|
||||
callback: (payloadData: T) => void
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* !! be aware that the implemented attributes (addMethodsAtRoot and subObjectIdentifier) must be readonly
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
export abstract class IframeApiContribution<T extends {
|
||||
// i think this is specific enough
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
callbacks: Array<IframeCallbackContribution<tg.TypeGuard<any>>>,
|
||||
readonly subObjectIdentifier: PossibleSubobjects,
|
||||
readonly addMethodsAtRoot: boolean | undefined
|
||||
}> {
|
||||
|
||||
abstract callbacks: T["callbacks"]
|
||||
|
||||
/**
|
||||
* @deprecated this is only there for backwards compatibility on new apis this should be set to false or ignored
|
||||
*/
|
||||
addMethodsAtRoot = false
|
||||
|
||||
abstract readonly subObjectIdentifier: T["subObjectIdentifier"]
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue