src/lib/select-row/checkbox-header-cell/checkbox-header-cell.component.ts
OnInit
| changeDetection | ChangeDetectionStrategy.OnPush |
| selector | th[rxap-checkbox-header-cell] |
| imports |
MatCheckboxModule
AsyncPipe
|
| styleUrls | ./checkbox-header-cell.component.scss |
| templateUrl | ./checkbox-header-cell.component.html |
Properties |
|
Methods |
|
constructor(cdkTable: CdkTable, selectRow: SelectRowService<Data>)
|
|||||||||
|
Parameters :
|
| Public onChange | ||||||
onChange($event: MatCheckboxChange)
|
||||||
|
Parameters :
Returns :
void
|
| Public checked$ |
Type : Observable<boolean>
|
Default value : EMPTY
|
| Public indeterminate$ |
Type : Observable<boolean>
|
Default value : EMPTY
|
import {
ChangeDetectionStrategy,
Component,
Inject,
OnInit,
} from '@angular/core';
import { SelectRowService } from '../select-row.service';
import {
EMPTY,
Observable,
} from 'rxjs';
import { map } from 'rxjs/operators';
import {
MatCheckboxChange,
MatCheckboxModule,
} from '@angular/material/checkbox';
import { CdkTable } from '@angular/cdk/table';
import { AsyncPipe } from '@angular/common';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'th[rxap-checkbox-header-cell]',
templateUrl: './checkbox-header-cell.component.html',
styleUrls: ['./checkbox-header-cell.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [MatCheckboxModule, AsyncPipe]
})
export class CheckboxHeaderCellComponent<Data extends Record<string, any>> implements OnInit {
public indeterminate$: Observable<boolean> = EMPTY;
public checked$: Observable<boolean> = EMPTY;
constructor(
@Inject(CdkTable)
private readonly cdkTable: CdkTable<Data>,
private readonly selectRow: SelectRowService<Data>,
) {
}
public ngOnInit() {
this.indeterminate$ = this.selectRow.selectedRows$.pipe(
map(selectedRows => !!selectedRows.length && this.cdkTable['_data'].length !== selectedRows.length),
);
this.checked$ = this.selectRow.selectedRows$.pipe(
map(selectedRows => !!selectedRows.length && this.cdkTable['_data'].length === selectedRows.length),
);
}
public onChange($event: MatCheckboxChange) {
if ($event.checked) {
this.selectRow.selectionModel.select(...this.cdkTable['_data']);
} else {
this.selectRow.selectionModel.clear();
}
}
}
<mat-checkbox
(change)="onChange($event)"
[checked]="(checked$ | async) ?? false"
[indeterminate]="indeterminate$ | async">
</mat-checkbox>
./checkbox-header-cell.component.scss