]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/DiskStorageSelector.js
ui: fix duplicate references when using multiple disk storage selectors
[pve-manager.git] / www / manager6 / form / DiskStorageSelector.js
CommitLineData
acd0d10a
DC
1Ext.define('PVE.form.DiskStorageSelector', {
2 extend: 'Ext.container.Container',
3 alias: 'widget.pveDiskStorageSelector',
4
5 layout: 'fit',
6 defaults: {
f6710aac 7 margin: '0 0 5 0',
acd0d10a
DC
8 },
9
10 // the fieldLabel for the storageselector
11 storageLabel: gettext('Storage'),
12
13 // the content to show (e.g., images or rootdir)
14 storageContent: undefined,
15
16 // if true, selects the first available storage
17 autoSelect: false,
18
19 allowBlank: false,
20 emptyText: '',
21
22 // hides the selection field
23 // this is always hidden on creation,
24 // and only shown when the storage needs a selection and
25 // hideSelection is not true
26 hideSelection: undefined,
27
28 // hides the size field (e.g, for the efi disk dialog)
29 hideSize: false,
30
faef846c 31 // hides the format field (e.g. for TPM state)
6d084964
SR
32 hideFormat: false,
33
ec505260 34 // sets the initial size value
c6c8e2fc
DC
35 // string because else we get a type confusion
36 defaultSize: '32',
37
acd0d10a
DC
38 changeStorage: function(f, value) {
39 var me = this;
40 var formatsel = me.getComponent('diskformat');
41 var hdfilesel = me.getComponent('hdimage');
42 var hdsizesel = me.getComponent('disksize');
43
44 // initial store load, and reset/deletion of the storage
45 if (!value) {
46 hdfilesel.setDisabled(true);
47 hdfilesel.setVisible(false);
48
49 formatsel.setDisabled(true);
50 return;
51 }
52
53 var rec = f.store.getById(value);
54 // if the storage is not defined, or valid,
55 // we cannot know what to enable/disable
56 if (!rec) {
57 return;
58 }
59
db8aa0f4
FE
60 let validFormats = {};
61 let selectFormat = 'raw';
acd0d10a 62 if (rec.data.format) {
db8aa0f4
FE
63 validFormats = rec.data.format[0]; // 0 is the formats, 1 the default in the backend
64 delete validFormats.subvol; // we never need subvol in the gui
65 if (validFormats.qcow2) {
66 selectFormat = 'qcow2';
67 } else if (validFormats.raw) {
68 selectFormat = 'raw';
69 } else {
70 selectFormat = rec.data.format[1];
71 }
acd0d10a
DC
72 }
73
74 var select = !!rec.data.select_existing && !me.hideSelection;
75
db8aa0f4
FE
76 formatsel.setDisabled(me.hideFormat || Ext.Object.getSize(validFormats) <= 1);
77 formatsel.setValue(selectFormat);
acd0d10a
DC
78
79 hdfilesel.setDisabled(!select);
80 hdfilesel.setVisible(select);
81 if (select) {
82 hdfilesel.setStorage(value);
83 }
84
85 hdsizesel.setDisabled(select || me.hideSize);
86 hdsizesel.setVisible(!select && !me.hideSize);
87 },
88
34c235be
DC
89 setNodename: function(nodename) {
90 var me = this;
91 var hdstorage = me.getComponent('hdstorage');
92 var hdfilesel = me.getComponent('hdimage');
93
94 hdstorage.setNodename(nodename);
95 hdfilesel.setNodename(nodename);
96 },
97
5d660cf5
DC
98 setDisabled: function(value) {
99 var me = this;
100 var hdstorage = me.getComponent('hdstorage');
101
102 // reset on disable
103 if (value) {
104 hdstorage.setValue();
105 }
106 hdstorage.setDisabled(value);
107
108 // disabling does not always fire this event and we do not need
109 // the value of the validity
110 hdstorage.fireEvent('validitychange');
111 },
112
acd0d10a
DC
113 initComponent: function() {
114 var me = this;
115
116 me.items = [
117 {
118 xtype: 'pveStorageSelector',
119 itemId: 'hdstorage',
120 name: 'hdstorage',
acd0d10a
DC
121 fieldLabel: me.storageLabel,
122 nodename: me.nodename,
123 storageContent: me.storageContent,
5d660cf5 124 disabled: me.disabled,
acd0d10a
DC
125 autoSelect: me.autoSelect,
126 allowBlank: me.allowBlank,
127 emptyText: me.emptyText,
128 listeners: {
129 change: {
130 fn: me.changeStorage,
f6710aac
TL
131 scope: me,
132 },
133 },
acd0d10a
DC
134 },
135 {
136 xtype: 'pveFileSelector',
137 name: 'hdimage',
acd0d10a
DC
138 itemId: 'hdimage',
139 fieldLabel: gettext('Disk image'),
140 nodename: me.nodename,
141 disabled: true,
f6710aac 142 hidden: true,
acd0d10a
DC
143 },
144 {
145 xtype: 'numberfield',
146 itemId: 'disksize',
acd0d10a 147 name: 'disksize',
07de0118 148 fieldLabel: gettext('Disk size') + ' (GiB)',
acd0d10a
DC
149 hidden: me.hideSize,
150 disabled: me.hideSize,
151 minValue: 0.001,
152 maxValue: 128*1024,
153 decimalPrecision: 3,
c6c8e2fc 154 value: me.defaultSize,
f6710aac 155 allowBlank: false,
acd0d10a
DC
156 },
157 {
158 xtype: 'pveDiskFormatSelector',
159 itemId: 'diskformat',
acd0d10a
DC
160 name: 'diskformat',
161 fieldLabel: gettext('Format'),
162 nodename: me.nodename,
163 disabled: true,
6d084964 164 hidden: me.hideFormat || me.storageContent === 'rootdir',
acd0d10a 165 value: 'qcow2',
f6710aac
TL
166 allowBlank: false,
167 },
acd0d10a
DC
168 ];
169
5d660cf5
DC
170 // use it to disable the children but not ourself
171 me.disabled = false;
172
acd0d10a 173 me.callParent();
f6710aac 174 },
acd0d10a 175});