[pbs-devel] [PATCH proxmox-backup 5/5] ui: tape: add remove media button

Dominik Csapak d.csapak at proxmox.com
Thu Jan 11 11:40:36 CET 2024


this only removes media from the inventory, it does not touch the data

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
not super sure about the modal dialog, if we should expose 'force' at
all, and if we maybe should word it differently and/or add a hint
with a deeper explanation...

 www/Makefile                         |  1 +
 www/tape/TapeInventory.js            | 27 ++++++++++++
 www/tape/window/MediaRemoveWindow.js | 66 ++++++++++++++++++++++++++++
 3 files changed, 94 insertions(+)
 create mode 100644 www/tape/window/MediaRemoveWindow.js

diff --git a/www/Makefile b/www/Makefile
index be7e27ab..c2755ac8 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -21,6 +21,7 @@ TAPE_UI_FILES=						\
 	tape/window/Erase.js				\
 	tape/window/EncryptionEdit.js			\
 	tape/window/LabelMedia.js			\
+	tape/window/MediaRemoveWindow.js		\
 	tape/window/PoolEdit.js				\
 	tape/window/TapeBackup.js			\
 	tape/window/TapeBackupJob.js			\
diff --git a/www/tape/TapeInventory.js b/www/tape/TapeInventory.js
index dba36dac..3039a95a 100644
--- a/www/tape/TapeInventory.js
+++ b/www/tape/TapeInventory.js
@@ -60,6 +60,27 @@ Ext.define('PBS.TapeManagement.TapeInventory', {
 	    }).show();
 	},
 
+	remove: function() {
+	    let me = this;
+	    let view = me.getView();
+	    let selection = view.getSelection();
+	    if (!selection || selection.length < 1) {
+		return;
+	    }
+	    let uuid = selection[0].data.uuid;
+	    let label = selection[0].data['label-text'];
+	    Ext.create('PBS.TapeManagement.MediaRemoveWindow', {
+		uuid,
+		label,
+		autoShow: true,
+		listeners: {
+		    destroy: function() {
+			me.reload();
+		    },
+		},
+	    });
+	},
+
 	moveToVault: function() {
 	    let me = this;
 	    let view = me.getView();
@@ -206,6 +227,12 @@ Ext.define('PBS.TapeManagement.TapeInventory', {
 	    disabled: true,
 	    handler: 'format',
 	},
+	{
+	    xtype: 'proxmoxButton',
+	    text: gettext('Remove'),
+	    disabled: true,
+	    handler: 'remove',
+	},
     ],
 
     features: [
diff --git a/www/tape/window/MediaRemoveWindow.js b/www/tape/window/MediaRemoveWindow.js
new file mode 100644
index 00000000..0eb3d6be
--- /dev/null
+++ b/www/tape/window/MediaRemoveWindow.js
@@ -0,0 +1,66 @@
+Ext.define('PBS.TapeManagement.MediaRemoveWindow', {
+    extend: 'Proxmox.window.Edit',
+    mixins: ['Proxmox.Mixin.CBind'],
+
+    uuid: undefined,
+    label: undefined,
+
+    cbindData: function(config) {
+	let me = this;
+	return {
+	    uuid: me.uuid,
+	    warning: Ext.String.format(gettext("Are you sure you want to remove tape '{0}' ?"), me.label),
+	};
+    },
+
+    title: gettext('Remove Media'),
+    url: `/api2/extjs/tape/media/destroy`,
+
+    layout: 'hbox',
+    width: 400,
+    method: 'GET',
+    isCreate: true,
+    submitText: gettext('Ok'),
+    items: [
+	{
+	    xtype: 'container',
+	    padding: 0,
+	    layout: {
+		type: 'hbox',
+		align: 'stretch',
+	    },
+	    items: [
+		{
+		    xtype: 'component',
+		    cls: [Ext.baseCSSPrefix + 'message-box-icon',
+			Ext.baseCSSPrefix + 'message-box-warning',
+			Ext.baseCSSPrefix + 'dlg-icon'],
+		},
+		{
+		    xtype: 'container',
+		    flex: 1,
+		    items: [
+			{
+			    xtype: 'displayfield',
+			    cbind: {
+				value: '{warning}',
+			    },
+			},
+			{
+			    xtype: 'hidden',
+			    name: 'uuid',
+			    cbind: {
+				value: '{uuid}',
+			    },
+			},
+			{
+			    xtype: 'proxmoxcheckbox',
+			    fieldLabel: gettext('Force'),
+			    name: 'force',
+			},
+		    ],
+		},
+	    ],
+	},
+    ],
+});
-- 
2.30.2





More information about the pbs-devel mailing list