eslint restart

This commit is contained in:
jonny 2021-07-02 19:03:34 +02:00
parent 369d453455
commit 310e131a6e
9 changed files with 341 additions and 348 deletions

View file

@ -1,29 +1,29 @@
import type { GameStateEvent } from "./GameStateEvent";
import type { ButtonClickedEvent } from "./ButtonClickedEvent";
import type { ChatEvent } from "./ChatEvent";
import type { ClosePopupEvent } from "./ClosePopupEvent";
import type { EnterLeaveEvent } from "./EnterLeaveEvent";
import type { GoToPageEvent } from "./GoToPageEvent";
import type { LoadPageEvent } from "./LoadPageEvent";
import type { OpenCoWebSiteEvent } from "./OpenCoWebSiteEvent";
import type { OpenPopupEvent } from "./OpenPopupEvent";
import type { OpenTabEvent } from "./OpenTabEvent";
import type { UserInputChatEvent } from "./UserInputChatEvent";
import type { DataLayerEvent } from "./DataLayerEvent";
import type { LayerEvent } from "./LayerEvent";
import type { SetPropertyEvent } from "./setPropertyEvent";
import type { LoadSoundEvent } from "./LoadSoundEvent";
import type { PlaySoundEvent } from "./PlaySoundEvent";
import type { MenuItemClickedEvent } from "./ui/MenuItemClickedEvent";
import type { MenuItemRegisterEvent } from "./ui/MenuItemRegisterEvent";
import type { HasPlayerMovedEvent } from "./HasPlayerMovedEvent";
import type { SetTilesEvent } from "./SetTilesEvent";
import type { GameStateEvent } from './GameStateEvent';
import type { ButtonClickedEvent } from './ButtonClickedEvent';
import type { ChatEvent } from './ChatEvent';
import type { ClosePopupEvent } from './ClosePopupEvent';
import type { EnterLeaveEvent } from './EnterLeaveEvent';
import type { GoToPageEvent } from './GoToPageEvent';
import type { LoadPageEvent } from './LoadPageEvent';
import type { OpenCoWebSiteEvent } from './OpenCoWebSiteEvent';
import type { OpenPopupEvent } from './OpenPopupEvent';
import type { OpenTabEvent } from './OpenTabEvent';
import type { UserInputChatEvent } from './UserInputChatEvent';
import type { DataLayerEvent } from './DataLayerEvent';
import type { LayerEvent } from './LayerEvent';
import type { SetPropertyEvent } from './setPropertyEvent';
import type { LoadSoundEvent } from './LoadSoundEvent';
import type { PlaySoundEvent } from './PlaySoundEvent';
import type { MenuItemClickedEvent } from './ui/MenuItemClickedEvent';
import type { MenuItemRegisterEvent } from './ui/MenuItemRegisterEvent';
import type { HasPlayerMovedEvent } from './HasPlayerMovedEvent';
import type { SetTilesEvent } from './SetTilesEvent';
import type {
MessageReferenceEvent,
removeTriggerMessage,
triggerMessage,
TriggerMessageEvent,
} from "./ui/TriggerMessageEvent";
} from './ui/TriggerMessageEvent';
export interface TypedMessageEvent<T> extends MessageEvent {
data: T;
@ -67,7 +67,7 @@ export interface IframeEvent<T extends keyof IframeEventMap> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIframeEventWrapper = (event: any): event is IframeEvent<keyof IframeEventMap> =>
typeof event.type === "string";
typeof event.type === 'string';
export interface IframeResponseEventMap {
userInputChat: UserInputChatEvent;
@ -87,7 +87,7 @@ export interface IframeResponseEvent<T extends keyof IframeResponseEventMap> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIframeResponseEventWrapper = (event: {
type?: string;
}): event is IframeResponseEvent<keyof IframeResponseEventMap> => typeof event.type === "string";
}): event is IframeResponseEvent<keyof IframeResponseEventMap> => typeof event.type === 'string';
/**
* List event types sent from an iFrame to WorkAdventure that expect a unique answer from WorkAdventure along the type for the answer from WorkAdventure to the iFrame
@ -111,7 +111,7 @@ export type IframeQueryMap = {
export interface IframeQuery<T extends keyof IframeQueryMap> {
type: T;
data: IframeQueryMap[T]["query"];
data: IframeQueryMap[T]['query'];
}
export interface IframeQueryWrapper<T extends keyof IframeQueryMap> {
@ -120,22 +120,22 @@ export interface IframeQueryWrapper<T extends keyof IframeQueryMap> {
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIframeQuery = (event: any): event is IframeQuery<keyof IframeQueryMap> => typeof event.type === "string";
export const isIframeQuery = (event: any): event is IframeQuery<keyof IframeQueryMap> => typeof event.type === 'string';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const isIframeQueryWrapper = (event: any): event is IframeQueryWrapper<keyof IframeQueryMap> =>
typeof event.id === "number" && isIframeQuery(event.query);
typeof event.id === 'number' && isIframeQuery(event.query);
export interface IframeAnswerEvent<T extends keyof IframeQueryMap> {
id: number;
type: T;
data: IframeQueryMap[T]["answer"];
data: IframeQueryMap[T]['answer'];
}
export const isIframeAnswerEvent = (event: {
type?: string;
id?: number;
}): event is IframeAnswerEvent<keyof IframeQueryMap> => typeof event.type === "string" && typeof event.id === "number";
}): event is IframeAnswerEvent<keyof IframeQueryMap> => typeof event.type === 'string' && typeof event.id === 'number';
export interface IframeErrorAnswerEvent {
id: number;
@ -148,4 +148,4 @@ export const isIframeErrorAnswerEvent = (event: {
id?: number;
error?: string;
}): event is IframeErrorAnswerEvent =>
typeof event.type === "string" && typeof event.id === "number" && typeof event.error === "string";
typeof event.type === 'string' && typeof event.id === 'number' && typeof event.error === 'string';

View file

@ -1,21 +1,21 @@
import * as tg from "generic-type-guard";
import * as tg from 'generic-type-guard';
export const triggerMessage = "triggerMessage"
export const removeTriggerMessage = "removeTriggerMessage"
export const isTriggerMessageEvent = new tg.IsInterface().withProperties({
message: tg.isString,
uuid: tg.isString
}).get()
export const triggerMessage = 'triggerMessage';
export const removeTriggerMessage = 'removeTriggerMessage';
export const isTriggerMessageEvent = new tg.IsInterface()
.withProperties({
message: tg.isString,
uuid: tg.isString,
})
.get();
export type TriggerMessageEvent = tg.GuardedType<typeof isTriggerMessageEvent>;
export const isMessageReferenceEvent =
new tg.IsInterface().withProperties({
uuid: tg.isString
}).get();
export const isMessageReferenceEvent = new tg.IsInterface()
.withProperties({
uuid: tg.isString,
})
.get();
export type MessageReferenceEvent = tg.GuardedType<typeof isMessageReferenceEvent>;

View file

@ -1,22 +1,11 @@
import { Subject } from "rxjs";
import { iframeListener } from "../../IframeListener";
import {
isMessageReferenceEvent,
isTriggerMessageEvent,
MessageReferenceEvent,
removeTriggerMessage,
triggerMessage,
TriggerMessageEvent,
} from "./TriggerMessageEvent";
import * as tg from "generic-type-guard";
export function sendMessageTriggeredEvent(uuid: string) {
iframeListener.postMessage({
type: "messageTriggered",
data: {
uuid,
} as MessageReferenceEvent,
});
}
} from './TriggerMessageEvent';
import * as tg from 'generic-type-guard';
const isTriggerMessageEventObject = new tg.IsInterface()
.withProperties({

View file

@ -1,15 +1,15 @@
import { Subject } from "rxjs";
import type * as tg from "generic-type-guard";
import { ChatEvent, isChatEvent } from "./Events/ChatEvent";
import { HtmlUtils } from "../WebRtc/HtmlUtils";
import type { EnterLeaveEvent } from "./Events/EnterLeaveEvent";
import { isOpenPopupEvent, OpenPopupEvent } from "./Events/OpenPopupEvent";
import { isOpenTabEvent, OpenTabEvent } from "./Events/OpenTabEvent";
import type { ButtonClickedEvent } from "./Events/ButtonClickedEvent";
import { ClosePopupEvent, isClosePopupEvent } from "./Events/ClosePopupEvent";
import { scriptUtils } from "./ScriptUtils";
import { GoToPageEvent, isGoToPageEvent } from "./Events/GoToPageEvent";
import { isOpenCoWebsite, OpenCoWebSiteEvent } from "./Events/OpenCoWebSiteEvent";
import { Subject } from 'rxjs';
import type * as tg from 'generic-type-guard';
import { ChatEvent, isChatEvent } from './Events/ChatEvent';
import { HtmlUtils } from '../WebRtc/HtmlUtils';
import type { EnterLeaveEvent } from './Events/EnterLeaveEvent';
import { isOpenPopupEvent, OpenPopupEvent } from './Events/OpenPopupEvent';
import { isOpenTabEvent, OpenTabEvent } from './Events/OpenTabEvent';
import type { ButtonClickedEvent } from './Events/ButtonClickedEvent';
import { ClosePopupEvent, isClosePopupEvent } from './Events/ClosePopupEvent';
import { scriptUtils } from './ScriptUtils';
import { GoToPageEvent, isGoToPageEvent } from './Events/GoToPageEvent';
import { isOpenCoWebsite, OpenCoWebSiteEvent } from './Events/OpenCoWebSiteEvent';
import {
IframeErrorAnswerEvent,
IframeEvent,
@ -21,24 +21,24 @@ import {
isIframeEventWrapper,
isIframeQueryWrapper,
TypedMessageEvent,
} from "./Events/IframeEvent";
import type { UserInputChatEvent } from "./Events/UserInputChatEvent";
import { isPlaySoundEvent, PlaySoundEvent } from "./Events/PlaySoundEvent";
import { isStopSoundEvent, StopSoundEvent } from "./Events/StopSoundEvent";
import { isLoadSoundEvent, LoadSoundEvent } from "./Events/LoadSoundEvent";
import { isSetPropertyEvent, SetPropertyEvent } from "./Events/setPropertyEvent";
import { isLayerEvent, LayerEvent } from "./Events/LayerEvent";
import { isMenuItemRegisterEvent } from "./Events/ui/MenuItemRegisterEvent";
import type { DataLayerEvent } from "./Events/DataLayerEvent";
import type { GameStateEvent } from "./Events/GameStateEvent";
import type { HasPlayerMovedEvent } from "./Events/HasPlayerMovedEvent";
import { isLoadPageEvent } from "./Events/LoadPageEvent";
import { handleMenuItemRegistrationEvent, isMenuItemRegisterIframeEvent } from "./Events/ui/MenuItemRegisterEvent";
import { SetTilesEvent, isSetTilesEvent } from "./Events/SetTilesEvent";
} from './Events/IframeEvent';
import type { UserInputChatEvent } from './Events/UserInputChatEvent';
import { isPlaySoundEvent, PlaySoundEvent } from './Events/PlaySoundEvent';
import { isStopSoundEvent, StopSoundEvent } from './Events/StopSoundEvent';
import { isLoadSoundEvent, LoadSoundEvent } from './Events/LoadSoundEvent';
import { isSetPropertyEvent, SetPropertyEvent } from './Events/setPropertyEvent';
import { isLayerEvent, LayerEvent } from './Events/LayerEvent';
import { isMenuItemRegisterEvent } from './Events/ui/MenuItemRegisterEvent';
import type { DataLayerEvent } from './Events/DataLayerEvent';
import type { GameStateEvent } from './Events/GameStateEvent';
import type { HasPlayerMovedEvent } from './Events/HasPlayerMovedEvent';
import { isLoadPageEvent } from './Events/LoadPageEvent';
import { handleMenuItemRegistrationEvent, isMenuItemRegisterIframeEvent } from './Events/ui/MenuItemRegisterEvent';
import { SetTilesEvent, isSetTilesEvent } from './Events/SetTilesEvent';
type AnswererCallback<T extends keyof IframeQueryMap> = (
query: IframeQueryMap[T]["query"]
) => IframeQueryMap[T]["answer"] | Promise<IframeQueryMap[T]["answer"]>;
query: IframeQueryMap[T]['query']
) => IframeQueryMap[T]['answer'] | Promise<IframeQueryMap[T]['answer']>;
/**
* Listens to messages from iframes and turn those messages into easy to use observables.
@ -122,7 +122,7 @@ class IframeListener {
init() {
window.addEventListener(
"message",
'message',
<T extends keyof IframeEventMap, U extends keyof IframeQueryMap>(
message: TypedMessageEvent<IframeEvent<T | U>>
) => {
@ -144,10 +144,10 @@ class IframeListener {
if (foundSrc === undefined || iframe === undefined) {
if (isIframeEventWrapper(payload)) {
console.warn(
"It seems an iFrame is trying to communicate with WorkAdventure but was not explicitly granted the permission to do so. " +
"If you are looking to use the WorkAdventure Scripting API inside an iFrame, you should allow the " +
'It seems an iFrame is trying to communicate with WorkAdventure but was not explicitly granted the permission to do so. ' +
'If you are looking to use the WorkAdventure Scripting API inside an iFrame, you should allow the ' +
'iFrame to communicate with WorkAdventure by using the "openWebsiteAllowApi" property in your map (or passing "true" as a second' +
"parameter to WA.nav.openCoWebSite())"
'parameter to WA.nav.openCoWebSite())'
);
}
return;
@ -172,7 +172,7 @@ class IframeListener {
type: query.type,
error: errorMsg,
} as IframeErrorAnswerEvent,
"*"
'*'
);
return;
}
@ -185,11 +185,11 @@ class IframeListener {
type: query.type,
data: value,
},
"*"
'*'
);
})
.catch((reason) => {
console.error("An error occurred while responding to an iFrame query.", reason);
console.error('An error occurred while responding to an iFrame query.', reason);
let reasonMsg: string;
if (reason instanceof Error) {
reasonMsg = reason.message;
@ -203,54 +203,54 @@ class IframeListener {
type: query.type,
error: reasonMsg,
} as IframeErrorAnswerEvent,
"*"
'*'
);
});
} else if (isIframeEventWrapper(payload)) {
if (payload.type === "showLayer" && isLayerEvent(payload.data)) {
if (payload.type === 'showLayer' && isLayerEvent(payload.data)) {
this._showLayerStream.next(payload.data);
} else if (payload.type === "hideLayer" && isLayerEvent(payload.data)) {
} else if (payload.type === 'hideLayer' && isLayerEvent(payload.data)) {
this._hideLayerStream.next(payload.data);
} else if (payload.type === "setProperty" && isSetPropertyEvent(payload.data)) {
} else if (payload.type === 'setProperty' && isSetPropertyEvent(payload.data)) {
this._setPropertyStream.next(payload.data);
} else if (payload.type === "chat" && isChatEvent(payload.data)) {
} else if (payload.type === 'chat' && isChatEvent(payload.data)) {
this._chatStream.next(payload.data);
} else if (payload.type === "openPopup" && isOpenPopupEvent(payload.data)) {
} else if (payload.type === 'openPopup' && isOpenPopupEvent(payload.data)) {
this._openPopupStream.next(payload.data);
} else if (payload.type === "closePopup" && isClosePopupEvent(payload.data)) {
} else if (payload.type === 'closePopup' && isClosePopupEvent(payload.data)) {
this._closePopupStream.next(payload.data);
} else if (payload.type === "openTab" && isOpenTabEvent(payload.data)) {
} else if (payload.type === 'openTab' && isOpenTabEvent(payload.data)) {
scriptUtils.openTab(payload.data.url);
} else if (payload.type === "goToPage" && isGoToPageEvent(payload.data)) {
} else if (payload.type === 'goToPage' && isGoToPageEvent(payload.data)) {
scriptUtils.goToPage(payload.data.url);
} else if (payload.type === "loadPage" && isLoadPageEvent(payload.data)) {
} else if (payload.type === 'loadPage' && isLoadPageEvent(payload.data)) {
this._loadPageStream.next(payload.data.url);
} else if (payload.type === "playSound" && isPlaySoundEvent(payload.data)) {
} else if (payload.type === 'playSound' && isPlaySoundEvent(payload.data)) {
this._playSoundStream.next(payload.data);
} else if (payload.type === "stopSound" && isStopSoundEvent(payload.data)) {
} else if (payload.type === 'stopSound' && isStopSoundEvent(payload.data)) {
this._stopSoundStream.next(payload.data);
} else if (payload.type === "loadSound" && isLoadSoundEvent(payload.data)) {
} else if (payload.type === 'loadSound' && isLoadSoundEvent(payload.data)) {
this._loadSoundStream.next(payload.data);
} else if (payload.type === "openCoWebSite" && isOpenCoWebsite(payload.data)) {
} else if (payload.type === 'openCoWebSite' && isOpenCoWebsite(payload.data)) {
scriptUtils.openCoWebsite(
payload.data.url,
foundSrc,
payload.data.allowApi,
payload.data.allowPolicy
);
} else if (payload.type === "closeCoWebSite") {
} else if (payload.type === 'closeCoWebSite') {
scriptUtils.closeCoWebSite();
} else if (payload.type === "disablePlayerControls") {
} else if (payload.type === 'disablePlayerControls') {
this._disablePlayerControlStream.next();
} else if (payload.type === "restorePlayerControls") {
} else if (payload.type === 'restorePlayerControls') {
this._enablePlayerControlStream.next();
} else if (payload.type === "displayBubble") {
} else if (payload.type === 'displayBubble') {
this._displayBubbleStream.next();
} else if (payload.type === "removeBubble") {
} else if (payload.type === 'removeBubble') {
this._removeBubbleStream.next();
} else if (payload.type == "onPlayerMove") {
} else if (payload.type == 'onPlayerMove') {
this.sendPlayerMove = true;
} else if (payload.type == "getDataLayer") {
} else if (payload.type == 'getDataLayer') {
this._dataLayerChangeStream.next();
} else if (isMenuItemRegisterIframeEvent(payload)) {
const data = payload.data.menutItem;
@ -259,7 +259,7 @@ class IframeListener {
this._unregisterMenuCommandStream.next(data);
});
handleMenuItemRegistrationEvent(payload.data);
} else if (payload.type == "setTiles" && isSetTilesEvent(payload.data)) {
} else if (payload.type == 'setTiles' && isSetTilesEvent(payload.data)) {
this._setTilesStream.next(payload.data);
}
}
@ -270,7 +270,7 @@ class IframeListener {
sendDataLayerEvent(dataLayerEvent: DataLayerEvent) {
this.postMessage({
type: "dataLayer",
type: 'dataLayer',
data: dataLayerEvent,
});
}
@ -291,18 +291,18 @@ class IframeListener {
}
registerScript(scriptUrl: string): void {
console.log("Loading map related script at ", scriptUrl);
console.log('Loading map related script at ', scriptUrl);
if (!process.env.NODE_ENV || process.env.NODE_ENV === "development") {
if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {
// Using external iframe mode (
const iframe = document.createElement("iframe");
const iframe = document.createElement('iframe');
iframe.id = IframeListener.getIFrameId(scriptUrl);
iframe.style.display = "none";
iframe.src = "/iframe.html?script=" + encodeURIComponent(scriptUrl);
iframe.style.display = 'none';
iframe.src = '/iframe.html?script=' + encodeURIComponent(scriptUrl);
// We are putting a sandbox on this script because it will run in the same domain as the main website.
iframe.sandbox.add("allow-scripts");
iframe.sandbox.add("allow-top-navigation-by-user-activation");
iframe.sandbox.add('allow-scripts');
iframe.sandbox.add('allow-top-navigation-by-user-activation');
document.body.prepend(iframe);
@ -310,31 +310,31 @@ class IframeListener {
this.registerIframe(iframe);
} else {
// production code
const iframe = document.createElement("iframe");
const iframe = document.createElement('iframe');
iframe.id = IframeListener.getIFrameId(scriptUrl);
iframe.style.display = "none";
iframe.style.display = 'none';
// We are putting a sandbox on this script because it will run in the same domain as the main website.
iframe.sandbox.add("allow-scripts");
iframe.sandbox.add("allow-top-navigation-by-user-activation");
iframe.sandbox.add('allow-scripts');
iframe.sandbox.add('allow-top-navigation-by-user-activation');
//iframe.src = "data:text/html;charset=utf-8," + escape(html);
iframe.srcdoc =
"<!doctype html>\n" +
"\n" +
'<!doctype html>\n' +
'\n' +
'<html lang="en">\n' +
"<head>\n" +
'<head>\n' +
'<script src="' +
window.location.protocol +
"//" +
'//' +
window.location.host +
'/iframe_api.js" ></script>\n' +
'<script src="' +
scriptUrl +
'" ></script>\n' +
"<title></title>\n" +
"</head>\n" +
"</html>\n";
'<title></title>\n' +
'</head>\n' +
'</html>\n';
document.body.prepend(iframe);
@ -353,7 +353,7 @@ class IframeListener {
}
private static getIFrameId(scriptUrl: string): string {
return "script" + btoa(scriptUrl);
return 'script' + btoa(scriptUrl);
}
unregisterScript(scriptUrl: string): void {
@ -370,7 +370,7 @@ class IframeListener {
sendUserInputChat(message: string) {
this.postMessage({
type: "userInputChat",
type: 'userInputChat',
data: {
message: message,
} as UserInputChatEvent,
@ -379,7 +379,7 @@ class IframeListener {
sendEnterEvent(name: string) {
this.postMessage({
type: "enterEvent",
type: 'enterEvent',
data: {
name: name,
} as EnterLeaveEvent,
@ -388,7 +388,7 @@ class IframeListener {
sendLeaveEvent(name: string) {
this.postMessage({
type: "leaveEvent",
type: 'leaveEvent',
data: {
name: name,
} as EnterLeaveEvent,
@ -398,7 +398,7 @@ class IframeListener {
hasPlayerMoved(event: HasPlayerMovedEvent) {
if (this.sendPlayerMove) {
this.postMessage({
type: "hasPlayerMoved",
type: 'hasPlayerMoved',
data: event,
});
}
@ -406,7 +406,7 @@ class IframeListener {
sendButtonClickedEvent(popupId: number, buttonId: number): void {
this.postMessage({
type: "buttonClickedEvent",
type: 'buttonClickedEvent',
data: {
popupId,
buttonId,
@ -419,7 +419,7 @@ class IframeListener {
*/
public postMessage(message: IframeResponseEvent<keyof IframeResponseEventMap>) {
for (const iframe of this.iframes) {
iframe.contentWindow?.postMessage(message, "*");
iframe.contentWindow?.postMessage(message, '*');
}
}
@ -431,7 +431,7 @@ class IframeListener {
* @param key The "type" of the query we are answering
* @param callback
*/
public registerAnswerer<T extends keyof IframeQueryMap, Guard extends tg.TypeGuard<IframeQueryMap[T]["query"]>>(
public registerAnswerer<T extends keyof IframeQueryMap, Guard extends tg.TypeGuard<IframeQueryMap[T]['query']>>(
key: T,
callback: AnswererCallback<T>,
typeChecker?: Guard

View file

@ -3,12 +3,12 @@ import {
removeTriggerMessage,
triggerMessage,
TriggerMessageEvent,
} from "../../Events/ui/TriggerMessageEvent";
import { queryWorkadventure } from "../IframeApiContribution";
} from '../../Events/ui/TriggerMessageEvent';
import { queryWorkadventure } from '../IframeApiContribution';
function uuidv4() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0,
v = c === "x" ? r : (r & 0x3) | 0x8;
v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}

View file

@ -1,10 +1,10 @@
import { isButtonClickedEvent } from "../Events/ButtonClickedEvent";
import { isMenuItemClickedEvent } from "../Events/ui/MenuItemClickedEvent";
import { IframeApiContribution, sendToWorkadventure } from "./IframeApiContribution";
import { apiCallback } from "./registeredCallbacks";
import type { ButtonClickedCallback, ButtonDescriptor } from "./Ui/ButtonDescriptor";
import { Popup } from "./Ui/Popup";
import { TriggerMessage } from "./Ui/TriggerMessage";
import { isButtonClickedEvent } from '../Events/ButtonClickedEvent';
import { isMenuItemClickedEvent } from '../Events/ui/MenuItemClickedEvent';
import { IframeApiContribution, sendToWorkadventure } from './IframeApiContribution';
import { apiCallback } from './registeredCallbacks';
import type { ButtonClickedCallback, ButtonDescriptor } from './Ui/ButtonDescriptor';
import { Popup } from './Ui/Popup';
import { TriggerMessage } from './Ui/TriggerMessage';
let popupId = 0;
const popups: Map<number, Popup> = new Map<number, Popup>();
@ -26,7 +26,7 @@ interface ZonedPopupOptions {
export class WorkAdventureUiCommands extends IframeApiContribution<WorkAdventureUiCommands> {
callbacks = [
apiCallback({
type: "buttonClickedEvent",
type: 'buttonClickedEvent',
typeChecker: isButtonClickedEvent,
callback: (payloadData) => {
const callback = popupCallbacks.get(payloadData.popupId)?.get(payloadData.buttonId);
@ -40,7 +40,7 @@ export class WorkAdventureUiCommands extends IframeApiContribution<WorkAdventure
},
}),
apiCallback({
type: "menuItemClicked",
type: 'menuItemClicked',
typeChecker: isMenuItemClickedEvent,
callback: (event) => {
const callback = menuCallbacks.get(event.menuItem);
@ -68,7 +68,7 @@ export class WorkAdventureUiCommands extends IframeApiContribution<WorkAdventure
}
sendToWorkadventure({
type: "openPopup",
type: 'openPopup',
data: {
popupId,
targetObject,
@ -89,7 +89,7 @@ export class WorkAdventureUiCommands extends IframeApiContribution<WorkAdventure
registerMenuCommand(commandDescriptor: string, callback: (commandDescriptor: string) => void) {
menuCallbacks.set(commandDescriptor, callback);
sendToWorkadventure({
type: "registerMenuCommand",
type: 'registerMenuCommand',
data: {
menutItem: commandDescriptor,
},
@ -97,11 +97,11 @@ export class WorkAdventureUiCommands extends IframeApiContribution<WorkAdventure
}
displayBubble(): void {
sendToWorkadventure({ type: "displayBubble", data: null });
sendToWorkadventure({ type: 'displayBubble', data: null });
}
removeBubble(): void {
sendToWorkadventure({ type: "removeBubble", data: null });
sendToWorkadventure({ type: 'removeBubble', data: null });
}
triggerMessage(message: string, callback: () => void): TriggerMessage {