X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/48df8725d82cac821ee935498c811509c96e63c2..refs/pull/4467/head:/resources/js/services/events.js diff --git a/resources/js/services/events.js b/resources/js/services/events.js index d2dacfa7b..761305793 100644 --- a/resources/js/services/events.js +++ b/resources/js/services/events.js @@ -6,13 +6,12 @@ const stack = []; * @param {String} eventName * @param {*} eventData */ -function emit(eventName, eventData) { +export function emit(eventName, eventData) { stack.push({name: eventName, data: eventData}); - if (typeof listeners[eventName] === 'undefined') return this; - let eventsToStart = listeners[eventName]; - for (let i = 0; i < eventsToStart.length; i++) { - let event = eventsToStart[i]; - event(eventData); + + const listenersToRun = listeners[eventName] || []; + for (const listener of listenersToRun) { + listener(eventData); } } @@ -22,7 +21,7 @@ function emit(eventName, eventData) { * @param {Function} callback * @returns {Events} */ -function listen(eventName, callback) { +export function listen(eventName, callback) { if (typeof listeners[eventName] === 'undefined') listeners[eventName] = []; listeners[eventName].push(callback); } @@ -34,43 +33,49 @@ function listen(eventName, callback) { * @param {String} eventName * @param {Object} eventData */ -function emitPublic(targetElement, eventName, eventData) { +export function emitPublic(targetElement, eventName, eventData) { const event = new CustomEvent(eventName, { detail: eventData, - bubbles: true + bubbles: true, }); targetElement.dispatchEvent(event); } +/** + * Emit a success event with the provided message. + * @param {String} message + */ +export function success(message) { + emit('success', message); +} + +/** + * Emit an error event with the provided message. + * @param {String} message + */ +export function error(message) { + emit('error', message); +} + /** * Notify of standard server-provided validation errors. - * @param {Object} error + * @param {Object} responseErr */ -function showValidationErrors(error) { - if (!error.status) return; - if (error.status === 422 && error.data) { - const message = Object.values(error.data).flat().join('\n'); - emit('error', message); +export function showValidationErrors(responseErr) { + if (!responseErr.status) return; + if (responseErr.status === 422 && responseErr.data) { + const message = Object.values(responseErr.data).flat().join('\n'); + error(message); } } /** * Notify standard server-provided error messages. - * @param {Object} error + * @param {Object} responseErr */ -function showResponseError(error) { - if (!error.status) return; - if (error.status >= 400 && error.data && error.data.message) { - emit('error', error.data.message); +export function showResponseError(responseErr) { + if (!responseErr.status) return; + if (responseErr.status >= 400 && responseErr.data && responseErr.data.message) { + error(responseErr.data.message); } } - -export default { - emit, - emitPublic, - listen, - success: (msg) => emit('success', msg), - error: (msg) => emit('error', msg), - showValidationErrors, - showResponseError, -} \ No newline at end of file