@clr/angular
Version:
Angular components for Clarity
60 lines • 7.95 kB
JavaScript
/*
* Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { AccordionStatus } from '../enums/accordion-status.enum';
import { AccordionStrategy } from '../enums/accordion-strategy.enum';
let accordionCount = 0;
export class AccordionPanelModel {
constructor(id, accordionId) {
this.id = id;
this.accordionId = accordionId;
this.status = AccordionStatus.Inactive;
this.index = null;
this.disabled = false;
this.open = false;
this.templateId = `${this.id}-${this.accordionId}`;
}
}
export class AccordionModel {
constructor() {
this.strategy = AccordionStrategy.Default;
this.accordionCount = accordionCount++;
this._panels = {};
}
get panels() {
return Object.keys(this._panels).map(id => this._panels[id]);
}
setStrategy(strategy) {
this.strategy = strategy;
}
updatePanelOrder(ids) {
ids.forEach((id, index) => (this._panels[id].index = index));
this.removeOldPanels(ids);
}
addPanel(id, open = false) {
this._panels[id] = new AccordionPanelModel(id, this.accordionCount);
this._panels[id].open = open;
}
togglePanel(panelId, open) {
const panelIsOpen = this._panels[panelId].open;
const newOpenState = open !== undefined ? open : !panelIsOpen;
if (newOpenState && this.strategy === AccordionStrategy.Default) {
this.closeAllPanels();
}
this._panels[panelId].open = newOpenState;
}
disablePanel(panelId, disabled) {
this._panels[panelId].disabled = disabled;
}
closeAllPanels() {
this.panels.forEach(panel => (this._panels[panel.id].open = false));
}
removeOldPanels(ids) {
this.panels
.filter(panel => ids.find(id => id === panel.id) === undefined)
.forEach(panel => delete this._panels[panel.id]);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvYWNjb3JkaW9uL21vZGVscy9hY2NvcmRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFFdkIsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixZQUFtQixFQUFVLEVBQVMsV0FBNEI7UUFBL0MsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUxsRSxXQUFNLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxVQUFLLEdBQVcsSUFBSSxDQUFDO1FBQ3JCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLGVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3VCLENBQUM7Q0FDdkU7QUFFRCxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUNZLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDckMsbUJBQWMsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUNsQyxZQUFPLEdBQTBDLEVBQUUsQ0FBQztJQTJDaEUsQ0FBQztJQXpDQyxJQUFJLE1BQU07UUFDUixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQTJCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFhO1FBQzVCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQVUsRUFBRSxJQUFJLEdBQUcsS0FBSztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksbUJBQW1CLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFlLEVBQUUsSUFBYztRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzlELElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssaUJBQWlCLENBQUMsT0FBTyxFQUFFO1lBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWUsRUFBRSxRQUFpQjtRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxlQUFlLENBQUMsR0FBYTtRQUNuQyxJQUFJLENBQUMsTUFBTTthQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLFNBQVMsQ0FBQzthQUM5RCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIzIFZNd2FyZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBBY2NvcmRpb25TdGF0dXMgfSBmcm9tICcuLi9lbnVtcy9hY2NvcmRpb24tc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgQWNjb3JkaW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9lbnVtcy9hY2NvcmRpb24tc3RyYXRlZ3kuZW51bSc7XG5cbmxldCBhY2NvcmRpb25Db3VudCA9IDA7XG5cbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25QYW5lbE1vZGVsIHtcbiAgc3RhdHVzID0gQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlO1xuICBpbmRleDogbnVtYmVyID0gbnVsbDtcbiAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgb3BlbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZUlkID0gYCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWA7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogc3RyaW5nLCBwdWJsaWMgYWNjb3JkaW9uSWQ6IG51bWJlciB8IHN0cmluZykge31cbn1cblxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbk1vZGVsIHtcbiAgcHJvdGVjdGVkIHN0cmF0ZWd5ID0gQWNjb3JkaW9uU3RyYXRlZ3kuRGVmYXVsdDtcbiAgcHJvdGVjdGVkIGFjY29yZGlvbkNvdW50ID0gYWNjb3JkaW9uQ291bnQrKztcbiAgcHJvdGVjdGVkIF9wYW5lbHM6IHsgW2lkOiBzdHJpbmddOiBBY2NvcmRpb25QYW5lbE1vZGVsIH0gPSB7fTtcblxuICBnZXQgcGFuZWxzKCk6IEFjY29yZGlvblBhbmVsTW9kZWxbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGlkID0+IHRoaXMuX3BhbmVsc1tpZF0pO1xuICB9XG5cbiAgc2V0U3RyYXRlZ3koc3RyYXRlZ3k6IEFjY29yZGlvblN0cmF0ZWd5KSB7XG4gICAgdGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICB9XG5cbiAgdXBkYXRlUGFuZWxPcmRlcihpZHM6IHN0cmluZ1tdKSB7XG4gICAgaWRzLmZvckVhY2goKGlkLCBpbmRleCkgPT4gKHRoaXMuX3BhbmVsc1tpZF0uaW5kZXggPSBpbmRleCkpO1xuICAgIHRoaXMucmVtb3ZlT2xkUGFuZWxzKGlkcyk7XG4gIH1cblxuICBhZGRQYW5lbChpZDogc3RyaW5nLCBvcGVuID0gZmFsc2UpIHtcbiAgICB0aGlzLl9wYW5lbHNbaWRdID0gbmV3IEFjY29yZGlvblBhbmVsTW9kZWwoaWQsIHRoaXMuYWNjb3JkaW9uQ291bnQpO1xuICAgIHRoaXMuX3BhbmVsc1tpZF0ub3BlbiA9IG9wZW47XG4gIH1cblxuICB0b2dnbGVQYW5lbChwYW5lbElkOiBzdHJpbmcsIG9wZW4/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcGFuZWxJc09wZW4gPSB0aGlzLl9wYW5lbHNbcGFuZWxJZF0ub3BlbjtcbiAgICBjb25zdCBuZXdPcGVuU3RhdGUgPSBvcGVuICE9PSB1bmRlZmluZWQgPyBvcGVuIDogIXBhbmVsSXNPcGVuO1xuICAgIGlmIChuZXdPcGVuU3RhdGUgJiYgdGhpcy5zdHJhdGVneSA9PT0gQWNjb3JkaW9uU3RyYXRlZ3kuRGVmYXVsdCkge1xuICAgICAgdGhpcy5jbG9zZUFsbFBhbmVscygpO1xuICAgIH1cblxuICAgIHRoaXMuX3BhbmVsc1twYW5lbElkXS5vcGVuID0gbmV3T3BlblN0YXRlO1xuICB9XG5cbiAgZGlzYWJsZVBhbmVsKHBhbmVsSWQ6IHN0cmluZywgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBbGxQYW5lbHMoKSB7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiAodGhpcy5fcGFuZWxzW3BhbmVsLmlkXS5vcGVuID0gZmFsc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlT2xkUGFuZWxzKGlkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnBhbmVsc1xuICAgICAgLmZpbHRlcihwYW5lbCA9PiBpZHMuZmluZChpZCA9PiBpZCA9PT0gcGFuZWwuaWQpID09PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaChwYW5lbCA9PiBkZWxldGUgdGhpcy5fcGFuZWxzW3BhbmVsLmlkXSk7XG4gIH1cbn1cbiJdfQ==