diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 7fea6eb74eebf9eb4cadcb0a12c561ac5f52baa7..55c09166f692cd7827c1b411e40d76248c16e357 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -19,7 +19,7 @@ const routes: Routes = [ path: 'member/:id', component: MemberDetailsComponent }, { - path: 'addMember', component: AddMemberFormComponent + path: 'addMemberForm', component: AddMemberFormComponent }, { path: 'routes', diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5d4e76d44df974bd36c4f45f9355885bbd00a935..1de3801e320654e07554370667efcf64d9ba3088 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -31,13 +31,14 @@ import { SidenavListComponent } from './navigation/sidenav-list/sidenav-list.com import {MatSidenavModule} from "@angular/material/sidenav"; import {MatToolbarModule} from "@angular/material/toolbar"; import {FlexLayoutModule} from "@angular/flex-layout"; -import {ActionReducerMap, StoreModule} from '@ngrx/store'; +import { StoreModule} from '@ngrx/store'; import {StoreDevtoolsModule} from "@ngrx/store-devtools"; import {environment} from "../environments/environment"; import {EffectsModule} from "@ngrx/effects"; import {RoutesEffects} from "./store/effects/routes.effects"; import {reducers} from "./store/rootReducer"; import {MembersEffects} from "./store/effects/members.effects"; +import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; @NgModule({ declarations: [ @@ -76,6 +77,7 @@ import {MembersEffects} from "./store/effects/members.effects"; MatSidenavModule, MatToolbarModule, FlexLayoutModule, + MatProgressSpinnerModule, StoreModule.forRoot( reducers ), /** * Folgendes würde man bei einem Reducer nehmen 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 index f20e25a708016ab2800e6e2f60a78a7da09790fa..4fdc64ce1898781ffa1d17bc91011623715af560 100644 --- 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 @@ -1,4 +1,5 @@ -

Add Member Form

+

Add Member

+
- - - - + + + + > + + + diff --git a/src/app/components/routes/routes.component.scss b/src/app/components/routes/routes.component.scss index b9113eec8b931d5b6c32ed25f70b771233935cbc..9fa554cade93101b80f7354216cdf3df5c07e172 100644 --- a/src/app/components/routes/routes.component.scss +++ b/src/app/components/routes/routes.component.scss @@ -19,7 +19,5 @@ button { width: 100px; height: 38px; cursor: pointer; - margin-top: 40px; - margin-bottom: -10px; - margin-right: 70%; + margin-top: 40px; } diff --git a/src/app/components/routes/routes.component.ts b/src/app/components/routes/routes.component.ts index 6bc4486fb8b1df3ec88dea7ab715c9b11357a0ab..2ddeba35f12a6355e986897fd9e8310c80f94ad6 100644 --- a/src/app/components/routes/routes.component.ts +++ b/src/app/components/routes/routes.component.ts @@ -1,32 +1,61 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { RouteService } from '../../services/route.service'; import { Route } from '../../models/route'; -import {select, Store} from "@ngrx/store"; -import {Observable} from "rxjs"; -import {AppState} from "../../store/model/app-state-model"; -import {loadRoutes} from "../../store/actions/routes.actions"; -import {getAllRoutes} from "../../store/selectors/routes.selectors"; +import { Store } from '@ngrx/store'; +import { Observable, Subject, takeUntil } from 'rxjs'; +import { AppState } from '../../store/model/app-state-model'; +import { loadRoutes } from '../../store/actions/routes.actions'; +import { getAllRoutes } from '../../store/selectors/routes.selectors'; +import { + getAllMembers, + getCurrentMember, +} from '../../store/selectors/members.selectors'; +import { Member } from '../../models/member'; +import { Actions, ofType } from '@ngrx/effects'; +import * as RouteActions from '../../store/actions/routes.actions'; +import { loadMembers } from '../../store/actions/members.actions'; +import { MatTableDataSource } from '@angular/material/table'; @Component({ selector: 'app-routes', templateUrl: './routes.component.html', styleUrls: ['./routes.component.scss'], }) -export class RoutesComponent implements OnInit { - routes$?: Observable; +export class RoutesComponent implements OnInit, OnDestroy { + routes$: Observable = this.store.select(getAllRoutes); + currentMember: Member | undefined; + onDestroy$ = new Subject(); - constructor(private routeService: RouteService, private store: Store) { - this.store.dispatch(loadRoutes()); + constructor( + private routeService: RouteService, + private store: Store, + delete$: Actions + ) { + // JSON.parse creates a copy of the original object - that avoids errors later + this.store + .select(getCurrentMember) + .pipe(takeUntil(this.onDestroy$)) + .subscribe( + (data) => (this.currentMember = JSON.parse(JSON.stringify(data))) + ); + + delete$ + .pipe(ofType(RouteActions.removeRouteSuccess), takeUntil(this.onDestroy$)) + .subscribe(() => { + this.store.dispatch(loadRoutes()); + }); } - // async interactions in ngOnInit ngOnInit(): void { - this.routes$ = this.store.select(getAllRoutes); - + this.store.dispatch(loadRoutes()); } - addRouteToFavorites(route: Route): void { + ngOnDestroy(): void { + this.onDestroy$.next(); + this.onDestroy$.complete(); + } + refreshRoutesComponent() { + this.ngOnInit(); } } - diff --git a/src/app/models/favouriteRoutes.ts b/src/app/models/favouriteRoutes.ts deleted file mode 100644 index 9d502c378384bf682b8de0d5bd3a7d0722a8fab8..0000000000000000000000000000000000000000 --- a/src/app/models/favouriteRoutes.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface FavouriteRoute { - id?: number; - name: string; - difficultyLevelEnum: string; -} diff --git a/src/app/models/member.ts b/src/app/models/member.ts index ab224bda9dcda1a29deca23b83ae7038331adb68..1e96dfe868a2845a422956bcd449debdb15e6e88 100644 --- a/src/app/models/member.ts +++ b/src/app/models/member.ts @@ -1,10 +1,10 @@ import { Address } from './address'; -import { FavouriteRoute } from './favouriteRoutes'; +import {Route} from "./route"; export interface Member { id?: number; firstName?: string; lastName?: string; addressDto?: Address; - favouriteRoutes?: FavouriteRoute[]; + favouriteRoutes?: Route[]; } diff --git a/src/app/navigation/header/header.component.html b/src/app/navigation/header/header.component.html index d8876b877119914541127a983964a58fd6a7be32..86aeb60217f9998d76bbd3a691f1984889200899 100644 --- a/src/app/navigation/header/header.component.html +++ b/src/app/navigation/header/header.component.html @@ -5,6 +5,16 @@
CLIMBING GYM
+
+ + + + {{member.firstName}} {{member.lastName}} + + + + +