51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import {
|
|
MessageReferenceEvent,
|
|
removeTriggerMessage,
|
|
triggerMessage,
|
|
TriggerMessageEvent,
|
|
} from "../../Events/ui/TriggerMessageEvent";
|
|
import { queryWorkadventure } from "../IframeApiContribution";
|
|
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;
|
|
return v.toString(16);
|
|
});
|
|
}
|
|
|
|
export let triggerMessageInstance: TriggerMessage | undefined = undefined;
|
|
|
|
export class TriggerMessage {
|
|
uuid: string;
|
|
|
|
constructor(private message: string, private callback: () => void) {
|
|
this.uuid = uuidv4();
|
|
if (triggerMessageInstance) {
|
|
triggerMessageInstance.remove();
|
|
}
|
|
triggerMessageInstance = this;
|
|
this.create();
|
|
}
|
|
|
|
async create() {
|
|
await queryWorkadventure({
|
|
type: triggerMessage,
|
|
data: {
|
|
message: this.message,
|
|
uuid: this.uuid,
|
|
} as TriggerMessageEvent,
|
|
});
|
|
this.callback();
|
|
}
|
|
|
|
async remove() {
|
|
await queryWorkadventure({
|
|
type: removeTriggerMessage,
|
|
data: {
|
|
uuid: this.uuid,
|
|
} as MessageReferenceEvent,
|
|
});
|
|
triggerMessageInstance = undefined;
|
|
}
|
|
}
|