]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/LVMEdit.js
use windowEdit from widget toolkit
[pve-manager.git] / www / manager6 / storage / LVMEdit.js
1 Ext.define('PVE.storage.VgSelector', {
2 extend: 'Ext.form.field.ComboBox',
3 alias: 'widget.pveVgSelector',
4 valueField: 'vg',
5 displayField: 'vg',
6 queryMode: 'local',
7 editable: false,
8 initComponent : function() {
9 var me = this;
10
11 if (!me.nodename) {
12 me.nodename = 'localhost';
13 }
14
15 var store = Ext.create('Ext.data.Store', {
16 autoLoad: {}, // true,
17 fields: [ 'vg', 'size', 'free' ],
18 proxy: {
19 type: 'pve',
20 url: '/api2/json/nodes/' + me.nodename + '/scan/lvm'
21 }
22 });
23
24 store.sort('vg', 'ASC');
25
26 Ext.apply(me, {
27 store: store,
28 listConfig: {
29 loadingText: gettext('Scanning...')
30 }
31 });
32
33 me.callParent();
34 }
35 });
36
37 Ext.define('PVE.storage.BaseStorageSelector', {
38 extend: 'Ext.form.field.ComboBox',
39 alias: 'widget.pveBaseStorageSelector',
40
41 existingGroupsText: gettext("Existing volume groups"),
42 queryMode: 'local',
43 editable: false,
44 value: '',
45 valueField: 'storage',
46 displayField: 'text',
47 initComponent : function() {
48 var me = this;
49
50 var store = Ext.create('Ext.data.Store', {
51 autoLoad: {
52 addRecords: true,
53 params: {
54 type: 'iscsi'
55 }
56 },
57 fields: [ 'storage', 'type', 'content',
58 {
59 name: 'text',
60 convert: function(value, record) {
61 if (record.data.storage) {
62 return record.data.storage + " (iSCSI)";
63 } else {
64 return me.existingGroupsText;
65 }
66 }
67 }],
68 proxy: {
69 type: 'pve',
70 url: '/api2/json/storage/'
71 }
72 });
73
74 store.loadData([{ storage: '' }], true);
75
76 store.sort('storage', 'ASC');
77
78 Ext.apply(me, {
79 store: store
80 });
81
82 me.callParent();
83 }
84 });
85
86 Ext.define('PVE.storage.LVMInputPanel', {
87 extend: 'PVE.panel.InputPanel',
88
89 onGetValues: function(values) {
90 var me = this;
91
92 if (me.isCreate) {
93 values.type = 'lvm';
94 } else {
95 delete values.storage;
96 }
97
98 values.disable = values.enable ? 0 : 1;
99 delete values.enable;
100
101 return values;
102 },
103
104 initComponent : function() {
105 var me = this;
106
107 me.column1 = [
108 {
109 xtype: me.isCreate ? 'textfield' : 'displayfield',
110 name: 'storage',
111 value: me.storageId || '',
112 fieldLabel: 'ID',
113 vtype: 'StorageId',
114 submitValue: !!me.isCreate,
115 allowBlank: false
116 }
117 ];
118
119 var vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
120 name: 'vgname',
121 hidden: !!me.isCreate,
122 disabled: !!me.isCreate,
123 value: '',
124 fieldLabel: gettext('Volume group'),
125 allowBlank: false
126 });
127
128 if (me.isCreate) {
129 var vgField = Ext.create('PVE.storage.VgSelector', {
130 name: 'vgname',
131 fieldLabel: gettext('Volume group'),
132 allowBlank: false
133 });
134
135 var baseField = Ext.createWidget('pveFileSelector', {
136 name: 'base',
137 hidden: true,
138 disabled: true,
139 nodename: 'localhost',
140 storageContent: 'images',
141 fieldLabel: gettext('Base volume'),
142 allowBlank: false
143 });
144
145 me.column1.push({
146 xtype: 'pveBaseStorageSelector',
147 name: 'basesel',
148 fieldLabel: gettext('Base storage'),
149 submitValue: false,
150 listeners: {
151 change: function(f, value) {
152 if (value) {
153 vgnameField.setVisible(true);
154 vgnameField.setDisabled(false);
155 vgField.setVisible(false);
156 vgField.setDisabled(true);
157 baseField.setVisible(true);
158 baseField.setDisabled(false);
159 } else {
160 vgnameField.setVisible(false);
161 vgnameField.setDisabled(true);
162 vgField.setVisible(true);
163 vgField.setDisabled(false);
164 baseField.setVisible(false);
165 baseField.setDisabled(true);
166 }
167 baseField.setStorage(value);
168 }
169 }
170 });
171
172 me.column1.push(baseField);
173
174 me.column1.push(vgField);
175 }
176
177 me.column1.push(vgnameField);
178
179 // here value is an array,
180 // while before it was a string
181 /*jslint confusion: true*/
182 me.column1.push({
183 xtype: 'pveContentTypeSelector',
184 cts: ['images', 'rootdir'],
185 fieldLabel: gettext('Content'),
186 name: 'content',
187 value: ['images', 'rootdir'],
188 multiSelect: true,
189 allowBlank: false
190 });
191 /*jslint confusion: false*/
192
193 me.column2 = [
194 {
195 xtype: 'pveNodeSelector',
196 name: 'nodes',
197 fieldLabel: gettext('Nodes'),
198 emptyText: gettext('All') + ' (' +
199 gettext('No restrictions') +')',
200 multiSelect: true,
201 autoSelect: false
202 },
203 {
204 xtype: 'proxmoxcheckbox',
205 name: 'enable',
206 checked: true,
207 uncheckedValue: 0,
208 fieldLabel: gettext('Enable')
209 },
210 {
211 xtype: 'proxmoxcheckbox',
212 name: 'shared',
213 uncheckedValue: 0,
214 fieldLabel: gettext('Shared')
215 }
216 ];
217
218 me.callParent();
219 }
220 });
221
222 Ext.define('PVE.storage.LVMEdit', {
223 extend: 'Proxmox.window.Edit',
224
225 initComponent : function() {
226 var me = this;
227
228 me.isCreate = !me.storageId;
229
230 if (me.isCreate) {
231 me.url = '/api2/extjs/storage';
232 me.method = 'POST';
233 } else {
234 me.url = '/api2/extjs/storage/' + me.storageId;
235 me.method = 'PUT';
236 }
237
238 var ipanel = Ext.create('PVE.storage.LVMInputPanel', {
239 isCreate: me.isCreate,
240 storageId: me.storageId
241 });
242
243 Ext.apply(me, {
244 subject: PVE.Utils.format_storage_type('lvm'),
245 isAdd: true,
246 items: [ ipanel ]
247 });
248
249 me.callParent();
250
251 if (!me.isCreate) {
252 me.load({
253 success: function(response, options) {
254 var values = response.result.data;
255 var ctypes = values.content || '';
256
257 values.content = ctypes.split(',');
258
259 if (values.nodes) {
260 values.nodes = values.nodes.split(',');
261 }
262 values.enable = values.disable ? 0 : 1;
263 ipanel.setValues(values);
264 }
265 });
266 }
267 }
268 });