diff --git a/package-lock.json b/package-lock.json index 11086dcd65..de51946c92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6086,9 +6086,9 @@ } }, "@project-sunbird/sunbird-sdk": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@project-sunbird/sunbird-sdk/-/sunbird-sdk-7.0.12.tgz", - "integrity": "sha512-MHb67HXajZ9OuL99wVH7u7F9WfOTqoRpgrwjoroCmC+tpZ7E5WuOQVqjZpMh+BvyccCoxO97JpoPTJTeWGJ6kQ==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@project-sunbird/sunbird-sdk/-/sunbird-sdk-7.0.13.tgz", + "integrity": "sha512-p9k2BPaM5pWQJ09kmreqcUxqO4kpy+8mv30DOrNz8S74GBEEsmdd4fukNP/+3Hhyki+25V5zP3fi4E0pefjSdg==", "requires": { "crypto-js": "3.1.9-1", "dayjs": "^1.9.8", diff --git a/package.json b/package.json index 0dddb64fe8..e571f49c58 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "@project-sunbird/sunbird-epub-player-v9": "5.2.1", "@project-sunbird/sunbird-pdf-player-v9": "5.1.1", "@project-sunbird/sunbird-quml-player-v9": "5.0.2", - "@project-sunbird/sunbird-sdk": "7.0.12", + "@project-sunbird/sunbird-sdk": "7.0.13", "@project-sunbird/sunbird-video-player-web-component": "^1.0.1", "chart.js": "^2.9.4", "chartjs-plugin-datalabels": "^0.7.0", diff --git a/src/app/profile-settings/profile-settings.page.ts b/src/app/profile-settings/profile-settings.page.ts index 1180761da8..26ec99e438 100644 --- a/src/app/profile-settings/profile-settings.page.ts +++ b/src/app/profile-settings/profile-settings.page.ts @@ -380,7 +380,7 @@ export class ProfileSettingsPage implements OnInit, OnDestroy, AfterViewInit { const getSuggestedFrameworksRequest: GetSuggestedFrameworksRequest = { from: CachedItemRequestSourceFrom.SERVER, language: this.translate.currentLang, - requiredCategories: [] + requiredCategories: this.appGlobalService.getRequiredCategories() }; await this.frameworkUtilService.getActiveChannelSuggestedFrameworkList(getSuggestedFrameworksRequest).toPromise() @@ -788,10 +788,11 @@ export class ProfileSettingsPage implements OnInit, OnDestroy, AfterViewInit { // this.profileSettingsForms.reset(); await this.getCategoriesAndUpdateAttributes(true) } + let categories = this.appGlobalService.getRequiredCategories() this.framework = await this.frameworkService.getFrameworkDetails({ from: CachedItemRequestSourceFrom.SERVER, frameworkId: event, - requiredCategories: [] + requiredCategories: categories }).toPromise(); } if (index <= this.categories.length && this.profileSettingsForms.get(this.categories[index + 1].identifier).value.length > 0) { diff --git a/src/app/profile/categories-edit/categories-edit.page.ts b/src/app/profile/categories-edit/categories-edit.page.ts index a529452763..31ba013de8 100644 --- a/src/app/profile/categories-edit/categories-edit.page.ts +++ b/src/app/profile/categories-edit/categories-edit.page.ts @@ -238,7 +238,7 @@ export class CategoriesEditPage implements OnInit, OnDestroy { const getSuggestedFrameworksRequest: GetSuggestedFrameworksRequest = { from: CachedItemRequestSourceFrom.SERVER, language: this.translate.currentLang, - requiredCategories: FrameworkCategoryCodesGroup.DEFAULT_FRAMEWORK_CATEGORIES + requiredCategories: this.appGlobalService.getRequiredCategories() }; await this.frameworkUtilService.getActiveChannelSuggestedFrameworkList(getSuggestedFrameworksRequest).toPromise() @@ -447,7 +447,7 @@ export class CategoriesEditPage implements OnInit, OnDestroy { userId: this.profile.uid, framework: this.editProfileForm.value } - req.framework[this.categories[0].code] = [this.frameworkId]; + req.framework[this.categories[0].code] = [this.framework.name]; req.framework['id'] = [this.frameworkId]; this.profileService.updateServerProfile(req).toPromise() .then(async () => { @@ -522,7 +522,7 @@ export class CategoriesEditPage implements OnInit, OnDestroy { this.framework = await this.frameworkService.getFrameworkDetails({ from: CachedItemRequestSourceFrom.SERVER, frameworkId, - requiredCategories: [] + requiredCategories: this.appGlobalService.getRequiredCategories() }).toPromise(); } @@ -566,6 +566,7 @@ export class CategoriesEditPage implements OnInit, OnDestroy { async onCategoryChanged(category, event, index) { if (index !== this.categories.length - 1) { if (index === 0) { + event = Array.isArray(event) ? event[0] : event; if (this.frameworkId !== event) { this.appGlobalService.setFramewokCategory(''); this.frameworkId = event; @@ -574,7 +575,7 @@ export class CategoriesEditPage implements OnInit, OnDestroy { this.framework = await this.frameworkService.getFrameworkDetails({ from: CachedItemRequestSourceFrom.SERVER, frameworkId: event, - requiredCategories: [] + requiredCategories: this.appGlobalService.getRequiredCategories() }).toPromise(); } if (index <= this.categories.length && this.editProfileForm.get(this.categories[index + 1].code).value.length > 0) { @@ -600,7 +601,8 @@ export class CategoriesEditPage implements OnInit, OnDestroy { private async getCategoriesAndUpdateAttributes(change = false) { - await this.formAndFrameworkUtilService.invokedGetFrameworkCategoryList(this.frameworkId).then(async (categories) => { + let userFrameworkId = (this.profile.serverProfile.framework &&this.profile.serverProfile.framework.id && this.profile.serverProfile.framework.id.length) ? this.profile.serverProfile?.framework?.id[0] : this.frameworkId; + await this.formAndFrameworkUtilService.invokedGetFrameworkCategoryList((change ? this.frameworkId : userFrameworkId), this.profile.serverProfile['rootOrgId']).then(async (categories) => { if (categories) { this.categories = categories.sort((a,b) => a.index - b.index); let categoryDetails = this.profile.categories ? JSON.parse(this.profile.categories) : this.profile.serverProfile.framework; @@ -677,7 +679,7 @@ async setFrameworkCategory1Value() { const getSuggestedFrameworksRequest: GetSuggestedFrameworksRequest = { from: CachedItemRequestSourceFrom.SERVER, language: this.translate.currentLang, - requiredCategories: [] + requiredCategories: this.appGlobalService.getRequiredCategories() }; await this.frameworkUtilService.getActiveChannelSuggestedFrameworkList(getSuggestedFrameworksRequest).toPromise() diff --git a/src/app/profile/profile.page.ts b/src/app/profile/profile.page.ts index 433937050c..9ae0e988d2 100644 --- a/src/app/profile/profile.page.ts +++ b/src/app/profile/profile.page.ts @@ -1392,7 +1392,7 @@ async isUserDeleted(userId: string):Promise { } private getCategories() { - this.formAndFrameworkUtilService.invokedGetFrameworkCategoryList(this.profile.framework.id[0] || this.profile.syllabus[0]).then((categories) => { + this.formAndFrameworkUtilService.invokedGetFrameworkCategoryList(this.profile.framework.id[0] || this.profile.syllabus[0], this.profile.rootOrgId).then((categories) => { this.categories = categories; this.isCategoryLoaded = true; }).catch(e => console.error(e)); diff --git a/src/services/app-global-service.service.ts b/src/services/app-global-service.service.ts index 17332f343e..1b2c6f83a0 100644 --- a/src/services/app-global-service.service.ts +++ b/src/services/app-global-service.service.ts @@ -94,6 +94,7 @@ export class AppGlobalService implements OnDestroy { private _isForumEnabled: boolean = false; private frameworkCategory: any; private _isSplashscreenDisplay: boolean = false; + private requiredCategories: Array = []; constructor( @Inject('PROFILE_SERVICE') private profile: ProfileService, @@ -277,6 +278,14 @@ export class AppGlobalService implements OnDestroy { return this.frameworkCategory; } + setRequiredCategories(categories: []) { + this.requiredCategories = categories; + } + + getRequiredCategories(): any { + return this.requiredCategories; + } + /** * @returns UserId or empty string if not available * getLoggedinUserId diff --git a/src/services/formandframeworkutil.service.ts b/src/services/formandframeworkutil.service.ts index 9fe8dacc13..60fc45f3c0 100644 --- a/src/services/formandframeworkutil.service.ts +++ b/src/services/formandframeworkutil.service.ts @@ -743,15 +743,17 @@ export class FormAndFrameworkUtilService { let fraeworkDetails = {id: frameworkId, value: res } this.appGlobalService.setFramewokCategory(fraeworkDetails); } + let requiredCategories = res.map(e => e.code) ; + this.appGlobalService.setRequiredCategories(requiredCategories); resolve(res); } }).catch((e) => console.error(e)); }); } - invokedGetFrameworkCategoryList (frameworkId, rootOrgId?) { + async invokedGetFrameworkCategoryList (frameworkId, rootOrgId?) { if (!rootOrgId) { - rootOrgId = this.preferences.getString('rootOrgId').toPromise(); + rootOrgId = await this.preferences.getString('defaultRootOrgId').toPromise(); } return this.getFrameworkCategoryList(frameworkId, {...FormConstants.FRAMEWORK_CONFIG, framework: frameworkId, rootOrgId: (rootOrgId || '*')}, true) } diff --git a/src/services/framework-details.service.ts b/src/services/framework-details.service.ts index 93740c21de..7da3c6d732 100644 --- a/src/services/framework-details.service.ts +++ b/src/services/framework-details.service.ts @@ -4,6 +4,7 @@ import { FrameworkCategoryCode, GetFrameworkCategoryTermsRequest, FrameworkUtilService, LocationSearchResult, CachedItemRequestSourceFrom, LocationSearchCriteria } from '@project-sunbird/sunbird-sdk'; import { LocationHandler } from './location-handler'; import { Location as LocationType } from '../app/app.constant'; +import { FormAndFrameworkUtilService } from './formandframeworkutil.service'; @Injectable({ providedIn: 'root' @@ -14,51 +15,54 @@ export class FrameworkDetailsService { @Inject('FRAMEWORK_UTIL_SERVICE') private frameworkUtilService: FrameworkUtilService, private translate: TranslateService, private locationHandler: LocationHandler, + private formAndFrameworkUtilService: FormAndFrameworkUtilService ) { } async getFrameworkDetails(guestProfile?: any) { - const framework = {}; - const boardList = await this.getBoardList(guestProfile).then((board) => { - return board.map(t => ({ name: t.name, code: t.code })); - }); + let framework = {}; + framework = this.getCategoriesAndUpdateAttributes(guestProfile); + framework['id'] = guestProfile.syllabus; + // const boardList = await this.getBoardList(guestProfile).then((board) => { + // return board.map(t => ({ name: t.name, code: t.code })); + // }); - const mediumList = await this.getMediumList(guestProfile).then((medium) => { - return medium.map(t => ({ name: t.name, code: t.code })); - }); + // const mediumList = await this.getMediumList(guestProfile).then((medium) => { + // return medium.map(t => ({ name: t.name, code: t.code })); + // }); - const gradeList = await this.getGradeList(guestProfile).then((grade) => { - return grade.map(t => ({ name: t.name, code: t.code })); - }); + // const gradeList = await this.getGradeList(guestProfile).then((grade) => { + // return grade.map(t => ({ name: t.name, code: t.code })); + // }); - const subjectList = await this.getSubjectList(guestProfile).then((subject) => { - return subject.map(t => ({ name: t.name, code: t.code })); - }); - framework['id'] = guestProfile.syllabus; - if (guestProfile.board && guestProfile.board.length) { - const code = typeof (guestProfile.board) === 'string' ? guestProfile.board : guestProfile.board[0]; - framework['board'] = [boardList.find(board => code === board.code).name]; - } - if (guestProfile.medium && guestProfile.medium.length) { - const Names = []; - guestProfile.medium.forEach(element => { - Names.push(mediumList.find(medium => element === medium.code).name); - }); - framework['medium'] = Names; - } - if (guestProfile.grade && guestProfile.grade.length) { - const Names = []; - guestProfile.grade.forEach(element => { - Names.push(gradeList.find(grade => element === grade.code).name); - }); - framework['gradeLevel'] = Names; - } - if (guestProfile.subject && guestProfile.subject.length) { - const Names = []; - guestProfile.subject.forEach(element => { - Names.push(subjectList.find(subject => element === subject.code).name); - }); - framework['subject'] = Names; - } + // const subjectList = await this.getSubjectList(guestProfile).then((subject) => { + // return subject.map(t => ({ name: t.name, code: t.code })); + // }); + // framework['id'] = guestProfile.syllabus; + // if (guestProfile.board && guestProfile.board.length) { + // const code = typeof (guestProfile.board) === 'string' ? guestProfile.board : guestProfile.board[0]; + // framework['board'] = [boardList.find(board => code === board.code).name]; + // } + // if (guestProfile.medium && guestProfile.medium.length) { + // const Names = []; + // guestProfile.medium.forEach(element => { + // Names.push(mediumList.find(medium => element === medium.code).name); + // }); + // framework['medium'] = Names; + // } + // if (guestProfile.grade && guestProfile.grade.length) { + // const Names = []; + // guestProfile.grade.forEach(element => { + // Names.push(gradeList.find(grade => element === grade.code).name); + // }); + // framework['gradeLevel'] = Names; + // } + // if (guestProfile.subject && guestProfile.subject.length) { + // const Names = []; + // guestProfile.subject.forEach(element => { + // Names.push(subjectList.find(subject => element === subject.code).name); + // }); + // framework['subject'] = Names; + // } const presetLocation = (await this.locationHandler.getAvailableLocation(guestProfile, true)) .reduce<{ [code: string]: LocationSearchResult }>((acc, loc) => { @@ -172,4 +176,20 @@ export class FrameworkDetailsService { return response.find(d => d.id === location.district.id); }); } + + private async getCategoriesAndUpdateAttributes(profile) { + let framework = {} + await this.formAndFrameworkUtilService.invokedGetFrameworkCategoryList(profile.syllabus[0]).then((categories) => { + if (categories) { + let frameworkData = categories; + let categoryDetails = JSON.parse(profile.categories); + frameworkData.forEach((e) => { + if(categoryDetails[e.identifier]) { + framework[e.code] = categoryDetails[e.identifier] + } + }); + return framework; + } + }).catch(e => console.error(e)); + } } diff --git a/src/services/handlers/tnc-update-handler.service.ts b/src/services/handlers/tnc-update-handler.service.ts index 8c495137c6..25516f6376 100644 --- a/src/services/handlers/tnc-update-handler.service.ts +++ b/src/services/handlers/tnc-update-handler.service.ts @@ -246,7 +246,7 @@ export class TncUpdateHandlerService { const guestProfile = await this.commonUtilService.getGuestUserConfig().then((profile) => { return profile; }); - if ( guestProfile.board && guestProfile.board.length && onboarding.skipOnboardingForLoginUser && userDetails.profileType !== ProfileType.ADMIN && !isSSOUser) { + if (((guestProfile.board && guestProfile.board.length) || guestProfile.categories) && onboarding.skipOnboardingForLoginUser && userDetails.profileType !== ProfileType.ADMIN && !isSSOUser) { await this.updateUserAsGuest(guestProfile); } else { await this.preRequirementToBmcNavigation(profile.userId, locationMappingConfig);