From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 04FAA1FF0A7 for ; Wed, 02 Sep 2026 10:32:36 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id B576A214A3; Wed, 02 Sep 2026 10:32:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.com.au; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:message-id:mime-version:reply-to:subject :subject:to:to; s=fm3; t=1788058839; x=1788145239; bh=DQusMfQybz 1TqQRY5T0CaYwlagnk4FrXPG5U/QBkGXw=; b=OZ3z3d/WUh+kBgEsO+fSVYwKJv x/r3Hg1zN6J65cXz39927QWh9I5ZCmXhBU4BkcL3UxCnlHpFTuGNDRDwaNYrbpax fcoKsvc2wiJH2porB75X6YOAjLyAVE4o4R1EaqcEIFgA/eGKBEK+zolvZP5AWt+0 NXtBpjwOE3jijcI5D9SzjN+TloPgL0OQq9EtvsWGAx8X8QDn7qwH3Y1vb1odnMiJ PQw9WC5Xxa6+qK0dfkG4VC49SRf3KaGGYRPxCvoOvfi53X8SL9hXdjgyD4oZ8n1s PWKAdNyf40yFrxUhDDQPbETs6ZOyK+w0GliFCLo0kTAkMi0YGqJpceViAyNw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:message-id:mime-version:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t= 1788058839; x=1788145239; bh=DQusMfQybz1TqQRY5T0CaYwlagnk4FrXPG5 U/QBkGXw=; b=H3EWeIK5lWMW6Tp7DLkkcrio1+uZF9b8ycizFpadELp68dqp/iU PUZ2Lrl+07hRJ9pAAvzF24oA7sMyRZsRBNKyu8uh/GJY9hUVR+2mI8YVbLbGAWJf 1G4a/twlMApgvHQgTcOK+m7jPmJJssl9sbPdPuyRdy+djKu5pGgXp0OlXqI3IiDa 09ygev/OGzBzf/LTdfp8on2gFbY4I1Q2jSVevglJVvq6pD2fBCxPHdGOoYOz+pu/ Ks/ksO44npW8dUkCHXqnOxM4qWP+HYr+pHdFVHbPpa2VX6PghPIkn/g9kYRsIDUD J/fAo1/VMiroYJjlOuzzxgbQvcrSOvMRBtg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: dmFkZTEt31yGo/+XWDNxz81P7CkrHrB5W5AT3RS/M5flrzwkQ+eRikYqj8GLT/Lt6Oifpb 3KxpwwWxbNNNft6V80WRtVvGmQpVlIy458E5CBpQNQyiv7uk4UOVrTrhypkF1btKbDH5RD fxy7jR/vhY8EsCEbN7Xhm9IdluiZGvOrBXCnwTaAZtekQ3FUuClSKX5IX3WrnqLvKqzQqV o7oj2IdKrr9L0MyTvumBu1KR7I+fc2A1zuqDahI7Xp7LUQJYCMsVKpzTdmwLZZ3k1mR840 XbkiJBbNcNXt1Gb6X6Ek7PUXS0lEnJ82ze9UP0MPtG2pP0LBYW+PBOVC/5PCOnW7A/rbfH ipzkTQf29D9Pxm8u88wFqyQNKzJHvmDmszf72ysL8wn+9K2NQQfRVUFRQEm9fZARzj/teo uNitRGJ3CDDZa5ATlFWtTyKL+UDJShAs7A+Y4tfIVpVdYRNNk2jbPAtmblYSYf8QqYtwOw Yi0VL+byWQzSyqusFGJQm2Rzp6mh+yBfYTPuBh6AMqxlGOz79AnmzvykVYpU0BL4OyT4oU eGy4w21fcEgv0BPSifpSFdRcofRWPBLyWu3oOcUe8EqX89mywMavPU7wlkX6dqcGzCCLIe HJVX2wFB/RsFwwZEIvx5HThm/t1CxSreUEZoZAGT/Ogi3bXKNE/bt+CmBmAw X-ME-Proxy: Feedback-ID: i1348408d:Fastmail From: Doug Rathbone To: pve-devel@lists.proxmox.com Subject: [PATCH widget-toolkit] ui: disk list: add collapse/expand all controls Date: Sun, 30 Aug 2026 13:00:35 +1000 Message-ID: <20260830030035.3209873-1-oncheckin@fastmail.com.au> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider PROLO_LEO1 0.1 Meta Catches all Leo drug variations so far RCVD_IN_DNSWL_LOW -0.7 Sender listed at https://www.dnswl.org/, low trust SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record X-MailFrom: oncheckin@fastmail.com.au X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation Message-ID-Hash: TGPV6ABRXDBKYABB4NCX6KNNEZ3Q6ZHQ X-Message-ID-Hash: TGPV6ABRXDBKYABB4NCX6KNNEZ3Q6ZHQ X-Mailman-Approved-At: Wed, 02 Sep 2026 10:32:21 +0200 CC: Doug Rathbone X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Doug Rathbone 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 --- 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