diff --git a/eclipse-scout-core/src/table/Table.ts b/eclipse-scout-core/src/table/Table.ts index a36ba357f40..d9cc7ec2d9d 100644 --- a/eclipse-scout-core/src/table/Table.ts +++ b/eclipse-scout-core/src/table/Table.ts @@ -5209,8 +5209,10 @@ export class Table extends Widget implements TableModel, Filterable { createTiles(rows: TableRow[]): Tile[] { return rows.map(row => { let tile = this.createTileForRow(row); - this._adaptTile(tile); - tile.rowId = row.id; + if (tile) { + this._adaptTile(tile); + tile.rowId = row.id; + } return tile; }); } diff --git a/eclipse-scout-core/src/table/TableTileGridMediator.ts b/eclipse-scout-core/src/table/TableTileGridMediator.ts index 9acc9f675ee..4719c2aa99e 100644 --- a/eclipse-scout-core/src/table/TableTileGridMediator.ts +++ b/eclipse-scout-core/src/table/TableTileGridMediator.ts @@ -190,6 +190,8 @@ export class TableTileGridMediator extends Widget implements TableTileGridMediat } setTiles(tiles: ObjectOrChildModel[]) { + tiles = arrays.ensure(tiles) + .filter((value, index, array) => value && array.indexOf(value) === index); // remove duplicates this.setProperty('tiles', tiles); } @@ -435,7 +437,7 @@ export class TableTileGridMediator extends Widget implements TableTileGridMediat this.table.loadingSupport.renderLoading(true); } - override destroy() { + protected override _destroy() { // destroy tiles manually since owner is the mediator thus the tileGrid can't destroy them this.tiles.forEach(tile => tile.destroy()); this.tileAccordion.destroy(); @@ -528,7 +530,8 @@ export class TableTileGridMediator extends Widget implements TableTileGridMediat if (!this.table.tileMode || $.isEmptyObject(this.tilesMap)) { return; } - this.tiles = this.table.rows.map(row => this.tilesMap[row.id]); + this.tiles = this.table.rows.map(row => this.tilesMap[row.id]) + .filter((value, index, array) => value && array.indexOf(value) === index); // remove duplicates this.tileAccordion.setTiles(this.tiles); }