]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/DiskStorageSelector.js
ui: lxc resources: modernize & simplify
[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
6d084964
SR
31 // hides the format field (e.g. for TPM state), always assumes 'raw'
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
60 var selectformat = false;
61 if (rec.data.format) {
62 var format = rec.data.format[0]; // 0 is the formats, 1 the default in the backend
63 delete format.subvol; // we never need subvol in the gui
53e3ea84 64 selectformat = Ext.Object.getSize(format) > 1;
acd0d10a
DC
65 }
66
67 var select = !!rec.data.select_existing && !me.hideSelection;
68
69 formatsel.setDisabled(!selectformat);
70 formatsel.setValue(selectformat ? 'qcow2' : 'raw');
71
72 hdfilesel.setDisabled(!select);
73 hdfilesel.setVisible(select);
74 if (select) {
75 hdfilesel.setStorage(value);
76 }
77
78 hdsizesel.setDisabled(select || me.hideSize);
79 hdsizesel.setVisible(!select && !me.hideSize);
80 },
81
34c235be
DC
82 setNodename: function(nodename) {
83 var me = this;
84 var hdstorage = me.getComponent('hdstorage');
85 var hdfilesel = me.getComponent('hdimage');
86
87 hdstorage.setNodename(nodename);
88 hdfilesel.setNodename(nodename);
89 },
90
5d660cf5
DC
91 setDisabled: function(value) {
92 var me = this;
93 var hdstorage = me.getComponent('hdstorage');
94
95 // reset on disable
96 if (value) {
97 hdstorage.setValue();
98 }
99 hdstorage.setDisabled(value);
100
101 // disabling does not always fire this event and we do not need
102 // the value of the validity
103 hdstorage.fireEvent('validitychange');
104 },
105
acd0d10a
DC
106 initComponent: function() {
107 var me = this;
108
109 me.items = [
110 {
111 xtype: 'pveStorageSelector',
112 itemId: 'hdstorage',
113 name: 'hdstorage',
114 reference: 'hdstorage',
115 fieldLabel: me.storageLabel,
116 nodename: me.nodename,
117 storageContent: me.storageContent,
5d660cf5 118 disabled: me.disabled,
acd0d10a
DC
119 autoSelect: me.autoSelect,
120 allowBlank: me.allowBlank,
121 emptyText: me.emptyText,
122 listeners: {
123 change: {
124 fn: me.changeStorage,
f6710aac
TL
125 scope: me,
126 },
127 },
acd0d10a
DC
128 },
129 {
130 xtype: 'pveFileSelector',
131 name: 'hdimage',
132 reference: 'hdimage',
133 itemId: 'hdimage',
134 fieldLabel: gettext('Disk image'),
135 nodename: me.nodename,
136 disabled: true,
f6710aac 137 hidden: true,
acd0d10a
DC
138 },
139 {
140 xtype: 'numberfield',
141 itemId: 'disksize',
142 reference: 'disksize',
143 name: 'disksize',
07de0118 144 fieldLabel: gettext('Disk size') + ' (GiB)',
acd0d10a
DC
145 hidden: me.hideSize,
146 disabled: me.hideSize,
147 minValue: 0.001,
148 maxValue: 128*1024,
149 decimalPrecision: 3,
c6c8e2fc 150 value: me.defaultSize,
f6710aac 151 allowBlank: false,
acd0d10a
DC
152 },
153 {
154 xtype: 'pveDiskFormatSelector',
155 itemId: 'diskformat',
156 reference: 'diskformat',
157 name: 'diskformat',
158 fieldLabel: gettext('Format'),
159 nodename: me.nodename,
160 disabled: true,
6d084964 161 hidden: me.hideFormat || me.storageContent === 'rootdir',
acd0d10a 162 value: 'qcow2',
f6710aac
TL
163 allowBlank: false,
164 },
acd0d10a
DC
165 ];
166
5d660cf5
DC
167 // use it to disable the children but not ourself
168 me.disabled = false;
169
acd0d10a 170 me.callParent();
f6710aac 171 },
acd0d10a 172});