* [PATCH widget-toolkit] ui: disk list: add collapse/expand all controls
@ 2026-08-30 3:00 Doug Rathbone
0 siblings, 0 replies; only message in thread
From: Doug Rathbone @ 2026-08-30 3:00 UTC (permalink / raw)
To: pve-devel; +Cc: Doug Rathbone
From: Doug Rathbone <dougrathbone@gmail.com>
The disk tree always reloads fully expanded, which gets messy on hosts
with many disks and partitions.
Add Collapse All and Expand All buttons. Remember the last choice so
reloads and revisits keep the preferred view.
Forum users have asked for this. A 2021 pve-devel thread discussed
defaulting to collapsed; Thomas preferred collapse/expand controls with
stateful memory instead.
Tested on PVE 9.2 node with 10+ disks. CLA submitted separately.
Signed-off-by: Doug Rathbone <dougrathbone@gmail.com>
---
src/panel/DiskList.js | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/src/panel/DiskList.js b/src/panel/DiskList.js
index 0762bab..f50c5dd 100644
--- a/src/panel/DiskList.js
+++ b/src/panel/DiskList.js
@@ -71,6 +71,21 @@ Ext.define('Proxmox.DiskList', {
stateful: true,
stateId: 'tree-node-disks',
+ defaultExpanded: true,
+
+ getState: function () {
+ let state = this.callParent(arguments) || {};
+ state.defaultExpanded = this.defaultExpanded !== false;
+ return state;
+ },
+
+ applyState: function (state) {
+ if (state && state.defaultExpanded !== undefined) {
+ this.defaultExpanded = state.defaultExpanded;
+ }
+ this.callParent(arguments);
+ },
+
controller: {
xclass: 'Ext.app.ViewController',
@@ -134,6 +149,20 @@ Ext.define('Proxmox.DiskList', {
});
},
+ collapseAll: function () {
+ let view = this.getView();
+ view.collapseAll();
+ view.defaultExpanded = false;
+ view.saveState();
+ },
+
+ expandAll: function () {
+ let view = this.getView();
+ view.expandAll();
+ view.defaultExpanded = true;
+ view.saveState();
+ },
+
wipeDisk: function () {
let me = this;
let view = me.getView();
@@ -188,10 +217,11 @@ Ext.define('Proxmox.DiskList', {
}
let disks = {};
+ let defaultExpanded = view.defaultExpanded !== false;
for (const item of records) {
let data = item.data;
- data.expanded = true;
+ data.expanded = defaultExpanded;
data.children = data.partitions ?? [];
for (let p of data.children) {
p['disk-type'] = 'partition';
@@ -388,6 +418,14 @@ Ext.define('Proxmox.DiskList', {
text: gettext('Reload'),
handler: 'reload',
},
+ {
+ text: gettext('Collapse All'),
+ handler: 'collapseAll',
+ },
+ {
+ text: gettext('Expand All'),
+ handler: 'expandAll',
+ },
{
xtype: 'proxmoxButton',
text: gettext('Show S.M.A.R.T. values'),
--
2.47.3
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-02 8:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-30 3:00 [PATCH widget-toolkit] ui: disk list: add collapse/expand all controls Doug Rathbone
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox