[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