--- /dev/null
+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();
+ },
+});
+