angular/modules/benchmarks/src/expanding_rows/expanding_row_details_caption.ts
2020-04-14 12:08:36 -07:00

56 lines
1.8 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Host, Input, OnDestroy} from '@angular/core';
import {Subject} from 'rxjs';
import {takeUntil} from 'rxjs/operators';
import {ExpandingRow} from './expanding_row';
import {expanding_row_css} from './expanding_row_css';
/**
* This component should be within cfc-expanding-row component. The caption
* is only visible when the row is expanded.
*/
@Component({
selector: 'cfc-expanding-row-details-caption',
styles: [expanding_row_css],
template: `
<div *ngIf="expandingRow.isExpanded"
(click)="expandingRow.handleCaptionClick($event)"
[style.backgroundColor]="color"
class="cfc-expanding-row-details-caption">
<ng-content></ng-content>
</div>`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ExpandingRowDetailsCaption implements OnDestroy {
/** The background color of this component. */
@Input() color: string = 'blue';
/** This is triggered when this component is destroyed. */
private readonly onDestroy = new Subject();
/**
* We need a reference to parent cfc-expanding-row component here to hide
* this component when the row is collapsed. We also need to relay clicks
* to the parent component.
*/
constructor(@Host() public expandingRow: ExpandingRow, changeDetectorRef: ChangeDetectorRef) {
this.expandingRow.isExpandedChange.pipe(takeUntil(this.onDestroy)).subscribe(() => {
changeDetectorRef.markForCheck();
});
}
/** When component is destroyed, unlisten to isExpanded. */
ngOnDestroy(): void {
this.onDestroy.next();
}
}