All files / src popupManager.js

0% Statements 0/66
0% Branches 0/26
0% Functions 0/6
0% Lines 0/66
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123                                                                                                                                                                                                                                                     
import UserView from './userView';
import global from './global';
 
const UserViewInstance = new UserView();
const feedbackStructure = {
    container: 'user-feedback',
    message: 'user-feedback-message',
    icon: 'user-feedback-icon',
    close: 'user-feedback-close',
    link: 'user-feedback-link'
};
const feedbackType = {
    positive: 'form__message--pop-up-positive',
    generic: 'form__message--pop-up-generic',
    error: 'form__message--pop-up-error'
};
 
let popupShowed = false;
 
 
const container = UserViewInstance.getElement(feedbackStructure.container);
const feedbackMessage = UserViewInstance.getElement(feedbackStructure.message);
const feedbackIcon = UserViewInstance.getElement(feedbackStructure.icon);
const feedbackLink = UserViewInstance.getElement(feedbackStructure.link);
const currentObj = {
    icon: '',
    container: '',
    link: {
        href: '',
        text: ''
    }
};
 
let feedbackTimeout = false,
    fadeTimeout = false;
 
const cleanFeedbackTimeout = () => {
    if (feedbackTimeout) {
        clearTimeout(feedbackTimeout);
        feedbackTimeout = false;
    }
};
 
const cleanFadeTimeout = () => {
    if (fadeTimeout) {
        clearTimeout(fadeTimeout);
        fadeTimeout = false;
    }
};
 
const closePopup = () => {
    if (popupShowed) {
        feedbackMessage.innerHTML = '';
        feedbackIcon.className = currentObj.icon;
        container.className = currentObj.container;
 
        if (feedbackLink.getAttribute('href')) {
            feedbackLink.setAttribute('href', '');
            feedbackLink.innerText = '';
            feedbackLink.style.display = 'none';
        }
 
        container.style.display = 'none';
        popupShowed = false;
    } else {
        global.logger.warn('Useris - Any user feedback to close!');
    }
};
 
export const showUsrFeedback = (obj) => {
    if (popupShowed) {
        cleanFeedbackTimeout();
        cleanFadeTimeout();
        closePopup();
    }
 
    currentObj.icon = feedbackIcon.className;
    currentObj.container = container.className;
    currentObj.link.href = feedbackLink.getAttribute('href');
    currentObj.link.text = feedbackLink.innerText;
 
    if (typeof obj !== 'undefined') {
        if (typeof obj.message !== 'undefined') {
            feedbackMessage.innerHTML = obj.message;
        }
 
        if (typeof obj.feedbackType !== 'undefined') {
            container.className += ` ${feedbackType[obj.feedbackType]}`;
        }
 
        if (typeof obj.icon !== 'undefined') {
            feedbackIcon.className += ` ${obj.icon}`;
        }
 
        if (typeof obj.link !== 'undefined') {
            feedbackLink.style.display = 'block';
 
            feedbackLink.href = obj.link.href;
            feedbackLink.innerText = obj.link.text;
        }
 
        container.style.display = 'block';
        popupShowed = true;
 
        if ((obj.fadeTimeout > 0) && (obj.temporizedFor > 0)) {
            fadeTimeout = setTimeout(() => {
                container.className += ' fade';
                feedbackTimeout = setTimeout(closePopup, obj.fadeTimeout);
            }, obj.temporizedFor - obj.fadeTimeout);
        } else if (typeof obj.temporizedFor !== 'undefined') {
            feedbackTimeout = setTimeout(closePopup, obj.temporizedFor);
        }
    } else {
        global.logger.warn('Useris - Nothing to show. The given object is: ', obj);
    }
};
 
export const closeUserFeedback = () => {
    cleanFeedbackTimeout();
    cleanFadeTimeout();
    closePopup();
};