On Mon Jul 29, 2024 at 12:25 PM CEST, Aaron Lauterer wrote: > > > On 2024-07-26 14:22, Shannon Sterz wrote: > > On Wed Jul 3, 2024 at 10:01 AM CEST, Aaron Lauterer wrote: > >> The new optional bridge_vids field allows to set that property via the > >> GUI. Since the backend needs to support it, the field needs to be > >> explicitly enabled. > >> > >> For now, Proxmox VE (PVE) is the use case. > >> > >> Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com> > >> --- > >> changes since v2: > >> * added validation code following how it is implemented in the API > >> > >> src/node/NetworkEdit.js | 62 +++++++++++++++++++++++++++++++++++++++++ > >> src/node/NetworkView.js | 5 ++++ > >> 2 files changed, 67 insertions(+) > >> > >> diff --git a/src/node/NetworkEdit.js b/src/node/NetworkEdit.js > >> index 27c1baf..8c1b135 100644 > >> --- a/src/node/NetworkEdit.js > >> +++ b/src/node/NetworkEdit.js > >> @@ -2,6 +2,9 @@ Ext.define('Proxmox.node.NetworkEdit', { > >> extend: 'Proxmox.window.Edit', > >> alias: ['widget.proxmoxNodeNetworkEdit'], > >> > >> + // Enable to show the VLAN ID field > >> + bridge_set_vids: false, > >> + > >> initComponent: function() { > >> let me = this; > >> > >> @@ -57,11 +60,67 @@ Ext.define('Proxmox.node.NetworkEdit', { > >> } > >> > >> if (me.iftype === 'bridge') { > >> + let vids = Ext.create('Ext.form.field.Text', { > >> + fieldLabel: gettext('Bridge VIDS'), > >> + name: 'bridge_vids', > >> + emptyText: '2-4094', > >> + disabled: true, > >> + autoEl: { > >> + tag: 'div', > >> + 'data-qtip': gettext('Space-separated list of VLANs and > >> ranges, for example: 2 4 100-200'), > >> + }, > >> + validator: function(value) { > >> + if (!value) { return true; } // Empty > > > > nit: our js style guide state that single line ifs should be avoided > > > >> + let result = true; > >> + > >> + let vid_list = value.split(' '); > >> + > >> + let checkVid = function(tag) { > >> + if (tag < 2 || tag > 4094) { > >> + return `not a valid VLAN ID '${tag}'`; > >> + } > >> + return true; > >> + }; > >> + > >> + for (const vid of vid_list) { > >> + if (!vid) { > >> + continue; > >> + } > >> + let res = vid.match(/^(\d+)([-](\d+))?$/i); > > > > nit: see my comment for patch 2. > > > >> + if (!res) { > >> + return `not a valid VLAN configuration '${vid}'`; > >> + } > >> + let start = Number(res[1]); > >> + let end = Number(res[3]); > >> + > >> + if (start) { > >> + result = checkVid(start); > >> + if (result !== true) { return result; } > > > > same here... > > > >> + } > >> + if (end) { > >> + result = checkVid(end); > >> + if (result !== true) { return result; } > > > > and here. it might be more elegant to do this: > > > > let invalidVid = function(tag) { > > if (!isNaN(tag) && (tag < 2 || tag > 4094)) { > > return `not a valid VLAN ID '${tag}'`; > > } > > > > return false; > > }; > > > > // [..] > > > > if (res = invalidVid(start)) { > > return res; > > } > > > > if (res = invalidVid(end)) { > > return res; > > } > > > > `Number(res[n])` should return `NaN` if `res[n]` is undefined, this > > shouldn't be the case for start ever but is relevant for `end`. > > > > Thanks for the overall review and these suggestions! > > The above example won't work exactly like that, as eslint will throw an > error due to assignments inside the if-clause. > > I opted for > res = invalidVid(start); > if (res) { > return res; > } > > Not quite as succinct, but it does the same job and adheres to our > eslint rules.
a fair enough, yeah didn't check with eslint, sorry my bad _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel