UNPKG

@clr/angular

Version:

Angular components for Clarity

104 lines 14.8 kB
/* * 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 { ChangeDetectionStrategy, Component, ContentChildren, Input, Optional, } from '@angular/core'; import { Observable } from 'rxjs'; import { startWith } from 'rxjs/operators'; import { AccordionService } from '../providers/accordion.service'; import { StepperService } from './providers/stepper.service'; import { ClrStepperPanel } from './stepper-panel'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "./providers/stepper.service"; export class ClrStepper { constructor(formGroup, ngForm, stepperService) { this.formGroup = formGroup; this.ngForm = ngForm; this.stepperService = stepperService; this.subscriptions = []; } ngOnInit() { if (!this.formGroup && !this.ngForm) { throw new Error('To use stepper a Reactive or Template Form is required.'); } this.form = this.formGroup ? this.formGroup : this.ngForm; this.subscriptions.push(this.listenForPanelsCompleted()); this.subscriptions.push(this.listenForFormResetChanges()); } ngOnChanges(changes) { if (changes.initialPanel.currentValue !== changes.initialPanel.previousValue) { this.stepperService.overrideInitialPanel(this.initialPanel); } } ngAfterViewInit() { this.subscriptions.push(this.listenForDOMChanges()); } ngOnDestroy() { this.subscriptions.forEach(s => s.unsubscribe()); } listenForFormResetChanges() { return fromControlReset(this.form.form).subscribe(() => this.stepperService.resetPanels()); } listenForPanelsCompleted() { return this.stepperService.panelsCompleted.subscribe(panelsCompleted => { if (panelsCompleted && this.form.valid) { this.form.ngSubmit.emit(); } else if (!this.form.valid && this.form.touched) { this.setPanelsWithFormErrors(); } }); } setPanelsWithFormErrors() { const panelsWithErrors = this.panels.reduce((panels, p) => (p.formGroup.invalid ? [...panels, p.id] : panels), []); this.stepperService.setPanelsWithErrors(panelsWithErrors); } listenForDOMChanges() { return this.panels.changes.pipe(startWith(this.panels)).subscribe((panels) => { this.stepperService.updatePanelOrder(panels.toArray().map(p => p.id)); if (this.initialPanel) { this.stepperService.overrideInitialPanel(this.initialPanel); } }); } } ClrStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepper, deps: [{ token: i1.FormGroupDirective, optional: true }, { token: i1.NgForm, optional: true }, { token: i2.StepperService }], target: i0.ɵɵFactoryTarget.Component }); ClrStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrStepper, selector: "form[clrStepper]", inputs: { initialPanel: ["clrInitialStep", "initialPanel"] }, host: { properties: { "class.clr-accordion": "true", "class.clr-stepper-forms": "true" } }, providers: [StepperService, { provide: AccordionService, useExisting: StepperService }], queries: [{ propertyName: "panels", predicate: ClrStepperPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStepper, decorators: [{ type: Component, args: [{ selector: 'form[clrStepper]', template: `<ng-content></ng-content>`, host: { '[class.clr-accordion]': 'true', '[class.clr-stepper-forms]': 'true', }, providers: [StepperService, { provide: AccordionService, useExisting: StepperService }], changeDetection: ChangeDetectionStrategy.OnPush, }] }], ctorParameters: function () { return [{ type: i1.FormGroupDirective, decorators: [{ type: Optional }] }, { type: i1.NgForm, decorators: [{ type: Optional }] }, { type: i2.StepperService }]; }, propDecorators: { initialPanel: [{ type: Input, args: ['clrInitialStep'] }], panels: [{ type: ContentChildren, args: [ClrStepperPanel, { descendants: true }] }] } }); function fromControlReset(control) { return new Observable(observer => { const unpatchedControlReset = control.reset; control.reset = () => { observer.next(); unpatchedControlReset.apply(control); }; return () => { control.reset = unpatchedControlReset; }; }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2FjY29yZGlvbi9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixLQUFLLEVBSUwsUUFBUSxHQUdULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBWWxELE1BQU0sT0FBTyxVQUFVO0lBTXJCLFlBQ3NCLFNBQTZCLEVBQzdCLE1BQWMsRUFDMUIsY0FBOEI7UUFGbEIsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFOeEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBT2hDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLElB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b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsSUFBSSxFQUFFO3dCQUNKLHVCQUF1QixFQUFFLE1BQU07d0JBQy9CLDJCQUEyQixFQUFFLE1BQU07cUJBQ3BDO29CQUNELFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUM7b0JBQ3ZGLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBUUksUUFBUTs7MEJBQ1IsUUFBUTt5RUFQYyxZQUFZO3NCQUFwQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDa0MsTUFBTTtzQkFBOUQsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFOztBQWdFekQsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF3QjtJQUNoRCxPQUFPLElBQUksVUFBVSxDQUFPLFFBQVEsQ0FBQyxFQUFFO1FBQ3JDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUU1QyxPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNuQixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVGLE9BQU8sR0FBRyxFQUFFO1lBQ1YsT0FBTyxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztRQUN4QyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBY2NvcmRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vcHJvdmlkZXJzL2FjY29yZGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvc3RlcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IENsclN0ZXBwZXJQYW5lbCB9IGZyb20gJy4vc3RlcHBlci1wYW5lbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm1bY2xyU3RlcHBlcl0nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5jbHItYWNjb3JkaW9uXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmNsci1zdGVwcGVyLWZvcm1zXSc6ICd0cnVlJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbU3RlcHBlclNlcnZpY2UsIHsgcHJvdmlkZTogQWNjb3JkaW9uU2VydmljZSwgdXNlRXhpc3Rpbmc6IFN0ZXBwZXJTZXJ2aWNlIH1dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyU3RlcHBlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2NsckluaXRpYWxTdGVwJykgaW5pdGlhbFBhbmVsOiBzdHJpbmc7XG4gIEBDb250ZW50Q2hpbGRyZW4oQ2xyU3RlcHBlclBhbmVsLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHBhbmVsczogUXVlcnlMaXN0PENsclN0ZXBwZXJQYW5lbD47XG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgcHJpdmF0ZSBzdGVwcGVyU2VydmljZTogU3RlcHBlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5mb3JtR3JvdXAgJiYgIXRoaXMubmdGb3JtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvIHVzZSBzdGVwcGVyIGEgUmVhY3RpdmUgb3IgVGVtcGxhdGUgRm9ybSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1Hcm91cCA/IHRoaXMuZm9ybUdyb3VwIDogdGhpcy5uZ0Zvcm07XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JQYW5lbHNDb21wbGV0ZWQoKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JGb3JtUmVzZXRDaGFuZ2VzKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmluaXRpYWxQYW5lbC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuaW5pdGlhbFBhbmVsLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2Uub3ZlcnJpZGVJbml0aWFsUGFuZWwodGhpcy5pbml0aWFsUGFuZWwpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckZvcm1SZXNldENoYW5nZXMoKSB7XG4gICAgcmV0dXJuIGZyb21Db250cm9sUmVzZXQodGhpcy5mb3JtLmZvcm0pLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnJlc2V0UGFuZWxzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JQYW5lbHNDb21wbGV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UucGFuZWxzQ29tcGxldGVkLnN1YnNjcmliZShwYW5lbHNDb21wbGV0ZWQgPT4ge1xuICAgICAgaWYgKHBhbmVsc0NvbXBsZXRlZCAmJiB0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgdGhpcy5mb3JtLm5nU3VibWl0LmVtaXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9ybS52YWxpZCAmJiB0aGlzLmZvcm0udG91Y2hlZCkge1xuICAgICAgICB0aGlzLnNldFBhbmVsc1dpdGhGb3JtRXJyb3JzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFBhbmVsc1dpdGhGb3JtRXJyb3JzKCkge1xuICAgIGNvbnN0IHBhbmVsc1dpdGhFcnJvcnMgPSB0aGlzLnBhbmVscy5yZWR1Y2UoKHBhbmVscywgcCkgPT4gKHAuZm9ybUdyb3VwLmludmFsaWQgPyBbLi4ucGFuZWxzLCBwLmlkXSA6IHBhbmVscyksIFtdKTtcbiAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLnNldFBhbmVsc1dpdGhFcnJvcnMocGFuZWxzV2l0aEVycm9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRPTUNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5wYW5lbHMpKS5zdWJzY3JpYmUoKHBhbmVsczogUXVlcnlMaXN0PENsclN0ZXBwZXJQYW5lbD4pID0+IHtcbiAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2UudXBkYXRlUGFuZWxPcmRlcihwYW5lbHMudG9BcnJheSgpLm1hcChwID0+IHAuaWQpKTtcblxuICAgICAgaWYgKHRoaXMuaW5pdGlhbFBhbmVsKSB7XG4gICAgICAgIHRoaXMuc3RlcHBlclNlcnZpY2Uub3ZlcnJpZGVJbml0aWFsUGFuZWwodGhpcy5pbml0aWFsUGFuZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZyb21Db250cm9sUmVzZXQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPihvYnNlcnZlciA9PiB7XG4gICAgY29uc3QgdW5wYXRjaGVkQ29udHJvbFJlc2V0ID0gY29udHJvbC5yZXNldDtcblxuICAgIGNvbnRyb2wucmVzZXQgPSAoKSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KCk7XG4gICAgICB1bnBhdGNoZWRDb250cm9sUmVzZXQuYXBwbHkoY29udHJvbCk7XG4gICAgfTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250cm9sLnJlc2V0ID0gdW5wYXRjaGVkQ29udHJvbFJlc2V0O1xuICAgIH07XG4gIH0pO1xufVxuIl19