import {Component, OnInit} from "@angular/core"; import {Location} from "@angular/common"; import {FormControl} from "@angular/forms"; import {ActivatedRoute, Router} from "@angular/router"; import {Observable} from "rxjs/Observable"; import {UserService} from "../../services/user-service/user.service"; import {User} from "../../models/model-interfaces"; @Component({ selector: 'squad-list', templateUrl: './user-list.component.html', styleUrls: ['./user-list.component.css'] }) export class UserListComponent implements OnInit { selectedUserId: string | number = null; users$: Observable; searchTerm = new FormControl(); fractionRadioSelect: string; constructor(private userService: UserService, private router: Router, private route: ActivatedRoute, private location: Location) { } ngOnInit() { this.users$ = this.userService.users$; const paramsStream = this.route.queryParams .map(params => decodeURI(params['query'] || '')) .do(query => this.searchTerm.setValue(query)); const searchTermStream = this.searchTerm.valueChanges .debounceTime(400) .do(query => this.adjustBrowserUrl(query)); Observable.merge(paramsStream, searchTermStream) .distinctUntilChanged() .switchMap(query => this.userService.findUsers(query, this.fractionRadioSelect)) .subscribe(); } openNewUserForm() { this.router.navigate([{outlets: {'right': ['new']}}], {relativeTo: this.route}); } selectUser(userId: string) { this.selectedUserId = userId; this.router.navigate([{outlets: {'right': ['overview', userId]}}], {relativeTo: this.route}); } awardUser(userId: string) { this.selectedUserId = userId; this.router.navigate([{outlets: {'right': ['award', userId]}}], {relativeTo: this.route}); } deleteUser(user: User) { this.userService.deleteUser(user) .subscribe((res) => { }) } filterUsersByFraction(query = '', fractionFilter) { this.users$ = this.userService.findUsers(query, fractionFilter); } adjustBrowserUrl(queryString = '') { const absoluteUrl = this.location.path().split('?')[0]; const queryPart = queryString !== '' ? `query=${queryString}` : ''; this.location.replaceState(absoluteUrl, queryPart); } }