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) {
|
}).then(function(r) {
|
||||||
if (r.ok) {
|
if (r.ok) {
|
||||||
self.refreshSidebarTree();
|
self.refreshSidebarTree();
|
||||||
document.dispatchEvent(new CustomEvent('flowdeck:sidebar-refresh'));
|
document.dispatchEvent(new CustomEvent('flowdeck:workspace-changed'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -609,7 +609,7 @@
|
|||||||
case 'delete':
|
case 'delete':
|
||||||
if (!id) break;
|
if (!id) break;
|
||||||
if (!confirm('Delete "' + name + '"?')) break;
|
if (!confirm('Delete "' + name + '"?')) break;
|
||||||
this.deleteWorkspacePage(id);
|
this.deleteWorkspacePage(id, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -933,17 +933,17 @@
|
|||||||
body: JSON.stringify({ name: name.trim(), type: 'folder' })
|
body: JSON.stringify({ name: name.trim(), type: 'folder' })
|
||||||
})
|
})
|
||||||
.then(r => { if (!r.ok) throw new Error('Failed'); return r.json(); })
|
.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'); });
|
.catch(err => { this.toast('Failed: ' + err.message, 'error'); });
|
||||||
},
|
},
|
||||||
deleteWorkspacePage(pageId) {
|
deleteWorkspacePage(pageId, skipConfirm) {
|
||||||
if (!confirm('Delete this page?')) return;
|
if (!skipConfirm && !confirm('Delete this page?')) return;
|
||||||
fetch(`/api/local-workspace/items/${pageId}`, {
|
fetch(`/api/local-workspace/items/${pageId}`, {
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
headers: { 'X-CSRF-Token': this.getCsrfToken() }
|
headers: { 'X-CSRF-Token': this.getCsrfToken() }
|
||||||
})
|
})
|
||||||
.then(r => { if (!r.ok) throw new Error('Failed'); return r.json(); })
|
.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'); });
|
.catch(err => { this.toast('Failed: ' + err.message, 'error'); });
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1154,14 +1154,16 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// -- Global sidebar refresh handler (called by local_workspace after CRUD) --
|
// -- Global sidebar refresh handler (called after any CRUD) --
|
||||||
document.addEventListener('flowdeck:sidebar-refresh', function() {
|
function refreshSidebarFromEvent() {
|
||||||
var appEl = document.querySelector('[x-data]');
|
var appEl = document.querySelector('[x-data]');
|
||||||
var data = appEl && appEl.__x ? appEl.__x.$data : null;
|
var data = appEl && appEl.__x ? appEl.__x.$data : null;
|
||||||
if (data && data.refreshSidebarTree) data.refreshSidebarTree();
|
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) {
|
document.addEventListener('keydown', function(e) {
|
||||||
var tag = (document.activeElement && document.activeElement.tagName) || '';
|
var tag = (document.activeElement && document.activeElement.tagName) || '';
|
||||||
var editable = tag === 'INPUT' || tag === 'TEXTAREA' || (document.activeElement && document.activeElement.isContentEditable);
|
var editable = tag === 'INPUT' || tag === 'TEXTAREA' || (document.activeElement && document.activeElement.isContentEditable);
|
||||||
|
|||||||
@@ -498,6 +498,10 @@ window._wsInitData = (function() {
|
|||||||
var self = this;
|
var self = this;
|
||||||
window.addEventListener('online', function() { self.online = true; });
|
window.addEventListener('online', function() { self.online = true; });
|
||||||
window.addEventListener('offline', function() { self.online = false; });
|
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
|
// Load workspace tags
|
||||||
this.loadWorkspaceTags();
|
this.loadWorkspaceTags();
|
||||||
} catch(e) { console.error('Tree load error:', e); this.loaded = true; }
|
} catch(e) { console.error('Tree load error:', e); this.loaded = true; }
|
||||||
|
|||||||
Reference in New Issue
Block a user