[pve-devel] [PATCH pve-manager] sdn: subnet: proper change detect for dhcp range panel
Stefan Hanreich
s.hanreich at proxmox.com
Tue Nov 21 20:46:32 CET 2023
Signed-off-by: Stefan Hanreich <s.hanreich at 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
More information about the pve-devel
mailing list