]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/PoolMembers.js
ext6migrate: fix pool member view
[pve-manager.git] / www / manager6 / grid / PoolMembers.js
1 Ext.define('PVE.pool.AddVM', {
2 extend: 'PVE.window.Edit',
3
4 initComponent : function() {
5 /*jslint confusion: true */
6 var me = this;
7
8 if (!me.pool) {
9 throw "no pool specified";
10 }
11
12 me.create = true;
13 me.isAdd = true;
14 me.url = "/pools/" + me.pool;
15 me.method = 'PUT';
16
17 Ext.apply(me, {
18 subject: gettext('Virtual Machine'),
19 width: 350,
20 items: [
21 {
22 xtype: 'pveVMIDSelector',
23 name: 'vms',
24 validateExists: true,
25 value: '',
26 fieldLabel: "VM ID"
27 }
28 ]
29 });
30
31 me.callParent();
32 }
33 });
34
35 Ext.define('PVE.pool.AddStorage', {
36 extend: 'PVE.window.Edit',
37
38 initComponent : function() {
39 /*jslint confusion: true */
40 var me = this;
41
42 if (!me.pool) {
43 throw "no pool specified";
44 }
45
46 me.create = true;
47 me.isAdd = true;
48 me.url = "/pools/" + me.pool;
49 me.method = 'PUT';
50
51 Ext.apply(me, {
52 subject: gettext('Storage'),
53 width: 350,
54 items: [
55 {
56 xtype: 'PVE.form.StorageSelector',
57 name: 'storage',
58 nodename: 'localhost',
59 autoSelect: false,
60 value: '',
61 fieldLabel: gettext("Storage")
62 }
63 ]
64 });
65
66 me.callParent();
67 }
68 });
69
70 Ext.define('PVE.grid.PoolMembers', {
71 extend: 'Ext.grid.GridPanel',
72 alias: ['widget.pvePoolMembers'],
73
74 // fixme: dynamic status update ?
75
76 initComponent : function() {
77 var me = this;
78
79 if (!me.pool) {
80 throw "no pool specified";
81 }
82
83 var store = Ext.create('Ext.data.Store', {
84 model: 'PVEResources',
85 sorters: [
86 {
87 property : 'type',
88 direction: 'ASC'
89 }
90 ],
91 proxy: {
92 type: 'pve',
93 root: 'data.members',
94 url: "/api2/json/pools/" + me.pool
95 }
96 });
97
98 var coldef = PVE.data.ResourceStore.defaultColums();
99
100 var reload = function() {
101 store.load();
102 };
103
104 var sm = Ext.create('Ext.selection.RowModel', {});
105
106 var remove_btn = new PVE.button.Button({
107 text: gettext('Remove'),
108 disabled: true,
109 selModel: sm,
110 confirmMsg: function (rec) {
111 return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
112 "'" + rec.data.id + "'");
113 },
114 handler: function(btn, event, rec) {
115 var params = { 'delete': 1 };
116 if (rec.data.type === 'storage') {
117 params.storage = rec.data.storage;
118 } else if (rec.data.type === 'qemu' || rec.data.type === 'lxc' || rec.data.type === 'openvz') {
119 params.vms = rec.data.vmid;
120 } else {
121 throw "unknown resource type";
122 }
123
124 PVE.Utils.API2Request({
125 url: '/pools/' + me.pool,
126 method: 'PUT',
127 params: params,
128 waitMsgTarget: me,
129 callback: function() {
130 reload();
131 },
132 failure: function (response, opts) {
133 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
134 }
135 });
136 }
137 });
138
139 Ext.apply(me, {
140 store: store,
141 selModel: sm,
142 tbar: [
143 {
144 text: gettext('Add'),
145 menu: new Ext.menu.Menu({
146 items: [
147 {
148 text: gettext('Virtual Machine'),
149 iconCls: 'pve-itype-icon-qemu',
150 handler: function() {
151 var win = Ext.create('PVE.pool.AddVM', { pool: me.pool });
152 win.on('destroy', reload);
153 win.show();
154 }
155 },
156 {
157 text: gettext('Storage'),
158 iconCls: 'pve-itype-icon-storage',
159 handler: function() {
160 var win = Ext.create('PVE.pool.AddStorage', { pool: me.pool });
161 win.on('destroy', reload);
162 win.show();
163 }
164 }
165 ]
166 })
167 },
168 remove_btn
169 ],
170 viewConfig: {
171 stripeRows: true
172 },
173 columns: coldef,
174 listeners: {
175 activate: reload
176 }
177 });
178
179 me.callParent();
180 }
181 });