/*! * 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 DxAccordion from 'devextreme/ui/accordion'; 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 { DxiItemComponent } from './nested/item-dxi'; /** * The Accordion widget contains several panels displayed one under another. These panels can be collapsed or expanded by an end user, which makes this widget very useful for presenting information in a limited amount of space. */ @Component({ selector: 'dx-accordion', template: '', providers: [ DxTemplateHost, WatcherHelper, NestedOptionHost, IterableDifferHelper ] }) export class DxAccordionComponent extends DxComponent implements OnDestroy, OnChanges, DoCheck { instance: DxAccordion; /** * 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); } /** * A number specifying the time in milliseconds spent on the animation of the expanding or collapsing of a panel. */ @Input() get animationDuration(): number { return this._getOption('animationDuration'); } set animationDuration(value: number) { this._setOption('animationDuration', value); } /** * Specifies whether all items can be collapsed or whether at least one item must always be expanded. */ @Input() get collapsible(): boolean { return this._getOption('collapsible'); } set collapsible(value: boolean) { this._setOption('collapsible', 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 widget content is rendered when the widget is shown or when rendering the widget. */ @Input() get deferRendering(): boolean { return this._getOption('deferRendering'); } set deferRendering(value: boolean) { this._setOption('deferRendering', 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 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); } /** * 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 a custom template for an item title. */ @Input() get itemTitleTemplate(): any { return this._getOption('itemTitleTemplate'); } set itemTitleTemplate(value: any) { this._setOption('itemTitleTemplate', 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 whether the widget can expand several items or only a single item at once. */ @Input() get multiple(): boolean { return this._getOption('multiple'); } set multiple(value: boolean) { this._setOption('multiple', 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); } /** * 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); } /** * The index number of the currently selected item. */ @Input() get selectedIndex(): number { return this._getOption('selectedIndex'); } set selectedIndex(value: number) { this._setOption('selectedIndex', value); } /** * The selected item object. */ @Input() get selectedItem(): any { return this._getOption('selectedItem'); } set selectedItem(value: any) { this._setOption('selectedItem', 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 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 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 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 itemHold event. */ @Output() onItemHold: EventEmitter; /** * A handler for the itemRendered event. */ @Output() onItemRendered: EventEmitter; /** * A handler for the itemTitleClick event. */ @Output() onItemTitleClick: EventEmitter; /** * A handler for the optionChanged event. Executed after an option of the widget is changed. */ @Output() onOptionChanged: 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 animationDurationChange event. */ @Output() animationDurationChange: EventEmitter; /** * A handler for the collapsibleChange event. */ @Output() collapsibleChange: EventEmitter; /** * A handler for the dataSourceChange event. */ @Output() dataSourceChange: EventEmitter>; /** * A handler for the deferRenderingChange event. */ @Output() deferRenderingChange: 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 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 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 itemTitleTemplateChange event. */ @Output() itemTitleTemplateChange: EventEmitter; /** * A handler for the keyExprChange event. */ @Output() keyExprChange: EventEmitter; /** * A handler for the multipleChange event. */ @Output() multipleChange: EventEmitter; /** * A handler for the noDataTextChange event. */ @Output() noDataTextChange: EventEmitter; /** * A handler for the rtlEnabledChange event. */ @Output() rtlEnabledChange: EventEmitter; /** * A handler for the selectedIndexChange event. */ @Output() selectedIndexChange: EventEmitter; /** * A handler for the selectedItemChange event. */ @Output() selectedItemChange: EventEmitter; /** * A handler for the selectedItemKeysChange event. */ @Output() selectedItemKeysChange: EventEmitter>; /** * A handler for the selectedItemsChange event. */ @Output() selectedItemsChange: EventEmitter>; /** * A handler for the tabIndexChange event. */ @Output() tabIndexChange: 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); } 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: 'initialized', emit: 'onInitialized' }, { subscribe: 'itemClick', emit: 'onItemClick' }, { subscribe: 'itemContextMenu', emit: 'onItemContextMenu' }, { subscribe: 'itemHold', emit: 'onItemHold' }, { subscribe: 'itemRendered', emit: 'onItemRendered' }, { subscribe: 'itemTitleClick', emit: 'onItemTitleClick' }, { subscribe: 'optionChanged', emit: 'onOptionChanged' }, { subscribe: 'selectionChanged', emit: 'onSelectionChanged' }, { emit: 'accessKeyChange' }, { emit: 'activeStateEnabledChange' }, { emit: 'animationDurationChange' }, { emit: 'collapsibleChange' }, { emit: 'dataSourceChange' }, { emit: 'deferRenderingChange' }, { emit: 'disabledChange' }, { emit: 'elementAttrChange' }, { emit: 'focusStateEnabledChange' }, { emit: 'heightChange' }, { emit: 'hintChange' }, { emit: 'hoverStateEnabledChange' }, { emit: 'itemHoldTimeoutChange' }, { emit: 'itemsChange' }, { emit: 'itemTemplateChange' }, { emit: 'itemTitleTemplateChange' }, { emit: 'keyExprChange' }, { emit: 'multipleChange' }, { emit: 'noDataTextChange' }, { emit: 'rtlEnabledChange' }, { emit: 'selectedIndexChange' }, { emit: 'selectedItemChange' }, { emit: 'selectedItemKeysChange' }, { emit: 'selectedItemsChange' }, { emit: 'tabIndexChange' }, { emit: 'visibleChange' }, { emit: 'widthChange' } ]); this._idh.setHost(this); optionHost.setHost(this); } protected _createInstance(element, options) { return new DxAccordion(element, options); } ngOnDestroy() { this._destroyWidget(); } ngOnChanges(changes: SimpleChanges) { super.ngOnChanges(changes); this.setupChanges('dataSource', changes); this.setupChanges('items', 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('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, DxTemplateModule ], declarations: [ DxAccordionComponent ], exports: [ DxAccordionComponent, DxiItemModule, DxTemplateModule ], providers: [EventsRegistrator] }) export class DxAccordionModule { }