-import { Component } from '@angular/core';
+import { Store } from '@ngrx/store';
+import { login } from './store/login.actions';
+import { selectToken, selectError, selectIsLoading } from './store/login.selectors';
@Component({
selector: 'app-login',
- imports: [],
- templateUrl: './login.component.html',
- styleUrl: './login.component.less'
+ template: `
+ <form (ngSubmit)="onSubmit()">
+ <label>
+ Username:
+ <input type="text" [(ngModel)]="username" name="username" required>
+ </label>
+ <br>
+ <label>
+ Password:
+ <input type="password" [(ngModel)]="password" name="password" required>
+ </label>
+ <br>
+ <button type="submit" [disabled]="isLoading">Login</button>
+ </form>
+ <div *ngIf="error">{{ error }}</div>
+ <div *ngIf="token">Welcome, {{ username }}! Your token is {{ token }}</div>
+ `
})
export class LoginComponent {
+ username = '';
+ password = '';
+ token = '';
+ error = '';
+ isLoading = false;
+ constructor(private store: Store) {
+ this.store.select(selectToken).subscribe(token => (this.token = token));
+ this.store.select(selectError).subscribe(error => (this.error = error));
+ this.store.select(selectIsLoading).subscribe(isLoading => (this.isLoading = isLoading));
+ }
+
+ onSubmit() {
+ this.store.dispatch(login({ username: this.username, password: this.password }));
+ }
}