UNPKG

@clr/angular

Version:

Angular components for Clarity

146 lines 19.9 kB
/* * Copyright (c) 2016-2025 Broadcom. All Rights Reserved. * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * 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 { AccordionModel } from '../../models/accordion.model'; export class StepperModel extends AccordionModel { constructor() { super(...arguments); this.stepperModelInitialize = false; } get allPanelsCompleted() { return this.panels.length && this.getNumberOfIncompletePanels() === 0 && this.getNumberOfOpenPanels() === 0; } get shouldOpenFirstPanel() { return !this.initialPanel || (this._panels && Object.keys(this._panels).length && !this._panels[this.initialPanel]); } addPanel(id, open = false) { super.addPanel(id, open); this._panels[id].disabled = true; } updatePanelOrder(ids) { super.updatePanelOrder(ids); if (this.stepperModelInitialize === false) { this.openFirstPanel(); } } togglePanel(panelId) { if (this._panels[panelId].status === AccordionStatus.Complete) { this._panels[panelId].open = !this._panels[panelId].open; } } navigateToPreviousPanel(currentPanelId) { this.openPreviousPanel(this._panels[currentPanelId].id); } navigateToNextPanel(currentPanelId, currentPanelValid = true) { if (currentPanelValid) { this.completePanel(currentPanelId); this.openNextPanel(this._panels[currentPanelId].id); } else { this.setPanelError(currentPanelId); } } overrideInitialPanel(panelId) { this.initialPanel = panelId; this.panels .filter(() => this._panels[panelId] !== undefined) .forEach(panel => { if (panel.index < this._panels[panelId].index) { this.completePanel(panel.id); } else if (panel.id === panelId) { this._panels[panel.id].open = true; } else { this._panels[panel.id].open = false; } }); } setPanelValid(panelId) { this._panels[panelId].status = AccordionStatus.Complete; } setPanelInvalid(panelId) { this._panels[panelId].status = AccordionStatus.Error; } setPanelsWithErrors(ids) { ids.forEach(id => this.setPanelError(id)); } resetPanels() { /* return stepper to initialize state */ this.stepperModelInitialize = false; this.panels.forEach(p => this.resetPanel(p.id)); this.openFirstPanel(); } getNextPanel(currentPanelId) { return this.panels.find(s => s.index === this._panels[currentPanelId].index + 1); } getPreviousPanel(currentPanelId) { return this.panels.find(s => s.index === this._panels[currentPanelId].index - 1); } resetAllFuturePanels(panelId) { this.panels.filter(panel => panel.index >= this._panels[panelId].index).forEach(panel => this.resetPanel(panel.id)); } resetPanel(panelId) { this._panels[panelId].status = AccordionStatus.Inactive; this._panels[panelId].open = false; this._panels[panelId].disabled = true; } openFirstPanel() { if (!this.shouldOpenFirstPanel) { return; } const firstPanel = this.getFirstPanel(); /** * You need to call updatePanelOrder first to get the correct order, * else the list of panels will not have `index` set and we won't know * how to find the first panel. */ if (!firstPanel) { return; } this._panels[firstPanel.id].open = true; this._panels[firstPanel.id].disabled = true; this.stepperModelInitialize = true; } completePanel(panelId) { this._panels[panelId].status = AccordionStatus.Complete; this._panels[panelId].disabled = false; this._panels[panelId].open = false; } openNextPanel(currentPanelId) { const nextPanel = this.getNextPanel(currentPanelId); if (nextPanel) { this.resetAllFuturePanels(nextPanel.id); this._panels[nextPanel.id].open = true; this._panels[nextPanel.id].disabled = true; } } openPreviousPanel(currentPanelId) { const prevPanel = this.getPreviousPanel(currentPanelId); if (prevPanel) { this._panels[currentPanelId].open = false; this._panels[currentPanelId].disabled = false; this._panels[prevPanel.id].open = true; this._panels[prevPanel.id].disabled = true; } } setPanelError(panelId) { this.resetAllFuturePanels(panelId); this._panels[panelId].open = true; this._panels[panelId].status = AccordionStatus.Error; } getFirstPanel() { return this.panels.find(panel => panel.index === 0); } getNumberOfIncompletePanels() { return this.panels.reduce((prev, next) => (next.status !== AccordionStatus.Complete ? prev + 1 : prev), 0); } getNumberOfOpenPanels() { return this.panels.reduce((prev, next) => (next.open !== false ? prev + 1 : prev), 0); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2FjY29yZGlvbi9zdGVwcGVyL21vZGVscy9zdGVwcGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RCxNQUFNLE9BQU8sWUFBYSxTQUFRLGNBQWM7SUFBaEQ7O1FBQ1UsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO0lBOEp6QyxDQUFDO0lBM0pDLElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVRLFFBQVEsQ0FBQyxFQUFVLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFDeEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFUSxnQkFBZ0IsQ0FBQyxHQUFhO1FBQ3JDLEtBQUssQ0FBQyxnQkFBZ0Is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Q0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IEJyb2FkY29tLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBBY2NvcmRpb25TdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcy9hY2NvcmRpb24tc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgQWNjb3JkaW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWNjb3JkaW9uLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJNb2RlbCBleHRlbmRzIEFjY29yZGlvbk1vZGVsIHtcbiAgcHJpdmF0ZSBzdGVwcGVyTW9kZWxJbml0aWFsaXplID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbFBhbmVsOiBzdHJpbmc7XG5cbiAgZ2V0IGFsbFBhbmVsc0NvbXBsZXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMubGVuZ3RoICYmIHRoaXMuZ2V0TnVtYmVyT2ZJbmNvbXBsZXRlUGFuZWxzKCkgPT09IDAgJiYgdGhpcy5nZXROdW1iZXJPZk9wZW5QYW5lbHMoKSA9PT0gMDtcbiAgfVxuXG4gIGdldCBzaG91bGRPcGVuRmlyc3RQYW5lbCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5pdGlhbFBhbmVsIHx8ICh0aGlzLl9wYW5lbHMgJiYgT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5sZW5ndGggJiYgIXRoaXMuX3BhbmVsc1t0aGlzLmluaXRpYWxQYW5lbF0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRkUGFuZWwoaWQ6IHN0cmluZywgb3BlbiA9IGZhbHNlKSB7XG4gICAgc3VwZXIuYWRkUGFuZWwoaWQsIG9wZW4pO1xuICAgIHRoaXMuX3BhbmVsc1tpZF0uZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlUGFuZWxPcmRlcihpZHM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIudXBkYXRlUGFuZWxPcmRlcihpZHMpO1xuICAgIGlmICh0aGlzLnN0ZXBwZXJNb2RlbEluaXRpYWxpemUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9wZW5GaXJzdFBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9nZ2xlUGFuZWwocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuX3BhbmVsc1twYW5lbElkXS5zdGF0dXMgPT09IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZSkge1xuICAgICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW4gPSAhdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW47XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVUb1ByZXZpb3VzUGFuZWwoY3VycmVudFBhbmVsSWQ6IHN0cmluZykge1xuICAgIHRoaXMub3BlblByZXZpb3VzUGFuZWwodGhpcy5fcGFuZWxzW2N1cnJlbnRQYW5lbElkXS5pZCk7XG4gIH1cblxuICBuYXZpZ2F0ZVRvTmV4dFBhbmVsKGN1cnJlbnRQYW5lbElkOiBzdHJpbmcsIGN1cnJlbnRQYW5lbFZhbGlkID0gdHJ1ZSkge1xuICAgIGlmIChjdXJyZW50UGFuZWxWYWxpZCkge1xuICAgICAgdGhpcy5jb21wbGV0ZVBhbmVsKGN1cnJlbnRQYW5lbElkKTtcbiAgICAgIHRoaXMub3Blbk5leHRQYW5lbCh0aGlzLl9wYW5lbHNbY3VycmVudFBhbmVsSWRdLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQYW5lbEVycm9yKGN1cnJlbnRQYW5lbElkKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZUluaXRpYWxQYW5lbChwYW5lbElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmluaXRpYWxQYW5lbCA9IHBhbmVsSWQ7XG4gICAgdGhpcy5wYW5lbHNcbiAgICAgIC5maWx0ZXIoKCkgPT4gdGhpcy5fcGFuZWxzW3BhbmVsSWRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaChwYW5lbCA9PiB7XG4gICAgICAgIGlmIChwYW5lbC5pbmRleCA8IHRoaXMuX3BhbmVsc1twYW5lbElkXS5pbmRleCkge1xuICAgICAgICAgIHRoaXMuY29tcGxldGVQYW5lbChwYW5lbC5pZCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFuZWwuaWQgPT09IHBhbmVsSWQpIHtcbiAgICAgICAgICB0aGlzLl9wYW5lbHNbcGFuZWwuaWRdLm9wZW4gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3BhbmVsc1twYW5lbC5pZF0ub3BlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldFBhbmVsVmFsaWQocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLnN0YXR1cyA9IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZTtcbiAgfVxuXG4gIHNldFBhbmVsSW52YWxpZChwYW5lbElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uc3RhdHVzID0gQWNjb3JkaW9uU3RhdHVzLkVycm9yO1xuICB9XG5cbiAgc2V0UGFuZWxzV2l0aEVycm9ycyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgaWRzLmZvckVhY2goaWQgPT4gdGhpcy5zZXRQYW5lbEVycm9yKGlkKSk7XG4gIH1cblxuICByZXNldFBhbmVscygpIHtcbiAgICAvKiByZXR1cm4gc3RlcHBlciB0byBpbml0aWFsaXplIHN0YXRlICovXG4gICAgdGhpcy5zdGVwcGVyTW9kZWxJbml0aWFsaXplID0gZmFsc2U7XG4gICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwID0+IHRoaXMucmVzZXRQYW5lbChwLmlkKSk7XG4gICAgdGhpcy5vcGVuRmlyc3RQYW5lbCgpO1xuICB9XG5cbiAgZ2V0TmV4dFBhbmVsKGN1cnJlbnRQYW5lbElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMuZmluZChzID0+IHMuaW5kZXggPT09IHRoaXMuX3BhbmVsc1tjdXJyZW50UGFuZWxJZF0uaW5kZXggKyAxKTtcbiAgfVxuXG4gIGdldFByZXZpb3VzUGFuZWwoY3VycmVudFBhbmVsSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhbmVscy5maW5kKHMgPT4gcy5pbmRleCA9PT0gdGhpcy5fcGFuZWxzW2N1cnJlbnRQYW5lbElkXS5pbmRleCAtIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbEZ1dHVyZVBhbmVscyhwYW5lbElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhbmVscy5maWx0ZXIocGFuZWwgPT4gcGFuZWwuaW5kZXggPj0gdGhpcy5fcGFuZWxzW3BhbmVsSWRdLmluZGV4KS5mb3JFYWNoKHBhbmVsID0+IHRoaXMucmVzZXRQYW5lbChwYW5lbC5pZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFBhbmVsKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3BhbmVsc1twYW5lbElkXS5zdGF0dXMgPSBBY2NvcmRpb25TdGF0dXMuSW5hY3RpdmU7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0uZGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlyc3RQYW5lbCgpIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkT3BlbkZpcnN0UGFuZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RQYW5lbCA9IHRoaXMuZ2V0Rmlyc3RQYW5lbCgpO1xuICAgIC8qKlxuICAgICAqIFlvdSBuZWVkIHRvIGNhbGwgdXBkYXRlUGFuZWxPcmRlciBmaXJzdCB0byBnZXQgdGhlIGNvcnJlY3Qgb3JkZXIsXG4gICAgICogZWxzZSB0aGUgbGlzdCBvZiBwYW5lbHMgd2lsbCBub3QgaGF2ZSBgaW5kZXhgIHNldCBhbmQgd2Ugd29uJ3Qga25vd1xuICAgICAqIGhvdyB0byBmaW5kIHRoZSBmaXJzdCBwYW5lbC5cbiAgICAgKi9cbiAgICBpZiAoIWZpcnN0UGFuZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wYW5lbHNbZmlyc3RQYW5lbC5pZF0ub3BlbiA9IHRydWU7XG4gICAgdGhpcy5fcGFuZWxzW2ZpcnN0UGFuZWwuaWRdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnN0ZXBwZXJNb2RlbEluaXRpYWxpemUgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wbGV0ZVBhbmVsKHBhbmVsSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3BhbmVsc1twYW5lbElkXS5zdGF0dXMgPSBBY2NvcmRpb25TdGF0dXMuQ29tcGxldGU7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk5leHRQYW5lbChjdXJyZW50UGFuZWxJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbmV4dFBhbmVsID0gdGhpcy5nZXROZXh0UGFuZWwoY3VycmVudFBhbmVsSWQpO1xuXG4gICAgaWYgKG5leHRQYW5lbCkge1xuICAgICAgdGhpcy5yZXNldEFsbEZ1dHVyZVBhbmVscyhuZXh0UGFuZWwuaWQpO1xuICAgICAgdGhpcy5fcGFuZWxzW25leHRQYW5lbC5pZF0ub3BlbiA9IHRydWU7XG4gICAgICB0aGlzLl9wYW5lbHNbbmV4dFBhbmVsLmlkXS5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuUHJldmlvdXNQYW5lbChjdXJyZW50UGFuZWxJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJldlBhbmVsID0gdGhpcy5nZXRQcmV2aW91c1BhbmVsKGN1cnJlbnRQYW5lbElkKTtcblxuICAgIGlmIChwcmV2UGFuZWwpIHtcbiAgICAgIHRoaXMuX3BhbmVsc1tjdXJyZW50UGFuZWxJZF0ub3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5fcGFuZWxzW2N1cnJlbnRQYW5lbElkXS5kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9wYW5lbHNbcHJldlBhbmVsLmlkXS5vcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3BhbmVsc1twcmV2UGFuZWwuaWRdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhbmVsRXJyb3IocGFuZWxJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5yZXNldEFsbEZ1dHVyZVBhbmVscyhwYW5lbElkKTtcbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0ub3BlbiA9IHRydWU7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLnN0YXR1cyA9IEFjY29yZGlvblN0YXR1cy5FcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RQYW5lbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMuZmluZChwYW5lbCA9PiBwYW5lbC5pbmRleCA9PT0gMCk7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWJlck9mSW5jb21wbGV0ZVBhbmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbHMucmVkdWNlKChwcmV2LCBuZXh0KSA9PiAobmV4dC5zdGF0dXMgIT09IEFjY29yZGlvblN0YXR1cy5Db21wbGV0ZSA/IHByZXYgKyAxIDogcHJldiksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROdW1iZXJPZk9wZW5QYW5lbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKG5leHQub3BlbiAhPT0gZmFsc2UgPyBwcmV2ICsgMSA6IHByZXYpLCAwKTtcbiAgfVxufVxuIl19