From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 9FAAA6574E for ; Thu, 23 Jul 2020 13:03:53 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 96369286D4 for ; Thu, 23 Jul 2020 13:03:53 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id B325A286BA for ; Thu, 23 Jul 2020 13:03:52 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 77BAE4333B for ; Thu, 23 Jul 2020 13:03:52 +0200 (CEST) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Thu, 23 Jul 2020 13:03:51 +0200 Message-Id: <20200723110351.31882-3-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200723110351.31882-1-d.csapak@proxmox.com> References: <20200723110351.31882-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.001 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods NO_DNS_FOR_FROM 0.379 Envelope sender has no MX or A DNS records RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pbs-devel] [PATCH proxmox-backup 3/3] ui: DataStoreContent: keep selection and expansion on reload X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jul 2020 11:03:53 -0000 when clicking reload, we keep the existing selection (if it still exists), and the previous expanded elements expanded Signed-off-by: Dominik Csapak --- www/DataStoreContent.js | 42 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/www/DataStoreContent.js b/www/DataStoreContent.js index e32c616..5f407e9 100644 --- a/www/DataStoreContent.js +++ b/www/DataStoreContent.js @@ -141,6 +141,30 @@ Ext.define('PBS.DataStoreContent', { let groups = this.getRecordGroups(records); + let selected; + let expanded = {}; + + view.getSelection().some(function(item) { + let id = item.data.text; + if (item.data.leaf) { + id = item.parentNode.data.text + id; + } + selected = id; + return true; + }); + + view.getRootNode().cascadeBy({ + before: item => { + if (item.isExpanded() && !item.data.leaf) { + let id = item.data.text; + expanded[id] = true; + return true; + } + return false; + }, + after: () => {}, + }); + for (const item of records) { let group = item.data["backup-type"] + "/" + item.data["backup-id"]; let children = groups[group].children; @@ -152,6 +176,8 @@ Ext.define('PBS.DataStoreContent', { data.cls = 'no-leaf-icons'; data.matchesFilter = true; + data.expanded = !!expanded[data.text]; + data.children = []; for (const file of data.files) { file.text = file.filename, @@ -166,7 +192,7 @@ Ext.define('PBS.DataStoreContent', { } let children = []; - for (const [_key, group] of Object.entries(groups)) { + for (const [name, group] of Object.entries(groups)) { let last_backup = 0; let crypt = { none: 0, @@ -189,6 +215,7 @@ Ext.define('PBS.DataStoreContent', { group.matchesFilter = true; crypt.count = group.count; group['crypt-mode'] = PBS.Utils.calculateCryptMode(crypt); + group.expanded = !!expanded[name]; children.push(group); } @@ -196,6 +223,19 @@ Ext.define('PBS.DataStoreContent', { expanded: true, children: children }); + + if (selected !== undefined) { + let selection = view.getRootNode().findChildBy(function(item) { + let id = item.data.text; + if (item.data.leaf) { + id = item.parentNode.data.text + id; + } + return selected === id; + }, undefined, true); + view.setSelection(selection); + view.getView().focusRow(selection); + } + Proxmox.Utils.setErrorMask(view, false); if (view.getStore().getFilters().length > 0) { let searchBox = me.lookup("searchbox"); -- 2.20.1