2017-01-05 12:25:02 +01:00
/*jslint confusion: true*/
/* filter is a javascript builtin, but extjs calls it also filter */
Ext . define ( 'PVE.form.VMSelector' , {
extend : 'Ext.grid.Panel' ,
alias : 'widget.vmselector' ,
mixins : {
field : 'Ext.form.field.Field'
} ,
allowBlank : true ,
selectAll : false ,
isFormField : true ,
plugins : 'gridfilters' ,
store : {
model : 'PVEResources' ,
autoLoad : true ,
sorters : 'vmid' ,
filters : [ {
property : 'type' ,
value : /lxc|qemu/
} ]
} ,
columns : [
{
header : 'ID' ,
dataIndex : 'vmid' ,
width : 80 ,
filter : {
type : 'number'
}
} ,
{
header : gettext ( 'Node' ) ,
dataIndex : 'node'
} ,
{
header : gettext ( 'Status' ) ,
dataIndex : 'status' ,
filter : {
type : 'list'
}
} ,
{
header : gettext ( 'Name' ) ,
dataIndex : 'name' ,
flex : 1 ,
filter : {
type : 'string'
}
} ,
{
header : gettext ( 'Pool' ) ,
dataIndex : 'pool' ,
filter : {
type : 'list'
}
} ,
{
header : gettext ( 'Type' ) ,
dataIndex : 'type' ,
width : 120 ,
renderer : function ( value ) {
if ( value === 'qemu' ) {
return gettext ( 'Virtual Machine' ) ;
} else if ( value === 'lxc' ) {
return gettext ( 'LXC Container' ) ;
}
return '' ;
} ,
filter : {
type : 'list' ,
store : {
data : [
{ id : 'qemu' , text : gettext ( 'Virtual Machine' ) } ,
{ id : 'lxc' , text : gettext ( 'LXC Container' ) }
] ,
// due to EXTJS-18711
// we have to do a static list via a store
// but to avoid creating an object,
// we have to have a pseudo un function
un : function ( ) { }
}
}
2017-03-15 15:46:06 +01:00
} ,
{
header : 'HA ' + gettext ( 'Status' ) ,
dataIndex : 'hastate' ,
flex : 1 ,
filter : {
type : 'list'
}
2017-01-05 12:25:02 +01:00
}
] ,
selModel : {
selType : 'checkboxmodel' ,
2018-09-11 09:48:25 +02:00
mode : 'SIMPLE'
2017-01-05 12:25:02 +01:00
} ,
checkChangeEvents : [
'selectionchange' ,
'change'
] ,
listeners : {
selectionchange : function ( ) {
// to trigger validity and error checks
this . checkChange ( ) ;
}
} ,
getValue : function ( ) {
var me = this ;
var sm = me . getSelectionModel ( ) ;
var selection = sm . getSelection ( ) ;
var values = [ ] ;
var store = me . getStore ( ) ;
selection . forEach ( function ( item ) {
// only add if not filtered
if ( store . findExact ( 'vmid' , item . data . vmid ) !== - 1 ) {
values . push ( item . data . vmid ) ;
}
} ) ;
return values ;
} ,
setValue : function ( value ) {
console . log ( value ) ;
var me = this ;
var sm = me . getSelectionModel ( ) ;
if ( ! Ext . isArray ( value ) ) {
value = value . split ( ',' ) ;
}
var selection = [ ] ;
var store = me . getStore ( ) ;
value . forEach ( function ( item ) {
var rec = store . findRecord ( 'vmid' , item , 0 , false , true , true ) ;
console . log ( store ) ;
if ( rec ) {
console . log ( rec ) ;
selection . push ( rec ) ;
}
} ) ;
sm . select ( selection ) ;
return me . mixins . field . setValue . call ( me , value ) ;
} ,
getErrors : function ( value ) {
var me = this ;
if ( me . allowBlank === false &&
me . getSelectionModel ( ) . getCount ( ) === 0 ) {
me . addBodyCls ( [ 'x-form-trigger-wrap-default' , 'x-form-trigger-wrap-invalid' ] ) ;
return [ gettext ( 'No VM selected' ) ] ;
}
me . removeBodyCls ( [ 'x-form-trigger-wrap-default' , 'x-form-trigger-wrap-invalid' ] ) ;
return [ ] ;
} ,
initComponent : function ( ) {
var me = this ;
me . callParent ( ) ;
if ( me . nodename ) {
me . store . filters . add ( {
property : 'node' ,
2017-10-16 11:08:45 +02:00
exactMatch : true ,
2017-01-05 12:25:02 +01:00
value : me . nodename
} ) ;
}
2017-01-09 14:52:57 +01:00
// only show the relevant guests by default
if ( me . action ) {
2017-04-19 14:45:22 +02:00
var statusfilter = '' ;
2017-01-09 14:52:57 +01:00
switch ( me . action ) {
case 'startall' :
2017-04-19 14:45:22 +02:00
statusfilter = 'stopped' ;
2017-01-09 14:52:57 +01:00
break ;
case 'stopall' :
2017-04-19 14:45:22 +02:00
statusfilter = 'running' ;
2017-01-09 14:52:57 +01:00
break ;
}
2017-04-19 14:45:22 +02:00
if ( statusfilter !== '' ) {
me . store . filters . add ( {
property : 'template' ,
value : 0
} , {
id : 'x-gridfilter-status' ,
operator : 'in' ,
property : 'status' ,
value : [ statusfilter ]
} ) ;
}
2017-01-09 14:52:57 +01:00
}
2017-01-05 12:25:02 +01:00
var store = me . getStore ( ) ;
var sm = me . getSelectionModel ( ) ;
if ( me . selectAll ) {
me . mon ( store , 'load' , function ( ) {
me . getSelectionModel ( ) . selectAll ( false ) ;
} ) ;
}
}
} ) ;
2017-10-11 12:09:41 +02:00
Ext . define ( 'PVE.form.VMComboSelector' , {
2018-01-15 15:17:50 +01:00
extend : 'Proxmox.form.ComboGrid' ,
2017-10-11 12:09:41 +02:00
alias : 'widget.vmComboSelector' ,
valueField : 'vmid' ,
displayField : 'vmid' ,
autoSelect : false ,
editable : true ,
anyMatch : true ,
forceSelection : true ,
store : {
model : 'PVEResources' ,
autoLoad : true ,
sorters : 'vmid' ,
filters : [ {
property : 'type' ,
value : /lxc|qemu/
} ]
} ,
listConfig : {
width : 600 ,
plugins : 'gridfilters' ,
columns : [
{
header : 'ID' ,
dataIndex : 'vmid' ,
width : 80 ,
filter : {
type : 'number'
}
} ,
{
header : gettext ( 'Name' ) ,
dataIndex : 'name' ,
flex : 1 ,
filter : {
type : 'string'
}
} ,
{
header : gettext ( 'Node' ) ,
dataIndex : 'node'
} ,
{
header : gettext ( 'Status' ) ,
dataIndex : 'status' ,
filter : {
type : 'list'
}
} ,
{
header : gettext ( 'Pool' ) ,
dataIndex : 'pool' ,
hidden : true ,
filter : {
type : 'list'
}
} ,
{
header : gettext ( 'Type' ) ,
dataIndex : 'type' ,
width : 120 ,
renderer : function ( value ) {
if ( value === 'qemu' ) {
return gettext ( 'Virtual Machine' ) ;
} else if ( value === 'lxc' ) {
return gettext ( 'LXC Container' ) ;
}
return '' ;
} ,
filter : {
type : 'list' ,
store : {
data : [
{ id : 'qemu' , text : gettext ( 'Virtual Machine' ) } ,
{ id : 'lxc' , text : gettext ( 'LXC Container' ) }
] ,
un : function ( ) { } // due to EXTJS-18711
}
}
} ,
{
header : 'HA ' + gettext ( 'Status' ) ,
dataIndex : 'hastate' ,
hidden : true ,
flex : 1 ,
filter : {
type : 'list'
}
}
]
}
} ) ;