Skip to content

Commit 6d002c7

Browse files
committed
Add 'valid' to MdStep for form validation
1 parent 9521e6c commit 6d002c7

File tree

3 files changed

+15
-16
lines changed

3 files changed

+15
-16
lines changed

src/cdk/stepper/stepper.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,16 @@ export class CdkStep {
5555
/** Template for step content. */
5656
@ViewChild(TemplateRef) content: TemplateRef<any>;
5757

58-
/** Whether step is disabled or not. */
58+
/** Whether the step is in a valid state or not. */
5959
@Input()
60-
get disabled() { return this._disabled; }
61-
set disabled(value: any) {
62-
this._disabled = coerceBooleanProperty(value);
60+
get valid() { return this._valid; }
61+
set valid(value: any) {
62+
this._valid = coerceBooleanProperty(value);
6363
}
64-
private _disabled = false;
64+
private _valid = true;
6565

6666
/** Whether user has seen the expanded step content or not . */
67-
get interacted() { return this._interacted; }
68-
set interacted(value: boolean) {
69-
this._interacted = value;
70-
}
71-
private _interacted = false;
67+
interacted = false;
7268

7369
/** Label of the step. */
7470
@Input()
@@ -101,7 +97,10 @@ export class CdkStepper {
10197
get selectedIndex() { return this._selectedIndex; }
10298
set selectedIndex(index: number) {
10399
this._steps.toArray()[this._selectedIndex].interacted = true;
104-
if (this._selectedIndex != index && !this._steps.toArray()[index].disabled) {
100+
for (let i = 0; i < index; i++) {
101+
if (!this._steps.toArray()[i].valid) { return; }
102+
}
103+
if (this._selectedIndex != index) {
105104
this._emitStepperSelectionEvent(index);
106105
this._focusStep(this._selectedIndex);
107106
}

src/demo-app/stepper/stepper-demo.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<h2>Linear Vertical Stepper Demo</h2>
22
<md-vertical-stepper>
3-
<md-step>
3+
<md-step [valid]="nameFormGroup.valid">
44
<form [formGroup]="nameFormGroup">
55
<ng-template mdStepLabel>Fill out your name</ng-template>
66
<md-input-container>
@@ -17,13 +17,13 @@ <h2>Linear Vertical Stepper Demo</h2>
1717
</form>
1818
</md-step>
1919

20-
<md-step [disabled]="!nameFormGroup.valid">
20+
<md-step [valid]="phoneFormGroup.valid">
2121
<form [formGroup]="phoneFormGroup">
2222
<ng-template mdStepLabel>
2323
<div>Fill out your phone number</div>
2424
</ng-template>
2525
<md-input-container>
26-
<input mdInput placeholder="Phone number" formControlName="phoneFormCtrl" required>
26+
<input mdInput placeholder="Phone number" formControlName="phoneFormCtrl">
2727
<md-error>This field is required</md-error>
2828
</md-input-container>
2929
<div>
@@ -33,7 +33,7 @@ <h2>Linear Vertical Stepper Demo</h2>
3333
</form>
3434
</md-step>
3535

36-
<md-step [disabled]="!phoneFormGroup.valid">
36+
<md-step>
3737
<form>
3838
<ng-template mdStepLabel>Confirm your information</ng-template>
3939
Everything seems correct.

src/demo-app/stepper/stepper-demo.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class StepperDemo {
2525
});
2626

2727
this.phoneFormGroup = new FormGroup({
28-
phoneFormCtrl: new FormControl('', Validators.required)
28+
phoneFormCtrl: new FormControl('')
2929
});
3030
}
3131
}

0 commit comments

Comments
 (0)