]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/VMSelector.js
22f7dd11d5b6619d6d372dbe46a61a8aa8b8a225
1 /* filter is a javascript builtin, but extjs calls it also filter */
2 Ext
.define('PVE.form.VMSelector', {
3 extend
: 'Ext.grid.Panel',
4 alias
: 'widget.vmselector',
7 field
: 'Ext.form.field.Field',
14 plugins
: 'gridfilters',
17 model
: 'PVEResources',
31 header
: gettext('Node'),
35 header
: gettext('Status'),
42 header
: gettext('Name'),
50 header
: gettext('Pool'),
57 header
: gettext('Type'),
60 renderer: function(value
) {
61 if (value
=== 'qemu') {
62 return gettext('Virtual Machine');
63 } else if (value
=== 'lxc') {
64 return gettext('LXC Container');
73 { id
: 'qemu', text
: gettext('Virtual Machine') },
74 { id
: 'lxc', text
: gettext('LXC Container') },
77 // Due to EXTJS-18711. we have to do a static list via a store but to avoid
78 // creating an object, we have to have an empty pseudo un function
84 header
: 'HA ' + gettext('Status'),
93 // should be a list of 'dataIndex' values, if 'undefined' all declared columns will be included
94 columnSelection
: undefined,
97 selType
: 'checkboxmodel',
107 selectionchange: function() {
108 // to trigger validity and error checks
113 getValue: function() {
115 if (me
.savedValue
!== undefined) {
116 return me
.savedValue
;
118 var sm
= me
.getSelectionModel();
119 var selection
= sm
.getSelection();
121 var store
= me
.getStore();
122 selection
.forEach(function(item
) {
123 // only add if not filtered
124 if (store
.findExact('vmid', item
.data
.vmid
) !== -1) {
125 values
.push(item
.data
.vmid
);
131 setValueSelection: function(value
) {
134 let store
= me
.getStore();
136 let selection
= value
.map(item
=> {
137 let found
= store
.findRecord('vmid', item
, 0, false, true, true);
139 if (Ext
.isNumeric(item
)) {
142 console
.warn(`invalid item in vm selection: ${item}`);
148 for (const vmid
of notFound
) {
149 let rec
= store
.add({
153 selection
.push(rec
[0]);
156 let sm
= me
.getSelectionModel();
157 if (selection
.length
) {
158 sm
.select(selection
);
162 // to correctly trigger invalid class
166 setValue: function(value
) {
168 if (!Ext
.isArray(value
)) {
169 value
= value
.split(',').filter(v
=> v
!== '');
172 let store
= me
.getStore();
173 if (!store
.isLoaded()) {
174 me
.savedValue
= value
;
175 store
.on('load', function() {
176 me
.setValueSelection(value
);
177 delete me
.savedValue
;
178 }, { single
: true });
180 me
.setValueSelection(value
);
182 return me
.mixins
.field
.setValue
.call(me
, value
);
185 getErrors: function(value
) {
187 if (!me
.isDisabled() && me
.allowBlank
=== false &&
188 me
.getSelectionModel().getCount() === 0) {
189 me
.addBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
190 return [gettext('No VM selected')];
193 me
.removeBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
197 setDisabled: function(disabled
) {
199 let res
= me
.callParent([disabled
]);
204 initComponent: function() {
207 let columns
= me
.columnsDeclaration
.filter((column
) =>
208 me
.columnSelection
? me
.columnSelection
.indexOf(column
.dataIndex
) !== -1 : true,
211 me
.columns
= columns
;
215 me
.getStore().load({ params
: { type
: 'vm' } });
218 me
.getStore().addFilter({
225 // only show the relevant guests by default
227 var statusfilter
= '';
230 statusfilter
= 'stopped';
233 statusfilter
= 'running';
236 if (statusfilter
!== '') {
237 me
.getStore().addFilter([{
238 property
: 'template',
241 id
: 'x-gridfilter-status',
244 value
: [statusfilter
],
250 me
.mon(me
.getStore(), 'load', function() {
251 me
.getSelectionModel().selectAll(false);
258 Ext
.define('PVE.form.VMComboSelector', {
259 extend
: 'Proxmox.form.ComboGrid',
260 alias
: 'widget.vmComboSelector',
263 displayField
: 'vmid',
268 forceSelection
: true,
271 model
: 'PVEResources',
282 plugins
: 'gridfilters',
293 header
: gettext('Name'),
301 header
: gettext('Node'),
305 header
: gettext('Status'),
312 header
: gettext('Pool'),
320 header
: gettext('Type'),
323 renderer: function(value
) {
324 if (value
=== 'qemu') {
325 return gettext('Virtual Machine');
326 } else if (value
=== 'lxc') {
327 return gettext('LXC Container');
336 { id
: 'qemu', text
: gettext('Virtual Machine') },
337 { id
: 'lxc', text
: gettext('LXC Container') },
339 un: function() { /* due to EXTJS-18711 */ },
344 header
: 'HA ' + gettext('Status'),
345 dataIndex
: 'hastate',