Skip to content

Commit 143928b

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

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

src/cdk/stepper/stepper.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,23 @@ export class CdkStep {
5555
/** Template for step content. */
5656
@ViewChild(TemplateRef) content: TemplateRef<any>;
5757

58-
/** Whether step is disabled or not. */
58+
// /** Whether step is disabled or not. */
59+
// @Input()
60+
// get disabled() { return this._disabled; }
61+
// set disabled(value: any) {
62+
// this._disabled = coerceBooleanProperty(value);
63+
// }
64+
// private _disabled = false;
65+
5966
@Input()
60-
get disabled() { return this._disabled; }
61-
set disabled(value: any) {
62-
this._disabled = coerceBooleanProperty(value);
67+
get valid() { return this._valid; }
68+
set valid(value: any) {
69+
this._valid = coerceBooleanProperty(value);
6370
}
64-
private _disabled = false;
71+
private _valid = true;
6572

6673
/** 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;
74+
interacted = false;
7275

7376
/** Label of the step. */
7477
@Input()
@@ -101,7 +104,10 @@ export class CdkStepper {
101104
get selectedIndex() { return this._selectedIndex; }
102105
set selectedIndex(index: number) {
103106
this._steps.toArray()[this._selectedIndex].interacted = true;
104-
if (this._selectedIndex != index && !this._steps.toArray()[index].disabled) {
107+
for (let i = 0; i < index; i++) {
108+
if (!this._steps.toArray()[i].valid) { return; }
109+
}
110+
if (this._selectedIndex != index) {
105111
this._emitStepperSelectionEvent(index);
106112
this._focusStep(this._selectedIndex);
107113
}

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

Lines changed: 4 additions & 4 deletions
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

Lines changed: 1 addition & 1 deletion
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)