feat: add form validation
This commit is contained in:
		
					parent
					
						
							
								1d0162d250
							
						
					
				
			
			
				commit
				
					
						6ba4937538
					
				
			
		
					 2 changed files with 33 additions and 9 deletions
				
			
		|  | @ -1,4 +1,7 @@ | ||||||
| <form [formGroup]="form"> | <form [formGroup]="form"> | ||||||
|  |   @if (errorMsg) { | ||||||
|  |     <div>{{ errorMsg }}</div> | ||||||
|  |   } | ||||||
|   <input type="number" formControlName="amount">€ |   <input type="number" formControlName="amount">€ | ||||||
|   <br> |   <br> | ||||||
|   <button type="button" (click)="submit()">Einzahlen</button> |   <button type="button" (click)="submit()">Einzahlen</button> | ||||||
|  |  | ||||||
|  | @ -1,7 +1,8 @@ | ||||||
| import { Component, inject, OnInit } from '@angular/core'; | import { ChangeDetectionStrategy, Component, inject, OnInit } from '@angular/core'; | ||||||
| import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; | import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; | ||||||
| import { loadStripe, Stripe } from '@stripe/stripe-js'; | import { loadStripe, Stripe } from '@stripe/stripe-js'; | ||||||
| import { DepositService } from '../service/deposit.service'; | import { DepositService } from '../service/deposit.service'; | ||||||
|  | import { debounceTime } from 'rxjs'; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
|   selector: 'app-deposit', |   selector: 'app-deposit', | ||||||
|  | @ -10,23 +11,43 @@ import { DepositService } from '../service/deposit.service'; | ||||||
|     ReactiveFormsModule, |     ReactiveFormsModule, | ||||||
|   ], |   ], | ||||||
|   templateUrl: './deposit.component.html', |   templateUrl: './deposit.component.html', | ||||||
|   styleUrl: './deposit.component.css' |   styleUrl: './deposit.component.css', | ||||||
|  |   changeDetection: ChangeDetectionStrategy.OnPush, | ||||||
| }) | }) | ||||||
| export class DepositComponent implements OnInit{ | export class DepositComponent implements OnInit { | ||||||
|   protected form = new FormGroup({amount: new FormControl(50, [Validators.min(50)])}); |   protected form!: FormGroup; | ||||||
|  |   protected errorMsg: string = ''; | ||||||
|   private stripe: Stripe | null = null; |   private stripe: Stripe | null = null; | ||||||
|   private service: DepositService = inject(DepositService); |   private service: DepositService = inject(DepositService); | ||||||
| 
 | 
 | ||||||
|   async ngOnInit() { |   async ngOnInit() { | ||||||
|  |     this.form = new FormGroup({ | ||||||
|  |       amount: new FormControl(50, [Validators.min(50)]), | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     this.form.controls['amount'].valueChanges | ||||||
|  |       .pipe(debounceTime(1000)) | ||||||
|  |       .subscribe((value) => { | ||||||
|  |         if (value < 50) { | ||||||
|  |           this.errorMsg = 'Minimum Einzahlungsbetrag ist 50€'; | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|     this.stripe = await loadStripe('pk_test_51QrePYIvCfqz7ANgMizBorPpVjJ8S6gcaL4yvcMQnVaKyReqcQ6jqaQEF7aDZbDu8rNVsTZrw8ABek4ToxQX7KZe00jpGh8naG'); |     this.stripe = await loadStripe('pk_test_51QrePYIvCfqz7ANgMizBorPpVjJ8S6gcaL4yvcMQnVaKyReqcQ6jqaQEF7aDZbDu8rNVsTZrw8ABek4ToxQX7KZe00jpGh8naG'); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   submit() { |   submit() { | ||||||
|     if (this.stripe) { |     if (!this.stripe) { | ||||||
|       console.log(JSON.stringify(this.form.value.amount as number)); |       this.errorMsg = 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.'; | ||||||
|       this.service.handleDeposit(this.form.value.amount as number).subscribe(({sessionId}) => { |       return; | ||||||
|         this.stripe?.redirectToCheckout({sessionId}); |     } | ||||||
|  |     if (!this.form.valid) { | ||||||
|  |       this.errorMsg = 'Bitte geben Sie einen gültigen Betrag ein.'; | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     this.service.handleDeposit(this.form.value.amount as number).subscribe(({ sessionId }) => { | ||||||
|  |       this.stripe?.redirectToCheckout({ sessionId }); | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|   } |  | ||||||
| } | } | ||||||
|  |  | ||||||
		Reference in a new issue