argos/dmp-frontend/src/app/users/profile/user-profile.component.ts

139 lines
5.4 KiB
TypeScript

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, OnDestroy } 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, OnDestroy {
user: Observable<UserListingModel>;
currentUserId: string;
cultures: Observable<CultureInfo[]>;
timezones: Observable<any[]>;
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'];
const 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;
});
});
}
ngOnDestroy(): void {
}
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<any[]> {
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<any[]> {
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.translate.use(this.formGroup.value.language);
this.authService.current().culture = this.formGroup.value.culture.name;
this.formGroup.disable();
this.authService.me().subscribe(result => window.location.reload());
},
error => {
console.log(error);
});
}
}