diff --git a/www/Makefile b/www/Makefile index f217d46d..ad8c901d 100644 --- a/www/Makefile +++ b/www/Makefile @@ -62,6 +62,7 @@ JSSRC= \ window/BackupGroupChangeOwner.js \ window/CreateDirectory.js \ window/DataStoreEdit.js \ + window/NamespaceEdit.js \ window/MaintenanceOptions.js \ window/NotesEdit.js \ window/RemoteEdit.js \ diff --git a/www/datastore/Content.js b/www/datastore/Content.js index e6196c01..6d942288 100644 --- a/www/datastore/Content.js +++ b/www/datastore/Content.js @@ -388,6 +388,21 @@ Ext.define('PBS.DataStoreContent', { }); }, + addNS: function() { + let me = this; + let view = me.getView(); + if (!view.datastore) return; + + Ext.create('PBS.window.NamespaceEdit', { + autoShow: true, + datastore: view.datastore, + listeners: { + destroy: () => view.down('pbsNamespaceSelector').store?.load(), + }, + }); + }, + + onVerify: function(view, rI, cI, item, e, rec) { let me = this; view = me.getView(); @@ -1036,10 +1051,17 @@ Ext.define('PBS.DataStoreContent', { }, { xtype: 'pbsNamespaceSelector', + width: 200, cbind: { datastore: '{datastore}', }, }, + { + xtype: 'proxmoxButton', + text: gettext('Add NS'), + iconCls: 'fa fa-plus-square', + handler: 'addNS', + }, '-', { xtype: 'tbtext', diff --git a/www/window/NamespaceEdit.js b/www/window/NamespaceEdit.js new file mode 100644 index 00000000..79bf5e52 --- /dev/null +++ b/www/window/NamespaceEdit.js @@ -0,0 +1,52 @@ +Ext.define('PBS.window.NamespaceEdit', { + extend: 'Proxmox.window.Edit', + xtype: 'pbsNamespaceEdit', // for now rather "NamespaceAdd" + mixins: ['Proxmox.Mixin.CBind'], + + //onlineHelp: 'namespaces', // TODO + + isCreate: true, + subject: gettext('Namespace'), + // avoid that the trigger of the combogrid fields open on window show + defaultFocus: 'proxmoxHelpButton', + + cbind: { + url: '/api2/extjs/admin/datastore/{datastore}/namespace', + }, + method: 'POST', + + width: 450, + fieldDefaults: { + labelWidth: 120, + }, + + items: { + xtype: 'inputpanel', + onGetValues: function(values) { + if (values.parent === '') { + delete values.parent; + } + return values; + }, + items: [ + { + xtype: 'pbsNamespaceSelector', + name: 'parent', + fieldLabel: gettext('Parent Namespace'), + cbind: { + datastore: '{datastore}', + }, + }, + { + xtype: 'proxmoxtextfield', + name: 'name', + fieldLabel: gettext('Namespace Name'), + value: '', + allowBlank: false, + maxLength: 31, + regex: PBS.Utils.SAFE_ID_RE, + regexText: gettext("Only alpha numerical, '_' and '-' (if not at start) allowed"), + }, + ], + }, +});