@clr/angular
Version:
Angular components for Clarity
104 lines • 14.8 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 { 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