import {Component, ViewChild, Input} from '@angular/core'; import {Location} from '@angular/common'; import {Observable} from 'rxjs'; import {ActivatedRoute, Router} from '@angular/router'; import {ModalLoading} from '../../utils/modal/loading.component'; import {AlertModal} from '../../utils/modal/alert'; import {Session} from '../../login/utils/helper.class'; import {EnvProperties} from '../../utils/properties/env-properties'; import {MailPrefsService} from './mailPrefs.service'; import {ConnectHelper} from '../connectHelper'; import {ErrorCodes} from '../../utils/properties/errorCodes'; import {ErrorMessagesComponent} from '../../utils/errorMessages.component'; import {LoginErrorCodes} from '../../login/utils/guardHelper.class'; declare var UIkit: any; @Component({ selector: 'mailPrefs', templateUrl: 'mailPrefs.component.html', providers:[MailPrefsService] }) export class MailPrefsComponent { properties:EnvProperties; sub: any; public communityId: string; public preferencesFor: string = "community"; public status: number; public notifications = []; public initialNotifications = []; public prefsChanged = {}; //public showForbiddenMessage:boolean = false; public userValidMessage:string = ""; public savedMessage: string = ""; private errorCodes: ErrorCodes; private errorMessages: ErrorMessagesComponent; @Input() showSaveResetButtons: boolean = true; constructor (private _mailPrefsService: MailPrefsService, private route: ActivatedRoute, private _router:Router, private location: Location) { this.errorCodes = new ErrorCodes(); this.errorMessages = new ErrorMessagesComponent(); this.status = this.errorCodes.LOADING; } ngOnInit() { this.route.data .subscribe((data: { envSpecific: EnvProperties }) => { this.properties = data.envSpecific; this.sub = this.route.queryParams.subscribe(params => { this.communityId = ConnectHelper.getCommunityFromDomain(this.properties.domain); if(!this.communityId) { this.communityId = params['communityId']; } this.getEmailPreferences(); }); }); } getEmailPreferences() { if(!Session.isLoggedIn()){ //this.userValidMessage = "User session has expired. Please login again."; if(this.showSaveResetButtons) { this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); } } else { this.status = this.errorCodes.LOADING; this.savedMessage = ""; if(this.communityId && this.communityId != "openaire") { this.preferencesFor = "community"; this._mailPrefsService.getUserEmailPreferencesForCommunity(this.communityId, this.properties.claimsAPIURL).subscribe( data => { if(data.code == "204") { this.status = this.errorCodes.NONE; } else { this.initialNotifications = data.data; this.notifications = JSON.parse(JSON.stringify( this.initialNotifications )); this.status = this.errorCodes.DONE; } }, err => { this.handleErrors(err); this.handleError("Error getting user email preferences for community with id: "+this.communityId, err); } ); } else { this.preferencesFor = "project"; this._mailPrefsService.getUserEmailPreferencesForOpenaire(this.properties.claimsAPIURL).subscribe( data => { if(data.code == "204") { this.status = this.errorCodes.NONE; } else { this.initialNotifications = data.data; this.notifications = JSON.parse(JSON.stringify( this.initialNotifications )); //this.notifications = this.initialNotifications.map(x => Object.assign({}, x)); //this.notifications = this.initialNotifications; this.status = this.errorCodes.DONE; } }, err => { //console.info(err); this.handleErrors(err); this.handleError("Error getting user email preferences for openaire", err); } ); } } } changeNotify(notification: any, checked: boolean, index: number) { if(!Session.isLoggedIn()){ //this.userValidMessage = "User session has expired. Please login again."; if(this.showSaveResetButtons) { this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); } } else { this.savedMessage = ""; this.status = this.errorCodes.DONE; notification.notify = checked; this.prefsChanged[index] = true; } } changeFrequency(index: number) { if(!Session.isLoggedIn()){ //this.userValidMessage = "User session has expired. Please login again."; if(this.showSaveResetButtons) { this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); } } else { this.savedMessage = ""; this.status = this.errorCodes.DONE; if(this.initialNotifications[index].frequency != this.notifications[index].frequency) { this.prefsChanged[index] = true; } } } saveNotification(index: number) { if(this.notifications.length > 0 && this.initialNotifications.length > 0) { if(!Session.isLoggedIn()){ //this.userValidMessage = "User session has expired. Please login again."; if(this.showSaveResetButtons) { this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); } } else { if(JSON.stringify(this.notifications[index]) != JSON.stringify(this.initialNotifications[index])) { this.status = this.errorCodes.LOADING; this.savedMessage = ""; this._mailPrefsService.saveUserEmailPreferences(this.notifications[index], this.properties.claimsAPIURL).subscribe( data => { this.initialNotifications[index] = JSON.parse(JSON.stringify( this.notifications[index] )); this.status = this.errorCodes.DONE; /*UIkit.notification({ message : 'Your email preferences for '+this.notifications[index].openaireName+' have been successfully changed', status : 'success', timeout : 3000, pos : 'top-center' });*/ this.savedMessage = "Notification settings for claims saved!"; }, err => { //console.log(err); this.handleError("Error saving user email preferences: "+JSON.stringify(this.notifications[index]), err); this.status = this.errorCodes.NOT_SAVED; } ); } else { /*UIkit.notification({ message : 'No changes selected for '+this.notifications[index].openaireName+' email preferences', status : 'primary', timeout : 3000, pos : 'top-center' });*/ this.savedMessage = "Notification settings for claims saved!"; } } } } restoreNotification(index: number) { if(!Session.isLoggedIn()){ //this.userValidMessage = "User session has expired. Please login again."; if(this.showSaveResetButtons) { this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} }); } } else { if(this.notifications.length > 0 && this.initialNotifications.length > 0) { this.status = this.errorCodes.LOADING; this.savedMessage = ""; this.notifications[index] = JSON.parse(JSON.stringify( this.initialNotifications[index] )); this.status = this.errorCodes.DONE; this.prefsChanged[index] = false; } } } /* prefsChanged(index: number) : boolean { if(this.notifications.length > 0 && this.initialNotifications.length > 0) { if(JSON.stringify(this.notifications[index]) != JSON.stringify(this.initialNotifications[index])) { return true; } } return false; } */ ngOnDestroy() { if(this.sub) { this.sub.unsubscribe(); } } handleErrors(err){ //this.showErrorMessage = true; //try{ var code = ""; if(!err.status) { var error = err.json(); code = error.code; } else { code = err.status; } this.status = this.errorMessages.getErrorCode(code); } private handleError(message: string, error) { console.error("User mail notification preferences Page (for claims): "+message, error); } //}catch (e) { //console.log("Couldn't parse answer as json") //this.showErrorMessage = true; //} }