public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Hannes Laimer <h.laimer@proxmox.com>
To: pbs-devel@lists.proxmox.com, pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v4 proxmox-widget-toolkit 1/10] safe-destroy: move SafeDestroy from pve-manager here
Date: Tue, 15 Sep 2020 11:54:11 +0200	[thread overview]
Message-ID: <20200915095420.990827-2-h.laimer@proxmox.com> (raw)
In-Reply-To: <20200915095420.990827-1-h.laimer@proxmox.com>

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
 src/Makefile              |   1 +
 src/window/SafeDestroy.js | 194 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 195 insertions(+)
 create mode 100644 src/window/SafeDestroy.js

diff --git a/src/Makefile b/src/Makefile
index 12dda30..ea71647 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -43,6 +43,7 @@ JSSRC=					\
 	panel/GaugeWidget.js		\
 	window/Edit.js			\
 	window/PasswordEdit.js		\
+	window/SafeDestroy.js		\
 	window/TaskViewer.js		\
 	window/LanguageEdit.js		\
 	window/DiskSmart.js		\
diff --git a/src/window/SafeDestroy.js b/src/window/SafeDestroy.js
new file mode 100644
index 0000000..4cc1d89
--- /dev/null
+++ b/src/window/SafeDestroy.js
@@ -0,0 +1,194 @@
+/* Popup a message window
+ * where the user has to manually enter the resource ID
+ * to enable the destroy button
+ */
+Ext.define('Proxmox.window.SafeDestroy', {
+    extend: 'Ext.window.Window',
+    alias: 'proxmoxSafeDestroy',
+
+    title: gettext('Confirm'),
+    modal: true,
+    buttonAlign: 'center',
+    bodyPadding: 10,
+    width: 450,
+    layout: { type:'hbox' },
+    defaultFocus: 'confirmField',
+    showProgress: false,
+
+    config: {
+	item: {
+	    id: undefined,
+	    type: undefined
+	},
+	url: undefined,
+	params: {}
+    },
+
+    getParams: function() {
+	var me = this;
+	var purgeCheckbox = me.lookupReference('purgeCheckbox');
+	if (purgeCheckbox.checked) {
+	    me.params.purge = 1;
+	}
+	if (Ext.Object.isEmpty(me.params)) {
+	    return '';
+	}
+	return '?' + Ext.Object.toQueryString(me.params);
+    },
+
+    controller: {
+
+	xclass: 'Ext.app.ViewController',
+
+	control: {
+	    'field[name=confirm]': {
+		change: function(f, value) {
+		    var view = this.getView();
+		    var removeButton = this.lookupReference('removeButton');
+		    if (value === view.getItem().id.toString()) {
+			removeButton.enable();
+		    } else {
+			removeButton.disable();
+		    }
+		},
+		specialkey: function (field, event) {
+		    var removeButton = this.lookupReference('removeButton');
+		    if (!removeButton.isDisabled() && event.getKey() == event.ENTER) {
+			removeButton.fireEvent('click', removeButton, event);
+		    }
+		}
+	    },
+           'button[reference=removeButton]': {
+		click: function() {
+		    var view = this.getView();
+		    Proxmox.Utils.API2Request({
+			url: view.getUrl() + view.getParams(),
+			method: 'DELETE',
+			waitMsgTarget: view,
+			failure: function(response, opts) {
+			    view.close();
+			    Ext.Msg.alert('Error', response.htmlStatus);
+			},
+			success: function(response, options) {
+			    var hasProgressBar = view.showProgress &&
+				response.result.data ? true : false;
+
+			    if (hasProgressBar) {
+				// stay around so we can trigger our close events
+				// when background action is completed
+				view.hide();
+
+				var upid = response.result.data;
+				var win = Ext.create('Proxmox.window.TaskProgress', {
+				    upid: upid,
+				    listeners: {
+					destroy: function () {
+					    view.close();
+					}
+				    }
+				});
+				win.show();
+			    } else {
+				view.close();
+			    }
+			}
+		    });
+		}
+            }
+	}
+    },
+
+    items: [
+	{
+	    xtype: 'component',
+	    cls: [ Ext.baseCSSPrefix + 'message-box-icon',
+		   Ext.baseCSSPrefix + 'message-box-warning',
+		   Ext.baseCSSPrefix + 'dlg-icon']
+	},
+	{
+	    xtype: 'container',
+	    flex: 1,
+	    layout: {
+		type: 'vbox',
+		align: 'stretch'
+	    },
+	    items: [
+		{
+		    xtype: 'component',
+		    reference: 'messageCmp'
+		},
+		{
+		    itemId: 'confirmField',
+		    reference: 'confirmField',
+		    xtype: 'textfield',
+		    name: 'confirm',
+		    labelWidth: 300,
+		    hideTrigger: true,
+		    allowBlank: false
+		},
+		{
+		    xtype: 'proxmoxcheckbox',
+		    name: 'purge',
+		    reference: 'purgeCheckbox',
+		    boxLabel: gettext('Purge'),
+		    checked: false,
+		    autoEl: {
+			tag: 'div',
+			'data-qtip': gettext('Remove from replication and backup jobs')
+		    }
+		}
+	    ]
+	}
+    ],
+    buttons: [
+	{
+	    reference: 'removeButton',
+	    text: gettext('Remove'),
+	    disabled: true
+	}
+    ],
+
+    initComponent : function() {
+	var me = this;
+
+	me.callParent();
+
+	var item = me.getItem();
+
+	if (!Ext.isDefined(item.id)) {
+	    throw "no ID specified";
+	}
+
+	if (!Ext.isDefined(item.type)) {
+	    throw "no VM type specified";
+	}
+
+	var messageCmp = me.lookupReference('messageCmp');
+	var msg;
+
+	if (item.type === 'VM') {
+	    msg = Proxmox.Utils.format_task_description('qmdestroy', item.id);
+	} else if (item.type === 'CT') {
+	    msg = Proxmox.Utils.format_task_description('vzdestroy', item.id);
+	} else if (item.type === 'CephPool') {
+	    msg = Proxmox.Utils.format_task_description('cephdestroypool', item.id);
+	} else if (item.type === 'Image') {
+	    msg = Proxmox.Utils.format_task_description('unknownimgdel', item.id);
+	} else {
+	    throw "unknown item type specified";
+	}
+
+	messageCmp.setHtml(msg);
+
+	if (!(item.type === 'VM' || item.type === 'CT')) {
+	    let purgeCheckbox = me.lookupReference('purgeCheckbox');
+	    purgeCheckbox.setDisabled(true);
+	    purgeCheckbox.setHidden(true);
+	}
+
+	var confirmField = me.lookupReference('confirmField');
+	msg = gettext('Please enter the ID to confirm') +
+	    ' (' + item.id + ')';
+	confirmField.setFieldLabel(msg);
+    }
+});
-- 
2.20.1





  reply	other threads:[~2020-09-15  9:55 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-15  9:54 [pve-devel] [PATCH v4 proxmox-widget-toolkit 0/10] removal of directories in PBS WebUI Hannes Laimer
2020-09-15  9:54 ` Hannes Laimer [this message]
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-widget-toolkit 2/10] safe-destroy: eslint --fix Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-widget-toolkit 3/10] safe-destroy: replace type with purgeable and taskName Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-widget-toolkit 4/10] safe-destroy: replace var with let/const Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-widget-toolkit 5/10] safe-destroy: add possibility to show a small note Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-widget-toolkit 6/10] utils: add task description for directory removal Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 pve-manager 7/10] safe-destroy: use SafeDestroy from proxmox-widget-toolkit Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 pve-manager 8/10] remove SafeDestroy from pve-manager Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-backup 09/10] api2: add name of mount-point to DatastoreMountInfo Hannes Laimer
2020-09-15  9:54 ` [pve-devel] [PATCH v4 proxmox-backup 10/10] ui: add remove-button for directories/mount-units Hannes Laimer
2020-10-22  6:50 ` [pve-devel] partially-applied: [PATCH v4 proxmox-widget-toolkit 0/10] removal of directories in PBS WebUI Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200915095420.990827-2-h.laimer@proxmox.com \
    --to=h.laimer@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal