Skip to content

Commit bfb7e57

Browse files
crisbetoannieyw
authored andcommitted
fix(cdk/table): add fallback code if view repeater isn't provided (#20604)
The `_viewRepeater` parameter is currently optional due to our breaking change policy, however if it isn't provided, the table is basically a no-op. These changes add the old rendering logic while we have to support both cases. Fixes #20601. (cherry picked from commit 54c66bc)
1 parent 078b1a3 commit bfb7e57

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

src/cdk/table/table.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -555,21 +555,38 @@ export class CdkTable<T> implements AfterContentChecked, CollectionViewer, OnDes
555555
}
556556
const viewContainer = this._rowOutlet.viewContainer;
557557

558-
// @breaking-change 11.0.0 Remove null check for `_viewRepeater`
559-
// once it's a required parameter in the constructor.
560-
this._viewRepeater?.applyChanges(
561-
changes,
562-
viewContainer,
563-
(record: IterableChangeRecord<RenderRow<T>>,
564-
_adjustedPreviousIndex: number|null,
565-
currentIndex: number|null) => this._getEmbeddedViewArgs(record.item, currentIndex!),
566-
(record) => record.item.data,
567-
(change: _ViewRepeaterItemChange<RenderRow<T>, RowContext<T>>) => {
568-
if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {
569-
this._renderCellTemplateForItem(change.record.item.rowDef, change.context);
558+
// @breaking-change 11.0.0 Remove null check for `_viewRepeater` and the
559+
// `else` clause once `_viewRepeater` is turned into a required parameter.
560+
if (this._viewRepeater) {
561+
this._viewRepeater.applyChanges(
562+
changes,
563+
viewContainer,
564+
(record: IterableChangeRecord<RenderRow<T>>,
565+
_adjustedPreviousIndex: number|null,
566+
currentIndex: number|null) => this._getEmbeddedViewArgs(record.item, currentIndex!),
567+
(record) => record.item.data,
568+
(change: _ViewRepeaterItemChange<RenderRow<T>, RowContext<T>>) => {
569+
if (change.operation === _ViewRepeaterOperation.INSERTED && change.context) {
570+
this._renderCellTemplateForItem(change.record.item.rowDef, change.context);
571+
}
572+
});
573+
} else {
574+
changes.forEachOperation(
575+
(record: IterableChangeRecord<RenderRow<T>>, prevIndex: number|null,
576+
currentIndex: number|null) => {
577+
if (record.previousIndex == null) {
578+
const renderRow = record.item;
579+
const rowDef = renderRow.rowDef;
580+
const context: RowContext<T> = {$implicit: renderRow.data};
581+
this._renderRow(this._rowOutlet, rowDef, currentIndex!, context);
582+
} else if (currentIndex == null) {
583+
viewContainer.remove(prevIndex!);
584+
} else {
585+
const view = <RowViewRef<T>>viewContainer.get(prevIndex!);
586+
viewContainer.move(view!, currentIndex);
570587
}
571-
}
572-
);
588+
});
589+
}
573590

574591
// Update the meta context of a row's context data (index, count, first, last, ...)
575592
this._updateRowIndexContext();

0 commit comments

Comments
 (0)