File

src/lib/components/dropdown-list/dropdown-list.component.ts

Description

Angular Component for the DropdownList Control.

Extends

ControlComponent

Implements

OnInit DoCheck

Metadata

Index

Properties
Methods
Inputs
Outputs
Accessors

Constructor

constructor(serviceRef: WebMapService, changeDetectorRef: ChangeDetectorRef, render2: Renderer2, elem: ElementRef, webComponents: WebComponentsService, baseValidatorService: BaseValidatorService, bringTopServ1: BringTopService, containerInteraction?: ContainerInteractionService)

Creates an instance of DropdownListComponent.

Parameters :
Name Type Optional
serviceRef WebMapService No
changeDetectorRef ChangeDetectorRef No
render2 Renderer2 No
elem ElementRef No
webComponents WebComponentsService No
baseValidatorService BaseValidatorService No
bringTopServ1 BringTopService No
containerInteraction ContainerInteractionService Yes

Inputs

autoPostBack
Type : boolean

Optional input parameter to specify autopostback property setter and getter.

Outputs

SelectedIndexChanged
Type : EventEmitter<EventData>

SelectedIndexChanged event emitter.

Methods

fetchItems
fetchItems()

Fetchs items

Returns : void
ngDoCheck
ngDoCheck()

Docheck lifecycle hook

Returns : void
ngOnInit
ngOnInit()

Initialize component and load data to Dropdownlist

Returns : void
triggerIndexChange
triggerIndexChange(event: any)
Decorators :
@serverEvent('SelectedIndexChanged')

Trigger the selectedValueChanged Event on server side

Parameters :
Name Type Optional
event any No
Returns : void
validateFirsTimeValue
validateFirsTimeValue()

Validates the first time

Returns : void
valueChangeHandler
valueChangeHandler(event: any)

Handle trigger server even in only if autoposback is true

Parameters :
Name Type Optional
event any No
Returns : void

Properties

autoPostBackInternal
Default value : false

default variable to set autoposback in false in case autoposback doesn't exists from model

defaultDataUrl
Type : string
Default value : 'api/DropDownList/GetItems'

default API to get Dropdownlist data

items
Type : any

array with Data Source for Dropdownlist

Accessors

displayElementPanel
setdisplayElementPanel(value: ElementRef | any)

Sets the displayElement

Parameters :
Name Type Optional
value ElementRef | any No
Returns : void
url
geturl()

Returns the data source URL of this component.

Returns : string
autoPostBack
getautoPostBack()
setautoPostBack(autoPostBack: boolean)

Optional input parameter to specify autopostback property setter and getter.

Parameters :
Name Type Optional
autoPostBack boolean No
Returns : void
refresh
getrefresh()
setrefresh(value: boolean)

Refresh property flag to identify when to reload data in a dropdownlist

Parameters :
Name Type Optional
value boolean No
Returns : void
visible
getvisible()

Gets visible property

For this control the default is true

Returns : boolean
enabled
getenabled()

Gets the enabled property.

Returns : boolean
selectedItem
getselectedItem()

Get Selected Item

Returns : any
setselectedItem(value: any)

Notify selectedIndex change on server side

Parameters :
Name Type Optional
value any No
Returns : void
import {
  Component,
  OnInit,
  ChangeDetectorRef,
  Renderer2,
  ElementRef,
  Optional,
  Output,
  EventEmitter,
  Input,
  ChangeDetectionStrategy,
  DoCheck,
  ViewChild
} from '@angular/core';
import {
  ControlComponent,
  WebComponentsService,
  ContainerInteractionService,
  MarkForCheck,
  BaseValidatorService
} from '@mobilize/winforms-components';
import {
  BringTopService,
  dataTransfer,
  EventData,
  serverEvent
} from '@mobilize/base-components';
import { ErrorCodes, ExceptionHandlerClass } from '@mobilize/webmap-core';
import { WebMapService, NotifyChange } from '@mobilize/angularclient';

/**
 * Angular Component for the DropdownList Control.
 *
 * @export
 * @class DropdownListComponent
 * @extends {ControlComponent}
 */

@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: 'wm-dropdown-list',
  templateUrl: './dropdown-list.component.html',
  styleUrls: ['./dropdown-list.component.scss'],
  inputs: ['model']
})
@dataTransfer(['ddwnlst'])
@ExceptionHandlerClass(ErrorCodes.Winforms)
export class DropdownListComponent
  extends ControlComponent
  implements OnInit, DoCheck
{
  /**
   * Creates an instance of DropdownListComponent.
   * @param {WebMapService} serviceRef
   * @param {ChangeDetectorRef} changeDetectorRef
   * @param {Renderer2} render2
   * @param {ElementRef} elem
   * @param {WebComponentsService} webComponents
   * @param {BringTopService} bringTopServ1
   * @param {ContainerInteractionService} [containerInteraction]
   * @memberof DropdownListComponent
   */
  constructor(
    private serviceRef: WebMapService,
    private changeDetectorRef: ChangeDetectorRef,
    private render2: Renderer2,
    private elem: ElementRef,
    webComponents: WebComponentsService,
    @Optional() private baseValidatorService: BaseValidatorService,
    @Optional() private bringTopServ1: BringTopService,
    @Optional() protected containerInteraction?: ContainerInteractionService
  ) {
    super(
      changeDetectorRef,
      render2,
      elem,
      webComponents,
      bringTopServ1,
      containerInteraction
    );
  }

  /**
   * Sets the displayElement
   *
   * @memberof DropdownListComponent
   */
  @ViewChild('displayElement', { static: false })
  set displayElementPanel(value: ElementRef | any) {
    this.displayElement = value != null ? value.wrapper?.nativeElement : null;
  }

  /**
   * array with Data Source for Dropdownlist
   *
   * @type {any}
   * @memberof DropdownListComponent
   */
  items: any;
  /**
   *default variable to set autoposback in false in case autoposback doesn't exists from model
   *
   * @type {boolean}
   * @memberof DropdownListComponent
   */
  autoPostBackInternal = false;

  /**
   * default API to get Dropdownlist data
   *
   * @memberof DropdownListComponent
   */
  defaultDataUrl = 'api/DropDownList/GetItems';

  /**
   * Returns the data source URL of this component.
   *
   * @readonly
   * @type {string}
   * @memberof DropdownListComponent
   */
  get url(): string {
    return this.defaultDataUrl;
  }

  /**
   * Optional input parameter to specify autopostback property setter and getter.
   *
   * @memberof DropdownListComponent
   */
  @Input()
  set autoPostBack(autoPostBack: boolean) {
    this.model.AutoPostBack = autoPostBack;
  }
  get autoPostBack() {
    return this.model.AutoPostBack ?? this.autoPostBackInternal;
  }

  /**
   * Refresh property flag to identify
   * when to reload data in a dropdownlist
   *
   * @memberof DropdownListComponent
   */
  set refresh(value: boolean) {
    this.model.Refresh = value;
  }
  get refresh(): boolean {
    return this.model.Refresh;
  }

  /**
   * Gets visible property
   *
   * For this control the default is true
   *
   * @readonly
   * @type {boolean}
   * @memberof DropdownListComponent
   */
  get visible(): boolean {
    return this.model.Visible ?? true;
  }

  /**
   * SelectedIndexChanged event emitter.
   * @type {EventEmitter<EventData>}
   * @memberof DropdownListComponent
   */
  @Output()
  SelectedIndexChanged: EventEmitter<EventData> = new EventEmitter<EventData>();

  /**
   * Trigger the selectedValueChanged Event on server side
   *
   * @param {*} event
   * @memberof DropdownListComponent
   */
  @serverEvent('SelectedIndexChanged')
  triggerIndexChange(event: any): void {
    this.SelectedIndexChanged.emit(new EventData(event, this.id));
  }

  /**
   *Handle trigger server even in only if autoposback is true
   *
   * @param {*} event
   * @memberof DropdownListComponent
   */
  valueChangeHandler(event: any): void {
    /* c8 ignore else */
    if (this.baseValidatorService != undefined) {
      this.baseValidatorService.validate(this.id, event.Value);
    }

    if (this.autoPostBack) {
      this.triggerIndexChange(event);
    } else {
      this.SelectedIndexChanged.emit(new EventData(event, this.id));
    }
  }

  /**
   * Fetchs items
   *
   * @property items
   */
  fetchItems(): void {
    this.serviceRef.fetch<any>(this.url, this.id).subscribe((data) => {
      this.items = data;
      this.detectChanges();
      this.validateFirsTimeValue();
    });
  }

  /**
   * Initialize component and load data to Dropdownlist
   *
   * @memberof DropdownListComponent
   */
  ngOnInit(): void {
    super.ngOnInit();
    /* c8 ignore else */
    if (this.model) {
      this.refresh = false;
      this.fetchItems();
    }
  }

  /**
   * Gets the enabled property.
   *
   * @readonly
   * @type {boolean}
   * @memberof DropdownListComponent
   */
  get enabled(): boolean {
    return this.model?.Enabled ?? true;
  }

  /**
   * Get Selected Item
   * @readonly
   * @type {*}
   * @memberof DropdownListComponent
   */
  get selectedItem(): any {
    /* c8 ignore else */
    if (this.model) {
      /* c8 ignore else */
      if (
        this.model.SelectedIndex > -1 &&
        this.items != null &&
        this.items.length > this.model.SelectedIndex
      ) {
        return this.items[this.model.SelectedIndex];
      }
    }
    return null;
  }

  /**
   * Notify selectedIndex change on server side
   *
   * @memberof DropdownListComponent
   */
  @MarkForCheck()
  @NotifyChange('SelectedIndex')
  set selectedItem(value: any) {
    const currentValue = value;
    this.model.SelectedIndex = this.items
      ? this.items.indexOf(currentValue)
      : -1;
  }

  /**
   *Docheck lifecycle hook
   *
   * @memberof DropdownListComponent
   */
  ngDoCheck(): void {
    super.ngDoCheck();
    if (this.model && this.refresh) {
      this.fetchItems();
      this.refresh = false;
    }
  }

  /**
   * Validates the first time
   *
   * @memberof DropdownListComponent
   */
  validateFirsTimeValue(): void {
    if (this.selectedItem != null && this.baseValidatorService) {
      this.baseValidatorService.validate(this.id, this.selectedItem.Value);
    }
  }
}
<div *ngIf="model">
  <kendo-dropdownlist #displayElement [data]="items" [(ngModel)]="selectedItem" textField="Text" valueField="Value"
    (valueChange)="valueChangeHandler($event)" [disabled]="!enabled" [ngClass]="class" wmControls
    [hostComponent]="this">
  </kendo-dropdownlist>
</div>

./dropdown-list.component.scss


Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""