@WidgetComponent

nm-menu

File

src/app/shared/widgets/buttons/menu/menuwidget.component.ts

Description

Used in iPIM Buy. No Widgetframe.

mat-menu

Implements

OnDestroy

Metadata

selector nm-menu
styleUrls menuwidget.component.scss
templateUrl ./menuwidget.component.html

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor()

Methods

Protected configureWidget
configureWidget(configuration: WidgetConfig)
Decorators : WidgetConfigure
Parameters :
Name Type Optional
configuration WidgetConfig<MenuConfiguration> no
Returns : void
ngOnDestroy
ngOnDestroy()
Returns : void

Properties

Public configuration
configuration: WidgetConfig<MenuConfiguration>
Type : WidgetConfig<MenuConfiguration>
Decorators : WidgetConfiguration
icon
icon: string
Type : string
parameter
parameter:
Default value : new Subject<any>()
Decorators : WidgetInput
selection
selection:
Default value : new Subject<Event>()
Decorators : WidgetOutput

Emits the selected option

selectors
selectors: Observable<Selectors>
Type : Observable<Selectors>
selectorsInput
selectorsInput:
Default value : new BehaviorSubject<Event>(null)
Decorators : WidgetInput

Sets the menu options

unsubscribe
unsubscribe:
Default value : NgUnsubscribe.create()
import { Component, OnDestroy } from "@angular/core";
import { BehaviorSubject, Observable, Subject } from "rxjs";
import { getOrDefault, WidgetConfig } from "../../widget.configuration";
import {
  WidgetComponent,
  WidgetConfiguration,
  WidgetConfigure,
  WidgetInput,
  WidgetOutput,
} from "../../widget.metadata";
import { NgUnsubscribe } from "../../../ng-unsubscribe";
import { filter, startWith, takeUntil } from "rxjs/operators";
import { Selectors } from "../../../components/app-context/api";

export interface MenuConfiguration {
  /** Sets the menu item icon. @default(more_vert) */
  icon?: string;

  /** Specifies the selector to add the menu items (ex: {target: menu-example}) */
  selectors?: any;
}
/**
 * Used in iPIM Buy.
 * No Widgetframe.
 *
 * mat-menu
 */
@WidgetComponent("nm-menu")
@Component({
  selector: "nm-menu",
  templateUrl: "./menuwidget.component.html",
  styleUrls: ["./menuwidget.component.scss"],
})
export class MenuWidgetComponent implements OnDestroy {
  unsubscribe = NgUnsubscribe.create();

  @WidgetConfiguration()
  public configuration: WidgetConfig<MenuConfiguration>;

  /**
   * Sets the menu options
   */
  @WidgetInput("selectors")
  selectorsInput = new BehaviorSubject<Event>(null);

  @WidgetInput()
  parameter = new Subject<any>();

  /**
   * Emits the selected option
   */
  @WidgetOutput("selection")
  selection = new Subject<Event>();

  icon: string;
  selectors: Observable<Selectors>;

  constructor() {}

  @WidgetConfigure()
  protected configureWidget(configuration: WidgetConfig<MenuConfiguration>) {
    this.icon = getOrDefault(configuration.configuration.icon, "more_vert");

    this.selectors = this.selectorsInput.pipe(
      startWith(configuration.configuration.selectors),
      filter((selectors) => !!selectors),
      takeUntil(this.unsubscribe)
    );
  }

  ngOnDestroy() {}
}
<nm-interaction-menu-bar
  [icon]="icon"
  [menu]="configuration.configuration.selectors"
  [menuActionTemplate]="menuAction"
  [menuConfigurationTemplate]="menuComponentOrConfiguration"
  [param]="parameter | async"
  #imb
>
</nm-interaction-menu-bar>

<ng-template
  #menuAction
  let-onClick="onClick"
  let-configuration="configuration"
  let-param="param"
  let-disabled="disabled"
>
  <button mat-menu-item [disabled]="disabled | async" (click)="onClick($event)">
    <mat-icon
      *ngIf="configuration.icon"
      [svgIcon]="configuration.icon"
    ></mat-icon>
    <span>{{ configuration.description | translate }}</span>
  </button>
</ng-template>

<ng-template
  #menuComponentOrConfiguration
  let-configuration="configuration"
  let-param="param"
  let-disabled="disabled"
>
  <button
    mat-menu-item
    [disabled]="disabled | async"
    (click)="imb.onClickInteraction(configuration, param)"
  >
    <mat-icon
      *ngIf="configuration.icon"
      [svgIcon]="configuration.icon"
    ></mat-icon>
    <span>{{ configuration.description | translate }}</span>
  </button>
</ng-template>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""