From: Stefan Hanreich <s.hanreich@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH pve-manager] sdn: subnet: proper change detect for dhcp range panel
Date: Tue, 21 Nov 2023 20:46:32 +0100 [thread overview]
Message-ID: <20231121194632.722658-1-s.hanreich@proxmox.com> (raw)
Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---
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
next reply other threads:[~2023-11-21 19:46 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-21 19:46 Stefan Hanreich [this message]
2023-11-21 21:14 ` [pve-devel] applied: " Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231121194632.722658-1-s.hanreich@proxmox.com \
--to=s.hanreich@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox