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; }