82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
const listeners = {};
 | 
						|
const stack = [];
 | 
						|
 | 
						|
/**
 | 
						|
 * Emit a custom event for any handlers to pick-up.
 | 
						|
 * @param {String} eventName
 | 
						|
 * @param {*} eventData
 | 
						|
 */
 | 
						|
export function emit(eventName, eventData) {
 | 
						|
    stack.push({name: eventName, data: eventData});
 | 
						|
 | 
						|
    const listenersToRun = listeners[eventName] || [];
 | 
						|
    for (const listener of listenersToRun) {
 | 
						|
        listener(eventData);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Listen to a custom event and run the given callback when that event occurs.
 | 
						|
 * @param {String} eventName
 | 
						|
 * @param {Function} callback
 | 
						|
 * @returns {Events}
 | 
						|
 */
 | 
						|
export function listen(eventName, callback) {
 | 
						|
    if (typeof listeners[eventName] === 'undefined') listeners[eventName] = [];
 | 
						|
    listeners[eventName].push(callback);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Emit an event for public use.
 | 
						|
 * Sends the event via the native DOM event handling system.
 | 
						|
 * @param {Element} targetElement
 | 
						|
 * @param {String} eventName
 | 
						|
 * @param {Object} eventData
 | 
						|
 */
 | 
						|
export function emitPublic(targetElement, eventName, eventData) {
 | 
						|
    const event = new CustomEvent(eventName, {
 | 
						|
        detail: eventData,
 | 
						|
        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} responseErr
 | 
						|
 */
 | 
						|
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} responseErr
 | 
						|
 */
 | 
						|
export function showResponseError(responseErr) {
 | 
						|
    if (!responseErr.status) return;
 | 
						|
    if (responseErr.status >= 400 && responseErr.data && responseErr.data.message) {
 | 
						|
        error(responseErr.data.message);
 | 
						|
    }
 | 
						|
}
 |