[pbs-devel] applied: [PATCH backup 2/2] ui: user edit: rework interaction of realm and view model

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Mar 28 18:55:15 CEST 2023


avoid accessing private members directly but rather try to use the
public API, this then allows us do drop declaring a reference on the
realm combobox, which was not directly used and thus a bit subtle.

Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---

still not the cleanest approach in general IMO, it probably would be
better to move the "can PW change" logic into the combobox (either in a
child here or in widget toolkit) and, e.g., expose it via a
selectionCanChangePW like getter there which can then be bindend here.

 www/window/UserEdit.js | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/www/window/UserEdit.js b/www/window/UserEdit.js
index 0129aeed..63a6f7f8 100644
--- a/www/window/UserEdit.js
+++ b/www/window/UserEdit.js
@@ -1,6 +1,5 @@
 Ext.define('PBS.window.UserEditViewModel', {
     extend: 'Ext.app.ViewModel',
-
     alias: 'viewmodel.pbsUserEdit',
 
     data: {
@@ -9,15 +8,16 @@ Ext.define('PBS.window.UserEditViewModel', {
 
     formulas: {
 	maySetPassword: function(get) {
-	    // Dummy read, so that ExtJS will update the formula when
-	    // the combobox changes
-	    let _dummy = get('realm');
+	    let realm = get('realm');
 
-	    // All in all a bit hacky, is there a nicer way to do this?
-	    let realm_type = this.data.realmComboBox.selection?.data.type
-		? this.data.realmComboBox.selection?.data.type : 'pbs';
-
-	    return Proxmox.Schema.authDomains[realm_type].pwchange && this.config.view.isCreate;
+	    let view = this.getView();
+	    let realmStore = view.down('pmxRealmComboBox').getStore();
+	    if (realmStore.isLoaded()) {
+		let rec = realmStore.findRecord('realm', realm, 0, false, true, true);
+		return Proxmox.Schema.authDomains[rec.data.type]?.pwchange && view.isCreate;
+	    } else {
+		return view.isCreate;
+	    }
 	},
     },
 });
@@ -78,8 +78,9 @@ Ext.define('PBS.window.UserEdit', {
 		allowBlank: false,
 		matchFieldWidth: false,
 		listConfig: { width: 300 },
-		reference: 'realmComboBox',
-		bind: '{realm}',
+		bind: {
+		    value: '{realm}',
+		},
 		cbind: {
 		    hidden: '{!isCreate}',
 		    disabled: '{!isCreate}',
-- 
2.30.2






More information about the pbs-devel mailing list