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 C16749C2B0 for ; Tue, 21 Nov 2023 20:46:34 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9EFBD1001D for ; Tue, 21 Nov 2023 20:46:34 +0100 (CET) Received: from lana.proxmox.com (unknown [94.136.29.99]) by firstgate.proxmox.com (Proxmox) with ESMTP for ; Tue, 21 Nov 2023 20:46:33 +0100 (CET) Received: by lana.proxmox.com (Postfix, from userid 10043) id 5E90E2C246A; Tue, 21 Nov 2023 20:46:32 +0100 (CET) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Date: Tue, 21 Nov 2023 20:46:32 +0100 Message-Id: <20231121194632.722658-1-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.437 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy 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 RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS 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 T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH pve-manager] sdn: subnet: proper change detect for dhcp range panel X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Nov 2023 19:46:34 -0000 Signed-off-by: Stefan Hanreich --- www/manager6/sdn/SubnetEdit.js | 51 +++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/www/manager6/sdn/SubnetEdit.js b/www/manager6/sdn/SubnetEdit.js index 4fe16ab92..8851b013a 100644 --- a/www/manager6/sdn/SubnetEdit.js +++ b/www/manager6/sdn/SubnetEdit.js @@ -67,25 +67,37 @@ Ext.define('PVE.sdn.SubnetDhcpRangePanel', { me.initField(); }, + // since value is an array of objects we need to override isEquals here + isEqual: function(value1, value2) { + return JSON.stringify(value1) === JSON.stringify(value2); + }, + getValue: function() { let me = this; let store = me.lookup('grid').getStore(); - let data = []; + let value = []; store.getData() - .each((item) => - data.push(`start-address=${item.data['start-address']},end-address=${item.data['end-address']}`), - ); + .each((item) => { + // needs a deep copy otherwise we run in to ExtJS reference + // shenaningans + value.push({ + 'start-address': item.data['start-address'], + 'end-address': item.data['end-address'], + }); + }); - return data; + return value; }, getSubmitData: function() { let me = this; let data = {}; - let value = me.getValue(); + + let value = me.getValue() + .map((item) => `start-address=${item['start-address']},end-address=${item['end-address']}`); if (value.length) { data[me.getName()] = value; @@ -97,7 +109,19 @@ Ext.define('PVE.sdn.SubnetDhcpRangePanel', { setValue: function(dhcpRanges) { let me = this; let store = me.lookup('grid').getStore(); - store.setData(dhcpRanges); + + let data = []; + + dhcpRanges.forEach((item) => { + // needs a deep copy otherwise we run in to ExtJS reference + // shenaningans + data.push({ + 'start-address': item['start-address'], + 'end-address': item['end-address'], + }); + }); + + store.setData(data); }, getErrors: function() { @@ -113,6 +137,8 @@ Ext.define('PVE.sdn.SubnetDhcpRangePanel', { addRange: function() { let me = this; me.lookup('grid').getStore().add({}); + + me.getView().checkChange(); }, removeRange: function(field) { @@ -120,6 +146,8 @@ Ext.define('PVE.sdn.SubnetDhcpRangePanel', { let record = field.getWidgetRecord(); me.lookup('grid').getStore().remove(record); + + me.getView().checkChange(); }, onValueChange: function(field, value) { @@ -129,6 +157,8 @@ Ext.define('PVE.sdn.SubnetDhcpRangePanel', { record.set(column.dataIndex, value); record.commit(); + + me.getView().checkChange(); }, control: { @@ -249,12 +279,7 @@ Ext.define('PVE.sdn.SubnetEdit', { if (!me.isCreate) { me.load({ success: function(response, options) { - let values = response.result.data; - ipanel.setValues(values); - - if (values['dhcp-range']) { - dhcpPanel.setValue(values['dhcp-range']); - } + me.setValues(response.result.data); }, }); } -- 2.39.2