]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/HDMove.js
api: add proxmox-firewall to versions pkg list
[pve-manager.git] / www / manager6 / qemu / HDMove.js
index 8716a451783fbead3fe2dbde24c1602fe115c881..99f165c6dd1b41ef694e88c529f23605637d4293 100644 (file)
@@ -1,51 +1,97 @@
 Ext.define('PVE.window.HDMove', {
-    extend: 'Ext.window.Window',
+    extend: 'Proxmox.window.Edit',
+    mixins: ['Proxmox.Mixin.CBind'],
 
     resizable: false,
+    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}`;
+           },
+       };
+    },
 
+    cbind: {
+       title: get => get('isQemu') ? gettext("Move disk") : gettext('Move Volume'),
+       submitText: get => get('title'),
+       qemu: '{isQemu}',
+       url: '{url}',
+    },
 
-    move_disk: function(disk, storage, format, delete_disk) {
-       var me = this;
-       var qemu = (me.type === 'qemu');
-       var params = {};
-       params.storage = storage;
-       params[qemu ? 'disk':'volume'] = disk;
+    getValues: function() {
+       let me = this;
+       let values = me.formPanel.getForm().getValues();
 
-       if (format && qemu) {
-           params.format = format;
-       }
+       let params = {
+           storage: values.hdstorage,
+       };
+       params[me.qemu ? 'disk' : 'volume'] = me.disk;
 
-       if (delete_disk) {
-           params['delete'] = 1;
+       if (values.diskformat && me.qemu) {
+           params.format = values.diskformat;
        }
 
-       var url = '/nodes/' + me.nodename + '/' + me.type + '/' + me.vmid + '/';
-       url += qemu ? 'move_disk' : 'move_volume';
-
-       Proxmox.Utils.API2Request({
-           params: params,
-           url: url,
-           waitMsgTarget: me,
-           method: 'POST',
-           failure: function(response, opts) {
-               Ext.Msg.alert('Error', response.htmlStatus);
-           },
-           success: function(response, options) {
-               var upid = response.result.data;
-               var win = Ext.create('Proxmox.window.TaskViewer', {
-                   upid: upid,
-               });
-               win.show();
-               win.on('destroy', function() { me.close(); });
-           },
-       });
-
+       if (values.deleteDisk) {
+           params.delete = 1;
+       }
+       return params;
     },
 
-    initComponent : function() {
-       var me = this;
-
-       var diskarray = [];
+    items: [
+       {
+           xtype: 'form',
+           reference: 'moveFormPanel',
+           border: false,
+           fieldDefaults: {
+               labelWidth: 100,
+               anchor: '100%',
+           },
+           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;
 
        if (!me.nodename) {
            throw "no node name specified";
@@ -56,80 +102,9 @@ Ext.define('PVE.window.HDMove', {
        }
 
        if (!me.type) {
-           me.type = 'qemu';
+           throw "no type specified";
        }
 
-       var qemu = (me.type === 'qemu');
-
-        var items = [
-            {
-                xtype: 'displayfield',
-                name: qemu ? 'disk' : 'volume',
-                value: me.disk,
-                fieldLabel: qemu ? gettext('Disk') : gettext('Mount Point'),
-                vtype: 'StorageId',
-                allowBlank: false,
-            },
-        ];
-
-       items.push({
-           xtype: 'pveDiskStorageSelector',
-           storageLabel: gettext('Target Storage'),
-           nodename: me.nodename,
-           storageContent: qemu ? 'images' : 'rootdir',
-           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,
-           border: false,
-           fieldDefaults: {
-               labelWidth: 100,
-               anchor: '100%',
-           },
-           items: items,
-       });
-
-       var form = me.formPanel.getForm();
-
-       var submitBtn;
-
-       me.title = qemu ? gettext("Move disk") : gettext('Move Volume');
-       submitBtn = Ext.create('Ext.Button', {
-           text: me.title,
-           handler: function() {
-               if (form.isValid()) {
-                   var values = form.getValues();
-                   me.move_disk(me.disk, values.hdstorage, values.diskformat,
-                                values.deleteDisk);
-               }
-           },
-       });
-
-       Ext.apply(me, {
-           modal: true,
-           width: 350,
-           border: false,
-           layout: 'fit',
-           buttons: [ submitBtn ],
-           items: [ me.formPanel ],
-       });
-
-
        me.callParent();
-
-       me.mon(me.formPanel, 'validitychange', function(fp, isValid) {
-           submitBtn.setDisabled(!isValid);
-       });
-
-       me.formPanel.isValid();
     },
 });