diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 430f91727d26d40ea6dd5bde4a96108e3c7a4939..b8a570112ee26b5efa047359bdc547710d5fb7d0 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -6,6 +6,7 @@ import {RouteComponent} from "./components/routes/route/route.component"; import {RouteDetailPageComponent} from "./components/routes/route/route-detail-page/route-detail-page.component"; import {AddRouteFormComponent} from "./components/routes/route/add-route-form/add-route-form.component"; import {MemberDetailsComponent} from "./components/members/member-table/member-details/member-details.component"; +import {AddMemberFormComponent} from "./components/members/member-table/add-member-form/add-member-form.component"; const routes: Routes = [ { @@ -17,6 +18,9 @@ const routes: Routes = [ { path:'member/:id', component:MemberDetailsComponent }, + { + path:'addMember', component:AddMemberFormComponent + }, { path: 'routes', component: RoutesComponent, diff --git a/src/app/app.module.ts b/src/app/app.module.ts index e3f89cab7737268e9ffb14d274d846be49216256..a524df549117f147e42287d920db3b3d0562c437 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -24,6 +24,9 @@ import {RouteComponent} from "./components/routes/route/route.component"; import {AddRouteFormComponent} from "./components/routes/route/add-route-form/add-route-form.component"; import {RouteDetailPageComponent} from "./components/routes/route/route-detail-page/route-detail-page.component"; import { MemberDetailsComponent } from './components/members/member-table/member-details/member-details.component'; +import { AddMemberFormComponent } from './components/members/member-table/add-member-form/add-member-form.component'; +import {MatDialogModule} from "@angular/material/dialog"; +import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; @NgModule({ declarations: [ @@ -34,28 +37,31 @@ import { MemberDetailsComponent } from './components/members/member-table/member AddRouteFormComponent, RouteDetailPageComponent, MemberDetailsComponent, + AddMemberFormComponent, ], - imports: [ - BrowserModule, - AppRoutingModule, - BrowserAnimationsModule, - MatMenuModule, - MatPaginatorModule, - MatSortModule, - MatFormFieldModule, - MatInputModule, - FormsModule, - MatTableModule, - HttpClientModule, - MatSliderModule, - MatButtonModule, - MatIconModule, - MatListModule, - MatCardModule, - MatDividerModule, - ReactiveFormsModule, - MatSelectModule, - ], + imports: [ + BrowserModule, + AppRoutingModule, + BrowserAnimationsModule, + MatMenuModule, + MatPaginatorModule, + MatSortModule, + MatFormFieldModule, + MatInputModule, + FormsModule, + MatTableModule, + HttpClientModule, + MatSliderModule, + MatButtonModule, + MatIconModule, + MatListModule, + MatCardModule, + MatDividerModule, + ReactiveFormsModule, + MatSelectModule, + MatDialogModule, + MatProgressSpinnerModule + ], providers: [], bootstrap: [AppComponent], }) diff --git a/src/app/components/members/member-table/add-member-form/add-member-form.component.html b/src/app/components/members/member-table/add-member-form/add-member-form.component.html new file mode 100644 index 0000000000000000000000000000000000000000..eab0a71ef9a3d345893fc524358a0a9b50e93649 --- /dev/null +++ b/src/app/components/members/member-table/add-member-form/add-member-form.component.html @@ -0,0 +1,43 @@ +

Add Member Form

+ +
+ + Firstname + + +
+ + Lastname + + + + + + + + + Street + + + + No. + + + + Post Code + + + + + + + + +
+ | + Cancel +
+
+
+ + diff --git a/src/app/components/members/member-table/add-member-form/add-member-form.component.scss b/src/app/components/members/member-table/add-member-form/add-member-form.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..2d145b29fca874ad9ed9ff089804a0cf581f3e26 --- /dev/null +++ b/src/app/components/members/member-table/add-member-form/add-member-form.component.scss @@ -0,0 +1,7 @@ +.mat-form-field { + width: 100%; + padding: 1%; +} + .button-row { + text-align: center; + } diff --git a/src/app/components/members/member-table/add-member-form/add-member-form.component.spec.ts b/src/app/components/members/member-table/add-member-form/add-member-form.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..6019a055d184021d7a1242e3f32cad347da64aa6 --- /dev/null +++ b/src/app/components/members/member-table/add-member-form/add-member-form.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddMemberFormComponent } from './add-member-form.component'; + +describe('AddMemberFormComponent', () => { + let component: AddMemberFormComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddMemberFormComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AddMemberFormComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/members/member-table/add-member-form/add-member-form.component.ts b/src/app/components/members/member-table/add-member-form/add-member-form.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..022941e02a0a019a844e593e0524e49c721223cd --- /dev/null +++ b/src/app/components/members/member-table/add-member-form/add-member-form.component.ts @@ -0,0 +1,55 @@ +import { Component, OnInit } from '@angular/core'; +import {FormGroup, FormBuilder, Validators, FormArray, AbstractControl} from "@angular/forms"; +import {MemberService} from "../../../../services/member.service"; +import {Router} from "@angular/router"; +import {Address} from "../../../../models/address"; + + +@Component({ + selector: 'app-add-member-form', + templateUrl: './add-member-form.component.html', + styleUrls: ['./add-member-form.component.scss'] +}) +export class AddMemberFormComponent implements OnInit { + + addMemberForm!: FormGroup; + + constructor(private formBuilder: FormBuilder, private memberService: MemberService, private router: Router) { } + + ngOnInit(): void { + this.addMemberForm = this.formBuilder.group({ + firstName: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(50)]], + lastName: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(50)]], + addressDto: this.formBuilder.array([this.formBuilder.group({ + street: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(50)]], + houseNumber:['', [Validators.required, Validators.minLength(1), Validators.maxLength(5)]], + postCode:['', [Validators.required, Validators.minLength(1), Validators.maxLength(5)]] + })] + )}) + } + + get addressDto() { + return this.addMemberForm.controls["addressDto"] as FormArray; + } + + // addAddress() { + // const addressForm = this.formBuilder.group({ + // street: ['', Validators.required], + // houseNumber: ['', Validators.required], + // postCode: ['', Validators.required] + // }); + // this.addressDto.push(addressForm); + // } + // + // deleteAddress(addressIndex: number) { + // this.addressDto.removeAt(addressIndex); + // } + + onSubmit() { + console.log("submitted") + console.log(this.addMemberForm.value) + + + } + +} diff --git a/src/app/components/members/member-table/member-details/member-details.component.html b/src/app/components/members/member-table/member-details/member-details.component.html index 48f402eea1bb498d4e979767d18bd1b03770687a..63bb2aba7a091e9dddc54de7c4b58424df69f51a 100644 --- a/src/app/components/members/member-table/member-details/member-details.component.html +++ b/src/app/components/members/member-table/member-details/member-details.component.html @@ -1,5 +1,19 @@ -
-
-

{{member.firstName}}

-
-
+ + + + Id: {{member.id}} + {{member.firstName}} {{member.lastName}} + +

{{member.addressDto.street}} {{member.addressDto.houseNumber}}, {{member.addressDto.postCode}}

+
+ +
+ Favourite Routes +
+
+

- {{route.name}}, {{route.difficultyLevelEnum}}

+
+
+ + + diff --git a/src/app/components/members/member-table/member-details/member-details.component.scss b/src/app/components/members/member-table/member-details/member-details.component.scss index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b53c82ba18338e7a73baa43d90dff91e16584c9e 100644 --- a/src/app/components/members/member-table/member-details/member-details.component.scss +++ b/src/app/components/members/member-table/member-details/member-details.component.scss @@ -0,0 +1,15 @@ +.example-card { + max-width: 25px; +} + +.mat-card-subtitle{ + text-align: center; +} + +.mat-card-title{ + text-align: center; +} + +.mat-card-content{ + text-align: center; +} diff --git a/src/app/components/members/member-table/member-details/member-details.component.ts b/src/app/components/members/member-table/member-details/member-details.component.ts index 0884c3df6f69fbb375de191b9a510f90ca521b05..52f3447bd32227a0b8833a7016e550d02d130b50 100644 --- a/src/app/components/members/member-table/member-details/member-details.component.ts +++ b/src/app/components/members/member-table/member-details/member-details.component.ts @@ -11,15 +11,16 @@ import {Member} from "../../../../models/member"; export class MemberDetailsComponent implements OnInit { member!: Member; + displayedColumns: string[] = ['id', 'firstName', 'lastName', 'address', 'favouriteRoutes']; - constructor(private memberService: MemberService, private route: ActivatedRoute) { } + constructor(private memberService: MemberService, private activatedRoute: ActivatedRoute) { } ngOnInit(): void { - this.route.params.subscribe(params => this.getMemberById(params['id'])); + this.activatedRoute.params.subscribe(params => this.getMemberById(parseInt(params['id']))); } - getMemberById(id: number) { - this.memberService.getMemberById(id).subscribe((data: Member) => this.member = data); + getMemberById(memberId: number) { + this.memberService.getMemberById(memberId).subscribe((data: Member) => this.member = data); } } diff --git a/src/app/components/members/member-table/member-table.component.html b/src/app/components/members/member-table/member-table.component.html index f4ec68e089b94bb67ce7b7dd88690c19355e6c1d..61b7286b3abcd0408810fb3cd90ff905d479415b 100644 --- a/src/app/components/members/member-table/member-table.component.html +++ b/src/app/components/members/member-table/member-table.component.html @@ -1,9 +1,21 @@
+
+ +
+
Filter Table + + + +
+
@@ -29,7 +41,7 @@ @@ -48,29 +60,7 @@ showFirstLastButtons> - diff --git a/src/app/components/members/member-table/member-table.component.ts b/src/app/components/members/member-table/member-table.component.ts index 0f17aaeff2e2d0ed6400b9a481d30e33e9ce1aa2..f8e9301256ec7571ee4934de75561503bda25d60 100644 --- a/src/app/components/members/member-table/member-table.component.ts +++ b/src/app/components/members/member-table/member-table.component.ts @@ -5,6 +5,8 @@ import {HttpErrorResponse} from "@angular/common/http"; import {MatPaginator} from "@angular/material/paginator"; import {MatSort} from "@angular/material/sort"; import {MatTableDataSource} from "@angular/material/table"; +import {MatDialog} from "@angular/material/dialog"; +import {AddMemberFormComponent} from "./add-member-form/add-member-form.component"; @Component({ selector: 'app-members', @@ -17,11 +19,12 @@ export class MemberTableComponent implements OnInit{ dataSource!: MatTableDataSource; @ViewChild(MatPaginator) paginator!: MatPaginator; @ViewChild(MatSort) sort!: MatSort; - posts: any; + members: Member[] = []; + // loading = false; displayedColumns: string[] = ['id', 'firstName', 'lastName', 'details', 'delete']; - constructor(private memberService: MemberService) {} + constructor(private memberService: MemberService, private dialog: MatDialog) {} ngOnInit(): void { this.getMembers(); @@ -31,8 +34,8 @@ export class MemberTableComponent implements OnInit{ this.memberService.getMembers().subscribe( (data: Member[]) => { console.log(data); - this.posts = data; - this.dataSource = new MatTableDataSource(this.posts); + this.members = data; + this.dataSource = new MatTableDataSource(this.members); this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; @@ -52,13 +55,17 @@ export class MemberTableComponent implements OnInit{ } } - redirectToDetails(id: number) { - + onDeleteMember(memberId: number) { + console.log(memberId); + this.memberService.deleteMember(memberId).subscribe( (result) => { + this.ngOnInit(); + }); } - redirectToDelete(id: number) { - + openAddFormDialog(enteranimation: any) { + this.dialog.open(AddMemberFormComponent,{ + enterAnimationDuration:enteranimation, + width:"50%" + }) } - - } diff --git a/src/app/components/routes/route/route-detail-page/route-detail-page.component.ts b/src/app/components/routes/route/route-detail-page/route-detail-page.component.ts index ee62c9d2f35d409afaa92a2ccc64347f2b33ca58..1c1ddec71803f4b26abc8590cd31ca61ce791bf6 100644 --- a/src/app/components/routes/route/route-detail-page/route-detail-page.component.ts +++ b/src/app/components/routes/route/route-detail-page/route-detail-page.component.ts @@ -9,7 +9,7 @@ import {RouteService} from "../../../../services/route.service"; styleUrls: ['./route-detail-page.component.scss'], }) export class RouteDetailPageComponent implements OnInit { - @Input() route?: Route; + route!: Route; constructor( private activatedRoute: ActivatedRoute, diff --git a/src/app/models/member.ts b/src/app/models/member.ts index 89fa0a7a0d838ba35cb4e12818a142decc5418bc..c792f690b702d4d38a2a37a77cc3ed79d3cb53e6 100644 --- a/src/app/models/member.ts +++ b/src/app/models/member.ts @@ -3,8 +3,8 @@ import {FavouriteRoute} from "./favouriteRoutes"; export interface Member { id: number; - firstName: string; - lastName: string; - addressDto: Address; - favouriteRoutes: FavouriteRoute[]; + firstName?: string; + lastName?: string; + addressDto?: Address; + favouriteRoutes?: FavouriteRoute[]; } diff --git a/src/app/services/member.service.ts b/src/app/services/member.service.ts index 35cb082b8029d0180e6cf24084b375a5c9e01e24..c543a432765c5a7d5198b61c0bf42f6a38a49628 100644 --- a/src/app/services/member.service.ts +++ b/src/app/services/member.service.ts @@ -16,8 +16,8 @@ export class MemberService { return this.http.get(`${this.apiServerUrl}/members/all`); } - public getMemberById(id: number): Observable { - return this.http.get(`${this.apiServerUrl}/member/{id}`); + public getMemberById(memberId: number): Observable { + return this.http.get(`${this.apiServerUrl}/member/${memberId}`); } public addMember(member: Member): Observable {
Delete -