From 0edcdbe82a189a0f773612da648a43d35999d2ee Mon Sep 17 00:00:00 2001 From: bruno Date: Thu, 16 Jul 2026 09:02:49 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20le=20menu=20contextuel=20Delete/Rename?= =?UTF-8?q?=20rafra=C3=AEchit=20maintenant=20les=20deux=20arbres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nouvel événement 'flowdeck:workspace-changed' dispatché depuis les actions sidebar (deleteWorkspacePage, wsCtxAction rename/delete, newFolderInWorkspace) - La vue principale local_workspace.html écoute 'flowdeck:workspace-changed' et appelle _reloadAfterAction() pour rafraîchir son arbre - _reloadAfterAction() continue à dispatcher 'flowdeck:sidebar-refresh' pour le rafraîchissement sidebar uniquement (évite la boucle infinie) - Correction du double confirm dans deleteWorkspacePage (skipConfirm=true depuis wsCtxAction qui a déjà confirmé) --- app/templates/base.html | 22 ++++++++++++---------- app/templates/local_workspace.html | 4 ++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/templates/base.html b/app/templates/base.html index 0e23428..0b402b7 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -601,7 +601,7 @@ }).then(function(r) { if (r.ok) { self.refreshSidebarTree(); - document.dispatchEvent(new CustomEvent('flowdeck:sidebar-refresh')); + document.dispatchEvent(new CustomEvent('flowdeck:workspace-changed')); } }); } @@ -609,7 +609,7 @@ case 'delete': if (!id) break; if (!confirm('Delete "' + name + '"?')) break; - this.deleteWorkspacePage(id); + this.deleteWorkspacePage(id, true); break; } }, @@ -933,17 +933,17 @@ body: JSON.stringify({ name: name.trim(), type: 'folder' }) }) .then(r => { if (!r.ok) throw new Error('Failed'); return r.json(); }) - .then(() => { this.refreshSidebarTree(); }) + .then(() => { this.refreshSidebarTree(); document.dispatchEvent(new CustomEvent('flowdeck:workspace-changed')); }) .catch(err => { this.toast('Failed: ' + err.message, 'error'); }); }, - deleteWorkspacePage(pageId) { - if (!confirm('Delete this page?')) return; + deleteWorkspacePage(pageId, skipConfirm) { + if (!skipConfirm && !confirm('Delete this page?')) return; fetch(`/api/local-workspace/items/${pageId}`, { method: 'DELETE', headers: { 'X-CSRF-Token': this.getCsrfToken() } }) .then(r => { if (!r.ok) throw new Error('Failed'); return r.json(); }) - .then(() => { this.refreshSidebarTree(); document.dispatchEvent(new CustomEvent('flowdeck:sidebar-refresh')); }) + .then(() => { this.refreshSidebarTree(); document.dispatchEvent(new CustomEvent('flowdeck:workspace-changed')); }) .catch(err => { this.toast('Failed: ' + err.message, 'error'); }); }, @@ -1154,14 +1154,16 @@ } }; - // -- Global sidebar refresh handler (called by local_workspace after CRUD) -- - document.addEventListener('flowdeck:sidebar-refresh', function() { + // -- Global sidebar refresh handler (called after any CRUD) -- + function refreshSidebarFromEvent() { var appEl = document.querySelector('[x-data]'); var data = appEl && appEl.__x ? appEl.__x.$data : null; if (data && data.refreshSidebarTree) data.refreshSidebarTree(); - }); + } + document.addEventListener('flowdeck:sidebar-refresh', refreshSidebarFromEvent); + document.addEventListener('flowdeck:workspace-changed', refreshSidebarFromEvent); - // ═══════════ GLOBAL KEYBOARD SHORTCUTS ═══════════ + // -- Global keyboard shortcuts -- document.addEventListener('keydown', function(e) { var tag = (document.activeElement && document.activeElement.tagName) || ''; var editable = tag === 'INPUT' || tag === 'TEXTAREA' || (document.activeElement && document.activeElement.isContentEditable); diff --git a/app/templates/local_workspace.html b/app/templates/local_workspace.html index 47f57cd..8f1db8a 100644 --- a/app/templates/local_workspace.html +++ b/app/templates/local_workspace.html @@ -498,6 +498,10 @@ window._wsInitData = (function() { var self = this; window.addEventListener('online', function() { self.online = true; }); window.addEventListener('offline', function() { self.online = false; }); + // Listen for workspace changes from sidebar context menu + document.addEventListener('flowdeck:workspace-changed', function() { + self._reloadAfterAction(); + }); // Load workspace tags this.loadWorkspaceTags(); } catch(e) { console.error('Tree load error:', e); this.loaded = true; }