]> git.proxmox.com Git - pve-manager.git/blame - www/manager5/dc/StorageView.js
copy dc/StorageView.js from manager to manager5
[pve-manager.git] / www / manager5 / dc / StorageView.js
CommitLineData
2f8915cf
DM
1
2Ext.define('PVE.dc.StorageView', {
3 extend: 'Ext.grid.GridPanel',
4
5 alias: ['widget.pveStorageView'],
6
7 initComponent : function() {
8 var me = this;
9
10 var store = new Ext.data.Store({
11 model: 'pve-storage',
12 proxy: {
13 type: 'pve',
14 url: "/api2/json/storage"
15 },
16 sorters: {
17 property: 'storage',
18 order: 'DESC'
19 }
20 });
21
22 var reload = function() {
23 store.load();
24 };
25
26 var sm = Ext.create('Ext.selection.RowModel', {});
27
28 var run_editor = function() {
29 var rec = sm.getSelection()[0];
30 if (!rec) {
31 return;
32 }
33 var type = rec.data.type;
34
35 var editor;
36 if (type === 'dir') {
37 editor = 'PVE.storage.DirEdit';
38 } else if (type === 'nfs') {
39 editor = 'PVE.storage.NFSEdit';
40 } else if (type === 'glusterfs') {
41 editor = 'PVE.storage.GlusterFsEdit';
42 } else if (type === 'lvm') {
43 editor = 'PVE.storage.LVMEdit';
44 } else if (type === 'iscsi') {
45 editor = 'PVE.storage.IScsiEdit';
46 } else if (type === 'rbd') {
47 editor = 'PVE.storage.RBDEdit';
48 } else if (type === 'sheepdog') {
49 editor = 'PVE.storage.SheepdogEdit';
50 } else if (type === 'zfs') {
51 editor = 'PVE.storage.ZFSEdit';
52 } else if (type === 'zfspool') {
53 editor = 'PVE.storage.ZFSPoolEdit';
54 } else {
55 return;
56 }
57 var win = Ext.create(editor, {
58 storageId: rec.data.storage
59 });
60
61 win.show();
62 win.on('destroy', reload);
63 };
64
65 var edit_btn = new PVE.button.Button({
66 text: gettext('Edit'),
67 disabled: true,
68 selModel: sm,
69 handler: run_editor
70 });
71
72 var remove_btn = new PVE.button.Button({
73 text: gettext('Remove'),
74 disabled: true,
75 selModel: sm,
76 confirmMsg: function (rec) {
77 return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
78 "'" + rec.data.storage + "'");
79 },
80 handler: function(btn, event, rec) {
81 PVE.Utils.API2Request({
82 url: '/storage/' + rec.data.storage,
83 method: 'DELETE',
84 waitMsgTarget: me,
85 callback: function() {
86 reload();
87 },
88 failure: function (response, opts) {
89 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
90 }
91 });
92 }
93 });
94
95 Ext.apply(me, {
96 store: store,
97 selModel: sm,
98 stateful: false,
99 viewConfig: {
100 trackOver: false
101 },
102 tbar: [
103 {
104 text: gettext('Add'),
105 menu: new Ext.menu.Menu({
106 items: [
107 {
108 text: PVE.Utils.format_storage_type('dir'),
109 iconCls: 'pve-itype-icon-itype',
110 handler: function() {
111 var win = Ext.create('PVE.storage.DirEdit', {});
112 win.on('destroy', reload);
113 win.show();
114 }
115
116 },
117 {
118 text: PVE.Utils.format_storage_type('lvm'),
119 iconCls: 'pve-itype-icon-storage',
120 handler: function() {
121 var win = Ext.create('PVE.storage.LVMEdit', {});
122 win.on('destroy', reload);
123 win.show();
124 }
125 },
126 {
127 text: PVE.Utils.format_storage_type('nfs'),
128 iconCls: 'pve-itype-icon-network-server',
129 handler: function() {
130 var win = Ext.create('PVE.storage.NFSEdit', {});
131 win.on('destroy', reload);
132 win.show();
133 }
134 },
135 {
136 text: PVE.Utils.format_storage_type('iscsi'),
137 iconCls: 'pve-itype-icon-network-server',
138 handler: function() {
139 var win = Ext.create('PVE.storage.IScsiEdit', {});
140 win.on('destroy', reload);
141 win.show();
142 }
143 },
144 {
145 text: PVE.Utils.format_storage_type('glusterfs'),
146 iconCls: 'pve-itype-icon-network-server',
147 handler: function() {
148 var win = Ext.create('PVE.storage.GlusterFsEdit', {});
149 win.on('destroy', reload);
150 win.show();
151 }
152 },
153 {
154 text: PVE.Utils.format_storage_type('rbd'),
155 iconCls: 'pve-itype-icon-network-server',
156 handler: function() {
157 var win = Ext.create('PVE.storage.RBDEdit', {});
158 win.on('destroy', reload);
159 win.show();
160 }
161 },
162 {
163 text: PVE.Utils.format_storage_type('zfs'),
164 iconCls: 'pve-itype-icon-network-server',
165 handler: function() {
166 var win = Ext.create('PVE.storage.ZFSEdit', {});
167 win.on('destroy', reload);
168 win.show();
169 }
170 },
171 {
172 text: PVE.Utils.format_storage_type('zfspool'),
173 iconCls: 'pve-itype-icon-storage',
174 handler: function() {
175 var win = Ext.create('PVE.storage.ZFSPoolEdit', {});
176 win.on('destroy', reload);
177 win.show();
178 }
179 },
180
181/* the following type are conidered unstable
182 * so we do not enable that on the GUI for now
183 {
184 text: PVE.Utils.format_storage_type('sheepdog'),
185 iconCls: 'pve-itype-icon-network-server',
186 handler: function() {
187 var win = Ext.create('PVE.storage.SheepdogEdit', {});
188 win.on('destroy', reload);
189 win.show();
190 }
191 }
192*/
193 ]
194 })
195 },
196 remove_btn,
197 edit_btn
198 ],
199 columns: [
200 {
201 header: 'ID',
202 width: 100,
203 sortable: true,
204 dataIndex: 'storage'
205 },
206 {
207 header: gettext('Type'),
208 width: 60,
209 sortable: true,
210 dataIndex: 'type',
211 renderer: PVE.Utils.format_storage_type
212 },
213 {
214 header: gettext('Content'),
215 width: 150,
216 sortable: true,
217 dataIndex: 'content',
218 renderer: PVE.Utils.format_content_types
219 },
220 {
221 header: gettext('Path') + '/' + gettext('Target'),
222 flex: 1,
223 sortable: true,
224 dataIndex: 'path',
225 renderer: function(value, metaData, record) {
226 if (record.data.target) {
227 return record.data.target;
228 }
229 return value;
230 }
231 },
232 {
233 header: gettext('Shared'),
234 width: 80,
235 sortable: true,
236 dataIndex: 'shared',
237 renderer: PVE.Utils.format_boolean
238 },
239 {
240 header: gettext('Enable'),
241 width: 80,
242 sortable: true,
243 dataIndex: 'disable',
244 renderer: PVE.Utils.format_neg_boolean
245 }
246 ],
247 listeners: {
248 show: reload,
249 itemdblclick: run_editor
250 }
251 });
252
253 me.callParent();
254 }
255}, function() {
256
257 Ext.define('pve-storage', {
258 extend: 'Ext.data.Model',
259 fields: [
260 'path', 'type', 'content', 'server', 'portal', 'target', 'export', 'storage',
261 { name: 'shared', type: 'boolean'},
262 { name: 'disable', type: 'boolean'}
263 ],
264 idProperty: 'storage'
265 });
266
267});