ui: add namespace selector combobox

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2022-05-06 09:26:47 +02:00
parent d45506d4a4
commit 968270ae3d
2 changed files with 80 additions and 0 deletions

View File

@ -40,6 +40,7 @@ JSSRC= \
form/AuthidSelector.js \
form/RemoteSelector.js \
form/DataStoreSelector.js \
form/NamespaceSelector.js \
form/CalendarEvent.js \
form/PermissionPathSelector.js \
form/GroupSelector.js \

View File

@ -0,0 +1,79 @@
Ext.define('pbs-namespaces', {
extend: 'Ext.data.Model',
fields: [
{
name: 'ns',
},
{
name: 'id', // fake as else the model messes with our value and/or display...
type: 'string',
calculate: data => data.ns === '' ? '/' : data.ns,
},
],
idProperty: 'id',
});
Ext.define('PBS.form.NamespaceSelector', {
extend: 'Ext.form.field.ComboBox',
alias: 'widget.pbsNamespaceSelector',
allowBlank: true,
autoSelect: true,
valueField: 'ns',
displayField: 'ns',
emptyText: gettext('Root'),
editable: true,
anyMatch: true,
forceSelection: true,
matchFieldWidth: false,
listConfig: {
minWidth: 170,
maxWidth: 500,
// below doesn't work :/
//minHeight: 30,
//emptyText: gettext('No namespaces accesible.'),
},
triggers: {
clear: {
cls: 'pmx-clear-trigger',
weight: -1,
hidden: true,
handler: function() {
this.triggers.clear.setVisible(false);
this.setValue('');
},
},
},
listeners: {
change: function(field, value) {
let canClear = value !== '';
field.triggers.clear.setVisible(canClear);
},
},
initComponent: function() {
let me = this;
if (!me.datastore) {
console.error("no datastore passed");
return;
}
me.store = Ext.create('Ext.data.Store', {
model: 'pbs-namespaces',
autoLoad: true,
proxy: {
type: 'proxmox',
timeout: 30 * 1000,
url: `/api2/json/admin/datastore/${me.datastore}/namespace`,
},
});
me.callParent();
},
});