From b2471e89d06f95329f286d39a3c8798699eecc9c Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 10 Mar 2023 15:08:07 +0100 Subject: [PATCH] input panel: improve validity change check for advanced fields instead of only checking the validity of the advanced items when the form validity changed as a whole, add a validity change listener to each field in the advanced section. This improves the behaviour such that every time an advanced field gets invalid the items are show, not only when the form was valid before. Signed-off-by: Dominik Csapak Tested-By: Aaron Lauterer Signed-off-by: Thomas Lamprecht --- src/window/Edit.js | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/window/Edit.js b/src/window/Edit.js index 51ebfa5..7f94e30 100644 --- a/src/window/Edit.js +++ b/src/window/Edit.js @@ -318,21 +318,6 @@ Ext.define('Proxmox.window.Edit', { let dirty = form.isDirty(); submitBtn.setDisabled(!valid || !(dirty || me.isCreate)); resetBtn.setDisabled(!dirty); - - if (inputPanel && inputPanel.hasAdvanced) { - // we want to show the advanced options as soon as some of it is not valid - let advancedItems = me.down('#advancedContainer').query('field'); - let allAdvancedValid = true; - advancedItems.forEach(function(field) { - if (!field.isValid()) { - allAdvancedValid = false; - } - }); - - if (!allAdvancedValid) { - inputPanel.setAdvancedVisible(true); - } - } }; form.on('dirtychange', set_button_status); @@ -395,6 +380,18 @@ Ext.define('Proxmox.window.Edit', { me.callParent(); + + if (inputPanel?.hasAdvanced) { + let advancedItems = inputPanel.down('#advancedContainer').query('field'); + advancedItems.forEach(function(field) { + me.mon(field, 'validitychange', (f, valid) => { + if (!valid) { + f.up('inputpanel').setAdvancedVisible(true); + } + }); + }); + } + // always mark invalid fields me.on('afterlayout', function() { // on touch devices, the isValid function