]> 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 4fcca3da59e12e1ca232a223ab218b051d43b48c..99f165c6dd1b41ef694e88c529f23605637d4293 100644 (file)
 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();
-    }
+    },
 });