]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/ControllerSelector.js
ui: eslint: fix various spacing related issues
[pve-manager.git] / www / manager6 / form / ControllerSelector.js
CommitLineData
711c07d1
DM
1Ext.define('PVE.form.ControllerSelector', {
2 extend: 'Ext.form.FieldContainer',
42902182 3 alias: 'widget.pveControllerSelector',
711c07d1
DM
4
5 noVirtIO: false,
6
711c07d1
DM
7 vmconfig: {}, // used to check for existing devices
8
31345b9c 9 sortByPreviousUsage: function(vmconfig, controllerList) {
8c4ec8c7 10 let usedControllers = {};
96ed94ad 11 for (const type of Object.keys(PVE.Utils.diskControllerMaxIDs)) {
8c4ec8c7 12 usedControllers[type] = 0;
31345b9c
EK
13 }
14
96ed94ad 15 for (const property of Object.keys(vmconfig)) {
c7139315
TL
16 if (property.match(PVE.Utils.bus_match) && !vmconfig[property].match(/media=cdrom/)) {
17 const foundController = property.match(PVE.Utils.bus_match)[1];
18 usedControllers[foundController]++;
f6735a88 19 }
31345b9c
EK
20 }
21
ca0e7e80 22 var sortPriority = PVE.qemu.OSDefaults.getDefaults(vmconfig.ostype).busPriority;
31345b9c 23
f6735a88 24 var sortedList = Ext.clone(controllerList);
c7139315 25 sortedList.sort(function(a, b) {
f6735a88
DM
26 if (usedControllers[b] == usedControllers[a]) {
27 return sortPriority[b] - sortPriority[a];
28 }
29 return usedControllers[b] - usedControllers[a];
30 });
c7139315 31
f6735a88 32 return sortedList;
31345b9c
EK
33 },
34
711c07d1
DM
35 setVMConfig: function(vmconfig, autoSelect) {
36 var me = this;
37
38 me.vmconfig = Ext.apply({}, vmconfig);
7206af4b
EK
39
40 var clist = ['ide', 'virtio', 'scsi', 'sata'];
0e09929d
EK
41 var bussel = me.down('field[name=controller]');
42 var deviceid = me.down('field[name=deviceid]');
43
7206af4b 44 if (autoSelect === 'cdrom') {
7206af4b 45 if (!Ext.isDefined(me.vmconfig.ide2)) {
0e09929d
EK
46 bussel.setValue('ide');
47 deviceid.setValue(2);
7206af4b 48 return;
711c07d1 49 }
c7139315 50 clist = ['ide', 'scsi', 'sata'];
8058410f 51 } else {
7206af4b
EK
52 // in most cases we want to add a disk to the same controller
53 // we previously used
54 clist = me.sortByPreviousUsage(me.vmconfig, clist);
55 }
711c07d1 56
7dc5c40c 57clist_loop:
c7139315 58 for (const controller of clist) {
0e09929d 59 bussel.setValue(controller);
c7139315
TL
60 for (let i = 0; i < PVE.Utils.diskControllerMaxIDs[controller]; i++) {
61 let confid = controller + i.toString();
7206af4b 62 if (!Ext.isDefined(me.vmconfig[confid])) {
0e09929d 63 deviceid.setValue(i);
7dc5c40c 64 break clist_loop; // we found the desired controller/id combo
711c07d1 65 }
7206af4b 66 }
c7139315 67 }
0e09929d 68 deviceid.validate();
711c07d1
DM
69 },
70
71 initComponent: function() {
72 var me = this;
73
74 Ext.apply(me, {
75 fieldLabel: gettext('Bus/Device'),
76 layout: 'hbox',
711c07d1 77 defaults: {
f6710aac 78 hideLabel: true,
711c07d1
DM
79 },
80 items: [
81 {
42902182 82 xtype: 'pveBusSelector',
711c07d1 83 name: 'controller',
39c06c69 84 value: PVE.qemu.OSDefaults.generic.busType,
711c07d1 85 noVirtIO: me.noVirtIO,
711c07d1 86 allowBlank: false,
a1fe04b6 87 flex: 2,
711c07d1
DM
88 listeners: {
89 change: function(t, value) {
369e3ecd 90 if (!value) {
711c07d1
DM
91 return;
92 }
93 var field = me.down('field[name=deviceid]');
8c4ec8c7 94 field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value]);
711c07d1 95 field.validate();
f6710aac
TL
96 },
97 },
711c07d1
DM
98 },
99 {
bf96f60d 100 xtype: 'proxmoxintegerfield',
711c07d1
DM
101 name: 'deviceid',
102 minValue: 0,
8c4ec8c7 103 maxValue: PVE.Utils.diskControllerMaxIDs.ide,
711c07d1 104 value: '0',
a1fe04b6 105 flex: 1,
bf96f60d 106 allowBlank: false,
711c07d1 107 validator: function(value) {
711c07d1
DM
108 if (!me.rendered) {
109 return;
110 }
111 var field = me.down('field[name=controller]');
112 var controller = field.getValue();
113 var confid = controller + value;
114 if (Ext.isDefined(me.vmconfig[confid])) {
115 return "This device is already in use.";
116 }
117 return true;
f6710aac
TL
118 },
119 },
120 ],
711c07d1
DM
121 });
122
123 me.callParent();
f6710aac 124 },
711c07d1 125});