workadventure/front/src/Api/iframe/Ui/TriggerMessage.ts

51 lines
1.3 KiB
TypeScript
Raw Normal View History

import {
MessageReferenceEvent,
removeTriggerMessage,
triggerMessage,
TriggerMessageEvent,
} from "../../Events/ui/TriggerMessageEvent";
import { queryWorkadventure } from "../IframeApiContribution";
2021-06-23 17:32:32 +02:00
function uuidv4() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0,
v = c === "x" ? r : (r & 0x3) | 0x8;
2021-06-23 17:32:32 +02:00
return v.toString(16);
});
}
export let triggerMessageInstance: TriggerMessage | undefined = undefined;
2021-06-23 17:32:32 +02:00
export class TriggerMessage {
uuid: string;
2021-06-23 17:32:32 +02:00
constructor(private message: string, private callback: () => void) {
this.uuid = uuidv4();
2021-06-23 17:32:32 +02:00
if (triggerMessageInstance) {
triggerMessageInstance.remove();
}
triggerMessageInstance = this;
this.create();
}
async create() {
await queryWorkadventure({
2021-06-23 17:32:32 +02:00
type: triggerMessage,
data: {
message: this.message,
uuid: this.uuid,
} as TriggerMessageEvent,
});
this.callback();
2021-06-23 17:32:32 +02:00
}
async remove() {
await queryWorkadventure({
2021-06-23 17:32:32 +02:00
type: removeTriggerMessage,
data: {
uuid: this.uuid,
} as MessageReferenceEvent,
});
triggerMessageInstance = undefined;
2021-06-23 17:32:32 +02:00
}
}