object grid: allow one to declaratively specify rows

So that users of this component do not necesacrrily need to add an
initComponent override and make the `me.add_XYZ_row()` there, but
instead can use something like:

  gridRows: [
    {
      xtype: 'text',
      name: 'http-proxy',
      text: gettext('HTTP proxy'),
      defaultValue: Proxmox.Utils.noneText,
      vtype: 'HttpProxy',
      deleteEmpty: true,
    },
  ],

I avoid using `rows` as config key as that is internally used for
quite a few things, and potentially some existing users (did not
checked all). We can still switch to that easily if it is deemed to
be better...

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2021-05-21 16:39:23 +02:00
parent f0f898d2dd
commit bc9ae6029f

View File

@ -19,6 +19,11 @@ Useful for a readonly tabular display
Ext.define('Proxmox.grid.ObjectGrid', {
extend: 'Ext.grid.GridPanel',
alias: ['widget.proxmoxObjectGrid'],
// can be used as declarative replacement over manually calling the add_XYZ_row helpers,
// see top-level doc-comment above for details/example
gridRows: [],
disabled: false,
hideHeaders: true,
@ -246,6 +251,17 @@ Ext.define('Proxmox.grid.ObjectGrid', {
initComponent: function() {
let me = this;
for (const rowdef of me.gridRows || []) {
let addFn = me[`add_${rowdef.xtype}_row`];
if (typeof addFn !== 'function') {
throw `unknown object-grid row xtype '${rowdef.xtype}'`;
} else if (typeof rowdef.name !== 'string') {
throw `object-grid row need a valid name string-property!`;
} else {
addFn.call(me, rowdef.name, rowdef.text || rowdef.name, rowdef);
}
}
let rows = me.rows;
if (!me.rstore) {