|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function showConfirmModal(message, title = 'Confirm') {
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
|
const overlay = document.createElement('div');
|
|
|
overlay.className = 'modal-overlay';
|
|
|
|
|
|
|
|
|
const modal = document.createElement('div');
|
|
|
modal.className = 'modal-container';
|
|
|
|
|
|
|
|
|
modal.innerHTML = `
|
|
|
<div class="modal-header">
|
|
|
<h3 class="modal-title">${title}</h3>
|
|
|
</div>
|
|
|
<div class="modal-body">
|
|
|
<p class="modal-message">${message}</p>
|
|
|
</div>
|
|
|
<div class="modal-footer">
|
|
|
<button class="btn btn-secondary modal-cancel-btn">Cancel</button>
|
|
|
<button class="btn btn-primary modal-ok-btn">OK</button>
|
|
|
</div>
|
|
|
`;
|
|
|
|
|
|
overlay.appendChild(modal);
|
|
|
document.body.appendChild(overlay);
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
overlay.classList.add('active');
|
|
|
modal.classList.add('active');
|
|
|
}, 10);
|
|
|
|
|
|
|
|
|
const okBtn = modal.querySelector('.modal-ok-btn');
|
|
|
const cancelBtn = modal.querySelector('.modal-cancel-btn');
|
|
|
|
|
|
const closeModal = (result) => {
|
|
|
overlay.classList.remove('active');
|
|
|
modal.classList.remove('active');
|
|
|
|
|
|
setTimeout(() => {
|
|
|
document.body.removeChild(overlay);
|
|
|
resolve(result);
|
|
|
}, 300);
|
|
|
};
|
|
|
|
|
|
okBtn.addEventListener('click', () => closeModal(true));
|
|
|
cancelBtn.addEventListener('click', () => closeModal(false));
|
|
|
|
|
|
|
|
|
overlay.addEventListener('click', (e) => {
|
|
|
if (e.target === overlay) {
|
|
|
closeModal(false);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
const handleEscape = (e) => {
|
|
|
if (e.key === 'Escape') {
|
|
|
closeModal(false);
|
|
|
document.removeEventListener('keydown', handleEscape);
|
|
|
}
|
|
|
};
|
|
|
document.addEventListener('keydown', handleEscape);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function showAlertModal(message, title = 'Alert') {
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
|
const overlay = document.createElement('div');
|
|
|
overlay.className = 'modal-overlay';
|
|
|
|
|
|
|
|
|
const modal = document.createElement('div');
|
|
|
modal.className = 'modal-container';
|
|
|
|
|
|
|
|
|
modal.innerHTML = `
|
|
|
<div class="modal-header">
|
|
|
<h3 class="modal-title">${title}</h3>
|
|
|
</div>
|
|
|
<div class="modal-body">
|
|
|
<p class="modal-message">${message}</p>
|
|
|
</div>
|
|
|
<div class="modal-footer">
|
|
|
<button class="btn btn-primary modal-ok-btn">OK</button>
|
|
|
</div>
|
|
|
`;
|
|
|
|
|
|
overlay.appendChild(modal);
|
|
|
document.body.appendChild(overlay);
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
overlay.classList.add('active');
|
|
|
modal.classList.add('active');
|
|
|
}, 10);
|
|
|
|
|
|
|
|
|
const okBtn = modal.querySelector('.modal-ok-btn');
|
|
|
|
|
|
const closeModal = () => {
|
|
|
overlay.classList.remove('active');
|
|
|
modal.classList.remove('active');
|
|
|
|
|
|
setTimeout(() => {
|
|
|
document.body.removeChild(overlay);
|
|
|
resolve();
|
|
|
}, 300);
|
|
|
};
|
|
|
|
|
|
okBtn.addEventListener('click', closeModal);
|
|
|
|
|
|
|
|
|
overlay.addEventListener('click', (e) => {
|
|
|
if (e.target === overlay) {
|
|
|
closeModal();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
const handleEscape = (e) => {
|
|
|
if (e.key === 'Escape') {
|
|
|
closeModal();
|
|
|
document.removeEventListener('keydown', handleEscape);
|
|
|
}
|
|
|
};
|
|
|
document.addEventListener('keydown', handleEscape);
|
|
|
});
|
|
|
}
|
|
|
|