[pbs-devel] [PATCH proxmox-backup v2 1/3] ui: add 'show connection information' button for datastores

Dominik Csapak d.csapak at proxmox.com
Wed Nov 29 16:49:50 CET 2023


this has a similar functionality as the 'show fingerprint' button,
but for repository strings that are needed e.g. for the cli

included with and without the current user for convenience

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* add help button
* refactor the copy field (and remove the utils copy function)
* put the button only in the datastore summary
* style the copy buttons like toolbar buttons
* add datastore and hostname also as copyable fields
* seperate the cli/api fields with a title and (small) padding
 www/Makefile                    |   1 +
 www/Utils.js                    |   1 -
 www/datastore/Summary.js        |  19 ++++-
 www/window/DatastoreRepoInfo.js | 126 ++++++++++++++++++++++++++++++++
 4 files changed, 145 insertions(+), 2 deletions(-)
 create mode 100644 www/window/DatastoreRepoInfo.js

diff --git a/www/Makefile b/www/Makefile
index 04c12b31..be7e27ab 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -86,6 +86,7 @@ JSSRC=							\
 	window/VerifyAll.js				\
 	window/ZFSCreate.js				\
 	window/InfluxDbEdit.js				\
+	window/DatastoreRepoInfo.js			\
 	dashboard/DataStoreStatistics.js		\
 	dashboard/LongestTasks.js			\
 	dashboard/RunningTasks.js			\
diff --git a/www/Utils.js b/www/Utils.js
index 7592d1bd..f464b250 100644
--- a/www/Utils.js
+++ b/www/Utils.js
@@ -751,5 +751,4 @@ Ext.define('PBS.Utils', {
 
 	return options.join(', ');
     },
-
 });
diff --git a/www/datastore/Summary.js b/www/datastore/Summary.js
index d67e81cc..9299c03f 100644
--- a/www/datastore/Summary.js
+++ b/www/datastore/Summary.js
@@ -218,7 +218,24 @@ Ext.define('PBS.DataStoreSummary', {
 	padding: 5,
     },
 
-    tbar: ['->', { xtype: 'proxmoxRRDTypeSelector' }],
+    tbar: [
+	{
+	    xtype: 'button',
+	    text: gettext('Show Connection Information'),
+	    handler: function() {
+		let me = this;
+		let datastore = me.up('panel').datastore;
+		Ext.create('PBS.window.DatastoreRepoInfo', {
+		    datastore,
+		    autoShow: true,
+		});
+	    },
+	},
+	'->',
+	{
+	    xtype: 'proxmoxRRDTypeSelector',
+	},
+    ],
 
     items: [
 	{
diff --git a/www/window/DatastoreRepoInfo.js b/www/window/DatastoreRepoInfo.js
new file mode 100644
index 00000000..a7080c27
--- /dev/null
+++ b/www/window/DatastoreRepoInfo.js
@@ -0,0 +1,126 @@
+Ext.define('PBS.window.DatastoreRepoInfo', {
+    extend: 'Ext.window.Window',
+    alias: 'widget.pbsDatastoreRepoInfo',
+    mixins: ['Proxmox.Mixin.CBind'],
+
+    title: gettext('Repository Information'),
+
+    modal: true,
+    resizable: false,
+    width: 600,
+    layout: 'anchor',
+    bodyPadding: 10,
+
+    cbindData: function() {
+	let me = this;
+	let host = window.location.hostname;
+	let hostname = host;
+	if (window.location.port.toString() !== "8007") {
+	    host += `:${window.location.port}`;
+	}
+	let datastore = me.datastore;
+	let user = Proxmox.UserName;
+	let repository = `${host}:${datastore}`;
+	let repositoryWithUser = `${user}@${host}:${datastore}`;
+
+	return {
+	    datastore,
+	    hostname,
+	    repository,
+	    repositoryWithUser,
+	};
+    },
+
+    defaults: {
+	xtype: 'pbsCopyField',
+	labelWidth: 120,
+    },
+
+    items: [
+	{
+	    fieldLabel: gettext('Datastore'),
+	    cbind: {
+		value: '{datastore}',
+	    },
+	},
+	{
+	    fieldLabel: gettext('Hostname/IP'),
+	    cbind: {
+		value: '{hostname}',
+	    },
+	},
+	{
+	    xtype: 'displayfield',
+	    value: '',
+	    labelWidth: 500,
+	    fieldLabel: gettext('Repository for CLI and API'),
+	    padding: '10 0 0 0',
+	},
+	{
+	    fieldLabel: gettext('Repository'),
+	    cbind: {
+		value: '{repository}',
+	    },
+	},
+	{
+	    fieldLabel: gettext('With Current User'),
+	    cbind: {
+		value: '{repositoryWithUser}',
+	    },
+	},
+    ],
+    buttons: [
+	{
+	    xtype: 'proxmoxHelpButton',
+	    onlineHelp: 'client_repository',
+	    hidden: false,
+	},
+	'->',
+	{
+	    text: gettext('Ok'),
+	    handler: function() {
+		this.up('window').close();
+	    },
+	},
+    ],
+});
+
+Ext.define('PBS.form.CopyField', {
+    extend: 'Ext.form.FieldContainer',
+    alias: 'widget.pbsCopyField',
+
+    layout: 'hbox',
+
+    items: [
+	{
+	    xtype: 'textfield',
+	    itemId: 'inputField',
+	    editable: false,
+	    flex: 1,
+	},
+	{
+	    xtype: 'button',
+	    margin: '0 0 0 10',
+	    iconCls: 'fa fa-clipboard',
+	    baseCls: 'x-btn',
+	    cls: 'x-btn-default-toolbar-small proxmox-inline-button',
+	    handler: function() {
+		let me = this;
+		let field = me.up('pbsCopyField');
+		let el = field.getComponent('inputField')?.inputEl;
+		if (!el?.dom) {
+		    return;
+		}
+		el.dom.select();
+		document.execCommand("copy");
+	    },
+	    text: gettext('Copy'),
+	},
+    ],
+
+    initComponent: function() {
+	let me = this;
+	me.callParent();
+	me.getComponent('inputField').setValue(me.value);
+    },
+});
-- 
2.30.2





More information about the pbs-devel mailing list