]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/form/DiskStorageSelector.js
add new DiskStorageSelector.js
[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: {
7 margin: '0 0 5 0'
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
31 changeStorage: function(f, value) {
32 var me = this;
33 var formatsel = me.getComponent('diskformat');
34 var hdfilesel = me.getComponent('hdimage');
35 var hdsizesel = me.getComponent('disksize');
36
37 // initial store load, and reset/deletion of the storage
38 if (!value) {
39 hdfilesel.setDisabled(true);
40 hdfilesel.setVisible(false);
41
42 formatsel.setDisabled(true);
43 return;
44 }
45
46 var rec = f.store.getById(value);
47 // if the storage is not defined, or valid,
48 // we cannot know what to enable/disable
49 if (!rec) {
50 return;
51 }
52
53 var selectformat = false;
54 if (rec.data.format) {
55 var format = rec.data.format[0]; // 0 is the formats, 1 the default in the backend
56 delete format.subvol; // we never need subvol in the gui
57 selectformat = (Ext.Object.getSize(format) > 1);
58 }
59
60 var select = !!rec.data.select_existing && !me.hideSelection;
61
62 formatsel.setDisabled(!selectformat);
63 formatsel.setValue(selectformat ? 'qcow2' : 'raw');
64
65 hdfilesel.setDisabled(!select);
66 hdfilesel.setVisible(select);
67 if (select) {
68 hdfilesel.setStorage(value);
69 }
70
71 hdsizesel.setDisabled(select || me.hideSize);
72 hdsizesel.setVisible(!select && !me.hideSize);
73 },
74
75 initComponent: function() {
76 var me = this;
77
78 me.items = [
79 {
80 xtype: 'pveStorageSelector',
81 itemId: 'hdstorage',
82 name: 'hdstorage',
83 reference: 'hdstorage',
84 fieldLabel: me.storageLabel,
85 nodename: me.nodename,
86 storageContent: me.storageContent,
87 autoSelect: me.autoSelect,
88 allowBlank: me.allowBlank,
89 emptyText: me.emptyText,
90 listeners: {
91 change: {
92 fn: me.changeStorage,
93 scope: me
94 }
95 }
96 },
97 {
98 xtype: 'pveFileSelector',
99 name: 'hdimage',
100 reference: 'hdimage',
101 itemId: 'hdimage',
102 fieldLabel: gettext('Disk image'),
103 nodename: me.nodename,
104 disabled: true,
105 hidden: true
106 },
107 {
108 xtype: 'numberfield',
109 itemId: 'disksize',
110 reference: 'disksize',
111 name: 'disksize',
112 fieldLabel: gettext('Disk size') + ' (GB)',
113 hidden: me.hideSize,
114 disabled: me.hideSize,
115 minValue: 0.001,
116 maxValue: 128*1024,
117 decimalPrecision: 3,
118 value: '32',
119 allowBlank: false
120 },
121 {
122 xtype: 'pveDiskFormatSelector',
123 itemId: 'diskformat',
124 reference: 'diskformat',
125 name: 'diskformat',
126 fieldLabel: gettext('Format'),
127 nodename: me.nodename,
128 disabled: true,
129 hidden: me.storageContent === 'rootdir',
130 value: 'qcow2',
131 allowBlank: false
132 }
133 ];
134
135 me.callParent();
136 }
137});