fix: le menu contextuel Delete/Rename rafraîchit maintenant les deux arbres
- 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é)
This commit is contained in:
+12
-10
@@ -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);
|
||||
|
||||
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user