1 export class EventManager {
2 protected listeners: Record<string, ((data: {}) => void)[]> = {};
3 protected stack: {name: string, data: {}}[] = [];
6 * Emit a custom event for any handlers to pick-up.
8 emit(eventName: string, eventData: {}): void {
9 this.stack.push({name: eventName, data: eventData});
11 const listenersToRun = this.listeners[eventName] || [];
12 for (const listener of listenersToRun) {
18 * Listen to a custom event and run the given callback when that event occurs.
20 listen(eventName: string, callback: (data: {}) => void): void {
21 if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = [];
22 this.listeners[eventName].push(callback);
26 * Emit an event for public use.
27 * Sends the event via the native DOM event handling system.
29 emitPublic(targetElement: Element, eventName: string, eventData: {}): void {
30 const event = new CustomEvent(eventName, {
34 targetElement.dispatchEvent(event);
38 * Emit a success event with the provided message.
40 success(message: string): void {
41 this.emit('success', message);
45 * Emit an error event with the provided message.
47 error(message: string): void {
48 this.emit('error', message);
52 * Notify of standard server-provided validation errors.
54 showValidationErrors(responseErr: {status?: number, data?: object}): void {
55 if (!responseErr.status) return;
56 if (responseErr.status === 422 && responseErr.data) {
57 const message = Object.values(responseErr.data).flat().join('\n');
63 * Notify standard server-provided error messages.
65 showResponseError(responseErr: {status?: number, data?: {message?: string}}): void {
66 if (!responseErr.status) return;
67 if (responseErr.status >= 400 && responseErr.data && responseErr.data.message) {
68 this.error(responseErr.data.message);