nm-menu
src/app/shared/widgets/buttons/menu/menuwidget.component.ts
Used in iPIM Buy. No Widgetframe.
mat-menu
selector | nm-menu |
styleUrls | menuwidget.component.scss |
templateUrl | ./menuwidget.component.html |
Widget inputs |
Widget outputs |
Properties |
Methods |
|
constructor()
|
Protected configureWidget | ||||||
configureWidget(configuration: WidgetConfig
|
||||||
Decorators : WidgetConfigure
|
||||||
Parameters :
Returns :
void
|
ngOnDestroy |
ngOnDestroy()
|
Returns :
void
|
Public configuration |
configuration:
|
Type : WidgetConfig<MenuConfiguration>
|
Decorators : WidgetConfiguration
|
icon |
icon:
|
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:
|
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>