]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/form/MultiDiskSelector.js
1 Ext
.define('Proxmox.form.MultiDiskSelector', {
2 extend
: 'Ext.grid.Panel',
3 alias
: 'widget.pmxMultiDiskSelector',
6 field
: 'Ext.form.field.Field',
9 selModel
: 'checkboxmodel',
18 // which field of the disklist is used for getValue
19 valueField
: 'devpath',
21 // which parameter is used for the type
22 typeParameter
: 'type',
24 // the type of disks to show
31 getValue: function() {
36 setValue: function(value
) {
39 if (!Ext
.isArray(value
)) {
40 value
= value
.split(/;, /);
43 let store
= me
.getStore();
46 let keyField
= me
.valueField
;
48 value
.forEach(item
=> {
49 let rec
= store
.findRecord(keyField
, item
, 0, false, true, true);
55 me
.setSelection(selection
);
57 return me
.mixins
.field
.setValue
.call(me
, value
);
60 getErrors: function(value
) {
62 if (me
.allowBlank
=== false &&
63 me
.getSelectionModel().getCount() === 0) {
64 me
.addBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
65 return [gettext('No Disk selected')];
68 me
.removeBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
72 update_disklist: function() {
74 var disks
= me
.getSelection();
77 disks
.sort(function(a
, b
) {
78 var aorder
= a
.get('order') || 0;
79 var border
= b
.get('order') || 0;
80 return aorder
- border
;
83 disks
.forEach(function(disk
) {
84 val
.push(disk
.get(me
.valueField
));
93 text
: gettext('Device'),
98 text
: gettext('Model'),
103 text
: gettext('Serial'),
108 text
: gettext('Size'),
110 renderer
: Proxmox
.Utils
.format_size
,
114 header
: gettext('Order'),
115 xtype
: 'widgetcolumn',
120 xtype
: 'proxmoxintegerfield',
124 change: function(numberfield
, value
, old_value
) {
125 let grid
= this.up('pmxMultiDiskSelector');
126 var record
= numberfield
.getWidgetRecord();
127 record
.set('order', value
);
128 grid
.update_disklist(record
);
136 selectionchange: function() {
137 this.update_disklist();
141 initComponent: function() {
146 throw "no url or nodename given";
149 let node
= me
.nodename
;
150 let param
= me
.typeParameter
;
151 let type
= me
.diskType
;
152 me
.url
= `/api2/json/nodes/${node}/disks/list?${param}=${type}`;
158 let store
= me
.getStore();
159 store
.getProxy().setUrl(me
.url
);
161 store
.sort({ property
: me
.valueField
});