src/lib/table-filter/filter-header-row.directive.ts
FormDirective
OnInit
OnDestroy
| Providers |
{
provide: ControlContainer, useExisting: forwardRef(() => FilterHeaderRowDirective),
}
|
| Selector | table[rxap-filter-header-row] |
| Standalone | true |
Inputs |
Accessors |
constructor(tableFilter: TableFilterService, cdr: ChangeDetectorRef, formDefinition: FormDefinition | null)
|
||||||||||||
|
Parameters :
|
| rxap-filter-header-row | |
Type : FormDefinition | string
|
|
| useFormDefinition | ||||||
setuseFormDefinition(value: FormDefinition | string)
|
||||||
|
Parameters :
Returns :
void
|
import {
ChangeDetectorRef,
Directive,
forwardRef,
Inject,
Input,
OnDestroy,
OnInit,
Optional,
} from '@angular/core';
import { ControlContainer } from '@angular/forms';
import {
FormDefinition,
FormDirective,
} from '@rxap/forms';
import { equals } from '@rxap/utilities';
import { Subscription } from 'rxjs';
import {
debounceTime,
distinctUntilChanged,
tap,
} from 'rxjs/operators';
import { TableFilterService } from './table-filter.service';
import { RXAP_TABLE_FILTER_FORM_DEFINITION } from './tokens';
@Directive({
// eslint-disable-next-line @angular-eslint/directive-selector
selector: 'table[rxap-filter-header-row]',
providers: [
{
provide: ControlContainer,
// ignore coverage
useExisting: forwardRef(() => FilterHeaderRowDirective),
},
],
standalone: true,
})
export class FilterHeaderRowDirective
extends FormDirective
implements OnInit, OnDestroy {
@Input('rxap-filter-header-row')
public override set useFormDefinition(value: FormDefinition | '') {
if (value) {
this._formDefinition = value as any;
this.form = value.rxapFormGroup;
}
}
private _subscription?: Subscription;
constructor(
private readonly tableFilter: TableFilterService,
cdr: ChangeDetectorRef,
@Optional()
@Inject(RXAP_TABLE_FILTER_FORM_DEFINITION)
formDefinition: FormDefinition | null,
) {
super(cdr, formDefinition);
}
public override ngOnInit() {
super.ngOnInit();
this._subscription = new Subscription();
this._subscription.add(this.tableFilter.reset$.subscribe(() => this.form.reset()));
this._subscription.add(this.form.value$
.pipe(
debounceTime(1000),
distinctUntilChanged((a, b) => equals(a, b)),
tap(values => this.tableFilter.setMap(values)),
)
.subscribe());
}
public override ngOnDestroy() {
super.ngOnDestroy();
this._subscription?.unsubscribe();
}
}