]> BookStack Code Mirror - bookstack/blob - resources/js/services/events.js
Merge branch 'feature/mail-verify-peer' into development
[bookstack] / resources / js / services / events.js
1 const listeners = {};
2 const stack = [];
3
4 /**
5  * Emit a custom event for any handlers to pick-up.
6  * @param {String} eventName
7  * @param {*} eventData
8  */
9 export function emit(eventName, eventData) {
10     stack.push({name: eventName, data: eventData});
11
12     const listenersToRun = listeners[eventName] || [];
13     for (const listener of listenersToRun) {
14         listener(eventData);
15     }
16 }
17
18 /**
19  * Listen to a custom event and run the given callback when that event occurs.
20  * @param {String} eventName
21  * @param {Function} callback
22  * @returns {Events}
23  */
24 export function listen(eventName, callback) {
25     if (typeof listeners[eventName] === 'undefined') listeners[eventName] = [];
26     listeners[eventName].push(callback);
27 }
28
29 /**
30  * Emit an event for public use.
31  * Sends the event via the native DOM event handling system.
32  * @param {Element} targetElement
33  * @param {String} eventName
34  * @param {Object} eventData
35  */
36 export function emitPublic(targetElement, eventName, eventData) {
37     const event = new CustomEvent(eventName, {
38         detail: eventData,
39         bubbles: true,
40     });
41     targetElement.dispatchEvent(event);
42 }
43
44 /**
45  * Emit a success event with the provided message.
46  * @param {String} message
47  */
48 export function success(message) {
49     emit('success', message);
50 }
51
52 /**
53  * Emit an error event with the provided message.
54  * @param {String} message
55  */
56 export function error(message) {
57     emit('error', message);
58 }
59
60 /**
61  * Notify of standard server-provided validation errors.
62  * @param {Object} responseErr
63  */
64 export function showValidationErrors(responseErr) {
65     if (!responseErr.status) return;
66     if (responseErr.status === 422 && responseErr.data) {
67         const message = Object.values(responseErr.data).flat().join('\n');
68         error(message);
69     }
70 }
71
72 /**
73  * Notify standard server-provided error messages.
74  * @param {Object} responseErr
75  */
76 export function showResponseError(responseErr) {
77     if (!responseErr.status) return;
78     if (responseErr.status >= 400 && responseErr.data && responseErr.data.message) {
79         error(responseErr.data.message);
80     }
81 }