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();
};
|