File

projects/angular/components/ui-grid/src/header/ui-grid-header.directive.ts

Description

Grid header definition directive.

Implements

AfterViewInit OnDestroy

Metadata

Index

Inputs
Outputs

Inputs

search
Type : boolean
Default value : false

If the search input is available.

searchDebounce
Type : number
Default value : 500

The search debounce time (ms).

searchMaxLength
Type : number
Default value : 64

The search max length.

searchValue
Type : string

The active search value.

Outputs

searchFilter
Type : EventEmitter

Emits a filter model event when the search changes.

searchTerm
Type : EventEmitter

Emits the search term when the search changes.

import type { QueryList } from '@angular/core';
import {
    AfterViewInit,
    ContentChildren,
    Directive,
    EventEmitter,
    Input,
    OnDestroy,
    Output,
} from '@angular/core';

import { IFilterModel } from '../models';
import { UiGridHeaderButtonDirective } from './ui-grid-header-button.directive';

/**
 * Grid header definition directive.
 *
 * @export
 */
@Directive({
    selector: '[uiGridHeader], ui-grid-header',
})
export class UiGridHeaderDirective<T> implements AfterViewInit, OnDestroy {
    /**
     * If the search input is available.
     *
     */
    @Input()
    search = false;

    /**
     * The active search value.
     *
     */
    @Input()
    searchValue?: string;

    /**
     * The search debounce time (ms).
     *
     */
    @Input()
    searchDebounce = 500;

    /**
     * The search max length.
     *
     */
    @Input()
    searchMaxLength = 64;

    /**
     * Emits a filter model event when the search changes.
     *
     */
    @Output()
    searchFilter = new EventEmitter<IFilterModel<T>[]>();

    /**
     * Emits the search term when the search changes.
     *
     */
    @Output()
    searchTerm = new EventEmitter<string>();

    /**
     * @internal
     * @ignore
     */
    mainButtons?: UiGridHeaderButtonDirective[];

    /**
     * @internal
     * @ignore
     */
    actionButtons?: UiGridHeaderButtonDirective[];

    /**
     * @internal
     * @ignore
     */
    inlineButtons?: UiGridHeaderButtonDirective[];

    @ContentChildren(UiGridHeaderButtonDirective)
    private _buttons!: QueryList<UiGridHeaderButtonDirective>;

    /**
     * @internal
     * @ignore
     */
    ngAfterViewInit() {
        this.mainButtons = this._buttons.filter(b => b.type === 'main');
        this.actionButtons = this._buttons.filter(b => b.type === 'action');
        this.inlineButtons = this._buttons.filter(b => b.type === 'inline');
    }

    /**
     * @internal
     * @ignore
     */
    ngOnDestroy() {
        this.searchFilter.complete();
        this.searchTerm.complete();
    }
}

results matching ""

    No results matching ""