From 0391dee1a26aa6678d4ced265ca825df7b25f051 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 15 May 2020 10:19:26 +0200 Subject: [PATCH] add Realm model and RealmComboBox copied from pve-manager, with adaptions for modern js (let, parameter destructuring,...) and dropped the not needed 'needOTP' method Signed-off-by: Dominik Csapak --- 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.39.2