ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
252 lines • 18.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ContentChildren, Component, QueryList, Input, forwardRef, HostListener, Output, EventEmitter, HostBinding } from '@angular/core';
import { AccordionService } from './accordion.service';
import { AccordionGroupComponent } from './accordion-group/accordion-group.component';
export class AccordionComponent {
/**
* @param {?} _accordionService
*/
constructor(_accordionService) {
this._accordionService = _accordionService;
this.isFirstChange = true;
this.expandAll = false;
this.openAnimation = {};
this.accordion = false;
this.onChange = new EventEmitter();
this.amAccordion = true;
this._accordionService.getComponent(this);
}
/**
* @return {?}
*/
click() {
/** @type {?} */
let result = [];
this.groups.toArray().forEach((/**
* @param {?} group
* @return {?}
*/
group => {
if (group.isOpened) {
if (this.accordion) {
result = group.key;
}
else {
result.push(group.key);
}
}
}));
this.onChange.emit(result);
}
/**
* @return {?}
*/
closeAll() {
this.groups.toArray().forEach((/**
* @param {?} group
* @return {?}
*/
group => {
group.isOpened = false;
}));
}
/**
* @return {?}
*/
init() {
if (this.expandAll && this.groups && this.groups.length > 0) {
this._oldGroups = this.groups.toArray();
this._oldGroups.forEach((/**
* @param {?} group
* @return {?}
*/
(group) => {
group.openOnInitialization();
}));
this._subscription = this.groups.changes.subscribe((/**
* @param {?} change
* @return {?}
*/
change => {
/** @type {?} */
const newGroups = this.groups.toArray().filter((/**
* @param {?} group
* @return {?}
*/
group => {
return this._oldGroups.indexOf(group) === -1;
}));
newGroups.forEach((/**
* @param {?} group
* @return {?}
*/
group => {
group.openOnInitialization();
}));
this._oldGroups = this.groups.toArray();
}));
}
/** @type {?} */
let currentActiveKey = [];
if (this.activeKey && this.activeKey.length > 0) {
currentActiveKey = this.toArray(this.activeKey);
if (this.accordion) {
currentActiveKey = currentActiveKey.slice(0, 1);
}
}
else if (this.defaultActiveKey) {
currentActiveKey = [this.defaultActiveKey];
}
if (this.groups && this.groups.length > 0) {
this.groups.forEach((/**
* @param {?} group
* @param {?} index
* @return {?}
*/
(group, index) => {
currentActiveKey.forEach((/**
* @param {?} key
* @return {?}
*/
key => {
if (index === parseInt(key, 0)) {
setTimeout((/**
* @return {?}
*/
() => {
group.isOpened = true;
group.openOnInitialization();
}), 0);
}
}));
}));
}
}
/**
* @param {?} activeKey
* @return {?}
*/
toArray(activeKey) {
/** @type {?} */
let currentActiveKey = activeKey;
if (!Array.isArray(currentActiveKey)) {
currentActiveKey = currentActiveKey !== undefined && currentActiveKey !== '' ? [currentActiveKey] : [];
}
return currentActiveKey;
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes.accordion) {
this._accordionService.getComponent(this);
}
if (changes.expandAll || changes.accordion) {
this.init();
}
}
/**
* @return {?}
*/
ngAfterContentInit() {
if (this.groups && this.groups.length > 0) {
this.init();
}
else {
this.groupsSubscription = this.groups.changes.subscribe((/**
* @param {?} group
* @return {?}
*/
group => {
if (this.isFirstChange) {
this.init();
}
this.isFirstChange = false;
}));
}
}
/**
* @return {?}
*/
ngOnDestroy() {
if (this._subscription) {
this._subscription.unsubscribe();
}
if (this.groupsSubscription) {
this.groupsSubscription.unsubscribe();
}
}
}
AccordionComponent.decorators = [
{ type: Component, args: [{
selector: 'Accordion, nzm-accordion',
template: "<ng-content></ng-content>\n",
providers: [AccordionService]
}] }
];
/** @nocollapse */
AccordionComponent.ctorParameters = () => [
{ type: AccordionService }
];
AccordionComponent.propDecorators = {
groups: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
() => AccordionGroupComponent)),] }],
expandAll: [{ type: Input }],
activeKey: [{ type: Input }],
defaultActiveKey: [{ type: Input }],
openAnimation: [{ type: Input }],
accordion: [{ type: Input }],
onChange: [{ type: Output }],
amAccordion: [{ type: HostBinding, args: ['class.am-accordion',] }],
click: [{ type: HostListener, args: ['click',] }]
};
if (false) {
/**
* @type {?}
* @private
*/
AccordionComponent.prototype._oldGroups;
/**
* @type {?}
* @private
*/
AccordionComponent.prototype._subscription;
/**
* @type {?}
* @private
*/
AccordionComponent.prototype.groupsSubscription;
/**
* @type {?}
* @private
*/
AccordionComponent.prototype.isFirstChange;
/** @type {?} */
AccordionComponent.prototype.groups;
/** @type {?} */
AccordionComponent.prototype.expandAll;
/** @type {?} */
AccordionComponent.prototype.activeKey;
/** @type {?} */
AccordionComponent.prototype.defaultActiveKey;
/** @type {?} */
AccordionComponent.prototype.openAnimation;
/** @type {?} */
AccordionComponent.prototype.accordion;
/** @type {?} */
AccordionComponent.prototype.onChange;
/** @type {?} */
AccordionComponent.prototype.amAccordion;
/**
* @type {?}
* @private
*/
AccordionComponent.prototype._accordionService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUdWLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUdaLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQVF0RixNQUFNLE9BQU8sa0JBQWtCOzs7O0lBd0M3QixZQUFvQixpQkFBbUM7UUFBbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQXBDL0Msa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFNdEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQU1sQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR25DLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBa0IxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7SUFoQkQsS0FBSzs7WUFDQyxNQUFNLEdBQVEsRUFBRTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU87Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ3BCO3FCQUFN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RSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQzs7O1lBcklGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyx1Q0FBeUM7Z0JBQ3pDLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQzlCOzs7O1lBUlEsZ0JBQWdCOzs7cUJBZXRCLGVBQWUsU0FBQyxVQUFVOzs7Z0JBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLEVBQUM7d0JBR3pELEtBQUs7d0JBRUwsS0FBSzsrQkFFTCxLQUFLOzRCQUVMLEtBQUs7d0JBRUwsS0FBSzt1QkFFTCxNQUFNOzBCQUdOLFdBQVcsU0FBQyxvQkFBb0I7b0JBR2hDLFlBQVksU0FBQyxPQUFPOzs7Ozs7O0lBeEJyQix3Q0FBOEM7Ozs7O0lBQzlDLDJDQUFvQzs7Ozs7SUFDcEMsZ0RBQXlDOzs7OztJQUN6QywyQ0FBc0M7O0lBRXRDLG9DQUMyQzs7SUFFM0MsdUNBQ2tCOztJQUNsQix1Q0FDa0M7O0lBQ2xDLDhDQUN5Qjs7SUFDekIsMkNBQ21COztJQUNuQix1Q0FDa0I7O0lBQ2xCLHNDQUNtQzs7SUFFbkMseUNBQzRCOzs7OztJQWlCaEIsK0NBQTJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29udGVudENoaWxkcmVuLFxuICBDb21wb25lbnQsXG4gIFF1ZXJ5TGlzdCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIE9uRGVzdHJveSxcbiAgSG9zdExpc3RlbmVyLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjY29yZGlvblNlcnZpY2UgfSBmcm9tICcuL2FjY29yZGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFjY29yZGlvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9hY2NvcmRpb24tZ3JvdXAvYWNjb3JkaW9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnQWNjb3JkaW9uLCBuem0tYWNjb3JkaW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW0FjY29yZGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSBfb2xkR3JvdXBzOiBBY2NvcmRpb25Hcm91cENvbXBvbmVudFtdO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBncm91cHNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBpc0ZpcnN0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblxuICBAQ29udGVudENoaWxkcmVuKGZvcndhcmRSZWYoKCkgPT4gQWNjb3JkaW9uR3JvdXBDb21wb25lbnQpKVxuICBncm91cHM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Hcm91cENvbXBvbmVudD47XG5cbiAgQElucHV0KClcbiAgZXhwYW5kQWxsID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUtleTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZztcbiAgQElucHV0KClcbiAgZGVmYXVsdEFjdGl2ZUtleTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBvcGVuQW5pbWF0aW9uID0ge307XG4gIEBJbnB1dCgpXG4gIGFjY29yZGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWFjY29yZGlvbicpXG4gIGFtQWNjb3JkaW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIGNsaWNrKCkge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xuICAgIHRoaXMuZ3JvdXBzLnRvQXJyYXkoKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgIGlmIChncm91cC5pc09wZW5lZCkge1xuICAgICAgICBpZiAodGhpcy5hY2NvcmRpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBncm91cC5rZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXAua2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWNjb3JkaW9uU2VydmljZTogQWNjb3JkaW9uU2VydmljZSkge1xuICAgIHRoaXMuX2FjY29yZGlvblNlcnZpY2UuZ2V0Q29tcG9uZW50KHRoaXMpO1xuICB9XG5cbiAgY2xvc2VBbGwoKSB7XG4gICAgdGhpcy5ncm91cHMudG9BcnJheSgpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgZ3JvdXAuaXNPcGVuZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuZXhwYW5kQWxsICYmIHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX29sZEdyb3VwcyA9IHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgICAgIHRoaXMuX29sZEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBncm91cC5vcGVuT25Jbml0aWFsaXphdGlvbigpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLmdyb3Vwcy5jaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICBjb25zdCBuZXdHcm91cHMgPSB0aGlzLmdyb3Vwcy50b0FycmF5KCkuZmlsdGVyKGdyb3VwID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb2xkR3JvdXBzLmluZGV4T2YoZ3JvdXApID09PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5ld0dyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICBncm91cC5vcGVuT25Jbml0aWFsaXphdGlvbigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb2xkR3JvdXBzID0gdGhpcy5ncm91cHMudG9BcnJheSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRBY3RpdmVLZXk6IEFycmF5PGFueT4gPSBbXTtcbiAgICBpZiAodGhpcy5hY3RpdmVLZXkgJiYgdGhpcy5hY3RpdmVLZXkubGVuZ3RoID4gMCkge1xuICAgICAgY3VycmVudEFjdGl2ZUtleSA9IHRoaXMudG9BcnJheSh0aGlzLmFjdGl2ZUtleSk7XG4gICAgICBpZiAodGhpcy5hY2NvcmRpb24pIHtcbiAgICAgICAgY3VycmVudEFjdGl2ZUtleSA9IGN1cnJlbnRBY3RpdmVLZXkuc2xpY2UoMCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRBY3RpdmVLZXkpIHtcbiAgICAgIGN1cnJlbnRBY3RpdmVLZXkgPSBbdGhpcy5kZWZhdWx0QWN0aXZlS2V5XTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICBjdXJyZW50QWN0aXZlS2V5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IHBhcnNlSW50KGtleSwgMCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBncm91cC5pc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICAgIGdyb3VwLm9wZW5PbkluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9BcnJheShhY3RpdmVLZXkpIHtcbiAgICBsZXQgY3VycmVudEFjdGl2ZUtleSA9IGFjdGl2ZUtleTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudEFjdGl2ZUtleSkpIHtcbiAgICAgIGN1cnJlbnRBY3RpdmVLZXkgPSBjdXJyZW50QWN0aXZlS2V5ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudEFjdGl2ZUtleSAhPT0gJycgPyBbY3VycmVudEFjdGl2ZUtleV0gOiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3RpdmVLZXk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuYWNjb3JkaW9uKSB7XG4gICAgICB0aGlzLl9hY2NvcmRpb25TZXJ2aWNlLmdldENvbXBvbmVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5leHBhbmRBbGwgfHwgY2hhbmdlcy5hY2NvcmRpb24pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzU3Vic2NyaXB0aW9uID0gdGhpcy5ncm91cHMuY2hhbmdlcy5zdWJzY3JpYmUoZ3JvdXAgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0ZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZpcnN0Q2hhbmdlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JvdXBzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmdyb3Vwc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19