I'm using a stepper from the angular material and I'm unsure how best to make a component for each step of this stepper.
Because I have a lot of difficulty in shared forms. I wanted to know the best way to do this.
In the main component of the stepper, get the values of each step and at the end make a post with the 3 forms of the step. As you can see, the code is already getting too big, so the ideal would be to make a component for each step
Componente TS
companyInfo!: FormGroup;
contactInfo!: FormGroup;
selectedType: boolean = false;
constructor(public fb: FormBuilder) { }
ngOnInit(): void {
this.initCompanyInfo();
this.initContactInfo();
console.log(this.companyInfo.get('industry')?.value)
}
initCompanyInfo(){
this.companyInfo = this.fb.group({
companyName: ['', Validators.required],
industry: ['', Validators.required],
country: ['', Validators.required],
})
}
initContactInfo() {
this.contactInfo = this.fb.group({
contact: this.fb.array([this.createContact])
})
}
createContact(): FormGroup {
return this.fb.group({
firstName: ['', Validators.required],
lastName: ['', Validators.required],
position: ['', Validators.required],
email: ['', Validators.required],
confirmEmail: ['', Validators.required],
password: ['', Validators.required],
confirmPassword: ['', Validators.required],
phoneNumber: ['', Validators.required],
})
}
<mat-horizontal-stepper [labelPosition]="'bottom'" linear>
<mat-progress-bar [value]=progressValue></mat-progress-bar>
<!-- STEP 1 -->
<mat-step label="COMPANY INFORMATION">
<mat-card>
<div class="card-header">
<p>Company Info</p>
<button mat-raised-button matStepperNext (click)="additionProgress()">Next</button>
</div>
<mat-card-content>
<form [formGroup]="companyInfo">
<div class="main-right">
<div class="header-section">
<span>STATE</span>
</div>
<div class="form">
<mat-form-field class="width6" appearance="outline">
<mat-label>COUNTRY</mat-label>
<input matInput formControlName="country">
<mat-error></mat-error>
</mat-form-field>
<mat-form-field appearance="outline">
<mat-label>STATE</mat-label>
<input matInput formControlName="state">
<mat-error></mat-error>
</mat-form-field>
<mat-form-field appearance="outline">
<mat-label>CITY</mat-label>
<input matInput formControlName="city">
<mat-error></mat-error>
</mat-form-field>
<mat-form-field class="width6" appearance="outline">
<mat-label>ADDRESS</mat-label>
<input matInput formControlName="address">
<mat-error></mat-error>
</mat-form-field>
<mat-form-field class="width8" appearance="outline">
<mat-label>ZIPCODE</mat-label>
<input matInput type="number" formControlName="zipcode">
<mat-error></mat-error>
</mat-form-field>
</div>
</div>
</div>
<div class="main-form">
<div class="main-left">
<div class="header-section">
<span>COMPANY</span>
</div>
</div>
</div>
</div>
</form>
</mat-card-content>
</mat-card>
</mat-step>
<!-- STEP 2 -->
<mat-step label="CONTACT INFORMATION">
<p>Opa2</p>
<button mat-raised-button matStepperPrevious (click)="subtractionProgress()">Previous</button>
<button mat-raised-button matStepperNext (click)="additionProgress()">Next</button>
</mat-step>
<!-- STEP 3 -->
<mat-step label="GENERAL INFORMATION">
<p>Opa3</p>
<button mat-raised-button matStepperPrevious (click)="subtractionProgress()">Previous</button>
</mat-step>
</mat-horizontal-stepper>

@Input()that was the "form"