src/app/plugins/profile/components/profile-page/profile-page.component.ts
styleUrls | profile-page.component.scss |
templateUrl | profile-page.component.html |
constructor(cacheService: CacheService, resourceService: any, coursesService: any, toasterService: any, profileService: ProfileService, userService: any, configService: any, router: Router, utilService: any, searchService: any, playerService: any, activatedRoute: ActivatedRoute, orgDetailsService: any, navigationhelperService: any)
|
getOrgDetails |
getOrgDetails()
|
Returns:
void
|
convertToString |
convertToString(value: any)
|
Returns:
void
|
getLocationDetails |
getLocationDetails(locations: any, type: any)
|
Returns:
void
|
getContribution |
getContribution()
|
Returns:
void
|
getTrainingAttended |
getTrainingAttended()
|
Returns:
void
|
downloadCert |
downloadCert(certificates: any)
|
Returns:
void
|
toggle |
toggle(showMore: any)
|
Returns:
void
|
toggleCourse |
toggleCourse(showMoreCourse: any)
|
Returns:
void
|
updateProfile |
updateProfile(data: any)
|
Returns:
void
|
openContent |
openContent(content: any)
|
Returns:
void
|
Public prepareVisits |
prepareVisits(event: any)
|
Returns:
void
|
Private getCustodianOrgUser |
getCustodianOrgUser()
|
Returns:
void
|
setInteractEventData |
setInteractEventData()
|
Returns:
void
|
addRecoveryIdInteractEdata |
addRecoveryIdInteractEdata: |
attendedTraining |
attendedTraining: |
configService |
configService: |
contributions |
contributions: |
courseLimit |
courseLimit: |
coursesService |
coursesService: |
district |
district: |
downloadCertificateEData |
downloadCertificateEData: |
editEmailInteractEdata |
editEmailInteractEdata: |
editMobileInteractEdata |
editMobileInteractEdata: |
editProfileInteractEdata |
editProfileInteractEdata: |
editRecoveryIdInteractEdata |
editRecoveryIdInteractEdata: |
isCustodianOrgUser |
isCustodianOrgUser: |
Default value: false
|
myFrameworkEditEdata |
myFrameworkEditEdata: |
navigationhelperService |
navigationhelperService: |
orgDetails |
orgDetails: |
orgDetailsService |
orgDetailsService: |
profileModal |
profileModal: |
profileService |
profileService: |
resourceService |
resourceService: |
roles |
roles: |
router |
router: |
searchService |
searchService: |
showContactPopup |
showContactPopup: |
Default value: false
|
showEdit |
showEdit: |
Default value: false
|
showEditUserDetailsPopup |
showEditUserDetailsPopup: |
Default value: false
|
showMoreRoles |
showMoreRoles: |
Default value: true
|
showMoreRolesLimit |
showMoreRolesLimit: |
showMoreTrainings |
showMoreTrainings: |
Default value: true
|
showRecoveryId |
showRecoveryId: |
Default value: false
|
slickModal |
slickModal: |
state |
state: |
telemetryImpression |
telemetryImpression: |
telemetryInteractObject |
telemetryInteractObject: |
toasterService |
toasterService: |
userFrameWork |
userFrameWork: |
userProfile |
userProfile: |
userService |
userService: |
userSubscription |
userSubscription: |
utilService |
utilService: |
import { ProfileService } from '../../services';
import { Component, OnInit, ViewChild, OnDestroy, AfterViewInit } from '@angular/core';
import { UserService, SearchService, PlayerService, CoursesService, OrgDetailsService } from '@sunbird/core';
import {
ResourceService, ConfigService, ServerResponse, IUserProfile, IUserData, ToasterService, UtilService,
NavigationHelperService
} from '@sunbird/shared';
import { first } from 'rxjs/operators';
import * as _ from 'lodash-es';
import { Subscription } from 'rxjs';
import { IImpressionEventInput, IInteractEventEdata, IInteractEventObject } from '@sunbird/telemetry';
import { ActivatedRoute, Router } from '@angular/router';
import { CacheService } from '../../../../modules/shared/services/cache-service/cache.service';
@Component({
templateUrl: './profile-page.component.html',
styleUrls: ['./profile-page.component.scss']
})
export class ProfilePageComponent implements OnInit, OnDestroy, AfterViewInit {
@ViewChild('profileModal') profileModal;
@ViewChild('slickModal') slickModal;
userProfile: any;
contributions = [];
attendedTraining: Array<object>;
roles: Array<string>;
showMoreRoles = true;
showMoreTrainings = true;
isCustodianOrgUser = false;
showMoreRolesLimit = this.configService.appConfig.PROFILE.defaultShowMoreLimit;
courseLimit = this.configService.appConfig.PROFILE.defaultViewMoreLimit;
showEdit = false;
userSubscription: Subscription;
orgDetails = [];
showContactPopup = false;
showEditUserDetailsPopup = false;
state: string;
district: string;
userFrameWork: any;
telemetryImpression: IImpressionEventInput;
myFrameworkEditEdata: IInteractEventEdata;
editProfileInteractEdata: IInteractEventEdata;
editMobileInteractEdata: IInteractEventEdata;
editEmailInteractEdata: IInteractEventEdata;
downloadCertificateEData: IInteractEventEdata;
editRecoveryIdInteractEdata: IInteractEventEdata;
addRecoveryIdInteractEdata: IInteractEventEdata;
telemetryInteractObject: IInteractEventObject;
showRecoveryId = false;
constructor(private cacheService: CacheService, public resourceService: ResourceService, public coursesService: CoursesService,
public toasterService: ToasterService, public profileService: ProfileService, public userService: UserService,
public configService: ConfigService, public router: Router, public utilService: UtilService, public searchService: SearchService,
private playerService: PlayerService, private activatedRoute: ActivatedRoute, public orgDetailsService: OrgDetailsService,
public navigationhelperService: NavigationHelperService) {
}
ngOnInit() {
this.getCustodianOrgUser();
this.userSubscription = this.userService.userData$.subscribe((user: IUserData) => {
if (user.userProfile) {
this.userProfile = user.userProfile;
this.state = _.get(_.find(this.userProfile.userLocations, { type: 'state' }), 'name');
this.district = _.get(_.find(this.userProfile.userLocations, { type: 'district' }), 'name');
this.userFrameWork = this.userProfile.framework ? _.cloneDeep(this.userProfile.framework) : {};
this.getOrgDetails();
}
});
this.getContribution();
this.getTrainingAttended();
this.setInteractEventData();
}
getOrgDetails() {
let orgList = [];
this.roles = [];
_.forEach(this.userProfile.organisations, (org, index) => {
if (this.userProfile.rootOrgId !== org.organisationId) {
if (org.locations && org.locations.length === 0) {
if (this.userProfile.organisations[0].locationIds && this.userProfile.organisations[0].locations) {
org.locationIds = this.userProfile.organisations[0].locationIds;
org.locations = this.userProfile.organisations[0].locations;
}
}
orgList.push(org);
}
_.forEach(org.roles, (value, key) => {
if (value !== 'PUBLIC') {
const roleName = _.find(this.userProfile.roleList, { id: value });
if (roleName) {
this.roles.push(roleName['name']);
}
}
});
});
this.roles = _.uniq(this.roles);
orgList = _.sortBy(orgList, ['orgjoindate']);
this.orgDetails = orgList[0];
}
convertToString(value) {
return _.isArray(value) ? _.join(value, ', ') : undefined;
}
getLocationDetails(locations, type) {
const location: any = _.find(locations, { type: type });
return location ? location.name : false;
}
getContribution(): void {
const response = this.searchService.searchedContentList;
const { constantData, metaData, dynamicFields } = this.configService.appConfig.Course.otherCourse;
if (response) {
this.contributions = this.utilService.getDataForCard(response.content, constantData, dynamicFields, metaData);
} else {
const searchParams = {
status: ['Live'],
contentType: this.configService.appConfig.WORKSPACE.contentType,
params: { lastUpdatedOn: 'desc' }
};
const inputParams = { params: this.configService.appConfig.PROFILE.contentApiQueryParams };
this.searchService.searchContentByUserId(searchParams, inputParams).subscribe((data: ServerResponse) => {
this.contributions = this.utilService.getDataForCard(data.result.content, constantData, dynamicFields, metaData);
});
}
}
getTrainingAttended() {
this.coursesService.enrolledCourseData$.pipe(first()).subscribe(data => {
this.attendedTraining = _.reverse(_.sortBy(_.filter(data.enrolledCourses, { status: 2 }), val => {
return _.isNumber(_.get(val, 'completedOn')) ? _.get(val, 'completedOn') : Date.parse(val.completedOn);
})) || [];
});
}
downloadCert(certificates) {
_.forEach(certificates, (value, key) => {
if (key === 0) {
const request = {
request: {
pdfUrl: _.get(value, 'url')
}
};
this.profileService.downloadCertificates(request).subscribe((apiResponse) => {
const signedPdfUrl = _.get(apiResponse, 'result.signedUrl');
if (signedPdfUrl) {
window.open(signedPdfUrl, '_blank');
} else {
this.toasterService.error(this.resourceService.messages.emsg.m0076);
}
}, (err) => {
this.toasterService.error(this.resourceService.messages.emsg.m0076);
});
}
});
}
toggle(showMore) {
if (showMore === true) {
this.showMoreRolesLimit = this.roles.length;
this.showMoreRoles = false;
} else {
this.showMoreRoles = true;
this.showMoreRolesLimit = this.configService.appConfig.PROFILE.defaultShowMoreLimit;
}
}
toggleCourse(showMoreCourse) {
if (showMoreCourse === true) {
this.courseLimit = this.attendedTraining.length;
this.showMoreTrainings = false;
} else {
this.showMoreTrainings = true;
this.courseLimit = 3;
}
}
updateProfile(data) {
this.profileService.updateProfile({ framework: data }).subscribe(res => {
this.userProfile.framework = data;
this.toasterService.success(this.resourceService.messages.smsg.m0046);
this.profileModal.modal.deny();
this.showEdit = false;
}, err => {
this.showEdit = false;
this.toasterService.warning(this.resourceService.messages.emsg.m0012);
this.profileModal.modal.deny();
this.cacheService.set('showFrameWorkPopUp', 'installApp');
});
}
openContent(content) {
this.playerService.playContent(content.data.metaData);
}
public prepareVisits(event) {
const inViewLogs = _.map(event, (content, index) => ({
objid: content.metaData.courseId ? content.metaData.courseId : content.metaData.identifier,
objtype: 'course', index: index,
section: content.section,
}));
if (this.telemetryImpression) {
this.telemetryImpression.edata.visits = inViewLogs;
this.telemetryImpression.edata.subtype = 'pageexit';
this.telemetryImpression = Object.assign({}, this.telemetryImpression);
}
}
private getCustodianOrgUser() {
this.orgDetailsService.getCustodianOrg().subscribe(custodianOrg => {
if (_.get(this.userService, 'userProfile.rootOrg.rootOrgId') === _.get(custodianOrg, 'result.response.value')) {
this.isCustodianOrgUser = true;
}
});
}
setInteractEventData() {
this.myFrameworkEditEdata = {
id: 'profile-edit-framework',
type: 'click',
pageid: 'profile-read'
};
this.editProfileInteractEdata = {
id: 'profile-edit-address',
type: 'click',
pageid: 'profile-read'
};
this.editMobileInteractEdata = {
id: 'profile-edit-mobile',
type: 'click',
pageid: 'profile-read'
};
this.editEmailInteractEdata = {
id: 'profile-edit-emailId',
type: 'click',
pageid: 'profile-read'
};
this.telemetryInteractObject = {
id: this.userService.userid,
type: 'User',
ver: '1.0'
};
this.downloadCertificateEData = {
id: 'profile-download-certificate',
type: 'click',
pageid: 'profile-read'
};
this.editRecoveryIdInteractEdata = {
id: 'profile-edit-recoveryId',
type: 'click',
pageid: 'profile-read'
};
this.addRecoveryIdInteractEdata = {
id: 'profile-add-recoveryId',
type: 'click',
pageid: 'profile-read'
};
}
ngAfterViewInit() {
setTimeout(() => {
this.telemetryImpression = {
context: {
env: this.activatedRoute.snapshot.data.telemetry.env
},
object: {
id: this.userService.userid,
type: 'User',
ver: '1.0'
},
edata: {
type: this.activatedRoute.snapshot.data.telemetry.type,
pageid: 'profile-read',
subtype: this.activatedRoute.snapshot.data.telemetry.subtype,
uri: this.router.url,
duration: this.navigationhelperService.getPageLoadTime()
}
};
});
}
ngOnDestroy() {
if (this.userSubscription) {
this.userSubscription.unsubscribe();
}
}
}