ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
272 lines • 20 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,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);
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
/** @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
* @param {?} index
* @return {?}
*/
(group, index) => {
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 !== undefined &&
this.activeKey.length > 0 &&
!this.accordion &&
this.groups &&
this.groups.length > 0) {
currentActiveKey = this.toArray(this.activeKey);
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);
}
}));
}));
}
else if (this.defaultActiveKey !== undefined &&
!this.expandAll &&
!this.accordion &&
this.groups &&
this.groups.length > 0) {
this.groups.forEach((/**
* @param {?} group
* @param {?} index
* @return {?}
*/
(group, index) => {
if (index === parseInt(this.defaultActiveKey, 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', ['$event'],] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUdWLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUdaLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQVF0RixNQUFNLE9BQU8sa0JBQWtCOzs7O0lBd0M3QixZQUFvQixpQkFBbUM7UUFBbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQXBDL0Msa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFNdEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQU1sQixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGFBQVEsR0FBUSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR25DLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBa0IxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7Ozs7O0lBaEJELEtBQUssQ0FBQyxLQUFLOztZQUNMLE1BQU0sR0FBUSxFQUFFO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNsQixNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztp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SUFpQmhCLCtDQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnRlbnRDaGlsZHJlbixcbiAgQ29tcG9uZW50LFxuICBRdWVyeUxpc3QsXG4gIElucHV0LFxuICBmb3J3YXJkUmVmLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RMaXN0ZW5lcixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmdcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25TZXJ2aWNlIH0gZnJvbSAnLi9hY2NvcmRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4vYWNjb3JkaW9uLWdyb3VwL2FjY29yZGlvbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0FjY29yZGlvbiwgbnptLWFjY29yZGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvcmRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtBY2NvcmRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgX29sZEdyb3VwczogQWNjb3JkaW9uR3JvdXBDb21wb25lbnRbXTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZ3JvdXBzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgaXNGaXJzdENoYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEFjY29yZGlvbkdyb3VwQ29tcG9uZW50KSlcbiAgZ3JvdXBzOiBRdWVyeUxpc3Q8QWNjb3JkaW9uR3JvdXBDb21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIGV4cGFuZEFsbCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBhY3RpdmVLZXk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRBY3RpdmVLZXk6IHN0cmluZztcbiAgQElucHV0KClcbiAgb3BlbkFuaW1hdGlvbiA9IHt9O1xuICBASW5wdXQoKVxuICBhY2NvcmRpb24gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1hY2NvcmRpb24nKVxuICBhbUFjY29yZGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGljayhldmVudCkge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xuICAgIHRoaXMuZ3JvdXBzLnRvQXJyYXkoKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgIGlmIChncm91cC5pc09wZW5lZCkge1xuICAgICAgICBpZiAodGhpcy5hY2NvcmRpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBncm91cC5rZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXAua2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdChyZXN1bHQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWNjb3JkaW9uU2VydmljZTogQWNjb3JkaW9uU2VydmljZSkge1xuICAgIHRoaXMuX2FjY29yZGlvblNlcnZpY2UuZ2V0Q29tcG9uZW50KHRoaXMpO1xuICB9XG5cbiAgY2xvc2VBbGwoKSB7XG4gICAgdGhpcy5ncm91cHMudG9BcnJheSgpLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgZ3JvdXAuaXNPcGVuZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoKSB7XG4gICAgaWYgKHRoaXMuZXhwYW5kQWxsICYmIHRoaXMuZ3JvdXBzICYmIHRoaXMuZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX29sZEdyb3VwcyA9IHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgICAgIHRoaXMuX29sZEdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgZ3JvdXAub3Blbk9uSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5ncm91cHMuY2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBzID0gdGhpcy5ncm91cHMudG9BcnJheSgpLmZpbHRlcihncm91cCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29sZEdyb3Vwcy5pbmRleE9mKGdyb3VwKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBuZXdHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgZ3JvdXAub3Blbk9uSW5pdGlhbGl6YXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29sZEdyb3VwcyA9IHRoaXMuZ3JvdXBzLnRvQXJyYXkoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50QWN0aXZlS2V5ID0gW107XG4gICAgaWYgKFxuICAgICAgdGhpcy5hY3RpdmVLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5hY3RpdmVLZXkubGVuZ3RoID4gMCAmJlxuICAgICAgIXRoaXMuYWNjb3JkaW9uICYmXG4gICAgICB0aGlzLmdyb3VwcyAmJlxuICAgICAgdGhpcy5ncm91cHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY3VycmVudEFjdGl2ZUtleSA9IHRoaXMudG9BcnJheSh0aGlzLmFjdGl2ZUtleSk7XG4gICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgY3VycmVudEFjdGl2ZUtleS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSBwYXJzZUludChrZXksIDApKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgZ3JvdXAuaXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBncm91cC5vcGVuT25Jbml0aWFsaXphdGlvbigpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRlZmF1bHRBY3RpdmVLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXRoaXMuZXhwYW5kQWxsICYmXG4gICAgICAhdGhpcy5hY2NvcmRpb24gJiZcbiAgICAgIHRoaXMuZ3JvdXBzICYmXG4gICAgICB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJzZUludCh0aGlzLmRlZmF1bHRBY3RpdmVLZXksIDApKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBncm91cC5pc09wZW5lZCA9IHRydWU7XG4gICAgICAgICAgICBncm91cC5vcGVuT25Jbml0aWFsaXphdGlvbigpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b0FycmF5KGFjdGl2ZUtleSkge1xuICAgIGxldCBjdXJyZW50QWN0aXZlS2V5ID0gYWN0aXZlS2V5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50QWN0aXZlS2V5KSkge1xuICAgICAgY3VycmVudEFjdGl2ZUtleSA9IGN1cnJlbnRBY3RpdmVLZXkgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50QWN0aXZlS2V5ICE9PSAnJyA/IFtjdXJyZW50QWN0aXZlS2V5XSA6IFtdO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEFjdGl2ZUtleTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hY2NvcmRpb24pIHtcbiAgICAgIHRoaXMuX2FjY29yZGlvblNlcnZpY2UuZ2V0Q29tcG9uZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmV4cGFuZEFsbCB8fCBjaGFuZ2VzLmFjY29yZGlvbikge1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cHNTdWJzY3JpcHRpb24gPSB0aGlzLmdyb3Vwcy5jaGFuZ2VzLnN1YnNjcmliZShncm91cCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRmlyc3RDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ncm91cHNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZ3JvdXBzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=