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