www: add AuthidSelector

similar to TokenSelector, but with different fields / mapping of data.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
Fabian Grünbichler 2020-11-06 13:01:56 +01:00 committed by Dietmar Maurer
parent dbd45a72c3
commit f0609851fc
2 changed files with 99 additions and 0 deletions

View File

@ -8,6 +8,7 @@ JSSRC= \
Utils.js \
form/UserSelector.js \
form/TokenSelector.js \
form/AuthidSelector.js \
form/RemoteSelector.js \
form/DataStoreSelector.js \
form/CalendarEvent.js \

View File

@ -0,0 +1,98 @@
Ext.define('pbs-authids', {
extend: 'Ext.data.Model',
fields: [
'authid', 'comment', 'type',
],
idProperty: 'authid',
});
Ext.define('PBS.form.AuthidSelector', {
extend: 'Proxmox.form.ComboGrid',
alias: 'widget.pbsAuthidSelector',
allowBlank: false,
autoSelect: false,
valueField: 'authid',
displayField: 'authid',
editable: true,
anyMatch: true,
forceSelection: true,
store: {
model: 'pbs-authids',
params: {
enabled: 1,
},
sorters: 'authid',
},
initComponent: function() {
let me = this;
me.userStore = Ext.create('Ext.data.Store', {
model: 'pbs-users-with-tokens',
});
me.userStore.on('load', this.onLoad, this);
me.userStore.load();
me.callParent();
},
onLoad: function(store, data, success) {
if (!success) return;
let authidStore = this.store;
let records = [];
Ext.Array.each(data, function(user) {
let u = {};
u.authid = user.data.userid;
u.comment = user.data.comment;
u.type = 'u';
records.push(u);
let tokens = user.data.tokens || [];
Ext.Array.each(tokens, function(token) {
let r = {};
r.authid = token.tokenid;
r.comment = token.comment;
r.type = 't';
records.push(r);
});
});
authidStore.loadData(records);
},
listConfig: {
columns: [
{
header: gettext('Type'),
sortable: true,
dataIndex: 'type',
renderer: function(value) {
switch (value) {
case 'u': return gettext('User');
case 't': return gettext('API Token');
default: return Proxmox.Utils.unknownText;
}
},
flex: 1,
},
{
header: gettext('Auth ID'),
sortable: true,
dataIndex: 'authid',
renderer: Ext.String.htmlEncode,
flex: 1,
},
{
header: gettext('Comment'),
sortable: false,
dataIndex: 'comment',
renderer: Ext.String.htmlEncode,
flex: 1,
},
],
},
});