Compare commits

...

2 commits

Author SHA1 Message Date
Dorian Nemec
04ab9ce4dc TD-29: Registration Form Created
All checks were successful
Quality Check / Linting (push) Successful in 23s
Quality Check / Linting (pull_request) Successful in 23s
2025-02-12 14:20:47 +01:00
Dorian Nemec
a6a62d7563 TD-29: Registration Form Created
Some checks failed
Quality Check / Linting (push) Failing after 21s
Quality Check / Linting (pull_request) Failing after 21s
2025-02-12 14:14:02 +01:00
8 changed files with 80 additions and 11 deletions

View file

@ -49,7 +49,7 @@
"stylelint-scss": "^6.11.0", "stylelint-scss": "^6.11.0",
"typescript": "~5.6.2" "typescript": "~5.6.2"
}, },
"api_version": "v0.0.0-rc.2", "api_version": "v0.0.0-rc.3",
"volta": { "volta": {
"node": "22.13.1" "node": "22.13.1"
} }

View file

@ -4,6 +4,7 @@ import { RouterOutlet } from '@angular/router';
import { HeaderComponent } from '@app/header/header.component'; import { HeaderComponent } from '@app/header/header.component';
import { NotificationBoxComponent } from '@app/notification-box/notification-box.component'; import { NotificationBoxComponent } from '@app/notification-box/notification-box.component';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
imports: [RouterOutlet, HeaderComponent, NotificationBoxComponent], imports: [RouterOutlet, HeaderComponent, NotificationBoxComponent],

View file

@ -1,15 +1,18 @@
import { provideHttpClient } from '@angular/common/http'; import {provideHttpClient} from '@angular/common/http';
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import {ApplicationConfig, provideZoneChangeDetection} from '@angular/core';
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; import {provideAnimationsAsync} from '@angular/platform-browser/animations/async';
import { provideRouter } from '@angular/router'; import {provideRouter} from '@angular/router';
import {BASE_PATH, Configuration} from '@core/server';
import { routes } from './app.routes'; import {routes} from './app.routes';
export const appConfig: ApplicationConfig = { export const appConfig: ApplicationConfig = {
providers: [ providers: [
provideZoneChangeDetection({ eventCoalescing: true }), provideZoneChangeDetection({eventCoalescing: true}),
provideAnimationsAsync(), provideAnimationsAsync(),
provideRouter(routes), provideRouter(routes),
provideHttpClient(), provideHttpClient(),
Configuration,
{provide: BASE_PATH, useValue: 'http://localhost:8080/api/v1'}
] ]
}; };

View file

@ -0,0 +1,17 @@
<form [formGroup]="registrationForm" class="registration-form">
<h2>Player Registration</h2>
<mat-form-field appearance="fill">
<mat-label>Username</mat-label>
<input formControlName="username" matInput type="text" required>
<mat-error> Username is required! </mat-error>
</mat-form-field>
<mat-form-field appearance="fill">
<mat-label>Password</mat-label>
<input formControlName="password" matInput type="password" required>
<mat-error> Password is required! </mat-error>
</mat-form-field>
<button mat-flat-button (click)="registerPlayer()">Register</button>
</form>

View file

@ -0,0 +1,5 @@
.registration-form {
display: flex;
flex-direction: column;
align-items: center;
}

View file

@ -0,0 +1,42 @@
import {Component} from '@angular/core';
import {FormBuilder, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';
import {MatButtonModule} from '@angular/material/button';
import {MatFormFieldModule} from '@angular/material/form-field';
import {MatInputModule} from '@angular/material/input';
import {MatSelectModule} from '@angular/material/select';
import {NotificationService, NotificationType} from '@core/notification/notification.service';
import {PlayerRegistrationData, ServerService} from '@core/server';
@Component({
selector: 'app-registration-form',
imports: [MatFormFieldModule, FormsModule, MatSelectModule, MatInputModule, MatButtonModule, ReactiveFormsModule],
templateUrl: './registration-form.component.html',
styleUrl: './registration-form.component.scss',
standalone: true
})
export class RegistrationFormComponent {
registrationForm: FormGroup;
constructor(private serverApi: ServerService, private formBuilder: FormBuilder, private notifications: NotificationService) {
this.registrationForm = this.formBuilder.group<PlayerRegistrationData>({
username: '',
password: '',
});
}
registerPlayer() {
if (!this.registrationForm.valid) {
this.notifications.publish('This form is invalid!', NotificationType.Error);
return;
}
this.serverApi
.playerRegister(this.registrationForm.value)
.subscribe(() => {
this.notifications.publish('Registered successfully!', NotificationType.Information);
});
}
}

View file

@ -1,3 +1,3 @@
<div class="dashboard"> <div class="dashboard">
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Facere illo animi quidem repellat perspiciatis, excepturi amet corrupti ipsa sit consequuntur placeat ratione saepe velit asperiores suscipit esse quod minima exercitationem minus, alias laudantium inventore! Beatae cum nobis error suscipit cupiditate, praesentium itaque ut ipsa iusto in doloribus unde quisquam consequuntur.</p> <app-registration-form></app-registration-form>
</div> </div>

View file

@ -1,11 +1,12 @@
import { Component } from '@angular/core'; import {Component} from '@angular/core';
import {RegistrationFormComponent} from '@app/registration-form/registration-form.component';
@Component({ @Component({
selector: 'app-dashboard', selector: 'app-dashboard',
imports: [], imports: [RegistrationFormComponent],
templateUrl: './dashboard.component.html', templateUrl: './dashboard.component.html',
styleUrl: './dashboard.component.scss' styleUrl: './dashboard.component.scss'
}) })
export class DashboardComponent { export class DashboardComponent {
} }