@WidgetComponent

nm-search-attribute-selection

File

src/app/shared/widgets/search/attribute-selection/search-attribute-selection.component.ts

Implements

OnInit

Metadata

selector nm-search-attribute-selection
styleUrls search-attribute-selection.component.scss
templateUrl ./search-attribute-selection.component.html

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor(dialogRef: MatDialogRef, http: HttpClient, _notificationService: CustomNotificationService, translateService: TranslateService)
Parameters :
Name Type Optional
dialogRef MatDialogRef<SearchAttributeSelectionDialog> no
http HttpClient no
_notificationService CustomNotificationService no
translateService TranslateService no

Methods

arrayToObj
arrayToObj(selectedFields: )
Parameters :
Name Optional
selectedFields no
Returns : { fieldsVisible: {}; attributes: any; }
close
close()
Returns : void
confirm
confirm()
Returns : void
Public doSaveFavorites
doSaveFavorites()
Returns : void
ngOnInit
ngOnInit()
Returns : void
reset
reset()
Returns : void
selectedItemsChanged
selectedItemsChanged()
Returns : void

Properties

Public activateMultipleAddableMode
activateMultipleAddableMode: boolean
Type : boolean
Default value : true
Public additionalProperties
additionalProperties:
Public attributesVisible
attributesVisible: any[]
Type : any[]
Public currentLocale
currentLocale:
Public dialogRef
dialogRef: MatDialogRef<SearchAttributeSelectionDialog>
Type : MatDialogRef<SearchAttributeSelectionDialog>
Public enableSaveButton
enableSaveButton: boolean
Type : boolean
Default value : false
Public fields
fields: any[]
Type : any[]
Public fieldsVisible
fieldsVisible:
Public infoText
infoText: string
Type : string
Public infoTitle
infoTitle: string
Type : string
Public initalselectedFields
initalselectedFields: any[]
Type : any[]
Default value : []
Public resetDefault
resetDefault:
Private saveFavorites
saveFavorites:
Default value : new Subject<any>()
Public saveFavoritesObservable
saveFavoritesObservable:
Default value : this.saveFavorites.asObservable()
Public selectedFields
selectedFields: any[]
Type : any[]
Default value : []
Public selectFilterParams
selectFilterParams: SelectFilterParams
Type : SelectFilterParams
Public withDefaultMenuAction
withDefaultMenuAction: boolean
Type : boolean
Default value : true
import { Component, OnInit } from "@angular/core";
import { MatDialogRef } from "@angular/material/dialog";
import { HttpClient } from "@angular/common/http";
import { Subject } from "rxjs";
import { deepCopy, flatCopy } from "../../../components/util/util.service";
import { CustomNotificationService } from "../../../components/notification/customnotification.service";
import { TranslateService } from "@ngx-translate/core";
import { SelectFilterParams } from "../../interfaces/list.interfaces";
import * as uriTemplates_ from "uri-templates";
const uriTemplates = uriTemplates_;

@Component({
  selector: "nm-search-attribute-selection",
  templateUrl: "./search-attribute-selection.component.html",
  styleUrls: ["./search-attribute-selection.component.scss"],
})
export class SearchAttributeSelectionDialog implements OnInit {
  // The default fields of the dialog
  public fields: any[];
  public attributesVisible: any[];
  public fieldsVisible;
  public resetDefault;
  public selectedFields: any[] = [];
  public initalselectedFields: any[] = [];
  public enableSaveButton: boolean = false;
  public infoText: string;
  public infoTitle: string;
  public currentLocale;
  public additionalProperties;
  public withDefaultMenuAction: boolean = true;

  public selectFilterParams: SelectFilterParams;

  private saveFavorites = new Subject<any>();
  public saveFavoritesObservable = this.saveFavorites.asObservable();

  public activateMultipleAddableMode: boolean = true;

  constructor(
    public dialogRef: MatDialogRef<SearchAttributeSelectionDialog>,
    private http: HttpClient,
    private _notificationService: CustomNotificationService,
    private translateService: TranslateService
  ) {}

  ngOnInit() {
    if (!this.selectFilterParams) {
      this.selectFilterParams = {
        filterAttribute: ["scope", "mandatory"],
        placeholder: "placeholder.attributescope",
        href:
          "/api/core/configuration-types/attributescopes?locale=" +
          this.currentLocale,
        dataType: "types",
      };
    }

    this.selectFilterParams = flatCopy(this.selectFilterParams);
    this.selectFilterParams.href = uriTemplates(
      this.selectFilterParams.href
    ).fill({
      locale: this.currentLocale,
    });

    this.additionalProperties = ["parentDescription", "group", "dataLevels"];

    this.fields.forEach((field) => {
      if (
        field.scope === "SYSTEM" &&
        (this.fieldsVisible[field.identifier] ||
          this.fieldsVisible[field.identifier] === undefined)
      ) {
        this.selectedFields.push(field);
      }
    });

    if (this.attributesVisible) {
      this.selectedFields = this.selectedFields.concat(this.attributesVisible);
    }

    this.initalselectedFields = deepCopy(this.selectedFields);
  }

  close() {
    this.dialogRef.close();
  }

  confirm() {
    const mappedValue = this.arrayToObj(this.selectedFields);
    this.dialogRef.close(mappedValue);
  }

  public doSaveFavorites() {
    const favorites = deepCopy(this.selectedFields);
    this.resetDefault = favorites;
    this.saveFavorites.next(favorites);
    this._notificationService.success(
      this.translateService.instant("message.success.action.title"),
      this.translateService.instant("message.success.save.visible.fields.body")
    );
  }

  selectedItemsChanged() {
    this.enableSaveButton = true;
  }

  reset() {
    if (this.resetDefault) {
      this.initalselectedFields = deepCopy(this.resetDefault);
    }
  }

  arrayToObj(selectedFields) {
    const fieldsVisible = {};
    const attributes = selectedFields.filter(
      (entry) => entry.scope !== "SYSTEM"
    );

    /* TODO: This seems wrong in search app?
    Object.keys(this.fields.filter(entry => entry.scope === 'FAKE')).forEach(key => {
      let field = this.fields[key].identifier;
      const isVisible = selectedFields.find(entry => entry.identifier === field) !== undefined;
      fieldsVisible[field] = isVisible;
    });
     */

    Object.keys(this.fieldsVisible).forEach((field) => {
      const isVisible =
        selectedFields.find((entry) => entry.identifier === field) !==
        undefined;
      fieldsVisible[field] = isVisible;
    });

    return { fieldsVisible, attributes };
  }
}
<nm-dialog
  [dialogRef]="dialogRef"
  class="nm-dialog nm-select-attributes-dialog"
>
  <ng-container slot="title">
    {{ "edit.visible.fields" | translate }}
  </ng-container>
  <ng-container slot="content">
    <div class="duallist-table">
      <nm-ngx-material-duallistbox
        [items]="fields"
        [(selectedItems)]="selectedFields"
        [initalselectedItems]="initalselectedFields"
        [additionalProperties]="additionalProperties"
        [selectFilterParams]="selectFilterParams"
        [descProperty]="'description'"
        [filterPlaceholder]="'placeholder.available.attributes' | translate"
        [filterPlaceholderTo]="'placeholder.visible.attributes' | translate"
        [removeAllTooltip]="'button.removeAll' | translate"
        [addAllTooltip]="'button.addAll' | translate"
        [idProperty]="'identifier'"
        [activateMultipleAddableMode]="activateMultipleAddableMode"
        removeIcon="remove"
        (selectedItemsChange)="selectedItemsChanged()"
        [dynamicHeightContainer]="'.mat-dialog-container'"
        [dynamicHeightAdditionalHeight]="'190px'"
        [autofocus]="true"
      >
      </nm-ngx-material-duallistbox>
    </div>
  </ng-container>
  <ng-container slot="actions">
    <button *ngIf="withDefaultMenuAction" mat-button [matMenuTriggerFor]="menu">
      <mat-icon>more_vert</mat-icon>
      {{ "placeholder.default" | translate }}
    </button>
    <mat-menu #menu="matMenu">
      <button mat-menu-item (click)="reset()">
        <mat-icon>replay</mat-icon>
        {{ "button.reset.to.default" | translate }}
      </button>
      <button mat-menu-item (click)="doSaveFavorites()">
        <mat-icon>save</mat-icon>
        {{ "button.save.as.default" | translate }}
      </button>
    </mat-menu>
    <div class="u-flex-1"></div>
    <button mat-button (click)="close()">
      {{ "button.cancel" | translate }}
    </button>
    <button
      mat-raised-button
      type="button"
      color="primary"
      (click)="confirm()"
      [disabled]="!enableSaveButton"
    >
      {{ "button.accept" | translate }}
    </button>
  </ng-container>
</nm-dialog>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""