]> git.proxmox.com Git - proxmox-widget-toolkit.git/commitdiff
add Realm model and RealmComboBox
authorDominik Csapak <d.csapak@proxmox.com>
Fri, 15 May 2020 08:19:26 +0000 (10:19 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 18 May 2020 15:03:32 +0000 (17:03 +0200)
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@proxmox.com>
Makefile
data/model/Realm.js [new file with mode: 0644]
form/RealmComboBox.js [new file with mode: 0644]

index 85fad6b0e92573e09e4d04d89a0c3dd89bb8d92e..a23ad04af0d1cb1022c3016e08c03bd7d59ac906 100644 (file)
--- 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 (file)
index 0000000..dce270d
--- /dev/null
@@ -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 (file)
index 0000000..e391fbf
--- /dev/null
@@ -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,
+    },
+});