File

src/lib/table/columns.directive.ts

Metadata

selector [columns]

Inputs

columns
sortBy

Type: string

sortOrder

Type: string

Methods

setColumnHandler
setColumnHandler(plexTableColumn: PlexTableColumnsComponent)
Returns: void
onColumnClick
onColumnClick(column: IPlexTableColumns)
Returns: void

Properties

Private _columns
_columns: BehaviorSubject<IPlexTableColumns[]>
Private _displayColumns
_displayColumns: BehaviorSubject<IPlexColumnDisplay>
Public _filters
_filters: BehaviorSubject<{}>
Public _filtrosSeleccionados
_filtrosSeleccionados: BehaviorSubject<{}>
Private _sort
_sort: BehaviorSubject<IPlexSortData>
Public columns$
columns$: Observable<IPlexTableColumns[]>
Public displayColumns$
displayColumns$: Observable<IPlexColumnDisplay>
Public filters$
filters$: Observable<{}>
Public filtrosSeleccionados$
filtrosSeleccionados$: Observable<{}>
Public sort$
sort$: Observable<IPlexSortData>
Private sub
sub: Subscription
Public vm$
vm$: Observable<{ columns: any; displayColumns: any; sortData: any; filters: any; }>
import { Directive, EmbeddedViewRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs';
import { map } from 'rxjs/operators';
import { PlexTableColumnsComponent } from './table-column-dropdown.component';
import { IPlexColumnDisplay, IPlexSortData, IPlexTableColumns } from './table.interfaces';

@Directive({
    // tslint:disable-next-line:directive-selector
    selector: '[columns]',
    exportAs: 'plTable'
})
export class PlexColumnDirective implements OnChanges, OnDestroy {
    private _columns = new BehaviorSubject<IPlexTableColumns[]>(null);

    public columns$ = this._columns.asObservable();

    private _displayColumns = new BehaviorSubject<IPlexColumnDisplay>({});

    public displayColumns$ = this._displayColumns.asObservable();

    private _sort = new BehaviorSubject<IPlexSortData>({});

    public sort$ = this._sort.asObservable();

    public _filters = new BehaviorSubject({});

    public filters$ = this._filters.asObservable();

    public _filtrosSeleccionados = new BehaviorSubject({});

    public filtrosSeleccionados$ = this._filtrosSeleccionados.asObservable();


    private sub: Subscription;

    public vm$ = combineLatest([
        this.columns$,
        this.displayColumns$,
        this.sort$,
        this.filters$
    ]).pipe(
        map(([columns, displayColumns, sortData, filters]) => ({ columns, displayColumns, sortData, filters }))
    );

    @Input() set columns(value) {
        this._columns.next(value);
    }

    @Input() sortBy: string;

    @Input() sortOrder: string;

    setColumnHandler(plexTableColumn: PlexTableColumnsComponent) {
        this.sub = plexTableColumn.change.subscribe(cols => {
            this._displayColumns.next(cols);
        });
    }

    ngOnDestroy() {
        if (this.sub) {
            this.sub.unsubscribe();
        }
    }

    ngOnChanges(changes: SimpleChanges) {
        if (changes.sortBy || changes.sortOrder) {
            this._sort.next({
                sortBy: changes.sortBy.currentValue,
                sortOrder: changes.sortOrder.currentValue
            });
        }
    }

    onColumnClick(column: IPlexTableColumns) {

        if (!column.sorteable) {
            return false;
        }

        const data = this._sort.getValue();

        if (data.sortBy === column.key) {
            this._sort.next({
                sortBy: column.key,
                sortOrder: data.sortOrder === 'ASC' ? 'DESC' : 'ASC'
            });
        } else {
            this._sort.next({
                sortBy: column.key,
                sortOrder: 'ASC'
            });
        }

    }
}

results matching ""

    No results matching ""