From: Fabian Ebner Date: Fri, 23 Apr 2021 10:14:59 +0000 (+0200) Subject: disk list: add wipe disk button X-Git-Url: https://git.proxmox.com/?p=proxmox-widget-toolkit.git;a=commitdiff_plain;h=d453438aa0a893ee1b59630d2129d1542c9055e9 disk list: add wipe disk button which shows a confirm dialog with the most relevant information before actually issuing the API call. Signed-off-by: Fabian Ebner --- diff --git a/src/panel/DiskList.js b/src/panel/DiskList.js index c6f1638..b155139 100644 --- a/src/panel/DiskList.js +++ b/src/panel/DiskList.js @@ -44,6 +44,8 @@ Ext.define('Proxmox.DiskList', { extend: 'Ext.tree.Panel', alias: 'widget.pmxDiskList', + supportsWipeDisk: false, + rootVisible: false, emptyText: gettext('No Disks found'), @@ -113,6 +115,34 @@ Ext.define('Proxmox.DiskList', { }); }, + wipeDisk: function() { + let me = this; + let view = me.getView(); + let selection = view.getSelection(); + if (!selection || selection.length < 1) return; + + let rec = selection[0]; + Proxmox.Utils.API2Request({ + url: `${view.exturl}/wipedisk`, + waitMsgTarget: view, + method: 'PUT', + params: { disk: rec.data.name }, + failure: function(response, options) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + }, + success: function(response, options) { + var upid = response.result.data; + var win = Ext.create('Proxmox.window.TaskProgress', { + upid: upid, + taskDone: function() { + me.reload(); + }, + }); + win.show(); + }, + }); + }, + init: function(view) { let nodename = view.nodename || 'localhost'; view.baseurl = `/api2/json/nodes/${nodename}/disks`; @@ -336,6 +366,57 @@ Ext.define('Proxmox.DiskList', { }, ]; + if (me.supportsWipeDisk) { + tbar.push('-'); + tbar.push({ + xtype: 'proxmoxButton', + text: gettext('Wipe Disk'), + parentXType: 'treepanel', + dangerous: true, + confirmMsg: function(rec) { + const data = rec.data; + + let mainMessage = Ext.String.format( + gettext('Are you sure you want to wipe {0}?'), + data.devpath, + ); + mainMessage += `
${gettext('All data on the device will be lost!')}`; + + const type = me.renderDiskType(data["disk-type"]); + + let usage; + if (data.children.length > 0) { + const partitionUsage = data.children.map( + partition => me.renderDiskUsage(partition.used), + ).join(', '); + usage = `${gettext('Partitions')} (${partitionUsage})`; + } else { + usage = me.renderDiskUsage(data.used, undefined, rec); + } + + const size = Proxmox.Utils.format_size(data.size); + const serial = Ext.String.htmlEncode(data.serial); + + let additionalInfo = `${gettext('Type')}: ${type}
`; + additionalInfo += `${gettext('Usage')}: ${usage}
`; + additionalInfo += `${gettext('Size')}: ${size}
`; + additionalInfo += `${gettext('Serial')}: ${serial}`; + + return `${mainMessage}

${additionalInfo}`; + }, + disabled: true, + enableFn: function(rec) { + // TODO enable for partitions once they can be selected for ZFS,LVM,etc. creation + if (!rec || rec.data.parent) { + return false; + } else { + return true; + } + }, + handler: 'wipeDisk', + }); + } + me.tbar = tbar; me.callParent();