Ext.define('PVE.window.HDMove', {
- extend: 'Ext.window.Window',
+ extend: 'Proxmox.window.Edit',
+ mixins: ['Proxmox.Mixin.CBind'],
resizable: false,
-
-
- move_disk: function(disk, storage, format, delete_disk) {
- var me = this;
-
- var params = { disk: disk, storage: storage };
-
- if (format) {
- params.format = format;
- }
-
- if (delete_disk) {
- params['delete'] = 1;
- }
-
- Proxmox.Utils.API2Request({
- params: params,
- url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + '/move_disk',
- waitMsgTarget: me,
- method: 'POST',
- failure: function(response, opts) {
- Ext.Msg.alert('Error', response.htmlStatus);
+ modal: true,
+ width: 350,
+ border: false,
+ layout: 'fit',
+ showReset: false,
+ showTaskViewer: true,
+ method: 'POST',
+
+ cbindData: function() {
+ let me = this;
+ return {
+ disk: me.disk,
+ isQemu: me.type === 'qemu',
+ nodename: me.nodename,
+ url: () => {
+ let endpoint = me.type === 'qemu' ? 'move_disk' : 'move_volume';
+ return `/nodes/${me.nodename}/${me.type}/${me.vmid}/${endpoint}`;
},
- success: function(response, options) {
- var upid = response.result.data;
- var win = Ext.create('Proxmox.window.TaskViewer', {
- upid: upid,
- taskDone: function(success) {
- me.close();
- }
- });
- win.show();
- }
- });
+ };
+ },
+ cbind: {
+ title: get => get('isQemu') ? gettext("Move disk") : gettext('Move Volume'),
+ submitText: get => get('title'),
+ qemu: '{isQemu}',
+ url: '{url}',
},
- initComponent : function() {
- var me = this;
+ getValues: function() {
+ let me = this;
+ let values = me.formPanel.getForm().getValues();
- var diskarray = [];
+ let params = {
+ storage: values.hdstorage,
+ };
+ params[me.qemu ? 'disk' : 'volume'] = me.disk;
- if (!me.nodename) {
- throw "no node name specified";
+ if (values.diskformat && me.qemu) {
+ params.format = values.diskformat;
}
- if (!me.vmid) {
- throw "no VM ID specified";
+ if (values.deleteDisk) {
+ params.delete = 1;
}
+ return params;
+ },
- var items = [
- {
- xtype: 'displayfield',
- name: 'disk',
- value: me.disk,
- fieldLabel: gettext('Disk'),
- vtype: 'StorageId',
- allowBlank: false
- }
- ];
-
- items.push({
- xtype: 'pveDiskStorageSelector',
- storageLabel: gettext('Target Storage'),
- nodename: me.nodename,
- storageContent: 'images',
- hideSize: true
- });
-
- items.push({
- xtype: 'proxmoxcheckbox',
- fieldLabel: gettext('Delete source'),
- name: 'deleteDisk',
- uncheckedValue: 0,
- checked: false
- });
-
- me.formPanel = Ext.create('Ext.form.Panel', {
- bodyPadding: 10,
+ items: [
+ {
+ xtype: 'form',
+ reference: 'moveFormPanel',
border: false,
fieldDefaults: {
labelWidth: 100,
- anchor: '100%'
+ anchor: '100%',
},
- items: items
- });
-
- var form = me.formPanel.getForm();
-
- var submitBtn;
+ items: [
+ {
+ xtype: 'displayfield',
+ cbind: {
+ name: get => get('isQemu') ? 'disk' : 'volume',
+ fieldLabel: get => get('isQemu') ? gettext('Disk') : gettext('Mount Point'),
+ value: '{disk}',
+ },
+ allowBlank: false,
+ },
+ {
+ xtype: 'pveDiskStorageSelector',
+ storageLabel: gettext('Target Storage'),
+ cbind: {
+ nodename: '{nodename}',
+ storageContent: get => get('isQemu') ? 'images' : 'rootdir',
+ hideFormat: get => get('disk') === 'tpmstate0',
+ },
+ hideSize: true,
+ },
+ {
+ xtype: 'proxmoxcheckbox',
+ fieldLabel: gettext('Delete source'),
+ name: 'deleteDisk',
+ uncheckedValue: 0,
+ checked: false,
+ },
+ ],
+ },
+ ],
+
+ initComponent: function() {
+ let me = this;
- me.title = gettext("Move disk");
- submitBtn = Ext.create('Ext.Button', {
- text: gettext('Move disk'),
- handler: function() {
- if (form.isValid()) {
- var values = form.getValues();
- me.move_disk(me.disk, values.hdstorage, values.diskformat,
- values.deleteDisk);
- }
- }
- });
+ if (!me.nodename) {
+ throw "no node name specified";
+ }
- Ext.apply(me, {
- modal: true,
- width: 350,
- border: false,
- layout: 'fit',
- buttons: [ submitBtn ],
- items: [ me.formPanel ]
- });
+ if (!me.vmid) {
+ throw "no VM ID specified";
+ }
+ if (!me.type) {
+ throw "no type specified";
+ }
me.callParent();
-
- me.mon(me.formPanel, 'validitychange', function(fp, isValid) {
- submitBtn.setDisabled(!isValid);
- });
-
- me.formPanel.isValid();
- }
+ },
});