[pve-devel] [PATCH widget-toolkit 3/3] add Realm model and RealmComboBox

Dominik Csapak d.csapak at proxmox.com
Fri May 15 10:19:26 CEST 2020


copied from pve-manager, with adaptions for modern js
(let, parameter destructuring,...)

and dropped the not needed 'needOTP' method

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 Makefile              |  2 ++
 data/model/Realm.js   | 29 ++++++++++++++++++++++
 form/RealmComboBox.js | 57 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 88 insertions(+)
 create mode 100644 data/model/Realm.js
 create mode 100644 form/RealmComboBox.js

diff --git a/Makefile b/Makefile
index 85fad6b..a23ad04 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@ JSSRC=					\
 	data/ObjectStore.js		\
 	data/RRDStore.js		\
 	data/TimezoneStore.js		\
+	data/model/Realm.js		\
 	form/DisplayEdit.js		\
 	form/ExpireDate.js		\
 	form/IntegerField.js		\
@@ -28,6 +29,7 @@ JSSRC=					\
 	form/RRDTypeSelector.js		\
 	form/BondModeSelector.js	\
 	form/NetworkSelector.js		\
+	form/RealmComboBox.js		\
 	button/Button.js		\
 	button/HelpButton.js		\
 	grid/ObjectGrid.js		\
diff --git a/data/model/Realm.js b/data/model/Realm.js
new file mode 100644
index 0000000..dce270d
--- /dev/null
+++ b/data/model/Realm.js
@@ -0,0 +1,29 @@
+Ext.define('pmx-domains', {
+    extend: "Ext.data.Model",
+    fields: [
+	'realm', 'type', 'comment', 'default',
+	{
+	    name: 'tfa',
+	    allowNull: true,
+	},
+	{
+	    name: 'descr',
+	    convert: function(value, { data={} }) {
+		if (value) return Ext.String.htmlEncode(value);
+
+		let text = data.comment || data.realm;
+
+		if (data.tfa) {
+		    text += ` (+ ${data.tfa})`;
+		}
+
+		return Ext.String.htmlEncode(text);
+	    },
+	},
+    ],
+    idProperty: 'realm',
+    proxy: {
+	type: 'proxmox',
+	url: "/api2/json/access/domains",
+    },
+});
diff --git a/form/RealmComboBox.js b/form/RealmComboBox.js
new file mode 100644
index 0000000..e391fbf
--- /dev/null
+++ b/form/RealmComboBox.js
@@ -0,0 +1,57 @@
+Ext.define('Proxmox.form.RealmComboBox', {
+    extend: 'Ext.form.field.ComboBox',
+    alias: 'widget.pmxRealmComboBox',
+
+    controller: {
+	xclass: 'Ext.app.ViewController',
+
+	init: function(view) {
+	    view.store.on('load', this.onLoad, view);
+	},
+
+	onLoad: function(store, records, success) {
+	    if (!success) {
+		return;
+	    }
+	    var me = this;
+	    var val = me.getValue();
+	    if (!val || !me.store.findRecord('realm', val)) {
+		var def = 'pam';
+		Ext.each(records, function(rec) {
+		    if (rec.data && rec.data.default) {
+			def = rec.data.realm;
+		    }
+		});
+		me.setValue(def);
+	    }
+	},
+    },
+
+    fieldLabel: gettext('Realm'),
+    name: 'realm',
+    queryMode: 'local',
+    allowBlank: false,
+    editable: false,
+    forceSelection: true,
+    autoSelect: false,
+    triggerAction: 'all',
+    valueField: 'realm',
+    displayField: 'descr',
+    getState: function() {
+	return { value: this.getValue() };
+    },
+    applyState: function(state) {
+	if (state && state.value) {
+	    this.setValue(state.value);
+	}
+    },
+    stateEvents: ['select'],
+    stateful: true, // last chosen auth realm is saved between page reloads
+    id: 'pveloginrealm', // We need stable ids when using stateful, not autogenerated
+    stateID: 'pveloginrealm',
+
+    store: {
+	model: 'pmx-domains',
+	autoLoad: true,
+    },
+});
-- 
2.20.1





More information about the pve-devel mailing list