]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - grid/ObjectGrid.js
1 /* Renders a list of key values objets
3 mandatory config parameters:
4 rows: an object container where each propery is a key-value object we want to render
7 header: gettext('Keyboard Layout'),
8 editor: 'Your.KeyboardEdit',
13 disabled: setting this parameter to true will disable selection and focus on the
14 proxmoxObjectGrid as well as greying out input elements.
15 Useful for a readonly tabular display
19 Ext
.define('Proxmox.grid.ObjectGrid', {
20 extend
: 'Ext.grid.GridPanel',
21 alias
: ['widget.proxmoxObjectGrid'],
25 monStoreErrors
: false,
27 add_combobox_row: function(name
, text
, opts
) {
31 me
.rows
= me
.rows
|| {};
35 defaultValue
: opts
.defaultValue
,
37 renderer
: opts
.renderer
,
39 xtype
: 'proxmoxWindowEdit',
41 onlineHelp
: opts
.onlineHelp
,
43 labelWidth
: opts
.labelWidth
|| 100,
46 xtype
: 'proxmoxKVComboBox',
48 comboItems
: opts
.comboItems
,
49 value
: opts
.defaultValue
,
50 deleteEmpty
: !!opts
.deleteEmpty
,
51 emptyText
: opts
.defaultValue
,
52 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
53 text
, opts
.labelWidth
),
60 add_text_row: function(name
, text
, opts
) {
64 me
.rows
= me
.rows
|| {};
68 defaultValue
: opts
.defaultValue
,
70 renderer
: opts
.renderer
,
72 xtype
: 'proxmoxWindowEdit',
74 onlineHelp
: opts
.onlineHelp
,
76 labelWidth
: opts
.labelWidth
|| 100,
79 xtype
: 'proxmoxtextfield',
81 deleteEmpty
: !!opts
.deleteEmpty
,
82 emptyText
: opts
.defaultValue
,
83 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
84 text
, opts
.labelWidth
),
92 add_boolean_row: function(name
, text
, opts
) {
96 me
.rows
= me
.rows
|| {};
100 defaultValue
: opts
.defaultValue
|| 0,
102 renderer
: opts
.renderer
|| Proxmox
.Utils
.format_boolean
,
104 xtype
: 'proxmoxWindowEdit',
106 onlineHelp
: opts
.onlineHelp
,
108 labelWidth
: opts
.labelWidth
|| 100,
111 xtype
: 'proxmoxcheckbox',
114 defaultValue
: opts
.defaultValue
|| 0,
115 checked
: !!opts
.defaultValue
,
116 deleteDefaultValue
: !!opts
.deleteDefaultValue
,
117 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
118 text
, opts
.labelWidth
),
125 add_integer_row: function(name
, text
, opts
) {
129 me
.rows
= me
.rows
|| {};
133 defaultValue
: opts
.defaultValue
,
135 renderer
: opts
.renderer
,
137 xtype
: 'proxmoxWindowEdit',
139 onlineHelp
: opts
.onlineHelp
,
141 labelWidth
: opts
.labelWidth
|| 100,
144 xtype
: 'proxmoxintegerfield',
146 minValue
: opts
.minValue
,
147 maxValue
: opts
.maxValue
,
148 emptyText
: gettext('Default'),
149 deleteEmpty
: !!opts
.deleteEmpty
,
150 value
: opts
.defaultValue
,
151 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
152 text
, opts
.labelWidth
),
159 editorConfig
: {}, // default config passed to editor
161 run_editor: function() {
164 let sm
= me
.getSelectionModel();
165 let rec
= sm
.getSelection()[0];
171 let rowdef
= rows
[rec
.data
.key
];
172 if (!rowdef
.editor
) {
178 if (Ext
.isString(rowdef
.editor
)) {
180 confid
: rec
.data
.key
,
182 win
= Ext
.create(rowdef
.editor
, config
);
185 confid
: rec
.data
.key
,
187 Ext
.apply(config
, rowdef
.editor
);
188 win
= Ext
.createWidget(rowdef
.editor
.xtype
, config
);
193 win
.on('destroy', me
.reload
, me
);
201 getObjectValue: function(key
, defaultValue
) {
203 let rec
= me
.store
.getById(key
);
205 return rec
.data
.value
;
210 renderKey: function(key
, metaData
, record
, rowIndex
, colIndex
, store
) {
213 let rowdef
= rows
&& rows
[key
] ? rows
[key
] : {};
214 return rowdef
.header
|| key
;
217 renderValue: function(value
, metaData
, record
, rowIndex
, colIndex
, store
) {
220 let key
= record
.data
.key
;
221 let rowdef
= rows
&& rows
[key
] ? rows
[key
] : {};
223 let renderer
= rowdef
.renderer
;
225 return renderer(value
, metaData
, record
, rowIndex
, colIndex
, store
);
232 itemkeydown: function(view
, record
, item
, index
, e
) {
233 if (e
.getKey() === e
.ENTER
) {
234 this.pressedIndex
= index
;
237 itemkeyup: function(view
, record
, item
, index
, e
) {
238 if (e
.getKey() === e
.ENTER
&& index
=== this.pressedIndex
) {
242 this.pressedIndex
= undefined;
246 initComponent: function() {
253 throw "no url specified";
256 me
.rstore
= Ext
.create('Proxmox.data.ObjectStore', {
258 interval
: me
.interval
,
259 extraParams
: me
.extraParams
,
264 let rstore
= me
.rstore
;
265 let store
= Ext
.create('Proxmox.data.DiffStore', {
272 Ext
.Object
.each(rows
, function(key
, rowdef
) {
273 if (Ext
.isDefined(rowdef
.defaultValue
)) {
274 store
.add({ key
: key
, value
: rowdef
.defaultValue
});
275 } else if (rowdef
.required
) {
276 store
.add({ key
: key
, value
: undefined });
282 store
.sorters
.add(Ext
.create('Ext.util.Sorter', {
283 sorterFn
: me
.sorterFn
,
287 store
.filters
.add(Ext
.create('Ext.util.Filter', {
288 filterFn: function(item
) {
290 let rowdef
= rows
[item
.data
.key
];
291 if (!rowdef
|| rowdef
.visible
=== false) {
299 Proxmox
.Utils
.monStoreErrors(me
, rstore
);
306 header
: gettext('Name'),
307 width
: me
.cwidth1
|| 200,
309 renderer
: me
.renderKey
,
313 header
: gettext('Value'),
315 renderer
: me
.renderValue
,
322 if (me
.monStoreErrors
) {
323 Proxmox
.Utils
.monStoreErrors(me
, me
.store
);