public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Aaron Lauterer <a.lauterer@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Shannon Sterz <s.sterz@proxmox.com>
Subject: Re: [pve-devel] [PATCH widget-toolkit v3] fix #3892: Network: add bridge vids field for bridge_vids
Date: Mon, 29 Jul 2024 12:25:06 +0200	[thread overview]
Message-ID: <e0fa5506-bd29-4325-b5ea-1bd4017d8b45@proxmox.com> (raw)
In-Reply-To: <D2ZGTTIBD4PC.2JZIEZ35LOL91@proxmox.com>



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.lauterer@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.


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


  reply	other threads:[~2024-07-29 10:25 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-03  8:01 [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Aaron Lauterer
2024-07-03  8:01 ` [pve-devel] [PATCH common v3 1/3] tools: add check_list_empty function Aaron Lauterer
2024-07-03  8:01 ` [pve-devel] [PATCH common v3 2/3] fix #3893: network: add vlan id and range parameter definitions Aaron Lauterer
2024-07-26 12:22   ` Shannon Sterz
2024-07-03  8:01 ` [pve-devel] [PATCH common v3 3/3] inotify: interfaces: make sure bridge_vids use space as separator Aaron Lauterer
2024-07-03  8:01 ` [pve-devel] [PATCH widget-toolkit v3] fix #3892: Network: add bridge vids field for bridge_vids Aaron Lauterer
2024-07-26 12:22   ` Shannon Sterz
2024-07-29 10:25     ` Aaron Lauterer [this message]
2024-07-29 10:42       ` Shannon Sterz
2024-07-03  8:01 ` [pve-devel] [PATCH manager v3 5/6] fix #3893: api: network: add bridge_vids parameter Aaron Lauterer
2024-07-26 12:23   ` Shannon Sterz
2024-07-03  8:01 ` [pve-devel] [PATCH manager v3 6/6] fix #3893: ui: network: enable bridge_vids field Aaron Lauterer
2024-07-23 11:24 ` [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Stefan Hanreich
2024-07-23 13:33 ` [pve-devel] [PATCH widget-toolkit v3 7/6 follow-up] Network: add explanation for bridge vids field Aaron Lauterer
2024-07-26 12:23   ` Shannon Sterz
2024-07-26 12:22 ` [pve-devel] [PATCH common, widget-toolkit, manager v3 0/3] fix #3893: make bridge vids configurable Shannon Sterz

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=e0fa5506-bd29-4325-b5ea-1bd4017d8b45@proxmox.com \
    --to=a.lauterer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.sterz@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
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal