pve-manager/www/manager6/window/Snapshot.js
Dominik Csapak 4e0e6b77e9 gui: refactor snapshot window
using an Proxmox.window.Edit, which does many of the things we did
manually, also rewrite is in such way that we can use it for qemu
and lxc

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2020-01-30 18:01:38 +01:00

132 lines
2.6 KiB
JavaScript

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);
}
});
}
});