File: /var/www/quadcode/frontend/src/js/components/modal/Modal.js
import {createEvent} from "../events";
import {clickOutside} from "../../helpers/click-outside";
export const Modal = (name, autoOpen, options = {}) => {
const modalEl = document.querySelector(`[data-widget="${name}"]`);
const modalContent = modalEl?.querySelector('.modal__content') || modalEl?.querySelector('.modal-once__content');
const btnEl = document.querySelectorAll(`[data-role="${name}"]`);
const btnCloseEl = document.querySelectorAll(`[data-role="${name}-close"]`);
if (btnEl.length === 0 && !modalEl) return false;
const open = () => {
if (['contacts', 'saas', 'saas2'].includes(name)) {
createEvent({event:'saas_form_opening'});
}
document.body.style.overflow = 'hidden';
return modalEl.classList.add('active');
}
const close = () => {
if(options.onClose) {
options.onClose();
}
if(modalEl.classList.contains('active')) {
document.body.style.overflow = null;
}
modalEl.classList.remove('active');
}
btnEl.forEach((item) => {
item.addEventListener('click', () => {
open();
}, false);
})
if (autoOpen) {
if(options.timeout) {
setTimeout(open, options.timeout)
}
else {
open();
}
}
if(modalEl, options.clickOutside) {
clickOutside(modalContent, close);
}
if (btnCloseEl && btnCloseEl.length > 0) {
btnCloseEl.forEach(button => {
button.addEventListener('click', close, false);
});
}
return {
open,
close
}
}