import { DataTableRequest } from '../../models/data-table/DataTableRequest'; import { UserErrorModel } from '../../models/users/UserErrorModel'; import { UserReferenceService } from '../../services/user-reference/user-reference-data.service'; import { UserListingModel } from '../../models/users/UserListingModel'; import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; import { UserCriteria } from '../../models/criteria/users/UserCriteria'; import { UserCriteriaErrorModel } from '../../models/criteria/users/UserCriteriaErrorModel'; import { Observable } from 'rxjs/Rx'; import { Component, OnInit, AfterViewInit, ViewChild } from '@angular/core'; import { UsersCriteriaComponent } from '../../shared/components/criteria/users/users-criteria.component'; import { Router, ActivatedRoute, Params } from '@angular/router'; import { Principal } from '../../models/login/Principal'; import { MatPaginator, MatSort, MatSnackBar } from '@angular/material'; import { TranslateService } from '@ngx-translate/core'; import { DataSource } from '@angular/cdk/table'; import { RecentActivityTypes } from '../../users/activity/RecentActivityTypes'; import { AuthService } from '../../services/auth/auth.service'; import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel'; import { CultureInfo } from '../../utilities/culture/models/culture-info'; import { CultureService } from '../../utilities/culture/culture-service'; import { FormControl, FormBuilder, FormGroup } from '@angular/forms'; import * as moment from 'moment-timezone'; import { User } from '../../models/invitation/User'; const availableLanguages: any[] = require('../../../assets/resources/language.json'); @Component({ selector: 'app-user-profile', templateUrl: './user-profile.component.html', styleUrls: ['./user-profile.component.scss'], providers: [ UserReferenceService, CultureService ] }) export class UserProfileComponent implements OnInit { user: Observable; currentUserId: string; cultures: Observable; timezones: Observable; editMode = false; languages = availableLanguages; formGroup: FormGroup; constructor( private userReferenceService: UserReferenceService, private route: ActivatedRoute, private router: Router, private authService: AuthService, private language: TranslateService, private cultureService: CultureService, private translate: TranslateService, ) { } ngOnInit() { this.route.params.subscribe((params: Params) => { this.currentUserId = params['id']; let userId = params['id'] === this.authService.current().id ? 'me' : params['id'] this.user = this.userReferenceService.getUser(userId).map(result => { result["additionalinfo"] = JSON.parse(result["additionalinfo"]); this.formGroup = new FormBuilder().group({ language: new FormControl(result["additionalinfo"]["language"] ? availableLanguages.filter(x => x.value === result["additionalinfo"]["language"]["value"]).pop() : ''), timezone: new FormControl(result["additionalinfo"]["timezone"]), culture: new FormControl(result["additionalinfo"]["culture"]) }) this.formGroup.get('language').valueChanges.subscribe(x => { if (x) this.translate.use(x.value) }) this.formGroup.get('timezone').valueChanges.subscribe(x => { if (x) this.timezones = this._filterTimezone(x) }); this.formGroup.get('culture').valueChanges.subscribe(x => { if (x) this.cultures = this._filterCulture(x) }); this.formGroup.disable() return result; }) }) } getUserRole(dmp: DataManagementPlanModel) { if (dmp.creator.id === this.currentUserId) return this.language.instant('USER-PROFILE.DMPS.CREATOR') else if (dmp.associatedUsers.map(x => x.id).indexOf(this.currentUserId) != -1) return this.language.instant('USER-PROFILE.DMPS.MEMBER'); return '' } showAllDmps() { this.router.navigate(["/dmps"]) } navigateToDmp(dmp: DataManagementPlanModel) { this.router.navigate(["/dmps/edit/" + dmp.id]) } private _filterTimezone(value: string): Observable { if (value && typeof value === 'string') { const filterValue = value.toLowerCase(); return Observable.of(moment.tz.names().filter(option => option.toLowerCase().includes(filterValue))); } else { return Observable.of(moment.tz.names()); } } private _filterCulture(value: string): Observable { if (value && typeof value === 'string') { const filterValue = value.toLowerCase(); return Observable.of(this.cultureService.getCultureValues().filter(option => option.displayName.toLowerCase().includes(filterValue))); } else { return Observable.of(this.cultureService.getCultureValues()); } } displayFn(culture?: CultureInfo): string | undefined { return culture ? culture.displayName + '-' + culture.nativeName : undefined; } save() { } public unlock() { this.editMode = true; this.formGroup.enable() } public lock() { this.userReferenceService.updateUserSettings(this.formGroup.value).subscribe( x => { this.editMode = false; this.formGroup.disable(); }, error => { console.log(error) }) } }