@WidgetComponent

nm-hal-action-button

File

src/app/shared/widgets/buy/hal-action/hal-action-button.component.ts

Description

No Widgetframe.

Button of type mat-raised-button or mat-mini-fab

Metadata

selector nm-hal-action-button
styleUrls hal-action-button.component.css
templateUrl ./hal-action-button.component.html

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor(_widgetframeService: WidgetframeService)
Parameters :
Name Type Optional
_widgetframeService WidgetframeService no

Methods

Protected configureWidget
configureWidget(configuration: WidgetConfig)
Decorators : WidgetConfigure
Parameters :
Name Type Optional
configuration WidgetConfig no
Returns : void
getCssClass
getCssClass()
Returns : string
resetSearch
resetSearch()
Returns : void

Properties

Private _id
_id: string
Type : string
Decorators : WidgetId
Public action
action: any
Type : any
Public buttonType
buttonType: string
Type : string
Default value : "mat-mini-fab"
Private configuration
configuration: WidgetConfig
Type : WidgetConfig
Decorators : WidgetConfiguration
Public cssClass
cssClass: string
Type : string
Default value : ""
Public customIcon
customIcon:
Default value : false
Public dark
dark: boolean
Type : boolean
Default value : false
Private hideAfterAction
hideAfterAction: boolean
Type : boolean
Default value : false
Public icon
icon: string
Type : string
Public isVisible
isVisible: boolean
Type : boolean
Default value : true
Public payload
payload: any
Type : any
Private payloadProperty
payloadProperty: string
Type : string
Private payloadSubect
payloadSubect: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetInput
Public popover
popover: string
Type : string
Default value : ""
Public requestUrl
requestUrl: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetInput
Private reset
reset: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetOutput
Public title
title: string
Type : string
Default value : ""
Private visibleChannel
visibleChannel: Subject<boolean | [] | number>
Type : Subject<boolean | [] | number>
Default value : new Subject< boolean | any[] | number >()
Decorators : WidgetInput
import { Component } from "@angular/core";
import { Subject } from "rxjs";
import { WidgetframeService } from "../../widgetframe/widgetframe.service";
import { getOrDefault, WidgetConfig } from "../../widget.configuration";
import {
  WidgetComponent,
  WidgetConfiguration,
  WidgetConfigure,
  WidgetId,
  WidgetInput,
  WidgetOutput,
} from "../../widget.metadata";

/**
 * No Widgetframe.
 *
 * Button of type mat-raised-button or mat-mini-fab
 */
@WidgetComponent("nm-hal-action-button")
@Component({
  selector: "nm-hal-action-button",
  templateUrl: "./hal-action-button.component.html",
  styleUrls: ["./hal-action-button.component.css"],
})
export class HalActionButtonComponent {
  @WidgetConfiguration()
  private configuration: WidgetConfig;

  // Triggered on button click
  @WidgetOutput("reset")
  private reset: Subject<any> = new Subject<any>();

  // Sets the button visible if input is true, a non-empty array or a number != 0
  @WidgetInput("visible")
  private visibleChannel: Subject<boolean | any[] | number> = new Subject<
    boolean | any[] | number
  >();

  // Payload that should be used if a hal-action gets triggered on click
  @WidgetInput("payload")
  private payloadSubect: Subject<any> = new Subject<any>();

  // Url that should be used to trigger a hal-action on click
  @WidgetInput("requesturl")
  public requestUrl: Subject<any> = new Subject<any>();

  @WidgetId()
  private _id: string;

  private hideAfterAction: boolean = false;
  public popover: string = "";
  public isVisible: boolean = true;
  public action: any;
  public icon: string;
  public cssClass: string = "";
  public payload: any;
  private payloadProperty: string;
  public customIcon = false;
  public buttonType = "mat-mini-fab";
  public title: string = "";
  public dark: boolean = false;

  constructor(private _widgetframeService: WidgetframeService) {
    this.visibleChannel.asObservable().subscribe((value) => {
      if (Array.isArray(value)) {
        this.isVisible = value.length > 0;
      } else {
        this.isVisible = !!value; //!!value => true gets true, false gets false, 0 gets false, !=0 gets true
      }
    });
    this.payloadSubect.asObservable().subscribe((payload) => {
      if (this.action.payloadProperty) {
        this.payload = [];
        payload.forEach((value) =>
          this.payload.push(value[this.action.payloadProperty])
        );
      } else {
        this.payload = payload;
      }
    });
    this.requestUrl
      .asObservable()
      .subscribe((url) => (this.action.action.href = url));
  }

  resetSearch() {
    this.reset.next(Date.now);
  }

  @WidgetConfigure()
  protected configureWidget(configuration: WidgetConfig) {
    if (configuration.configuration.hideAfterAction) {
      this.hideAfterAction = configuration.configuration.hideAfterAction;
    }
    if (configuration.configuration.infoText) {
      this.popover = configuration.configuration.infoText;
    }
    if (configuration.configuration.action) {
      this.action = configuration.configuration.action;
    } else {
      console.error(
        "No action configured for hal-action-button with id " + this._id
      );
    }
    if (configuration.configuration.icon) {
      this.icon = configuration.configuration.icon;
    }
    if (configuration.configuration.cssClass) {
      this.cssClass = configuration.configuration.cssClass;
    }
    if (configuration.configuration.customIcon) {
      this.customIcon = configuration.configuration.customIcon;
    }
    if (configuration.configuration.title) {
      this.title = configuration.configuration.title;
    }
    if (configuration.configuration.type) {
      this.buttonType = configuration.configuration.type;
    }
    if (configuration.configuration.dark) {
      this.dark = configuration.configuration.dark;
    }
    this.isVisible = getOrDefault(
      configuration.configuration.defaultVisible,
      true
    );
    if (configuration.configuration.addProgressBar) {
      this.action.action.configuration = this.action.action.configuration || {};
      this.action.action.configuration.addProgressBar =
        configuration.configuration.addProgressBar;
    }
  }

  getCssClass(): string {
    var cssClass = this.cssClass;
    if (this.dark) {
      cssClass += " btn-black";
    }
    return cssClass;
  }
}
<button
  *ngIf="buttonType === 'mat-mini-fab'"
  mat-mini-fab
  class="btn-black"
  mat-elevation-z0
  [ngClass]="getCssClass()"
  color="primary"
  matTooltip="{{ popover | translate }}"
  class="mat-icon-button"
  [class.nm-fadein]="isVisible"
  (click)="resetSearch()"
  [nm-action]="action.action"
  [action-name]="action.name"
  [action-payload]="payload"
>
  <div
    class="material-icons nm-svg-icon"
    [ngStyle]="{ fill: 'rgb(255,153,0)' }"
  >
    <mat-icon
      [svgIcon]="icon"
      *ngIf="customIcon; else noCustomIcon"
      style="margin-top: -6px"
    ></mat-icon>
  </div>
</button>
<button
  *ngIf="buttonType === 'mat-raised-button'"
  [ngClass]="getCssClass()"
  mat-elevation-z0
  mat-raised-button
  color="primary"
  matTooltip="{{ popover | translate }}"
  [class.nm-fadein]="isVisible"
  (click)="resetSearch()"
  [nm-action]="action.action"
  [action-name]="action.name"
  [action-payload]="payload"
>
  <div
    class="material-icons nm-svg-icon"
    [ngStyle]="{ fill: 'rgb(255,153,0)' }"
  >
    <mat-icon
      [svgIcon]="icon"
      *ngIf="customIcon; else noCustomIcon"
      style="margin-top: -6px"
    ></mat-icon>
  </div>
  {{ title | translate }}
</button>

<ng-template #noCustomIcon>
  <mat-icon>{{ icon }}</mat-icon>
</ng-template>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""