31.10. User Resolver - get user by id (#31)

This commit is contained in:
Art
2021-10-09 09:17:16 +03:00
parent 517ac7b44d
commit b9ef56302b
4 changed files with 34 additions and 2 deletions

View File

@ -10,6 +10,7 @@ import {SettingsComponent} from "./component/management/settings/settings.compon
import {ProfileComponent} from "./component/management/profile/profile.component"; import {ProfileComponent} from "./component/management/profile/profile.component";
import {UserEditComponent} from "./component/management/users/user-edit/user-edit.component"; import {UserEditComponent} from "./component/management/users/user-edit/user-edit.component";
import {UserViewComponent} from "./component/management/users/user-view/user-view.component"; import {UserViewComponent} from "./component/management/users/user-view/user-view.component";
import {UserResolver} from "./component/management/users/user-resolver.service";
export const routes: Routes = [ export const routes: Routes = [
{path: 'login', component: LoginComponent}, {path: 'login', component: LoginComponent},
@ -23,7 +24,7 @@ export const routes: Routes = [
{ {
path: 'users', component: UsersComponent, path: 'users', component: UsersComponent,
children: [ children: [
{path: ':id/view', component: UserViewComponent}, {path: ':id/view', component: UserViewComponent, resolve: {user: UserResolver}},
{path: ':id/edit', component: UserEditComponent} {path: ':id/edit', component: UserEditComponent}
] ]
} }

View File

@ -0,0 +1,19 @@
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from "@angular/router";
import {User} from "../../../model/user";
import {Observable} from "rxjs";
import {UserService} from "../../../service/user.service";
@Injectable({
providedIn: 'root'
})
export class UserResolver implements Resolve<User> {
constructor(private userService: UserService) {
}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<User> | Promise<User> | User {
const id = route.params['id'];
return this.userService.findUserById(id);
}
}

View File

@ -18,7 +18,7 @@ export class UserViewComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.user = this.userService.getSelectedUser(); this.route.data.subscribe((data) => this.user = data['user']);
setTimeout(() => this.clickButton('openUserInfo'), 100); setTimeout(() => this.clickButton('openUserInfo'), 100);
} }

View File

@ -4,6 +4,7 @@ import {HttpClient, HttpEvent} from "@angular/common/http";
import {Observable} from "rxjs"; import {Observable} from "rxjs";
import {User} from "../model/user"; import {User} from "../model/user";
import {CustomHttpResponse} from "../dto/custom-http-response"; import {CustomHttpResponse} from "../dto/custom-http-response";
import {map} from "rxjs/operators";
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -89,6 +90,17 @@ export class UserService {
return this.selectedUser; return this.selectedUser;
} }
public findUserById(id: string): User | Observable<User> {
let cachedUsers = this.getUsersFromLocalStorage();
const foundUser = cachedUsers.find((u) => u.userId === id);
if (foundUser) return foundUser;
return this.getAllUsers()
.pipe(map((page: UserPage, idx: number) => page.content))
.pipe(map(users => users.find(u => u.userId === id)!));
}
} }
export interface UserPage { export interface UserPage {