2021-07-02 18:49:22 +02:00
|
|
|
import {
|
2021-08-05 12:02:00 +02:00
|
|
|
ActionMessageType,
|
2021-07-02 18:49:22 +02:00
|
|
|
MessageReferenceEvent,
|
2021-08-04 19:31:17 +02:00
|
|
|
removeActionMessage,
|
|
|
|
triggerActionMessage,
|
|
|
|
TriggerActionMessageEvent,
|
|
|
|
} from "../../Events/ui/TriggerActionMessageEvent";
|
|
|
|
import { queryWorkadventure } from "../IframeApiContribution";
|
2021-08-05 12:02:00 +02:00
|
|
|
import type { ActionMessageOptions } from "../ui";
|
2021-06-23 17:32:32 +02:00
|
|
|
function uuidv4() {
|
2021-08-04 19:31:17 +02:00
|
|
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
2021-07-02 18:49:22 +02:00
|
|
|
const r = (Math.random() * 16) | 0,
|
2021-08-04 19:31:17 +02:00
|
|
|
v = c === "x" ? r : (r & 0x3) | 0x8;
|
2021-06-23 17:32:32 +02:00
|
|
|
return v.toString(16);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-08-04 19:31:17 +02:00
|
|
|
export class ActionMessage {
|
2021-08-05 12:02:00 +02:00
|
|
|
public readonly uuid: string;
|
|
|
|
private readonly type: ActionMessageType;
|
|
|
|
private readonly message: string;
|
|
|
|
private readonly callback: () => void;
|
2021-06-23 17:32:32 +02:00
|
|
|
|
2021-08-05 12:02:00 +02:00
|
|
|
constructor(actionMessageOptions: ActionMessageOptions, private onRemove: () => void) {
|
2021-07-02 18:49:22 +02:00
|
|
|
this.uuid = uuidv4();
|
2021-08-05 12:02:00 +02:00
|
|
|
this.message = actionMessageOptions.message;
|
|
|
|
this.type = actionMessageOptions.type ?? "message";
|
|
|
|
this.callback = actionMessageOptions.callback;
|
2021-06-23 17:32:32 +02:00
|
|
|
this.create();
|
|
|
|
}
|
|
|
|
|
2021-08-05 12:02:00 +02:00
|
|
|
private async create() {
|
2021-07-02 18:49:22 +02:00
|
|
|
await queryWorkadventure({
|
2021-08-04 19:31:17 +02:00
|
|
|
type: triggerActionMessage,
|
2021-06-23 17:32:32 +02:00
|
|
|
data: {
|
|
|
|
message: this.message,
|
2021-08-05 12:02:00 +02:00
|
|
|
type: this.type,
|
2021-07-02 18:49:22 +02:00
|
|
|
uuid: this.uuid,
|
2021-08-04 19:31:17 +02:00
|
|
|
} as TriggerActionMessageEvent,
|
2021-07-02 18:49:22 +02:00
|
|
|
});
|
2021-06-23 17:32:32 +02:00
|
|
|
}
|
|
|
|
|
2021-07-02 18:49:22 +02:00
|
|
|
async remove() {
|
|
|
|
await queryWorkadventure({
|
2021-08-04 19:31:17 +02:00
|
|
|
type: removeActionMessage,
|
2021-06-23 17:32:32 +02:00
|
|
|
data: {
|
2021-07-02 18:49:22 +02:00
|
|
|
uuid: this.uuid,
|
|
|
|
} as MessageReferenceEvent,
|
|
|
|
});
|
2021-08-05 12:02:00 +02:00
|
|
|
this.onRemove();
|
|
|
|
}
|
|
|
|
|
|
|
|
triggerCallback() {
|
|
|
|
this.callback();
|
2021-06-23 17:32:32 +02:00
|
|
|
}
|
2021-07-02 18:49:22 +02:00
|
|
|
}
|