feat(ui): custom modal dialog for update confirmation (v1.4.3)
This commit is contained in:
1 parent
7deee2be61
commit
bd8b519753
4 files changed
+157
-10
No files matched your search
+66
-5
@@ -5896,14 +5896,57 @@ async function checkSystemUpdate(notify = false) {
|
||||
}
|
||||
}
|
||||
|
||||
async function runSystemUpdate() {
|
||||
if (!confirm("Voulez-vous lancer la mise à jour de NexusPBX ?\n\nUne sauvegarde préventive automatique de vos configurations et de votre base de données sera créée.")) {
|
||||
return;
|
||||
}
|
||||
function openUpdateConfirmModal() {
|
||||
const modal = document.getElementById('modal-confirm-update');
|
||||
if (!modal) return;
|
||||
|
||||
let targetVer = '';
|
||||
let currVer = (appState && appState.version) ? appState.version : (document.querySelector('meta[name="nexus-app-version"]')?.content || '');
|
||||
|
||||
try {
|
||||
const cachedRaw = localStorage.getItem('nexus_update_cached_data');
|
||||
if (cachedRaw) {
|
||||
const cached = JSON.parse(cachedRaw);
|
||||
if (cached.latest_version) targetVer = cached.latest_version;
|
||||
if (cached.current_version) currVer = cached.current_version;
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
const elTarget = document.getElementById('update-modal-target-version');
|
||||
const elCurrent = document.getElementById('update-modal-current-version');
|
||||
const elBadge = document.getElementById('update-modal-target-badge');
|
||||
|
||||
if (elTarget) elTarget.textContent = targetVer ? `v${targetVer}` : 'Dernière version';
|
||||
if (elCurrent) elCurrent.textContent = currVer ? `v${currVer}` : 'vActuelle';
|
||||
if (elBadge && targetVer) elBadge.textContent = `v${targetVer} disponible`;
|
||||
|
||||
modal.classList.remove('hidden');
|
||||
modal.classList.add('flex');
|
||||
}
|
||||
|
||||
function closeUpdateConfirmModal() {
|
||||
const modal = document.getElementById('modal-confirm-update');
|
||||
if (modal) {
|
||||
modal.classList.add('hidden');
|
||||
modal.classList.remove('flex');
|
||||
}
|
||||
}
|
||||
|
||||
function runSystemUpdate() {
|
||||
openUpdateConfirmModal();
|
||||
}
|
||||
|
||||
async function executeSystemUpdate() {
|
||||
const btnModalConfirm = document.getElementById('btn-confirm-update-action');
|
||||
const btnRun = document.getElementById('btn-run-update');
|
||||
const statusText = document.getElementById('update-status-text');
|
||||
|
||||
if (btnModalConfirm) {
|
||||
btnModalConfirm.disabled = true;
|
||||
btnModalConfirm.classList.add('opacity-75', 'cursor-not-allowed');
|
||||
btnModalConfirm.innerHTML = '<span class="animate-spin mr-2">↻</span> Déploiement en cours...';
|
||||
}
|
||||
|
||||
if (btnRun) {
|
||||
btnRun.disabled = true;
|
||||
btnRun.innerHTML = '<span class="animate-spin mr-1.5">↻</span> Mise à jour en cours...';
|
||||
@@ -5959,22 +6002,40 @@ async function runSystemUpdate() {
|
||||
statusText.textContent = `Mise à jour terminée avec succès (v${newVer}) ! Rechargement...`;
|
||||
}
|
||||
|
||||
if (btnModalConfirm) {
|
||||
btnModalConfirm.className = 'px-5 py-2.5 rounded-xl text-xs font-bold bg-emerald-600 text-white flex items-center gap-2';
|
||||
btnModalConfirm.innerHTML = '✓ Mise à jour terminée ! Rechargement...';
|
||||
}
|
||||
|
||||
// 3. Rechargement avec paramètre anti-cache pour forcer le navigateur à récupérer le nouveau DOM
|
||||
setTimeout(() => {
|
||||
closeUpdateConfirmModal();
|
||||
window.location.href = window.location.origin + window.location.pathname + '?_t=' + Date.now();
|
||||
}, 2000);
|
||||
}, 1800);
|
||||
} else {
|
||||
closeUpdateConfirmModal();
|
||||
alert("Erreur lors de la mise à jour :\n\n" + (data.output || data.message));
|
||||
if (btnRun) {
|
||||
btnRun.disabled = false;
|
||||
btnRun.innerHTML = 'Réessayer la mise à jour';
|
||||
}
|
||||
if (btnModalConfirm) {
|
||||
btnModalConfirm.disabled = false;
|
||||
btnModalConfirm.classList.remove('opacity-75', 'cursor-not-allowed');
|
||||
btnModalConfirm.innerHTML = '<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg><span>Lancer la mise à jour (1-Clic)</span>';
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
closeUpdateConfirmModal();
|
||||
alert("Erreur réseau lors de la mise à jour : " + e.message);
|
||||
if (btnRun) {
|
||||
btnRun.disabled = false;
|
||||
btnRun.innerHTML = 'Réessayer la mise à jour';
|
||||
}
|
||||
if (btnModalConfirm) {
|
||||
btnModalConfirm.disabled = false;
|
||||
btnModalConfirm.classList.remove('opacity-75', 'cursor-not-allowed');
|
||||
btnModalConfirm.innerHTML = '<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/></svg><span>Lancer la mise à jour (1-Clic)</span>';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user