]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/window/Snapshot.js
gui: refactor snapshot window
[pve-manager.git] / www / manager6 / window / Snapshot.js
diff --git a/www/manager6/window/Snapshot.js b/www/manager6/window/Snapshot.js
new file mode 100644 (file)
index 0000000..64de929
--- /dev/null
@@ -0,0 +1,131 @@
+Ext.define('PVE.window.Snapshot', {
+    extend: 'Proxmox.window.Edit',
+
+    onGetValues: function(values) {
+       let me = this;
+
+       if (me.type === 'lxc') {
+           delete values.vmstate;
+       }
+
+       return values;
+    },
+
+    initComponent : function() {
+       var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       if (!me.vmid) {
+           throw "no VM ID specified";
+       }
+
+       if (!me.type) {
+           throw "no VM ID specified";
+       }
+
+       me.items = [
+           {
+               xtype: me.snapname ? 'displayfield' : 'textfield',
+               name: 'snapname',
+               value: me.snapname,
+               fieldLabel: gettext('Name'),
+               vtype: 'ConfigId',
+               allowBlank: false
+           },
+           {
+               xtype: 'displayfield',
+               hidden: !me.snapname,
+               disabled: !me.snapname,
+               name: 'snaptime',
+               renderer: PVE.Utils.render_timestamp_human_readable,
+               fieldLabel: gettext('Timestamp')
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               hidden: me.type !== 'qemu' || me.snapname,
+               disabled: me.type !== 'qemu' || me.snapname,
+               name: 'vmstate',
+               uncheckedValue: 0,
+               defaultValue: 0,
+               checked: 1,
+               fieldLabel: gettext('Include RAM')
+           },
+           {
+               xtype: 'textareafield',
+               grow: true,
+               editable: !me.viewonly,
+               name: 'description',
+               fieldLabel: gettext('Description')
+           },
+           {
+               title: gettext('Settings'),
+               hidden: !me.snapname,
+               xtype: 'grid',
+               itemId: 'summary',
+               border: true,
+               height: 200,
+               store: {
+                   model: 'KeyValue',
+                   sorters: [
+                       {
+                           property : 'key',
+                           direction: 'ASC'
+                       }
+                   ]
+               },
+               columns: [
+                   {header: gettext('Key'), width: 150, dataIndex: 'key'},
+                   {header: gettext('Value'), flex: 1, dataIndex: 'value'}
+               ]
+           }
+       ];
+
+       me.url = `/nodes/${me.nodename}/${me.type}/${me.vmid}/snapshot`;
+
+       let subject;
+       if (me.snapname) {
+           subject = gettext('Snapshot') + ` ${me.snapname}`;
+           me.url += `/${me.snapname}/config`;
+       } else {
+           subject = (me.type === 'qemu' ? 'VM' : 'CT') + me.vmid + ' ' + gettext('Snapshot');
+           me.method = 'POST';
+           me.showProgress = true;
+       }
+
+       Ext.apply(me, {
+           subject: subject,
+           width: me.snapname ? 620 : 450,
+           height: me.snapname ? 420 : undefined,
+       });
+
+       me.callParent();
+
+       if (!me.snapname) {
+           return;
+       }
+
+       me.load({
+           success: function(response) {
+               let kvarray = [];
+               Ext.Object.each(response.result.data, function(key, value) {
+                   if (key === 'description' || key === 'snaptime') {
+                       return;
+                   }
+                   kvarray.push({ key: key, value: value });
+               });
+
+               let summarystore = me.down('#summary').getStore();
+               summarystore.suspendEvents();
+               summarystore.add(kvarray);
+               summarystore.sort();
+               summarystore.resumeEvents();
+               summarystore.fireEvent('refresh', summarystore);
+
+               me.setValues(response.result.data);
+           }
+       });
+    }
+});