fix: Icon picker modal reopens after selection

- Use Bootstrap event dispatch instead of manual hide
- Let Bootstrap manage modal state properly
- Clean backdrop only in hidden.bs.modal event
This commit is contained in:
mirivlad 2026-04-17 19:50:32 +08:00
parent 6e54615d54
commit cb74973a90
1 changed files with 13 additions and 17 deletions

View File

@ -417,23 +417,12 @@
} }
} }
// Используем Bootstrap API для закрытия // Триггерим событие hide через Bootstrap
var modalEl = document.getElementById('iconPickerModal'); var modalEl = document.getElementById('iconPickerModal');
if (modalEl && typeof bootstrap !== 'undefined' && bootstrap.Modal) { if (modalEl) {
var modal = bootstrap.Modal.getInstance(modalEl); var evt = new Event('hide.bs.modal');
if (modal) { modalEl.dispatchEvent(evt);
modal.hide();
}
} }
// Принудительно удаляем backdrop через небольшую задержку
setTimeout(function() {
var backdrops = document.querySelectorAll('.modal-backdrop');
backdrops.forEach(function(bp) { bp.remove(); });
document.body.classList.remove('modal-open');
document.body.style.paddingRight = '';
document.body.style.overflow = '';
}, 100);
} }
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
@ -474,8 +463,15 @@
// Удаляем backdrop при закрытии модала // Удаляем backdrop при закрытии модала
document.getElementById('iconPickerModal').addEventListener('hidden.bs.modal', function(e) { document.getElementById('iconPickerModal').addEventListener('hidden.bs.modal', function(e) {
var backdrop = document.querySelector('.modal-backdrop'); var backdrops = document.querySelectorAll('.modal-backdrop');
if (backdrop) backdrop.remove(); backdrops.forEach(function(bp) { bp.remove(); });
document.body.classList.remove('modal-open');
document.body.style.paddingRight = '';
});
// Обработка hide - Bootstrap управляет закрытием
document.getElementById('iconPickerModal').addEventListener('hide.bs.modal', function(e) {
// Bootstrap сам управляет модалом, ничего не делаем
}); });
}); });
})(); })();