/*! * devextreme-angular-test * Version: 17.2.8 * Build date: Mon Feb 05 2018 * * Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file in the root of the project for details. * * https://github.com/DevExpress/devextreme-angular */ import { Component, NgModule, ElementRef, NgZone, Input, Output, OnDestroy, Injector, EventEmitter, OnChanges, DoCheck, SimpleChanges, ContentChildren, QueryList } from '@angular/core'; import DevExpress from 'devextreme/bundles/dx.all'; import DxList from 'devextreme/ui/list'; import { DxComponent } from '../core/component'; import { DxTemplateHost } from '../core/template-host'; import { DxTemplateModule } from '../core/template'; import { EventsRegistrator } from '../core/events-strategy'; import { NestedOptionHost } from '../core/nested-option'; import { WatcherHelper } from '../core/watcher-helper'; import { IterableDifferHelper } from '../core/iterable-differ-helper'; import { DxiItemModule } from './nested/item-dxi'; import { DxiMenuItemModule } from './nested/menu-item-dxi'; import { DxoSearchEditorOptionsModule } from './nested/search-editor-options'; import { DxiItemComponent } from './nested/item-dxi'; import { DxiMenuItemComponent } from './nested/menu-item-dxi'; /** * The List is a widget that represents a collection of items in a scrollable list. */ @Component({ selector: 'dx-list', template: '', providers: [ DxTemplateHost, WatcherHelper, NestedOptionHost, IterableDifferHelper ] }) export class DxListComponent extends DxComponent implements OnDestroy, OnChanges, DoCheck { instance: DxList; /** * Specifies the shortcut key that sets focus on the widget. */ @Input() get accessKey(): string { return this._getOption('accessKey'); } set accessKey(value: string) { this._setOption('accessKey', value); } /** * Specifies whether or not the widget changes its state when interacting with a user. */ @Input() get activeStateEnabled(): boolean { return this._getOption('activeStateEnabled'); } set activeStateEnabled(value: boolean) { this._setOption('activeStateEnabled', value); } /** * Specifies whether or not an end user can delete list items. */ @Input() get allowItemDeleting(): boolean { return this._getOption('allowItemDeleting'); } set allowItemDeleting(value: boolean) { this._setOption('allowItemDeleting', value); } /** * Specifies whether or not an end user can reorder list items. */ @Input() get allowItemReordering(): boolean { return this._getOption('allowItemReordering'); } set allowItemReordering(value: boolean) { this._setOption('allowItemReordering', value); } @Input() get autoPagingEnabled(): any { return this._getOption('autoPagingEnabled'); } set autoPagingEnabled(value: any) { this._setOption('autoPagingEnabled', value); } /** * A Boolean value specifying whether to enable or disable the bounce-back effect. */ @Input() get bounceEnabled(): boolean { return this._getOption('bounceEnabled'); } set bounceEnabled(value: boolean) { this._setOption('bounceEnabled', value); } /** * Specifies whether or not an end-user can collapse groups. */ @Input() get collapsibleGroups(): boolean { return this._getOption('collapsibleGroups'); } set collapsibleGroups(value: boolean) { this._setOption('collapsibleGroups', value); } /** * A data source used to fetch data to be displayed by the widget. */ @Input() get dataSource(): DevExpress.data.DataSource| DevExpress.data.DataSourceOptions| string| Array { return this._getOption('dataSource'); } set dataSource(value: DevExpress.data.DataSource| DevExpress.data.DataSourceOptions| string| Array) { this._setOption('dataSource', value); } /** * Specifies whether the widget responds to user interaction. */ @Input() get disabled(): boolean { return this._getOption('disabled'); } set disabled(value: boolean) { this._setOption('disabled', value); } /** * Specifies the attributes to be attached to the widget's root element. */ @Input() get elementAttr(): any { return this._getOption('elementAttr'); } set elementAttr(value: any) { this._setOption('elementAttr', value); } /** * Specifies whether the widget can be focused using keyboard navigation. */ @Input() get focusStateEnabled(): boolean { return this._getOption('focusStateEnabled'); } set focusStateEnabled(value: boolean) { this._setOption('focusStateEnabled', value); } /** * Specifies whether data items should be grouped. */ @Input() get grouped(): boolean { return this._getOption('grouped'); } set grouped(value: boolean) { this._setOption('grouped', value); } /** * The template to be used for rendering item groups. Specifies a custom template for a group caption. */ @Input() get groupTemplate(): any { return this._getOption('groupTemplate'); } set groupTemplate(value: any) { this._setOption('groupTemplate', value); } /** * Specifies the widget's height. */ @Input() get height(): number| Function| string { return this._getOption('height'); } set height(value: number| Function| string) { this._setOption('height', value); } /** * Specifies text for a hint that appears when a user pauses on the widget. */ @Input() get hint(): string { return this._getOption('hint'); } set hint(value: string) { this._setOption('hint', value); } /** * Specifies whether the widget changes its state when a user pauses on it. */ @Input() get hoverStateEnabled(): boolean { return this._getOption('hoverStateEnabled'); } set hoverStateEnabled(value: boolean) { this._setOption('hoverStateEnabled', value); } /** * Specifies whether or not to show the loading panel when the DataSource bound to the widget is loading data. */ @Input() get indicateLoading(): boolean { return this._getOption('indicateLoading'); } set indicateLoading(value: boolean) { this._setOption('indicateLoading', value); } /** * Specifies the way a user can delete items from the list. */ @Input() get itemDeleteMode(): string { return this._getOption('itemDeleteMode'); } set itemDeleteMode(value: string) { this._setOption('itemDeleteMode', value); } /** * The time period in milliseconds before the onItemHold event is raised. */ @Input() get itemHoldTimeout(): number { return this._getOption('itemHoldTimeout'); } set itemHoldTimeout(value: number) { this._setOption('itemHoldTimeout', value); } /** * An array of items displayed by the widget. */ @Input() get items(): Array { return this._getOption('items'); } set items(value: Array) { this._setOption('items', value); } /** * Specifies a custom template for an item. */ @Input() get itemTemplate(): any { return this._getOption('itemTemplate'); } set itemTemplate(value: any) { this._setOption('itemTemplate', value); } /** * Specifies which data field provides keys for widget items. */ @Input() get keyExpr(): Function| string { return this._getOption('keyExpr'); } set keyExpr(value: Function| string) { this._setOption('keyExpr', value); } /** * Specifies the array of items for a context menu called for a list item. */ @Input() get menuItems(): Array { return this._getOption('menuItems'); } set menuItems(value: Array) { this._setOption('menuItems', value); } /** * Specifies whether an item context menu is shown when a user holds or swipes an item. */ @Input() get menuMode(): string { return this._getOption('menuMode'); } set menuMode(value: string) { this._setOption('menuMode', value); } /** * The text displayed on the button used to load the next page from the data source. */ @Input() get nextButtonText(): string { return this._getOption('nextButtonText'); } set nextButtonText(value: string) { this._setOption('nextButtonText', value); } /** * The text or HTML markup displayed by the widget if the item collection is empty. */ @Input() get noDataText(): string { return this._getOption('noDataText'); } set noDataText(value: string) { this._setOption('noDataText', value); } /** * Specifies the text shown in the pullDown panel, which is displayed when the list is scrolled to the bottom. */ @Input() get pageLoadingText(): string { return this._getOption('pageLoadingText'); } set pageLoadingText(value: string) { this._setOption('pageLoadingText', value); } /** * Specifies whether the next page is loaded when a user scrolls the widget to the bottom or when the "next" button is clicked. */ @Input() get pageLoadMode(): string { return this._getOption('pageLoadMode'); } set pageLoadMode(value: string) { this._setOption('pageLoadMode', value); } /** * Specifies the text displayed in the pullDown panel when the list is pulled below the refresh threshold. */ @Input() get pulledDownText(): string { return this._getOption('pulledDownText'); } set pulledDownText(value: string) { this._setOption('pulledDownText', value); } /** * Specifies the text shown in the pullDown panel while the list is being pulled down to the refresh threshold. */ @Input() get pullingDownText(): string { return this._getOption('pullingDownText'); } set pullingDownText(value: string) { this._setOption('pullingDownText', value); } /** * A Boolean value specifying whether or not the widget supports the "pull down to refresh" gesture. */ @Input() get pullRefreshEnabled(): boolean { return this._getOption('pullRefreshEnabled'); } set pullRefreshEnabled(value: boolean) { this._setOption('pullRefreshEnabled', value); } /** * Specifies the text displayed in the pullDown panel while the list is being refreshed. */ @Input() get refreshingText(): string { return this._getOption('refreshingText'); } set refreshingText(value: string) { this._setOption('refreshingText', value); } /** * Switches the widget to a right-to-left representation. */ @Input() get rtlEnabled(): boolean { return this._getOption('rtlEnabled'); } set rtlEnabled(value: boolean) { this._setOption('rtlEnabled', value); } /** * A Boolean value specifying if the list is scrolled by content. */ @Input() get scrollByContent(): boolean { return this._getOption('scrollByContent'); } set scrollByContent(value: boolean) { this._setOption('scrollByContent', value); } /** * A Boolean value specifying if the list is scrolled using the scrollbar. */ @Input() get scrollByThumb(): boolean { return this._getOption('scrollByThumb'); } set scrollByThumb(value: boolean) { this._setOption('scrollByThumb', value); } /** * A Boolean value specifying whether to enable or disable list scrolling. */ @Input() get scrollingEnabled(): boolean { return this._getOption('scrollingEnabled'); } set scrollingEnabled(value: boolean) { this._setOption('scrollingEnabled', value); } /** * Configures the search panel. */ @Input() get searchEditorOptions(): DevExpress.ui.dxTextBoxOptions { return this._getOption('searchEditorOptions'); } set searchEditorOptions(value: DevExpress.ui.dxTextBoxOptions) { this._setOption('searchEditorOptions', value); } /** * Specifies whether the search panel is visible. */ @Input() get searchEnabled(): boolean { return this._getOption('searchEnabled'); } set searchEnabled(value: boolean) { this._setOption('searchEnabled', value); } /** * Specifies a data object's field name or an expression whose value is compared to the search string. */ @Input() get searchExpr(): Function| Array { return this._getOption('searchExpr'); } set searchExpr(value: Function| Array) { this._setOption('searchExpr', value); } /** * Specifies whether the widget finds entries that contain your search string or entries that only start with it. */ @Input() get searchMode(): string { return this._getOption('searchMode'); } set searchMode(value: string) { this._setOption('searchMode', value); } /** * Specifies the current search string. */ @Input() get searchValue(): string { return this._getOption('searchValue'); } set searchValue(value: string) { this._setOption('searchValue', value); } /** * Specifies the mode in which all items are selected. */ @Input() get selectAllMode(): string { return this._getOption('selectAllMode'); } set selectAllMode(value: string) { this._setOption('selectAllMode', value); } /** * Specifies an array of currently selected item keys. */ @Input() get selectedItemKeys(): Array { return this._getOption('selectedItemKeys'); } set selectedItemKeys(value: Array) { this._setOption('selectedItemKeys', value); } /** * An array of currently selected item objects. */ @Input() get selectedItems(): Array { return this._getOption('selectedItems'); } set selectedItems(value: Array) { this._setOption('selectedItems', value); } /** * Specifies item selection mode. */ @Input() get selectionMode(): string { return this._getOption('selectionMode'); } set selectionMode(value: string) { this._setOption('selectionMode', value); } @Input() get showNextButton(): any { return this._getOption('showNextButton'); } set showNextButton(value: any) { this._setOption('showNextButton', value); } /** * Specifies when the widget shows the scrollbar. */ @Input() get showScrollbar(): string { return this._getOption('showScrollbar'); } set showScrollbar(value: string) { this._setOption('showScrollbar', value); } /** * Specifies whether or not to display controls used to select list items. */ @Input() get showSelectionControls(): boolean { return this._getOption('showSelectionControls'); } set showSelectionControls(value: boolean) { this._setOption('showSelectionControls', value); } /** * Specifies the number of the element when the Tab key is used for navigating. */ @Input() get tabIndex(): number { return this._getOption('tabIndex'); } set tabIndex(value: number) { this._setOption('tabIndex', value); } /** * Specifies whether or not the widget uses native scrolling. */ @Input() get useNativeScrolling(): boolean { return this._getOption('useNativeScrolling'); } set useNativeScrolling(value: boolean) { this._setOption('useNativeScrolling', value); } /** * Specifies whether the widget is visible. */ @Input() get visible(): boolean { return this._getOption('visible'); } set visible(value: boolean) { this._setOption('visible', value); } /** * Specifies the widget's width. */ @Input() get width(): number| Function| string { return this._getOption('width'); } set width(value: number| Function| string) { this._setOption('width', value); } /** * A handler for the contentReady event. Executed when the widget's content is ready. This handler may be executed multiple times during the widget's lifetime depending on the number of times its content changes. */ @Output() onContentReady: EventEmitter; /** * A handler for the disposing event. Executed when the widget is removed from the DOM using the remove(), empty(), or html() jQuery methods only. */ @Output() onDisposing: EventEmitter; /** * A handler for the groupRendered event. */ @Output() onGroupRendered: EventEmitter; /** * A handler for the initialized event. Executed only once, after the widget is initialized. */ @Output() onInitialized: EventEmitter; /** * A handler for the itemClick event. */ @Output() onItemClick: EventEmitter; /** * A handler for the itemContextMenu event. */ @Output() onItemContextMenu: EventEmitter; /** * A handler for the itemDeleted event. */ @Output() onItemDeleted: EventEmitter; /** * A handler for the itemDeleting event. Executed before an item is deleted from the data source. */ @Output() onItemDeleting: EventEmitter; /** * A handler for the itemHold event. */ @Output() onItemHold: EventEmitter; /** * A handler for the itemRendered event. */ @Output() onItemRendered: EventEmitter; /** * A handler for the itemReordered event. */ @Output() onItemReordered: EventEmitter; /** * A handler for the itemSwipe event. */ @Output() onItemSwipe: EventEmitter; /** * A handler for the optionChanged event. Executed after an option of the widget is changed. */ @Output() onOptionChanged: EventEmitter; /** * A handler for the pageLoading event. */ @Output() onPageLoading: EventEmitter; /** * A handler for the pullRefresh event. */ @Output() onPullRefresh: EventEmitter; /** * A handler for the scroll event. */ @Output() onScroll: EventEmitter; /** * A handler for the selectAllValueChanged event. */ @Output() onSelectAllValueChanged: EventEmitter; /** * A handler for the selectionChanged event. Raised after an item is selected or unselected. */ @Output() onSelectionChanged: EventEmitter; /** * A handler for the accessKeyChange event. */ @Output() accessKeyChange: EventEmitter; /** * A handler for the activeStateEnabledChange event. */ @Output() activeStateEnabledChange: EventEmitter; /** * A handler for the allowItemDeletingChange event. */ @Output() allowItemDeletingChange: EventEmitter; /** * A handler for the allowItemReorderingChange event. */ @Output() allowItemReorderingChange: EventEmitter; /** * A handler for the autoPagingEnabledChange event. */ @Output() autoPagingEnabledChange: EventEmitter; /** * A handler for the bounceEnabledChange event. */ @Output() bounceEnabledChange: EventEmitter; /** * A handler for the collapsibleGroupsChange event. */ @Output() collapsibleGroupsChange: EventEmitter; /** * A handler for the dataSourceChange event. */ @Output() dataSourceChange: EventEmitter>; /** * A handler for the disabledChange event. */ @Output() disabledChange: EventEmitter; /** * A handler for the elementAttrChange event. */ @Output() elementAttrChange: EventEmitter; /** * A handler for the focusStateEnabledChange event. */ @Output() focusStateEnabledChange: EventEmitter; /** * A handler for the groupedChange event. */ @Output() groupedChange: EventEmitter; /** * A handler for the groupTemplateChange event. */ @Output() groupTemplateChange: EventEmitter; /** * A handler for the heightChange event. */ @Output() heightChange: EventEmitter; /** * A handler for the hintChange event. */ @Output() hintChange: EventEmitter; /** * A handler for the hoverStateEnabledChange event. */ @Output() hoverStateEnabledChange: EventEmitter; /** * A handler for the indicateLoadingChange event. */ @Output() indicateLoadingChange: EventEmitter; /** * A handler for the itemDeleteModeChange event. */ @Output() itemDeleteModeChange: EventEmitter; /** * A handler for the itemHoldTimeoutChange event. */ @Output() itemHoldTimeoutChange: EventEmitter; /** * A handler for the itemsChange event. */ @Output() itemsChange: EventEmitter>; /** * A handler for the itemTemplateChange event. */ @Output() itemTemplateChange: EventEmitter; /** * A handler for the keyExprChange event. */ @Output() keyExprChange: EventEmitter; /** * A handler for the menuItemsChange event. */ @Output() menuItemsChange: EventEmitter>; /** * A handler for the menuModeChange event. */ @Output() menuModeChange: EventEmitter; /** * A handler for the nextButtonTextChange event. */ @Output() nextButtonTextChange: EventEmitter; /** * A handler for the noDataTextChange event. */ @Output() noDataTextChange: EventEmitter; /** * A handler for the pageLoadingTextChange event. */ @Output() pageLoadingTextChange: EventEmitter; /** * A handler for the pageLoadModeChange event. */ @Output() pageLoadModeChange: EventEmitter; /** * A handler for the pulledDownTextChange event. */ @Output() pulledDownTextChange: EventEmitter; /** * A handler for the pullingDownTextChange event. */ @Output() pullingDownTextChange: EventEmitter; /** * A handler for the pullRefreshEnabledChange event. */ @Output() pullRefreshEnabledChange: EventEmitter; /** * A handler for the refreshingTextChange event. */ @Output() refreshingTextChange: EventEmitter; /** * A handler for the rtlEnabledChange event. */ @Output() rtlEnabledChange: EventEmitter; /** * A handler for the scrollByContentChange event. */ @Output() scrollByContentChange: EventEmitter; /** * A handler for the scrollByThumbChange event. */ @Output() scrollByThumbChange: EventEmitter; /** * A handler for the scrollingEnabledChange event. */ @Output() scrollingEnabledChange: EventEmitter; /** * A handler for the searchEditorOptionsChange event. */ @Output() searchEditorOptionsChange: EventEmitter; /** * A handler for the searchEnabledChange event. */ @Output() searchEnabledChange: EventEmitter; /** * A handler for the searchExprChange event. */ @Output() searchExprChange: EventEmitter>; /** * A handler for the searchModeChange event. */ @Output() searchModeChange: EventEmitter; /** * A handler for the searchValueChange event. */ @Output() searchValueChange: EventEmitter; /** * A handler for the selectAllModeChange event. */ @Output() selectAllModeChange: EventEmitter; /** * A handler for the selectedItemKeysChange event. */ @Output() selectedItemKeysChange: EventEmitter>; /** * A handler for the selectedItemsChange event. */ @Output() selectedItemsChange: EventEmitter>; /** * A handler for the selectionModeChange event. */ @Output() selectionModeChange: EventEmitter; /** * A handler for the showNextButtonChange event. */ @Output() showNextButtonChange: EventEmitter; /** * A handler for the showScrollbarChange event. */ @Output() showScrollbarChange: EventEmitter; /** * A handler for the showSelectionControlsChange event. */ @Output() showSelectionControlsChange: EventEmitter; /** * A handler for the tabIndexChange event. */ @Output() tabIndexChange: EventEmitter; /** * A handler for the useNativeScrollingChange event. */ @Output() useNativeScrollingChange: EventEmitter; /** * A handler for the visibleChange event. */ @Output() visibleChange: EventEmitter; /** * A handler for the widthChange event. */ @Output() widthChange: EventEmitter; @ContentChildren(DxiItemComponent) get itemsChildren(): QueryList { return this._getOption('items'); } set itemsChildren(value) { this.setChildren('items', value); } @ContentChildren(DxiMenuItemComponent) get menuItemsChildren(): QueryList { return this._getOption('menuItems'); } set menuItemsChildren(value) { this.setChildren('menuItems', value); } constructor(elementRef: ElementRef, ngZone: NgZone, templateHost: DxTemplateHost, injector: Injector, private _watcherHelper: WatcherHelper, private _idh: IterableDifferHelper, optionHost: NestedOptionHost) { super(elementRef, ngZone, templateHost, _watcherHelper); injector.get(EventsRegistrator); this._createEventEmitters([ { subscribe: 'contentReady', emit: 'onContentReady' }, { subscribe: 'disposing', emit: 'onDisposing' }, { subscribe: 'groupRendered', emit: 'onGroupRendered' }, { subscribe: 'initialized', emit: 'onInitialized' }, { subscribe: 'itemClick', emit: 'onItemClick' }, { subscribe: 'itemContextMenu', emit: 'onItemContextMenu' }, { subscribe: 'itemDeleted', emit: 'onItemDeleted' }, { subscribe: 'itemDeleting', emit: 'onItemDeleting' }, { subscribe: 'itemHold', emit: 'onItemHold' }, { subscribe: 'itemRendered', emit: 'onItemRendered' }, { subscribe: 'itemReordered', emit: 'onItemReordered' }, { subscribe: 'itemSwipe', emit: 'onItemSwipe' }, { subscribe: 'optionChanged', emit: 'onOptionChanged' }, { subscribe: 'pageLoading', emit: 'onPageLoading' }, { subscribe: 'pullRefresh', emit: 'onPullRefresh' }, { subscribe: 'scroll', emit: 'onScroll' }, { subscribe: 'selectAllValueChanged', emit: 'onSelectAllValueChanged' }, { subscribe: 'selectionChanged', emit: 'onSelectionChanged' }, { emit: 'accessKeyChange' }, { emit: 'activeStateEnabledChange' }, { emit: 'allowItemDeletingChange' }, { emit: 'allowItemReorderingChange' }, { emit: 'autoPagingEnabledChange' }, { emit: 'bounceEnabledChange' }, { emit: 'collapsibleGroupsChange' }, { emit: 'dataSourceChange' }, { emit: 'disabledChange' }, { emit: 'elementAttrChange' }, { emit: 'focusStateEnabledChange' }, { emit: 'groupedChange' }, { emit: 'groupTemplateChange' }, { emit: 'heightChange' }, { emit: 'hintChange' }, { emit: 'hoverStateEnabledChange' }, { emit: 'indicateLoadingChange' }, { emit: 'itemDeleteModeChange' }, { emit: 'itemHoldTimeoutChange' }, { emit: 'itemsChange' }, { emit: 'itemTemplateChange' }, { emit: 'keyExprChange' }, { emit: 'menuItemsChange' }, { emit: 'menuModeChange' }, { emit: 'nextButtonTextChange' }, { emit: 'noDataTextChange' }, { emit: 'pageLoadingTextChange' }, { emit: 'pageLoadModeChange' }, { emit: 'pulledDownTextChange' }, { emit: 'pullingDownTextChange' }, { emit: 'pullRefreshEnabledChange' }, { emit: 'refreshingTextChange' }, { emit: 'rtlEnabledChange' }, { emit: 'scrollByContentChange' }, { emit: 'scrollByThumbChange' }, { emit: 'scrollingEnabledChange' }, { emit: 'searchEditorOptionsChange' }, { emit: 'searchEnabledChange' }, { emit: 'searchExprChange' }, { emit: 'searchModeChange' }, { emit: 'searchValueChange' }, { emit: 'selectAllModeChange' }, { emit: 'selectedItemKeysChange' }, { emit: 'selectedItemsChange' }, { emit: 'selectionModeChange' }, { emit: 'showNextButtonChange' }, { emit: 'showScrollbarChange' }, { emit: 'showSelectionControlsChange' }, { emit: 'tabIndexChange' }, { emit: 'useNativeScrollingChange' }, { emit: 'visibleChange' }, { emit: 'widthChange' } ]); this._idh.setHost(this); optionHost.setHost(this); } protected _createInstance(element, options) { return new DxList(element, options); } ngOnDestroy() { this._destroyWidget(); } ngOnChanges(changes: SimpleChanges) { super.ngOnChanges(changes); this.setupChanges('dataSource', changes); this.setupChanges('items', changes); this.setupChanges('menuItems', changes); this.setupChanges('searchExpr', changes); this.setupChanges('selectedItemKeys', changes); this.setupChanges('selectedItems', changes); } setupChanges(prop: string, changes: SimpleChanges) { if (!(prop in this._optionsToUpdate)) { this._idh.setup(prop, changes); } } ngDoCheck() { this._idh.doCheck('dataSource'); this._idh.doCheck('items'); this._idh.doCheck('menuItems'); this._idh.doCheck('searchExpr'); this._idh.doCheck('selectedItemKeys'); this._idh.doCheck('selectedItems'); this._watcherHelper.checkWatchers(); super.ngDoCheck(); } _setOption(name: string, value: any) { let isSetup = this._idh.setupSingle(name, value); let isChanged = this._idh.getChanges(name, value) !== null; if (isSetup || isChanged) { super._setOption(name, value); } } } @NgModule({ imports: [ DxiItemModule, DxiMenuItemModule, DxoSearchEditorOptionsModule, DxTemplateModule ], declarations: [ DxListComponent ], exports: [ DxListComponent, DxiItemModule, DxiMenuItemModule, DxoSearchEditorOptionsModule, DxTemplateModule ], providers: [EventsRegistrator] }) export class DxListModule { }