errorManager.js

import UserView from './userView';
import global from './global';

const arrayError = [
    'useris-error-empty-terms',
    'useris-error-pin',
    'useris-error-msg',
    'useris-error-op',
    'useris-error-password',
    'useris-error-password2',
    'useris-error-old-password',
    'useris-error-repeated-password',
    'useris-error-password-not-changed',
    'useris-error-password-match',
    'useris-error-password-not-valid',
    'useris-error-newton-error',
    'useris-username-error',
    'useris-nickname-not-changed',
    'useris-error-required-input',
    'useris-error-invalid-number'
];

const UserViewInstance = new UserView();

export function manageErrorWithClass(error) {
    global.logger.log('ErrorManager: ', error);
    let errorName = '';

    if (error) {
        errorName = error.message || error;
    }

    if (errorName && arrayError.indexOf(errorName) >= 0) {
        UserViewInstance.showElementByClass(errorName);
    }
}

export function manageErrorInContainer(error, containerId) {
    global.logger.log('ErrorManager: ', 'Container Error:', `${error} in ${containerId}`);

    let errorName = '';

    if (error) {
        errorName = error.message || error;
    }

    if (errorName && arrayError.indexOf(errorName) >= 0) {
        UserViewInstance.showElementByClassInContainer(errorName, containerId);
    }
}

export function cleanError() {
    arrayError.forEach((singleError) => {
        UserViewInstance.hideElementByClass(singleError);
    });
}

export function cleanErrorEvo() {
    let errorElements = [];
    arrayError.forEach((singleError) => {
        errorElements = UserViewInstance.getElementByQuerySelectorAll(`.${singleError}`);
        if (errorElements) {
            errorElements.forEach((element) => {
                if (element.style) {
                    element.style.display = 'none';
                }
            });
        }
    });
}

/**
 * @memberOf Useris
 * @function triggerError
 *
 * @description Expose the useris error manager
 * to the web application to show error or warning message.
 *
 * @param {string} error div to show for the error
 *
 * @example
 *  Useris.triggerError('useris-error-newton-error');
 */
export function manageError(error, containerId) {
    if (containerId) {
        manageErrorInContainer(error, containerId);
    } else {
        manageErrorWithClass(error);
    }
}

export default {
    manageError,
    manageErrorInContainer,
    manageErrorWithClass,
    cleanError,
    cleanErrorEvo
};