File: //var/www/quadcode-jobs/resources/js/modal.js
let prevModal = null;
const openModal = (modal, callback, preventScrollLock) => {
modal.classList.add('is-active');
if (callback) {
callback();
}
if (!preventScrollLock) {
window.disableBodyScroll(modal, {
reserveScrollBarGap: true,
});
}
};
const closeModal = (modal, callback, preventScrollLock) => {
modal.classList.remove('is-active');
prevModal = null;
if (callback) {
callback();
}
if (!preventScrollLock) {
setTimeout(() => {
window.enableBodyScroll(modal);
}, 600);
}
};
const onEscPress = (evt, modal, callback) => {
const isEscKey = evt.key === 'Escape' || evt.key === 'Esc';
if (isEscKey && modal.classList.contains('is-active')) {
evt.preventDefault();
closeModal(modal, callback);
}
};
const setModalListeners = (modal, closeCallback, preventScrollLock) => {
// const overlay = modal.querySelector('.modal__overlay');
const closeBtn = modal.querySelector('.js-close-modal');
const otherCloseBtn = modal.querySelector('.js-modal-close');
closeBtn.addEventListener('click', () => {
closeModal(modal, closeCallback, preventScrollLock);
});
if (otherCloseBtn) {
otherCloseBtn.addEventListener('click', () => {
closeModal(modal, closeCallback, preventScrollLock);
});
}
modal.addEventListener('click', (e) => {
if (!e.target.closest('.modal__inner')) {
closeModal(modal, closeCallback, preventScrollLock);
}
});
document.addEventListener('keydown', (evt) => {
onEscPress(evt, modal, closeCallback, preventScrollLock);
});
};
const setupModal = (modal, closeCallback, modalBtns, openCallback, noPrevDefault, preventScrollLock) => {
if (modalBtns) {
modalBtns.forEach((btn) => {
btn.addEventListener('click', (evt) => {
if (!noPrevDefault) {
evt.preventDefault();
}
openModal(modal, openCallback, preventScrollLock);
});
});
}
setModalListeners(modal, closeCallback, preventScrollLock);
};
export {setupModal, openModal, closeModal};