@WidgetComponent

nm-color-search

File

src/app/shared/widgets/apps/my-shop-md/color-search/color-search.component.ts

Metadata

selector nm-color-search
styleUrls color-search.component.scss
templateUrl ./color-search.component.html

Index

Widget inputs
Widget outputs
Properties
Methods

Constructor

constructor(_widgetframeService: WidgetframeService, formBuilder: FormBuilder, _listService: ListService, localStorageService: LocalStorageService)
Parameters :
Name Type Optional
_widgetframeService WidgetframeService no
formBuilder FormBuilder no
_listService ListService no
localStorageService LocalStorageService no

Methods

Protected configureWidget
configureWidget(configuration: WidgetConfig)
Decorators : WidgetConfigure
Parameters :
Name Type Optional
configuration WidgetConfig no
Returns : void
doFreetextSearch
doFreetextSearch(value: )
Parameters :
Name Optional
value no
Returns : void
doListSearch
doListSearch(value: )
Parameters :
Name Optional
value no
Returns : void
doSearch
doSearch(value: )
Parameters :
Name Optional
value no
Returns : void
keyDownFunction
keyDownFunction(event: )
Parameters :
Name Optional
event no
Returns : void
Public ngOnInit
ngOnInit()
Returns : void
onChange
onChange()
Returns : void
resetFromLocalStorage
resetFromLocalStorage(storageKeyEntry: LocalStorageEntry)
Parameters :
Name Type Optional
storageKeyEntry LocalStorageEntry no
Returns : void
Private switchToFreetextSearch
switchToFreetextSearch()
Returns : void
Private switchToListSearch
switchToListSearch()
Returns : void
toggleMode
toggleMode($event: )
Parameters :
Name Optional
$event no
Returns : void
Private updateTextField
updateTextField(value: string)
Parameters :
Name Type Optional
value string no
Returns : void

Properties

Public _id
_id: string
Type : string
Decorators : WidgetId
Private attributes
attributes: any
Type : any
Private clearCategorySearch
clearCategorySearch: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetOutput
Private clearChannel
clearChannel: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetInput
Public cols
cols: any[]
Type : any[]
Public configuration
configuration: WidgetConfig
Type : WidgetConfig
Decorators : WidgetConfiguration
Public enableListsearch
enableListsearch: boolean
Type : boolean
Public enableListSearchOnly
enableListSearchOnly: boolean
Type : boolean
Public enableTemplating
enableTemplating: boolean
Type : boolean
Default value : true
Public infotext
infotext: string
Type : string
Private inputChannel
inputChannel: Subject<any>
Type : Subject<any>
Default value : new BehaviorSubject<any>(null)
Decorators : WidgetInput
Public inputLink
inputLink: string
Type : string
Public inputLinklistSearch
inputLinklistSearch: string
Type : string
Public listsearch
listsearch: boolean
Type : boolean
Default value : false
Public localstorageIsListSearchEntry
localstorageIsListSearchEntry: LocalStorageEntry
Type : LocalStorageEntry
Private localstorageListsearchEntry
localstorageListsearchEntry: LocalStorageEntry
Type : LocalStorageEntry
Private localstorageSearchEntry
localstorageSearchEntry: LocalStorageEntry
Type : LocalStorageEntry
Public placeholderkey
placeholderkey:
Private resetChannel
resetChannel: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetInput
Private returnPressed
returnPressed: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetOutput
Public searchform
searchform: FormGroup
Type : FormGroup
Private storageValue
storageValue: Subject<any>
Type : Subject<any>
Default value : new ReplaySubject<any>(1)
string
string:
Private sub
sub:
Public title
title: string
Type : string
Private triggerSearch
triggerSearch: Subject<any>
Type : Subject<any>
Default value : new Subject<any>()
Decorators : WidgetOutput
Private uri
uri: Subject<any>
Type : Subject<any>
Default value : new ReplaySubject<any>(1)
Decorators : WidgetOutput
Public wikiLink
wikiLink: string
Type : string
import {
  combineLatest as observableCombineLatest,
  Subject,
  Observable,
  ReplaySubject,
  BehaviorSubject,
} from "rxjs";

import { distinctUntilChanged, filter } from "rxjs/operators";
import { Component } from "@angular/core";
import { WidgetframeService } from "../../../widgetframe/widgetframe.service";
import { WidgetConfig } from "../../../widget.configuration";
import {
  WidgetComponent,
  WidgetConfiguration,
  WidgetConfigure,
  WidgetId,
  WidgetInput,
  WidgetOutput,
} from "../../../widget.metadata";
import { FormBuilder, FormGroup } from "@angular/forms";
import { ListService } from "../../../list/index";
import * as uriTemplates_ from "uri-templates";
import {
  LocalStorageEntry,
  LocalStorageService,
} from "../../../../components/local-storage/local-storage.service";
import {
  DeletionMode,
  Scope,
} from "../../../../components/local-storage/local-storage-constants";

const uriTemplates = uriTemplates_;

@WidgetComponent("nm-color-search")
@Component({
  selector: "nm-color-search",
  templateUrl: "./color-search.component.html",
  styleUrls: ["./color-search.component.scss"],
})
export class ColorSearchWidgetComponent {
  public cols: any[];
  private attributes: any;
  public inputLink: string;
  public wikiLink: string;
  public infotext: string;
  public title: string;
  public inputLinklistSearch: string;
  public enableListsearch: boolean;
  public enableListSearchOnly: boolean;
  public enableTemplating: boolean = true;
  public placeholderkey;
  string;

  public localstorageIsListSearchEntry: LocalStorageEntry;
  private localstorageSearchEntry: LocalStorageEntry;
  private localstorageListsearchEntry: LocalStorageEntry;

  @WidgetConfiguration()
  public configuration: WidgetConfig;

  @WidgetOutput("uri")
  private uri: Subject<any> = new ReplaySubject<any>(1);

  @WidgetInput("reset")
  private resetChannel: Subject<any> = new Subject<any>();

  @WidgetInput("set")
  private inputChannel: Subject<any> = new BehaviorSubject<any>(null);

  @WidgetInput("cleartextsearch")
  private clearChannel: Subject<any> = new Subject<any>();

  @WidgetOutput("clearcategorysearch")
  private clearCategorySearch: Subject<any> = new Subject<any>();

  @WidgetOutput("triggerSearch")
  private triggerSearch: Subject<any> = new Subject<any>();

  @WidgetOutput("returnPressed")
  private returnPressed: Subject<any> = new Subject<any>();

  private storageValue: Subject<any> = new ReplaySubject<any>(1);

  @WidgetId()
  public _id: string;

  private sub;
  public searchform: FormGroup;

  public listsearch: boolean = false;

  constructor(
    private _widgetframeService: WidgetframeService,
    private formBuilder: FormBuilder,
    private _listService: ListService,
    private localStorageService: LocalStorageService
  ) {
    this.searchform = this.formBuilder.group({
      searchInput: "",
    });
  }

  keyDownFunction(event) {
    if (event.keyCode == 13 && !this.listsearch) {
      this.triggerSearch.next(new Date());
      this.returnPressed.next(new Date());
    }
  }

  onChange() {
    if (!(this.listsearch || this.enableListSearchOnly)) {
      this.doFreetextSearch(this.searchform.value.searchInput);
    }

    if (this.listsearch) {
      this.doListSearch(this.searchform.value.searchInput);
    }
  }

  doListSearch(value) {
    this.clearCategorySearch.next(Date.now);
    if (value) {
      this.localstorageListsearchEntry.value = value;
    }
    if (this.enableTemplating) {
      let uriParams = { q: value };
      let link = uriTemplates(this.inputLink).fill(uriParams);
      this.uri.next(link);
    } else {
      this.uri.next(value);
    }
  }

  doFreetextSearch(value) {
    this.clearCategorySearch.next(Date.now);
    this.localstorageSearchEntry.value = value;
    if (this.enableTemplating) {
      let uriParams = { q: value };
      let link = uriTemplates(this.inputLink).fill(uriParams);
      this.uri.next(link);
    } else {
      this.uri.next(value);
    }
  }

  toggleMode($event) {
    if ($event.checked) {
      this.switchToListSearch();
    } else {
      this.switchToFreetextSearch();
    }
  }

  private switchToFreetextSearch() {
    this.listsearch = false;
    this.localstorageIsListSearchEntry.value = "false";
    this.infotext = this.configuration.configuration["infoText"];
    this.title = this.configuration.configuration["title"];
    this.resetFromLocalStorage(this.localstorageSearchEntry);
  }

  private switchToListSearch() {
    this.listsearch = true;
    this.localstorageIsListSearchEntry.value = "true";
    this.infotext = this.configuration.configuration["infoText-listsearch"];
    this.title = this.configuration.configuration["title-listsearch"];
    this.resetFromLocalStorage(this.localstorageListsearchEntry);
  }

  resetFromLocalStorage(storageKeyEntry: LocalStorageEntry) {
    let value = storageKeyEntry.value;
    this.storageValue.next(value);
    this.updateTextField(value);
  }

  private updateTextField(value: string) {
    this.searchform.setValue({
      searchInput: value || "",
    });

    window.setTimeout(() => {
      this.searchform.patchValue({
        searchInput: value || "",
      });
    }, 1);
  }

  doSearch(value) {
    this.updateTextField(value);
    if (this.listsearch || this.enableListSearchOnly) {
      this.doListSearch(value);
    } else {
      this.doFreetextSearch(value);
    }
  }

  @WidgetConfigure()
  protected configureWidget(configuration: WidgetConfig) {
    this.enableListsearch = this.configuration.configuration[
      "enableListsearch"
    ];
    this.enableListSearchOnly = this.configuration.configuration[
      "enableListSearchOnly"
    ];
    if (this.configuration.configuration["enableTemplating"] != undefined) {
      this.enableTemplating = this.configuration.configuration[
        "enableTemplating"
      ];
    }
    this.wikiLink = this.configuration.configuration["wikiLink"];
    this.inputLink = this.configuration.configuration["links"]["search"];
    this.inputLinklistSearch = this.configuration.configuration["links"][
      "listSearch"
    ];

    this.localstorageSearchEntry = this.localStorageService.getLocalStorageEntry(
      this.configuration.configuration["scope"] +
        this.configuration.configuration["localstorage-search"],
      Scope.GLOBAL,
      DeletionMode.LOGIN
    );

    this.localstorageListsearchEntry = this.localStorageService.getLocalStorageEntry(
      this.configuration.configuration["scope"] +
        this.configuration.configuration["localstorage-listsearch"],
      Scope.GLOBAL,
      DeletionMode.LOGIN
    );

    this.localstorageIsListSearchEntry = this.localStorageService.getLocalStorageEntry(
      this.configuration.configuration["scope"] + "nm-product-listsearch",
      Scope.GLOBAL,
      DeletionMode.LOGIN
    );
    this.placeholderkey = this.configuration.configuration["placeholderkey"]
      ? this.configuration.configuration["placeholderkey"]
      : "elasticsearch.search.paceholder";

    if (
      this.localstorageIsListSearchEntry.exists() &&
      (this.enableListsearch || this.enableListSearchOnly)
    ) {
      this.listsearch =
        this.localstorageIsListSearchEntry.value === "true" ? true : false;
    }

    if (this.listsearch || this.enableListSearchOnly) {
      this.switchToListSearch();
    } else {
      this.switchToFreetextSearch();
    }

    this.resetChannel.asObservable().subscribe((reset) => {
      this.localstorageSearchEntry.clear();
      this.localstorageListsearchEntry.clear();
      this.doSearch("");
    });

    this.clearChannel.asObservable().subscribe((reset) => {
      this.localstorageSearchEntry.clear();
      this.localstorageListsearchEntry.clear();
      this.updateTextField("");
    });
  }

  public ngOnInit() {
    observableCombineLatest(
      this.storageValue,
      this.inputChannel,
      (storage, input) => {
        if (input) {
          return input;
        }

        return storage;
      }
    )
      .pipe(
        filter((value) => value),
        distinctUntilChanged()
      )
      .subscribe((value) => this.doSearch(value));
  }
}
<nm-widgetframe
  [header]="configuration.configuration['header']"
  [ngClass]="{ 'nm-widgetframe__content-color-search': listsearch }"
  [configuration]="configuration"
  [width]="configuration.configuration['width']"
  widgetId="{{ _id }}"
  [infoTitle]="title"
  [infoText]="configuration.configuration['infoText']"
  [infoPlacement]="'bottom'"
  [wikiLink]="wikiLink"
>
  <div slot="title" class="nm-widgetframe__title" style="width: 100%">
    <span style="float: left"> {{ title | translate }} </span>
    <div style="" *ngIf="enableListsearch">
      <mat-slide-toggle
        popover="{{ 'infotext.switchsearchmode' | translate }}"
        placement="top"
        container="body"
        triggers="mouseenter:mouseleave"
        [(ngModel)]="listsearch"
        (change)="toggleMode($event)"
      ></mat-slide-toggle>
    </div>
  </div>
  <div slot="content" class="nm-widgetframe__content">
    <form
      class="login-form"
      [formGroup]="searchform"
      (keydown)="keyDownFunction($event)"
    >
      <mat-form-field *ngIf="!enableListSearchOnly && !listsearch">
        <input
          matInput
          (input)="onChange()"
          id="in"
          class="nm-searchinput"
          placeholder="{{ placeholderkey | translate }}"
          assetType="search"
          formControlName="searchInput"
        />
        <span matPrefix>
          <mat-icon class="mat-24">search</mat-icon>
        </span>
      </mat-form-field>
      <div *ngIf="listsearch || enableListSearchOnly" style="margin-top: 20px">
        <textarea
          (input)="onChange()"
          style="
            width: 100%;
            min-height: 30px;
            height: 60px;
            padding-bottom: 10px;
          "
          formControlName="searchInput"
        >
        </textarea>
        <label class="nm-small-lable nm-textarea-label">{{
          "searchlist.placeholder" | translate
        }}</label>
      </div>
    </form>
  </div>
</nm-widgetframe>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""