]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/MachineEdit.js
ui: vm/machine: adapt to API changes
[pve-manager.git] / www / manager6 / qemu / MachineEdit.js
1 Ext.define('PVE.qemu.MachineInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 xtype: 'pveMachineInputPanel',
4
5 controller: {
6 xclass: 'Ext.app.ViewController',
7 control: {
8 'combobox[name=machine]': {
9 change: 'onMachineChange',
10 },
11 },
12 onMachineChange: function(field, value) {
13 let me = this;
14 let version = me.lookup('version');
15 let store = version.getStore();
16 let type = value === 'q35' ? 'q35' : 'i440fx';
17 store.clearFilter();
18 store.addFilter(val => (val.data.id === 'latest' || val.data.type === type));
19 version.setValue('latest');
20 },
21 },
22
23 onGetValues: function(values) {
24 if (values.version && values.version !== 'latest') {
25 values.machine = values.version;
26 delete values.delete;
27 }
28 delete values.version;
29 return values;
30 },
31
32 setValues: function(values) {
33 let me = this;
34
35 if (values.machine !== '__default__' && values.machine !== 'q35') {
36 values.version = values.machine;
37 values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
38
39 // avoid hiding a pinned version
40 Ext.ComponentQuery.query("#advancedcb")[0].setValue(true);
41 }
42
43 this.callParent(arguments);
44 },
45
46 items: [{
47 name: 'machine',
48 reference: 'machine',
49 xtype: 'proxmoxKVComboBox',
50 fieldLabel: gettext('Machine'),
51 comboItems: [
52 ['__default__', PVE.Utils.render_qemu_machine('')],
53 ['q35', 'q35'],
54 ],
55 }],
56
57 advancedItems: [{
58 name: 'version',
59 reference: 'version',
60 xtype: 'combobox',
61 fieldLabel: gettext('Version'),
62 value: 'latest',
63 allowBlank: false,
64 editable: false,
65 valueField: 'id',
66 displayField: 'version',
67 queryParam: false,
68 store: {
69 autoLoad: true,
70 fields: ['id', 'type', 'version'],
71 proxy: {
72 type: 'proxmox',
73 url: "/api2/json/nodes/localhost/capabilities/qemu/machines",
74 },
75 listeners: {
76 load: function(records) {
77 this.insert(0, { id: 'latest', type: 'any', version: 'latest' });
78 },
79 },
80 },
81 }],
82 });
83
84 Ext.define('PVE.qemu.MachineEdit', {
85 extend: 'Proxmox.window.Edit',
86
87 subject: gettext('Machine'),
88
89 items: [{
90 xtype: 'pveMachineInputPanel',
91 }],
92
93 initComponent: function() {
94 let me = this;
95
96 me.callParent();
97
98 me.load({
99 success: function(response) {
100 let vmconfig = response.result.data;
101 let machine = vmconfig.machine || '__default__';
102 me.setValues({ machine: machine });
103 },
104 });
105 },
106 });