File

src/lib/table-create-button/table-create-button.directive.ts

Implements

OnInit OnDestroy

Metadata

Index

Methods
Inputs
HostListeners

Constructor

constructor(method: Method, elementRef: ElementRef, renderer: Renderer2)
Parameters :
Name Type Optional
method Method<any | Data | Observable> No
elementRef ElementRef No
renderer Renderer2 No

Inputs

rxapTableCreate
Type : TableDataSourceDirective<Data>
Required :  true

HostListeners

click

Methods

Public Async onClick
onClick()
Decorators :
@HostListener('click')
Returns : any
import {
  Directive,
  ElementRef,
  HostListener,
  Inject,
  Input,
  OnDestroy,
  OnInit,
  Renderer2,
} from '@angular/core';
import { Method } from '@rxap/pattern';
import {
  isObservable,
  Observable,
  Subject,
} from 'rxjs';
import { TableDataSourceDirective } from '../table-data-source.directive';
import { TABLE_CREATE_REMOTE_METHOD } from './tokens';

@Directive({
  selector: 'button[rxapTableCreate]',
  standalone: true,
})
export class TableCreateButtonDirective<Data extends Record<string, any>>
  implements OnInit, OnDestroy {
  @Input({
    required: true,
    alias: 'rxapTableCreate',
  })
  public dataSource!: TableDataSourceDirective<Data>;

  private _createObservable?: Observable<any>;

  constructor(
    @Inject(TABLE_CREATE_REMOTE_METHOD)
    private readonly method: Method<any, Data | Observable<Data>>,
    @Inject(ElementRef)
    private readonly elementRef: ElementRef,
    @Inject(Renderer2)
    private readonly renderer: Renderer2,
  ) {
  }

  public ngOnInit() {
    this.renderer.setStyle(
      this.elementRef.nativeElement,
      'margin-bottom',
      '6px',
    );
  }

  public ngOnDestroy() {
    if (this._createObservable instanceof Subject) {
      this._createObservable.complete();
    }
  }

  @HostListener('click')
  public async onClick() {
    const result = this._createObservable = await this.method.call();
    if (isObservable(result)) {
      await result.toPromise();
    }
    this.dataSource.refresh();
  }
}


results matching ""

    No results matching ""