@sunbird-cb/toc 0.35.5 → 0.35.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +2 -2
  2. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1 -3
  3. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +1 -2
  4. package/esm2022/lib/app-toc-lib.module.mjs +10 -5
  5. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +20 -3
  6. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +4 -5
  7. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +13 -2
  8. package/esm2022/lib/models/user-profile.model.mjs +1 -1
  9. package/esm2022/lib/services/discuss-utils.service.mjs +30 -43
  10. package/esm2022/lib/services/netcore.service.mjs +116 -46
  11. package/esm2022/lib/services/nps-grid.service.mjs +34 -22
  12. package/esm2022/lib/services/otp.service.mjs +63 -25
  13. package/esm2022/lib/services/profile-v2.service.mjs +46 -21
  14. package/esm2022/lib/services/user-profile.service.mjs +159 -39
  15. package/esm2022/public-api.mjs +2 -1
  16. package/fesm2022/sunbird-cb-toc.mjs +605 -333
  17. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  18. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -1
  19. package/lib/app-toc-lib.module.d.ts.map +1 -1
  20. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +1 -0
  21. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -1
  22. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -1
  23. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +2 -0
  24. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -1
  25. package/lib/models/user-profile.model.d.ts +87 -0
  26. package/lib/models/user-profile.model.d.ts.map +1 -1
  27. package/lib/services/discuss-utils.service.d.ts +5 -27
  28. package/lib/services/discuss-utils.service.d.ts.map +1 -1
  29. package/lib/services/netcore.service.d.ts +16 -28
  30. package/lib/services/netcore.service.d.ts.map +1 -1
  31. package/lib/services/nps-grid.service.d.ts +11 -10
  32. package/lib/services/nps-grid.service.d.ts.map +1 -1
  33. package/lib/services/otp.service.d.ts +5 -10
  34. package/lib/services/otp.service.d.ts.map +1 -1
  35. package/lib/services/profile-v2.service.d.ts +7 -6
  36. package/lib/services/profile-v2.service.d.ts.map +1 -1
  37. package/lib/services/user-profile.service.d.ts +35 -11
  38. package/lib/services/user-profile.service.d.ts.map +1 -1
  39. package/package.json +1 -1
  40. package/public-api.d.ts +1 -0
  41. package/public-api.d.ts.map +1 -1
@@ -157,10 +157,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
157
157
  }] });
158
158
 
159
159
  // TODO: move this in some common place
160
- const PROTECTED_SLAG_V8$2 = '/apis/protected/v8';
161
- const API_END_POINTS$7 = {
162
- AUTOCOMPLETE: (query) => `${PROTECTED_SLAG_V8$2}/user/autocomplete/${query}`,
163
- AUTOCOMPLETE_BY_DEPARTMENT: (query) => `${PROTECTED_SLAG_V8$2}/user/autocomplete/department/${query}`,
160
+ const PROTECTED_SLAG_V8$3 = '/apis/protected/v8';
161
+ const API_END_POINTS$a = {
162
+ AUTOCOMPLETE: (query) => `${PROTECTED_SLAG_V8$3}/user/autocomplete/${query}`,
163
+ AUTOCOMPLETE_BY_DEPARTMENT: (query) => `${PROTECTED_SLAG_V8$3}/user/autocomplete/department/${query}`,
164
164
  SEARCH_USERS: '/apis/proxies/v8/user/v1/search',
165
165
  };
166
166
  class UserAutocompleteService {
@@ -169,7 +169,7 @@ class UserAutocompleteService {
169
169
  this.configSvc = configSvc;
170
170
  }
171
171
  fetchAutoComplete(query) {
172
- let url = API_END_POINTS$7.AUTOCOMPLETE(query);
172
+ let url = API_END_POINTS$a.AUTOCOMPLETE(query);
173
173
  const stringifiedQueryParams = getStringifiedQueryParams({
174
174
  dealerCode: this.configSvc.userProfile && this.configSvc.userProfile.dealerCode ? this.configSvc.userProfile.dealerCode : undefined,
175
175
  sourceFields: this.configSvc.instanceConfig && this.configSvc.instanceConfig.sourceFieldsUserAutocomplete
@@ -180,7 +180,7 @@ class UserAutocompleteService {
180
180
  return this.http.get(url);
181
181
  }
182
182
  fetchAutoCompleteByDept(query, departments) {
183
- let url = API_END_POINTS$7.AUTOCOMPLETE_BY_DEPARTMENT(query);
183
+ let url = API_END_POINTS$a.AUTOCOMPLETE_BY_DEPARTMENT(query);
184
184
  const stringifiedQueryParams = getStringifiedQueryParams({
185
185
  dealerCode: this.configSvc.userProfile && this.configSvc.userProfile.dealerCode ? this.configSvc.userProfile.dealerCode : undefined,
186
186
  sourceFields: this.configSvc.instanceConfig && this.configSvc.instanceConfig.sourceFieldsUserAutocomplete
@@ -200,7 +200,7 @@ class UserAutocompleteService {
200
200
  },
201
201
  },
202
202
  };
203
- return this.http.post(`${API_END_POINTS$7.SEARCH_USERS}`, reqBody);
203
+ return this.http.post(`${API_END_POINTS$a.SEARCH_USERS}`, reqBody);
204
204
  }
205
205
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserAutocompleteService, deps: [{ token: i1.HttpClient }, { token: i2$1.ConfigurationsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
206
206
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserAutocompleteService, providedIn: 'root' }); }
@@ -626,41 +626,41 @@ function viewerRouteGenerator(id, mimeType, collectionId, collectionType, forPre
626
626
 
627
627
  // tslint:enable
628
628
  // TODO: move this in some common place
629
- const PROTECTED_SLAG_V8$1 = '/apis/protected/v8';
630
- const API_END_POINTS$6 = {
631
- CONTENT: `${PROTECTED_SLAG_V8$1}/content`,
629
+ const PROTECTED_SLAG_V8$2 = '/apis/protected/v8';
630
+ const API_END_POINTS$9 = {
631
+ CONTENT: `${PROTECTED_SLAG_V8$2}/content`,
632
632
  AUTHORING_CONTENT: `/api/course/v1/hierarchy`,
633
- CONTENT_LIKES: `${PROTECTED_SLAG_V8$1}/content/likeCount`,
634
- SET_S3_COOKIE: `${PROTECTED_SLAG_V8$1}/content/setCookie`,
635
- SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8$1}/content/setImageCookie`,
636
- FETCH_MANIFEST: `${PROTECTED_SLAG_V8$1}/content/getWebModuleManifest`,
637
- FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8$1}/content/getWebModuleFiles`,
638
- MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8$1}/content/multiple`,
639
- CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8$1}/content/searchV5`,
633
+ CONTENT_LIKES: `${PROTECTED_SLAG_V8$2}/content/likeCount`,
634
+ SET_S3_COOKIE: `${PROTECTED_SLAG_V8$2}/content/setCookie`,
635
+ SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8$2}/content/setImageCookie`,
636
+ FETCH_MANIFEST: `${PROTECTED_SLAG_V8$2}/content/getWebModuleManifest`,
637
+ FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8$2}/content/getWebModuleFiles`,
638
+ MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8$2}/content/multiple`,
639
+ CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8$2}/content/searchV5`,
640
640
  CONTENT_SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
641
641
  TRENDING_CONTENT_SEARCH: `apis/proxies/v8/trending/content/search`,
642
642
  CONTENT_SEARCH_RELATED_CBP_V6: `/apis/proxies/v8/sunbirdigot/search`,
643
- CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8$1}/content/searchRegionRecommendation`,
644
- CONTENT_HISTORY: `${PROTECTED_SLAG_V8$1}/user/history`,
643
+ CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8$2}/content/searchRegionRecommendation`,
644
+ CONTENT_HISTORY: `${PROTECTED_SLAG_V8$2}/user/history`,
645
645
  CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
646
646
  COURSE_BATCH_LIST: `/apis/proxies/v8/learner/course/v1/batch/list`,
647
647
  COURSE_BATCH: `/apis/proxies/v8/course/v1/batch/read`,
648
648
  AUTO_ASSIGN_BATCH: `/apis/protected/v8/cohorts/user/autoenrollment/`,
649
649
  AUTO_ASSIGN_CURATED_BATCH: `/apis/proxies/v8/curatedprogram/v1/enrol`,
650
650
  AUTO_ASSIGN_OPEN_PROGRAM: `/apis/proxies/v8/openprogram/v1/enrol`,
651
- USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8$1}/user/history/continue`,
652
- CONTENT_RATING: `${PROTECTED_SLAG_V8$1}/user/rating`,
653
- COLLECTION_HIERARCHY: (type, id) => `${PROTECTED_SLAG_V8$1}/content/collection/${type}/${id}`,
654
- REGISTRATION_STATUS: `${PROTECTED_SLAG_V8$1}/admin/userRegistration/checkUserRegistrationContent`,
655
- MARK_AS_COMPLETE_META: (contentId) => `${PROTECTED_SLAG_V8$1}/user/progress/${contentId}`,
651
+ USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8$2}/user/history/continue`,
652
+ CONTENT_RATING: `${PROTECTED_SLAG_V8$2}/user/rating`,
653
+ COLLECTION_HIERARCHY: (type, id) => `${PROTECTED_SLAG_V8$2}/content/collection/${type}/${id}`,
654
+ REGISTRATION_STATUS: `${PROTECTED_SLAG_V8$2}/admin/userRegistration/checkUserRegistrationContent`,
655
+ MARK_AS_COMPLETE_META: (contentId) => `${PROTECTED_SLAG_V8$2}/user/progress/${contentId}`,
656
656
  ENROLL_BATCH: `/apis/proxies/v8/learner/course/v1/enrol`,
657
657
  ENROLL_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/enrol`,
658
658
  WITHDRAW_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/unenrol`,
659
659
  BLENDED_USER_WF: `/apis/proxies/v8/workflow/blendedprogram/user/search`,
660
660
  BLENDED_USER_COUNT: `apis/proxies/v8/workflow/blendedprogram/enrol/status/count`,
661
- CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8$1}/cohorts/course/batch/cert/template/add`,
662
- CERT_ISSUE: `${PROTECTED_SLAG_V8$1}/cohorts/course/batch/cert/issue`,
663
- CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8$1}/cohorts/course/batch/cert/download/${certId}`,
661
+ CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8$2}/cohorts/course/batch/cert/template/add`,
662
+ CERT_ISSUE: `${PROTECTED_SLAG_V8$2}/cohorts/course/batch/cert/issue`,
663
+ CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8$2}/cohorts/course/batch/cert/download/${certId}`,
664
664
  READ_KARMAPOINTS: `/apis/proxies/v8/karmapoints/read`,
665
665
  CONTENT_READ: (contentId) => `/apis/proxies/v8/extended/content/v1/read/${contentId}`,
666
666
  READ_COURSE_KARMAPOINTS: '/apis/proxies/v8/karmapoints/user/course/read',
@@ -696,7 +696,7 @@ class WidgetContentService {
696
696
  }
697
697
  fetchMarkAsCompleteMeta(identifier) {
698
698
  // tslint:disable-next-line
699
- const url = API_END_POINTS$6.MARK_AS_COMPLETE_META(identifier);
699
+ const url = API_END_POINTS$9.MARK_AS_COMPLETE_META(identifier);
700
700
  // return this.http.get(url).toPromise()
701
701
  if (url) { }
702
702
  return of().toPromise();
@@ -755,66 +755,66 @@ class WidgetContentService {
755
755
  url = `/api/content/v1/read/${contentId}`;
756
756
  }
757
757
  else {
758
- url = `${API_END_POINTS$6.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
758
+ url = `${API_END_POINTS$9.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
759
759
  }
760
760
  return this.http.get(url).pipe(shareReplay(1), r => r);
761
761
  }
762
762
  fetchMultipleContent(ids) {
763
- return this.http.get(`${API_END_POINTS$6.MULTIPLE_CONTENT}/${ids.join(',')}`);
763
+ return this.http.get(`${API_END_POINTS$9.MULTIPLE_CONTENT}/${ids.join(',')}`);
764
764
  }
765
765
  fetchCollectionHierarchy(type, id, pageNumber = 0, pageSize = 1) {
766
- return this.http.get(`${API_END_POINTS$6.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
766
+ return this.http.get(`${API_END_POINTS$9.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
767
767
  }
768
768
  fetchBlendedCourse() {
769
769
  }
770
770
  fetchCourseBatches(req) {
771
771
  return this.http
772
- .post(API_END_POINTS$6.COURSE_BATCH_LIST, req)
772
+ .post(API_END_POINTS$9.COURSE_BATCH_LIST, req)
773
773
  .pipe(retry(1), map((data) => data.result.response));
774
774
  }
775
775
  // fetch individual batch
776
776
  fetchCourseBatch(batchId) {
777
- return this.http.get(`${API_END_POINTS$6.COURSE_BATCH}/${batchId}`);
777
+ return this.http.get(`${API_END_POINTS$9.COURSE_BATCH}/${batchId}`);
778
778
  }
779
779
  autoAssignBatchApi(identifier, language) {
780
780
  let enrollLang = language?.langId || 'english';
781
- return this.http.get(`${API_END_POINTS$6.AUTO_ASSIGN_BATCH}${identifier}?language=${enrollLang}`)
781
+ return this.http.get(`${API_END_POINTS$9.AUTO_ASSIGN_BATCH}${identifier}?language=${enrollLang}`)
782
782
  .pipe(retry(1), map((data) => data.result.response));
783
783
  }
784
784
  autoEnrollLP(identifier) {
785
- return this.http.get(`${API_END_POINTS$6.LEARNER_PATHWAY_ENROLL(identifier)}`)
785
+ return this.http.get(`${API_END_POINTS$9.LEARNER_PATHWAY_ENROLL(identifier)}`)
786
786
  .pipe(retry(1), map((data) => data.result.response));
787
787
  }
788
788
  autoAssignCuratedBatchApi(request, programType) {
789
789
  const url = programType === NsContent.ECourseCategory.MODERATED_PROGRAM ?
790
- API_END_POINTS$6.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS$6.AUTO_ASSIGN_CURATED_BATCH;
790
+ API_END_POINTS$9.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS$9.AUTO_ASSIGN_CURATED_BATCH;
791
791
  return this.http.post(`${url}`, request)
792
792
  .pipe(retry(1), map((data) => data.result.response));
793
793
  }
794
794
  enrollUserToBatch(req) {
795
795
  return this.http
796
- .post(API_END_POINTS$6.ENROLL_BATCH, req)
796
+ .post(API_END_POINTS$9.ENROLL_BATCH, req)
797
797
  .toPromise();
798
798
  }
799
799
  enrollAndUnenrollUserToBatchWF(req, type) {
800
- const url = type === 'WITHDRAW' ? API_END_POINTS$6.WITHDRAW_BATCH_WF : API_END_POINTS$6.ENROLL_BATCH_WF;
800
+ const url = type === 'WITHDRAW' ? API_END_POINTS$9.WITHDRAW_BATCH_WF : API_END_POINTS$9.ENROLL_BATCH_WF;
801
801
  return this.http
802
802
  .post(url, req)
803
803
  .toPromise();
804
804
  }
805
805
  fetchBlendedUserWF(req) {
806
806
  return this.http
807
- .post(API_END_POINTS$6.BLENDED_USER_WF, req)
807
+ .post(API_END_POINTS$9.BLENDED_USER_WF, req)
808
808
  .toPromise();
809
809
  }
810
810
  fetchBlendedUserCOUNT(req) {
811
811
  return this.http
812
- .post(API_END_POINTS$6.BLENDED_USER_COUNT, req)
812
+ .post(API_END_POINTS$9.BLENDED_USER_COUNT, req)
813
813
  .toPromise();
814
814
  }
815
815
  fetchContentLikes(contentIds) {
816
816
  return this.http
817
- .post(API_END_POINTS$6.CONTENT_LIKES, contentIds)
817
+ .post(API_END_POINTS$9.CONTENT_LIKES, contentIds)
818
818
  .toPromise();
819
819
  }
820
820
  fetchContentRatings(contentIds) {
@@ -825,13 +825,13 @@ class WidgetContentService {
825
825
  return of().toPromise();
826
826
  }
827
827
  fetchContentHistory(contentId) {
828
- return this.http.get(`${API_END_POINTS$6.CONTENT_HISTORY}/${contentId}`);
828
+ return this.http.get(`${API_END_POINTS$9.CONTENT_HISTORY}/${contentId}`);
829
829
  }
830
830
  fetchContentHistoryV2(req) {
831
831
  const isPreAssessment = this.activatedRoute.snapshot.queryParams.preAssessment;
832
832
  req.request.fields = ['progressdetails'];
833
833
  if (req.request.courseId && !isPreAssessment) {
834
- const data = this.http.post(`${API_END_POINTS$6.CONTENT_HISTORYV2}/${req.request.courseId}`, req).pipe(map((rData) => {
834
+ const data = this.http.post(`${API_END_POINTS$9.CONTENT_HISTORYV2}/${req.request.courseId}`, req).pipe(map((rData) => {
835
835
  this.languageMapProgress = rData?.result?.languageProgress || {};
836
836
  return rData;
837
837
  }));
@@ -892,17 +892,17 @@ class WidgetContentService {
892
892
  return EMPTY;
893
893
  }
894
894
  setS3ImageCookie() {
895
- return this.http.post(API_END_POINTS$6.SET_S3_IMAGE_COOKIE, {}).pipe(catchError(_err => of(true)));
895
+ return this.http.post(API_END_POINTS$9.SET_S3_IMAGE_COOKIE, {}).pipe(catchError(_err => of(true)));
896
896
  }
897
897
  fetchManifest(url) {
898
- return this.http.post(API_END_POINTS$6.FETCH_MANIFEST, { url });
898
+ return this.http.post(API_END_POINTS$9.FETCH_MANIFEST, { url });
899
899
  }
900
900
  fetchWebModuleContent(url) {
901
- return this.http.get(`${API_END_POINTS$6.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
901
+ return this.http.get(`${API_END_POINTS$9.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
902
902
  }
903
903
  search(req) {
904
904
  req.query = req.query || '';
905
- return this.http.post(API_END_POINTS$6.CONTENT_SEARCH_V5, {
905
+ return this.http.post(API_END_POINTS$9.CONTENT_SEARCH_V5, {
906
906
  request: req,
907
907
  });
908
908
  }
@@ -915,7 +915,7 @@ class WidgetContentService {
915
915
  ...req.filters,
916
916
  labels: [req.preLabelValue || ''],
917
917
  };
918
- return this.http.post(API_END_POINTS$6.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
918
+ return this.http.post(API_END_POINTS$9.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
919
919
  }
920
920
  searchV6(req) {
921
921
  const apiPath = ___default.get(req, 'api.path');
@@ -923,19 +923,19 @@ class WidgetContentService {
923
923
  if (apiPath) {
924
924
  return this.http.get(apiPath);
925
925
  }
926
- return this.http.post(API_END_POINTS$6.CONTENT_SEARCH_V6, req);
926
+ return this.http.post(API_END_POINTS$9.CONTENT_SEARCH_V6, req);
927
927
  }
928
928
  searchRelatedCBPV6(req) {
929
- return this.http.post(API_END_POINTS$6.CONTENT_SEARCH_RELATED_CBP_V6, req);
929
+ return this.http.post(API_END_POINTS$9.CONTENT_SEARCH_RELATED_CBP_V6, req);
930
930
  }
931
931
  fetchContentRating(contentId) {
932
- return this.http.get(`${API_END_POINTS$6.CONTENT_RATING}/${contentId}`);
932
+ return this.http.get(`${API_END_POINTS$9.CONTENT_RATING}/${contentId}`);
933
933
  }
934
934
  deleteContentRating(contentId) {
935
- return this.http.delete(`${API_END_POINTS$6.CONTENT_RATING}/${contentId}`);
935
+ return this.http.delete(`${API_END_POINTS$9.CONTENT_RATING}/${contentId}`);
936
936
  }
937
937
  addContentRating(contentId, data) {
938
- return this.http.post(`${API_END_POINTS$6.CONTENT_RATING}/${contentId}`, data);
938
+ return this.http.post(`${API_END_POINTS$9.CONTENT_RATING}/${contentId}`, data);
939
939
  }
940
940
  getFirstChildInHierarchy(content) {
941
941
  if (!(content.children || []).length) {
@@ -966,32 +966,32 @@ class WidgetContentService {
966
966
  return resultContent;
967
967
  }
968
968
  getRegistrationStatus(source) {
969
- return this.http.get(`${API_END_POINTS$6.REGISTRATION_STATUS}/${source}`).toPromise();
969
+ return this.http.get(`${API_END_POINTS$9.REGISTRATION_STATUS}/${source}`).toPromise();
970
970
  }
971
971
  fetchConfig(url) {
972
972
  return this.http.get(url);
973
973
  }
974
974
  addCertTemplate(body) {
975
- return this.http.patch(`${API_END_POINTS$6.CERT_ADD_TEMPLATE}`, body);
975
+ return this.http.patch(`${API_END_POINTS$9.CERT_ADD_TEMPLATE}`, body);
976
976
  }
977
977
  issueCert(body) {
978
- return this.http.post(`${API_END_POINTS$6.CERT_ISSUE}`, body);
978
+ return this.http.post(`${API_END_POINTS$9.CERT_ISSUE}`, body);
979
979
  }
980
980
  downloadCert(certId) {
981
- return this.http.get(`${API_END_POINTS$6.CERT_DOWNLOAD(certId)}`);
981
+ return this.http.get(`${API_END_POINTS$9.CERT_DOWNLOAD(certId)}`);
982
982
  }
983
983
  trendingContentSearch(req) {
984
984
  req.query = req.query || '';
985
- return this.http.post(API_END_POINTS$6.TRENDING_CONTENT_SEARCH, req);
985
+ return this.http.post(API_END_POINTS$9.TRENDING_CONTENT_SEARCH, req);
986
986
  }
987
987
  getKarmaPoitns(limit, offset) {
988
- return this.http.post(API_END_POINTS$6.READ_KARMAPOINTS, { limit, offset }).pipe(catchError(_err => of(true)));
988
+ return this.http.post(API_END_POINTS$9.READ_KARMAPOINTS, { limit, offset }).pipe(catchError(_err => of(true)));
989
989
  }
990
990
  fetchProgramContent(contentId) {
991
991
  let url = '';
992
992
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
993
993
  if (!forPreview) {
994
- return this.http.get(API_END_POINTS$6.CONTENT_READ(contentId));
994
+ return this.http.get(API_END_POINTS$9.CONTENT_READ(contentId));
995
995
  }
996
996
  if (window.location.href.includes('editMode=true')) {
997
997
  url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
@@ -1003,25 +1003,25 @@ class WidgetContentService {
1003
1003
  // return this.http.get<NsContent.IContent[]>(API_END_POINTS.CONTENT_READ(contentId))
1004
1004
  }
1005
1005
  fetchExternalContent(contentId) {
1006
- return this.http.get(API_END_POINTS$6.EXT_CONTENT_READ(contentId));
1006
+ return this.http.get(API_END_POINTS$9.EXT_CONTENT_READ(contentId));
1007
1007
  }
1008
1008
  fetchExternalPublicContent(partenerName, contentId) {
1009
- return this.http.get(API_END_POINTS$6.EXT_PUBLIC_CONTENT(partenerName, contentId));
1009
+ return this.http.get(API_END_POINTS$9.EXT_PUBLIC_CONTENT(partenerName, contentId));
1010
1010
  }
1011
1011
  fetchExtUserContentEnroll(contentId) {
1012
- return this.http.get(API_END_POINTS$6.EXT_USER_COURSE_ENROLL(contentId));
1012
+ return this.http.get(API_END_POINTS$9.EXT_USER_COURSE_ENROLL(contentId));
1013
1013
  }
1014
1014
  extContentEnroll(requestBody) {
1015
- return this.http.post(`${API_END_POINTS$6.EXT_CONTENT_EROLL}`, requestBody);
1015
+ return this.http.post(`${API_END_POINTS$9.EXT_CONTENT_EROLL}`, requestBody);
1016
1016
  }
1017
1017
  getCourseKarmaPoints(request) {
1018
- return this.http.post(API_END_POINTS$6.READ_COURSE_KARMAPOINTS, request);
1018
+ return this.http.post(API_END_POINTS$9.READ_COURSE_KARMAPOINTS, request);
1019
1019
  }
1020
1020
  claimKarmapoints(request) {
1021
- return this.http.post(API_END_POINTS$6.CLAIM_KARMAPOINTS, request);
1021
+ return this.http.post(API_END_POINTS$9.CLAIM_KARMAPOINTS, request);
1022
1022
  }
1023
1023
  userKarmaPoints() {
1024
- return this.http.post(API_END_POINTS$6.USER_KARMA_POINTS, {});
1024
+ return this.http.post(API_END_POINTS$9.USER_KARMA_POINTS, {});
1025
1025
  }
1026
1026
  getEnrolledData(doId) {
1027
1027
  const enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
@@ -1178,7 +1178,7 @@ class WidgetContentService {
1178
1178
  let url = '';
1179
1179
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
1180
1180
  if (!forPreview) {
1181
- return this.http.get(API_END_POINTS$6.CONTENT_READ(contentId));
1181
+ return this.http.get(API_END_POINTS$9.CONTENT_READ(contentId));
1182
1182
  }
1183
1183
  if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
1184
1184
  url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
@@ -1189,7 +1189,7 @@ class WidgetContentService {
1189
1189
  return this.http.get(url);
1190
1190
  }
1191
1191
  getUserEnrollmentData(userId, request) {
1192
- return this.http.post(API_END_POINTS$6.ENROLL_CONTENT_DATA(userId), request).pipe(map((rData) => {
1192
+ return this.http.post(API_END_POINTS$9.ENROLL_CONTENT_DATA(userId), request).pipe(map((rData) => {
1193
1193
  const result = rData?.result ?? null;
1194
1194
  return { data: result, error: null };
1195
1195
  }), catchError((error) => {
@@ -1207,22 +1207,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1207
1207
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2$1.ConfigurationsService }, { type: i1$1.ActivatedRoute }]; } });
1208
1208
 
1209
1209
  // TODO: move this in some common place
1210
- const PROTECTED_SLAG_V8 = '/apis/protected/v8';
1210
+ const PROTECTED_SLAG_V8$1 = '/apis/protected/v8';
1211
1211
  const PROXY_SLAG_V8$1 = '/apis/proxies/v8';
1212
- const API_END_POINTS$5 = {
1212
+ const API_END_POINTS$8 = {
1213
1213
  BATCH_CREATE: `${PROXY_SLAG_V8$1}/learner/course/v1/batch/create`,
1214
- CONTENT_PARENTS: `${PROTECTED_SLAG_V8}/content/parents`,
1215
- CONTENT_NEXT: `${PROTECTED_SLAG_V8}/content/next`,
1214
+ CONTENT_PARENTS: `${PROTECTED_SLAG_V8$1}/content/parents`,
1215
+ CONTENT_NEXT: `${PROTECTED_SLAG_V8$1}/content/next`,
1216
1216
  CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
1217
- CONTENT_PARENT: (contentId) => `${PROTECTED_SLAG_V8}/content/${contentId}/parent`,
1217
+ CONTENT_PARENT: (contentId) => `${PROTECTED_SLAG_V8$1}/content/${contentId}/parent`,
1218
1218
  CONTENT_AUTH_PARENT: (contentId, rootOrg, org) => `/apis/authApi/action/content/parent/hierarchy/${contentId}?rootOrg=${rootOrg}&org=${org}`,
1219
- COHORTS: (cohortType, contentId) => `${PROTECTED_SLAG_V8}/cohorts/${cohortType}/${contentId}`,
1220
- EXTERNAL_CONTENT: (contentId) => `${PROTECTED_SLAG_V8}/content/external-access/${contentId}`,
1221
- COHORTS_GROUP_USER: (groupId) => `${PROTECTED_SLAG_V8}/cohorts/${groupId}`,
1222
- RELATED_RESOURCE: (contentId, contentType) => `${PROTECTED_SLAG_V8}/khub/fetchRelatedResources/${contentId}/${contentType}`,
1223
- POST_ASSESSMENT: (contentId) => `${PROTECTED_SLAG_V8}/user/evaluate/post-assessment/${contentId}`,
1219
+ COHORTS: (cohortType, contentId) => `${PROTECTED_SLAG_V8$1}/cohorts/${cohortType}/${contentId}`,
1220
+ EXTERNAL_CONTENT: (contentId) => `${PROTECTED_SLAG_V8$1}/content/external-access/${contentId}`,
1221
+ COHORTS_GROUP_USER: (groupId) => `${PROTECTED_SLAG_V8$1}/cohorts/${groupId}`,
1222
+ RELATED_RESOURCE: (contentId, contentType) => `${PROTECTED_SLAG_V8$1}/khub/fetchRelatedResources/${contentId}/${contentType}`,
1223
+ POST_ASSESSMENT: (contentId) => `${PROTECTED_SLAG_V8$1}/user/evaluate/post-assessment/${contentId}`,
1224
1224
  GET_CONTENT: (contentId) => `${PROXY_SLAG_V8$1}/action/content/v3/read/${contentId}`,
1225
- CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/download/${certId}`,
1225
+ CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8$1}/cohorts/course/batch/cert/download/${certId}`,
1226
1226
  SERVER_DATE: 'apis/public/v8/systemDate',
1227
1227
  SHARE_CONTENT: '/apis/proxies/v8/user/v1/content/recommend',
1228
1228
  GET_FORM_BYID: (formId) => `apis/proxies/v8/forms/v2/getFormById?formId=${formId}`,
@@ -1659,38 +1659,38 @@ class AppTocService {
1659
1659
  }
1660
1660
  fetchContentWhatsNext(contentId, contentType) {
1661
1661
  if (contentType) {
1662
- return this.http.get(`${API_END_POINTS$5.CONTENT_NEXT}/${contentId}?contentType=${contentType}`);
1662
+ return this.http.get(`${API_END_POINTS$8.CONTENT_NEXT}/${contentId}?contentType=${contentType}`);
1663
1663
  }
1664
- return this.http.get(`${API_END_POINTS$5.CONTENT_NEXT}/${contentId}?ts=${new Date().getTime()}`);
1664
+ return this.http.get(`${API_END_POINTS$8.CONTENT_NEXT}/${contentId}?ts=${new Date().getTime()}`);
1665
1665
  }
1666
1666
  fetchMoreLikeThisPaid(contentId) {
1667
- return this.http.get(`${API_END_POINTS$5.CONTENT_NEXT}/${contentId}?exclusiveContent=true&ts=${new Date().getTime()}`);
1667
+ return this.http.get(`${API_END_POINTS$8.CONTENT_NEXT}/${contentId}?exclusiveContent=true&ts=${new Date().getTime()}`);
1668
1668
  }
1669
1669
  fetchMoreLikeThisFree(contentId) {
1670
- return this.http.get(`${API_END_POINTS$5.CONTENT_NEXT}/${contentId}?exclusiveContent=false&ts=${new Date().getTime()}`);
1670
+ return this.http.get(`${API_END_POINTS$8.CONTENT_NEXT}/${contentId}?exclusiveContent=false&ts=${new Date().getTime()}`);
1671
1671
  }
1672
1672
  fetchContentCohorts(cohortType, contentId) {
1673
- return this.http.get(API_END_POINTS$5.COHORTS(cohortType, contentId), {
1673
+ return this.http.get(API_END_POINTS$8.COHORTS(cohortType, contentId), {
1674
1674
  headers: { rootOrg: this.configSvc.rootOrg || '', org: this.configSvc.org ? this.configSvc.org[0] : '' },
1675
1675
  });
1676
1676
  }
1677
1677
  fetchExternalContentAccess(contentId) {
1678
- return this.http.get(API_END_POINTS$5.EXTERNAL_CONTENT(contentId));
1678
+ return this.http.get(API_END_POINTS$8.EXTERNAL_CONTENT(contentId));
1679
1679
  }
1680
1680
  fetchCohortGroupUsers(groupId) {
1681
- return this.http.get(API_END_POINTS$5.COHORTS_GROUP_USER(groupId));
1681
+ return this.http.get(API_END_POINTS$8.COHORTS_GROUP_USER(groupId));
1682
1682
  }
1683
1683
  fetchMoreLikeThis(contentId, contentType) {
1684
- return this.http.get(API_END_POINTS$5.RELATED_RESOURCE(contentId, contentType));
1684
+ return this.http.get(API_END_POINTS$8.RELATED_RESOURCE(contentId, contentType));
1685
1685
  }
1686
1686
  fetchPostAssessmentStatus(contentId) {
1687
- return this.http.get(API_END_POINTS$5.POST_ASSESSMENT(contentId));
1687
+ return this.http.get(API_END_POINTS$8.POST_ASSESSMENT(contentId));
1688
1688
  }
1689
1689
  fetchGetContentData(contentId) {
1690
1690
  let url = '';
1691
1691
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
1692
1692
  if (!forPreview) {
1693
- return this.http.get(API_END_POINTS$5.GET_CONTENT(contentId));
1693
+ return this.http.get(API_END_POINTS$8.GET_CONTENT(contentId));
1694
1694
  }
1695
1695
  if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
1696
1696
  url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
@@ -1702,11 +1702,11 @@ class AppTocService {
1702
1702
  }
1703
1703
  fetchContentParent(contentId, data, forPreview = false) {
1704
1704
  return this.http.post(forPreview
1705
- ? API_END_POINTS$5.CONTENT_AUTH_PARENT(contentId, this.configSvc.rootOrg || '', this.configSvc.org ? this.configSvc.org[0] : '')
1706
- : API_END_POINTS$5.CONTENT_PARENT(contentId), data);
1705
+ ? API_END_POINTS$8.CONTENT_AUTH_PARENT(contentId, this.configSvc.rootOrg || '', this.configSvc.org ? this.configSvc.org[0] : '')
1706
+ : API_END_POINTS$8.CONTENT_PARENT(contentId), data);
1707
1707
  }
1708
1708
  createBatch(batchData) {
1709
- return this.http.post(API_END_POINTS$5.BATCH_CREATE, { request: batchData });
1709
+ return this.http.post(API_END_POINTS$8.BATCH_CREATE, { request: batchData });
1710
1710
  }
1711
1711
  async mapCompletionPercentageProgram(content, enrolmentList, collectionId) {
1712
1712
  this.contentLoader.next(true);
@@ -2587,7 +2587,7 @@ class AppTocService {
2587
2587
  fetchContentHistoryV2(req) {
2588
2588
  req.request.fields = ['progressdetails'];
2589
2589
  if (req.request.courseId) {
2590
- const reslut = this.http.post(`${API_END_POINTS$5.CONTENT_HISTORYV2}/${req.request.courseId}`, req);
2590
+ const reslut = this.http.post(`${API_END_POINTS$8.CONTENT_HISTORYV2}/${req.request.courseId}`, req);
2591
2591
  // data.subscribe((subscribeData: any) => {
2592
2592
  // this.programChildCourseResumeData.next({ resumeData: subscribeData.result.contentList, courseId: req.request.courseId })
2593
2593
  // })
@@ -2596,28 +2596,28 @@ class AppTocService {
2596
2596
  return of();
2597
2597
  }
2598
2598
  dowonloadCertificate(certId) {
2599
- return this.http.get(API_END_POINTS$5.CERT_DOWNLOAD(certId));
2599
+ return this.http.get(API_END_POINTS$8.CERT_DOWNLOAD(certId));
2600
2600
  }
2601
2601
  getServerDate() {
2602
- return this.http.get(API_END_POINTS$5.SERVER_DATE);
2602
+ return this.http.get(API_END_POINTS$8.SERVER_DATE);
2603
2603
  }
2604
2604
  getFormById(formId) {
2605
- return this.http.get(API_END_POINTS$5.GET_FORM_BYID(formId));
2605
+ return this.http.get(API_END_POINTS$8.GET_FORM_BYID(formId));
2606
2606
  }
2607
2607
  submitForm(formData) {
2608
- return this.http.post(API_END_POINTS$5.SUBMIT_FORM, formData);
2608
+ return this.http.post(API_END_POINTS$8.SUBMIT_FORM, formData);
2609
2609
  }
2610
2610
  getFormByIdPublic(formId) {
2611
- return this.http.get(API_END_POINTS$5.GET_FORM_BYID_PUBLIC(formId));
2611
+ return this.http.get(API_END_POINTS$8.GET_FORM_BYID_PUBLIC(formId));
2612
2612
  }
2613
2613
  submitFormPublic(formData) {
2614
- return this.http.post(API_END_POINTS$5.SUBMIT_FORM_PUBLIC, formData);
2614
+ return this.http.post(API_END_POINTS$8.SUBMIT_FORM_PUBLIC, formData);
2615
2615
  }
2616
2616
  getApllicationsById(formId, contextId) {
2617
- return this.http.get(API_END_POINTS$5.GET_APPLICATIONS_BY_ID(formId, contextId));
2617
+ return this.http.get(API_END_POINTS$8.GET_APPLICATIONS_BY_ID(formId, contextId));
2618
2618
  }
2619
2619
  shareContent(reqBody) {
2620
- return this.http.post(`${API_END_POINTS$5.SHARE_CONTENT}`, reqBody);
2620
+ return this.http.post(`${API_END_POINTS$8.SHARE_CONTENT}`, reqBody);
2621
2621
  }
2622
2622
  checkModuleWiseData(content) {
2623
2623
  if (content && content.children) {
@@ -2665,15 +2665,15 @@ class AppTocService {
2665
2665
  this.transriptionActiveLanguageDataObject.next(activeLang);
2666
2666
  }
2667
2667
  aiGetResourceVttFile(resourceID) {
2668
- return this.http.get(`${API_END_POINTS$5.AI_RESOURCE_VTT_FILE}?resource_id=${resourceID}`);
2668
+ return this.http.get(`${API_END_POINTS$8.AI_RESOURCE_VTT_FILE}?resource_id=${resourceID}`);
2669
2669
  }
2670
2670
  readPreEnrollmentResourcesState(req) {
2671
2671
  return this.http
2672
- .post(`${API_END_POINTS$5.PRE_ENROLLMENT_STATE_READ}`, req);
2672
+ .post(`${API_END_POINTS$8.PRE_ENROLLMENT_STATE_READ}`, req);
2673
2673
  }
2674
2674
  createContentV2(requestBody) {
2675
2675
  return this.http
2676
- .post(`${API_END_POINTS$5.CREATE_RESOURCE}`, requestBody)
2676
+ .post(`${API_END_POINTS$8.CREATE_RESOURCE}`, requestBody)
2677
2677
  .pipe(map((data) => {
2678
2678
  return data.result.identifier;
2679
2679
  }));
@@ -2681,10 +2681,10 @@ class AppTocService {
2681
2681
  uploadAssignmentAnswer(contentId, batchId, assignmentId, file) {
2682
2682
  const formData = new FormData();
2683
2683
  formData.append('file', file, file.name);
2684
- return this.http.post(`${API_END_POINTS$5.UPLOAD_ASSIGNMENT}/${contentId}/${batchId}/${assignmentId}`, formData);
2684
+ return this.http.post(`${API_END_POINTS$8.UPLOAD_ASSIGNMENT}/${contentId}/${batchId}/${assignmentId}`, formData);
2685
2685
  }
2686
2686
  readContentV2(id) {
2687
- return this.http.get(`${API_END_POINTS$5.READ_RESOURCE}read/${id}?mode=edit`).pipe(map((data) => {
2687
+ return this.http.get(`${API_END_POINTS$8.READ_RESOURCE}read/${id}?mode=edit`).pipe(map((data) => {
2688
2688
  return data.result.content;
2689
2689
  }));
2690
2690
  }
@@ -2696,7 +2696,7 @@ class AppTocService {
2696
2696
  }
2697
2697
  const newFormData = new FormData();
2698
2698
  newFormData.append('data', file, fileName);
2699
- return this.http.post(`${API_END_POINTS$5.UPLOAD_FILE}upload/${contentData.contentId}`, newFormData, options);
2699
+ return this.http.post(`${API_END_POINTS$8.UPLOAD_FILE}upload/${contentData.contentId}`, newFormData, options);
2700
2700
  }
2701
2701
  appendToFilename(filename) {
2702
2702
  const timeStamp = new Date().getTime();
@@ -2707,22 +2707,22 @@ class AppTocService {
2707
2707
  return filename.substring(0, dotIndex) + timeStamp + filename.substring(dotIndex);
2708
2708
  }
2709
2709
  updateContentWithFewFields(requestBody, identifier) {
2710
- return this.http.patch(`${API_END_POINTS$5.UPDATE_RESOURCE}/${identifier}`, requestBody);
2710
+ return this.http.patch(`${API_END_POINTS$8.UPDATE_RESOURCE}/${identifier}`, requestBody);
2711
2711
  }
2712
2712
  searchAssignments(request) {
2713
- return this.http.post(API_END_POINTS$5.SEARCH, request);
2713
+ return this.http.post(API_END_POINTS$8.SEARCH, request);
2714
2714
  }
2715
2715
  submitDraftAssignment(request) {
2716
- return this.http.put(API_END_POINTS$5.SUBMIT_DRAFT_ASSIGNMENT, request);
2716
+ return this.http.put(API_END_POINTS$8.SUBMIT_DRAFT_ASSIGNMENT, request);
2717
2717
  }
2718
2718
  submitAssignment(request) {
2719
- return this.http.post(API_END_POINTS$5.SUBMIT_ASSIGNMENT, request);
2719
+ return this.http.post(API_END_POINTS$8.SUBMIT_ASSIGNMENT, request);
2720
2720
  }
2721
2721
  notifyAssignmentSubmission(payload) {
2722
- return this.http.post(API_END_POINTS$5.NOTIFY_ASSIGNMENT_SUBMISSION, payload);
2722
+ return this.http.post(API_END_POINTS$8.NOTIFY_ASSIGNMENT_SUBMISSION, payload);
2723
2723
  }
2724
2724
  getAssignmentStatus(request) {
2725
- return this.http.post(`${API_END_POINTS$5.ASSIGNMENT_STATUS}`, request);
2725
+ return this.http.post(`${API_END_POINTS$8.ASSIGNMENT_STATUS}`, request);
2726
2726
  }
2727
2727
  readAssignmentFile(contentId, batchId, assignmentId, fileName) {
2728
2728
  // Properly encode the parameters to avoid malformed request errors
@@ -2732,7 +2732,7 @@ class AppTocService {
2732
2732
  formId: assignmentId || '',
2733
2733
  fileName: fileName || ''
2734
2734
  });
2735
- return this.http.get(`${API_END_POINTS$5.READ_ASSIGNMENT}?${encodedParams.toString()}`, {
2735
+ return this.http.get(`${API_END_POINTS$8.READ_ASSIGNMENT}?${encodedParams.toString()}`, {
2736
2736
  responseType: 'blob',
2737
2737
  headers: {
2738
2738
  'Accept': 'application/octet-stream, application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document'
@@ -4508,7 +4508,7 @@ function HttpLoaderFactory(http) {
4508
4508
  }
4509
4509
 
4510
4510
  const PROXY_SLAG_V8 = '/apis/proxies/v8';
4511
- const API_END_POINTS$4 = {
4511
+ const API_END_POINTS$7 = {
4512
4512
  GET_RATING: (contentId, contentType, userId) => `${PROXY_SLAG_V8}/ratings/v1/read/${contentId}/${contentType}/${userId}`,
4513
4513
  ADD_OR_UPDATE: `${PROXY_SLAG_V8}/ratings/v1/upsert`,
4514
4514
  GET_RATING_SUMMARY: (contentId, contentType) => `${PROXY_SLAG_V8}/ratings/v1/summary/${contentId}/${contentType}`,
@@ -4523,27 +4523,27 @@ class RatingService {
4523
4523
  getRating(contentId, contentType, userId) {
4524
4524
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
4525
4525
  if (!forPreview) {
4526
- return this.http.get(API_END_POINTS$4.GET_RATING(contentId, contentType, userId));
4526
+ return this.http.get(API_END_POINTS$7.GET_RATING(contentId, contentType, userId));
4527
4527
  }
4528
4528
  return of({});
4529
4529
  }
4530
4530
  addOrUpdateRating(req) {
4531
- return this.http.post(API_END_POINTS$4.ADD_OR_UPDATE, req);
4531
+ return this.http.post(API_END_POINTS$7.ADD_OR_UPDATE, req);
4532
4532
  }
4533
4533
  getRatingSummary(contentId, contentType) {
4534
4534
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
4535
4535
  if (!forPreview) {
4536
- return this.http.get(API_END_POINTS$4.GET_RATING_SUMMARY(contentId, contentType));
4536
+ return this.http.get(API_END_POINTS$7.GET_RATING_SUMMARY(contentId, contentType));
4537
4537
  }
4538
4538
  return of({});
4539
4539
  }
4540
4540
  getRatingLookup(req) {
4541
- return this.http.post(API_END_POINTS$4.GET_RATING_LOOKUP, req);
4541
+ return this.http.post(API_END_POINTS$7.GET_RATING_LOOKUP, req);
4542
4542
  }
4543
4543
  getRatingReply(req) {
4544
4544
  const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
4545
4545
  if (!forPreview) {
4546
- return this.http.post(API_END_POINTS$4.POST_AUTHOR_REPLY, req);
4546
+ return this.http.post(API_END_POINTS$7.POST_AUTHOR_REPLY, req);
4547
4547
  }
4548
4548
  return of({});
4549
4549
  }
@@ -4580,7 +4580,7 @@ class RatingService {
4580
4580
  return false;
4581
4581
  }
4582
4582
  getAuthorReply(contentId, userID) {
4583
- return this.http.get(API_END_POINTS$4.GET_AUTHOR_REPLY(contentId, userID));
4583
+ return this.http.get(API_END_POINTS$7.GET_AUTHOR_REPLY(contentId, userID));
4584
4584
  }
4585
4585
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RatingService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
4586
4586
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RatingService, providedIn: 'root' }); }
@@ -6227,7 +6227,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6227
6227
 
6228
6228
  // tslint:enable
6229
6229
  // const PROTECTED_SLAG_V8 = '/apis/protected/v8'
6230
- const API_END_POINTS$3 = {
6230
+ const API_END_POINTS$6 = {
6231
6231
  // getUserdetailsV2FromRegistry: '/apis/protected/v8/user/profileRegistry/getUserRegistryByUser',
6232
6232
  getUserdetailsV2FromRegistry: '/apis/proxies/v8/api/user/v2/read',
6233
6233
  };
@@ -6236,7 +6236,7 @@ class ConnectionHoverService {
6236
6236
  this.http = http;
6237
6237
  }
6238
6238
  fetchProfile(userId) {
6239
- return this.http.get(`${API_END_POINTS$3.getUserdetailsV2FromRegistry}/${userId}`)
6239
+ return this.http.get(`${API_END_POINTS$6.getUserdetailsV2FromRegistry}/${userId}`)
6240
6240
  .pipe(map((data) => {
6241
6241
  // tslint:disable-next-line: prefer-const
6242
6242
  let profile;
@@ -6374,51 +6374,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6374
6374
  }]
6375
6375
  }], ctorParameters: function () { return [{ type: i1$1.Router }]; } });
6376
6376
 
6377
- /**
6378
- * Discuss Utils Service
6379
- * Handles discussion forum related utilities
6380
- */
6381
6377
  class DiscussUtilsService {
6382
- constructor(http) {
6383
- this.http = http;
6378
+ constructor() { }
6379
+ /*Get color Hex code by passing a string*/
6380
+ stringToColor(str) {
6381
+ let hash = 0;
6382
+ // tslint:disable-next-line: no-increment-decrement
6383
+ for (let i = 0; i < str.length; i++) {
6384
+ // tslint:disable-next-line: no-bitwise
6385
+ hash = str.charCodeAt(i) + ((hash << 5) - hash);
6386
+ }
6387
+ const hue = Math.abs(hash % 360);
6388
+ // tslint:disable-next-line: prefer-template
6389
+ const colour = 'hsl(' + hue + ',100%,30%)';
6390
+ // tslint:disable-next-line: prefer-template
6391
+ // const colour = 'hsl(' + hue + ',100%,80%)'
6392
+ return colour;
6384
6393
  }
6385
- /**
6386
- * Get discussion forum configuration
6387
- */
6388
- getDiscussionConfig() {
6389
- return {
6390
- enabled: true,
6391
- menuOptions: []
6392
- };
6394
+ /*Get text contrast by passing background hex color*/
6395
+ getContrast(_hexcolor) {
6396
+ // right now going with harcoded approach
6397
+ // const r = parseInt(hexcolor.substr(1, 2), 16)
6398
+ // const g = parseInt(hexcolor.substr(3, 2), 16)
6399
+ // const b = parseInt(hexcolor.substr(5, 2), 16)
6400
+ // const color = ((r * 299) + (g * 587) + (b * 114)) / 1000
6401
+ // return (color >= 160) ? '#000000' : '#ffffff'
6402
+ return 'rgba(255, 255, 255, 80%)';
6393
6403
  }
6394
- /**
6395
- * Set discussion forum configuration
6396
- */
6397
6404
  setDiscussionConfig(config) {
6398
- // Stub implementation
6399
- console.log('DiscussUtilsService.setDiscussionConfig:', config);
6400
- }
6401
- /**
6402
- * Navigate to discussion forum
6403
- */
6404
- navigateToDiscussion(contentId) {
6405
- // Stub implementation
6406
- console.log('DiscussUtilsService.navigateToDiscussion:', contentId);
6407
- }
6408
- /**
6409
- * Get discussion count for content
6410
- */
6411
- getDiscussionCount(contentId) {
6412
- return of(0);
6405
+ this.discussionCnfig = config;
6413
6406
  }
6414
- /**
6415
- * Set discussion configuration (alias)
6416
- */
6417
- setDiscussConfig(config) {
6418
- // Stub implementation
6419
- console.log('DiscussUtilsService.setDiscussConfig:', config);
6407
+ getDiscussionConfig() {
6408
+ return this.discussionCnfig;
6420
6409
  }
6421
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiscussUtilsService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
6410
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiscussUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
6422
6411
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiscussUtilsService, providedIn: 'root' }); }
6423
6412
  }
6424
6413
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiscussUtilsService, decorators: [{
@@ -6426,7 +6415,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6426
6415
  args: [{
6427
6416
  providedIn: 'root',
6428
6417
  }]
6429
- }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
6418
+ }], ctorParameters: function () { return []; } });
6430
6419
 
6431
6420
  class BtnPageBackComponent extends WidgetBaseComponent {
6432
6421
  constructor(btnBackSvc, router, configSvc, discussUtilitySvc, translate, langtranslations, environment) {
@@ -6849,7 +6838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
6849
6838
  }]
6850
6839
  }], ctorParameters: function () { return []; } });
6851
6840
 
6852
- const API_END_POINTS$2 = {
6841
+ const API_END_POINTS$5 = {
6853
6842
  SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
6854
6843
  };
6855
6844
  class SamuhikCharchaService {
@@ -6861,7 +6850,7 @@ class SamuhikCharchaService {
6861
6850
  return this.http.get(`${this.configSvc.sitePath}/feature/samuhik-charcha.json`).pipe();
6862
6851
  }
6863
6852
  getSearchV6Results(body) {
6864
- return this.http.post(API_END_POINTS$2.SEARCH_V6, body)
6853
+ return this.http.post(API_END_POINTS$5.SEARCH_V6, body)
6865
6854
  .pipe();
6866
6855
  }
6867
6856
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SamuhikCharchaService, deps: [{ token: i1.HttpClient }, { token: i2$1.ConfigurationsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -7780,7 +7769,7 @@ class AppTocAboutComponent {
7780
7769
  // );
7781
7770
  // }
7782
7771
  // );
7783
- // } else {debugger
7772
+ // } else {
7784
7773
  // this.contentSvc.downloadCert(certId).subscribe(
7785
7774
  // (response) => {
7786
7775
  // if (this.content) {
@@ -8939,7 +8928,6 @@ class AppTocContentCardV2Component {
8939
8928
  }
8940
8929
  }
8941
8930
  downloadCertificate(certificateData) {
8942
- debugger;
8943
8931
  this.events.raiseInteractTelemetry({
8944
8932
  type: WsEvents.EnumInteractTypes.CLICK,
8945
8933
  id: 'view-certificate',
@@ -9231,7 +9219,6 @@ class AppTocContentCardV2Component {
9231
9219
  * View milestone achievement - calls the achievement API and shows the result
9232
9220
  */
9233
9221
  viewMilestoneAchievement(event, mileStoneData) {
9234
- debugger;
9235
9222
  if (event) {
9236
9223
  event.preventDefault();
9237
9224
  event.stopPropagation();
@@ -10840,7 +10827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10840
10827
  }], ctorParameters: function () { return [{ type: i1$3.MatLegacyDialogRef }]; } });
10841
10828
 
10842
10829
  const PROXY_CREATE_V8$1 = '/apis/proxies/v8';
10843
- const API_END_POINTS$1 = {
10830
+ const API_END_POINTS$4 = {
10844
10831
  CREATE_USER_API: `${PROXY_CREATE_V8$1}/discussion/user/v1/create`,
10845
10832
  LANGUAGES: '/api/faq/v1/assistant/available/language',
10846
10833
  CONFIG: '/api/faq/v1/assistant/configs/language',
@@ -10857,7 +10844,7 @@ class RootService {
10857
10844
  this.showNavbarDisplay$ = new BehaviorSubject(true);
10858
10845
  }
10859
10846
  createUser(request) {
10860
- return this.http.post(API_END_POINTS$1.CREATE_USER_API, request);
10847
+ return this.http.post(API_END_POINTS$4.CREATE_USER_API, request);
10861
10848
  }
10862
10849
  setDiscussionConfig(config) {
10863
10850
  this.discussionCnfig = config;
@@ -10886,13 +10873,13 @@ class RootService {
10886
10873
  document.cookie = `${name}=${value}; ${expires}${cpath}`;
10887
10874
  }
10888
10875
  getChatData(tabType) {
10889
- return this.http.post(`${API_END_POINTS$1.CONFIG}`, tabType);
10876
+ return this.http.post(`${API_END_POINTS$4.CONFIG}`, tabType);
10890
10877
  }
10891
10878
  getLangugages() {
10892
- return this.http.get(`${API_END_POINTS$1.LANGUAGES}`);
10879
+ return this.http.get(`${API_END_POINTS$4.LANGUAGES}`);
10893
10880
  }
10894
10881
  aiGlobalSearch(requestBody, chatId, userID) {
10895
- return this.http.post(`${API_END_POINTS$1.AI_GLOBAL_SEARCH}?chatID=${chatId}&userID=${userID}`, requestBody).pipe(catchError(error => {
10882
+ return this.http.post(`${API_END_POINTS$4.AI_GLOBAL_SEARCH}?chatID=${chatId}&userID=${userID}`, requestBody).pipe(catchError(error => {
10896
10883
  if (error.status === 502) {
10897
10884
  console.error('502 Bad Gateway from aiGlobalSearch');
10898
10885
  }
@@ -10907,25 +10894,25 @@ class RootService {
10907
10894
  }
10908
10895
  saveAIChatPositiveContentRating(requestBody, chatId, userID) {
10909
10896
  console.log('chatId=', chatId, 'userID=', userID);
10910
- return this.http.post(`${API_END_POINTS$1.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
10897
+ return this.http.post(`${API_END_POINTS$4.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
10911
10898
  }
10912
10899
  shareAIFeedback(requestBody, chatId, userID) {
10913
- return this.http.post(`${API_END_POINTS$1.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
10900
+ return this.http.post(`${API_END_POINTS$4.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
10914
10901
  }
10915
10902
  aiGlobalSearchFromInternet(requestBody, chatId, userID) {
10916
- return this.http.post(`${API_END_POINTS$1.AI_GLOBAL_INTERNET_SEARCH}?chatID=${chatId}&user_id=${userID}`, requestBody);
10903
+ return this.http.post(`${API_END_POINTS$4.AI_GLOBAL_INTERNET_SEARCH}?chatID=${chatId}&user_id=${userID}`, requestBody);
10917
10904
  }
10918
10905
  aiStartChathForSupport(requestBody, userID) {
10919
10906
  const headers = new HttpHeaders()
10920
10907
  .set('user-id', userID);
10921
- return this.http.post(`${API_END_POINTS$1.SUPPORT_AI_START_CHAT}`, requestBody, {
10908
+ return this.http.post(`${API_END_POINTS$4.SUPPORT_AI_START_CHAT}`, requestBody, {
10922
10909
  headers
10923
10910
  });
10924
10911
  }
10925
10912
  aiSendChathForSupport(requestBody, userID) {
10926
10913
  const headers = new HttpHeaders()
10927
10914
  .set('user-id', userID);
10928
- return this.http.post(`${API_END_POINTS$1.SUPPORT_AI_SEND_CHAT}`, requestBody, {
10915
+ return this.http.post(`${API_END_POINTS$4.SUPPORT_AI_SEND_CHAT}`, requestBody, {
10929
10916
  headers
10930
10917
  });
10931
10918
  }
@@ -10940,7 +10927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10940
10927
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
10941
10928
 
10942
10929
  const PROXY_CREATE_V8 = '/apis/proxies/v8';
10943
- const API_END_POINTS = {
10930
+ const API_END_POINTS$3 = {
10944
10931
  GET_JWT_TOCKEN: `${PROXY_CREATE_V8}/fetchUserToken`
10945
10932
  };
10946
10933
  class WebSocketService {
@@ -11043,7 +11030,7 @@ class WebSocketService {
11043
11030
  }
11044
11031
  getJWTToken() {
11045
11032
  // console.log('get token')
11046
- return this.http.get(`${API_END_POINTS.GET_JWT_TOCKEN}`);
11033
+ return this.http.get(`${API_END_POINTS$3.GET_JWT_TOCKEN}`);
11047
11034
  }
11048
11035
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebSocketService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
11049
11036
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WebSocketService, providedIn: 'root' }); }
@@ -12573,7 +12560,6 @@ class ContentTocComponent {
12573
12560
  }
12574
12561
  }
12575
12562
  showAiTutorConfirmPopup() {
12576
- debugger;
12577
12563
  this.raiseAIPopupStartTelemetry();
12578
12564
  if (this.isEnrolled) {
12579
12565
  this.fromAITutor = true;
@@ -14197,51 +14183,115 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14197
14183
  args: ['environment']
14198
14184
  }] }]; } });
14199
14185
 
14200
- /**
14201
- * NetCore Service stub
14202
- * Handles NetCore integration for analytics
14203
- *
14204
- * Note: This is a minimal stub. The consuming application should provide
14205
- * a proper implementation if full functionality is needed.
14206
- */
14186
+ const API_END_POINTS$2 = {
14187
+ FORM_READ: `/apis/v1/form/read`,
14188
+ ORG_READ: '/api/org/v1/read',
14189
+ };
14207
14190
  class NetCoreService {
14208
- constructor() { }
14209
- /**
14210
- * Track event
14211
- */
14212
- trackEvent(eventName, eventData) {
14213
- // Stub implementation
14214
- console.log('NetCoreService.trackEvent:', eventName, eventData);
14191
+ constructor(http, configSvc) {
14192
+ this.http = http;
14193
+ this.configSvc = configSvc;
14215
14194
  }
14216
- /**
14217
- * Track page view
14218
- */
14219
- trackPageView(pageName, pageData) {
14220
- // Stub implementation
14221
- console.log('NetCoreService.trackPageView:', pageName, pageData);
14195
+ getOrgReadData(organisationId) {
14196
+ const request = {
14197
+ request: {
14198
+ organisationId,
14199
+ },
14200
+ };
14201
+ return this.http.post(API_END_POINTS$2.ORG_READ, request).pipe(map((res) => {
14202
+ return _.get(res, 'result.response');
14203
+ }));
14222
14204
  }
14223
- /**
14224
- * Set user properties
14225
- */
14226
- setUserProperties(properties) {
14227
- // Stub implementation
14228
- console.log('NetCoreService.setUserProperties:', properties);
14205
+ netCoreConfigReadData(payload) {
14206
+ return this.formReadData(payload).pipe(map((rData) => {
14207
+ const finalData = rData && rData.result.form.data;
14208
+ return (finalData);
14209
+ }), catchError((_error) => {
14210
+ const baseUrl = this.configSvc.sitePath;
14211
+ return this.http.get(`${baseUrl}/netcore.json`).pipe(map(data => (data)), catchError(err => of({ data: null, error: err })));
14212
+ }));
14229
14213
  }
14230
- /**
14231
- * Log out user
14232
- */
14233
- logout() {
14234
- // Stub implementation
14235
- console.log('NetCoreService.logout');
14214
+ formReadData(request) {
14215
+ return this.http.post(API_END_POINTS$2.FORM_READ, request);
14236
14216
  }
14237
- /**
14238
- * Track event for content and event
14239
- */
14240
- trackEventForContentAndEvent(eventType, userId, payload) {
14241
- // Stub implementation
14242
- console.log('NetCoreService.trackEventForContentAndEvent:', eventType, userId, payload);
14217
+ netCoreUserLoginSetup(payload) {
14218
+ /* tslint:disable */
14219
+ // console.log('this.configSvc.unMappedUser', payload)
14220
+ /* tslint:enable */
14221
+ smartech('contact', '', payload);
14222
+ }
14223
+ netCoreUserNameUpdate(payload) {
14224
+ /* tslint:disable */
14225
+ // console.log('this.configSvc.unMappedUser', payload)
14226
+ /* tslint:enable */
14227
+ smartech('contact', '', payload);
14243
14228
  }
14244
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetCoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
14229
+ netCoreUserProfilePhotoUpdate(payload) {
14230
+ /* tslint:disable */
14231
+ // console.log('this.configSvc.unMappedUser', payload)
14232
+ /* tslint:enable */
14233
+ smartech('contact', '', payload);
14234
+ }
14235
+ netCoreUserProfilepdate(payload) {
14236
+ /* tslint:disable */
14237
+ // console.log('this.configSvc.unMappedUser', payload)
14238
+ /* tslint:enable */
14239
+ smartech('contact', '', payload);
14240
+ }
14241
+ netCoreUserProfileUpdateEvent(payload, eventName, userIdentifier) {
14242
+ /* tslint:disable */
14243
+ // console.log('this.configSvc.unMappedUser', payload)
14244
+ // console.log('eventName', eventName)
14245
+ // console.log('userIdentifier', userIdentifier)
14246
+ /* tslint:enable */
14247
+ smartech('identify', userIdentifier);
14248
+ smartech('dispatch', eventName, payload);
14249
+ }
14250
+ trackEvent(eventName, userIdentifier, userpayload) {
14251
+ // Get the current time (server time)
14252
+ let serverTime = moment();
14253
+ serverTime = serverTime.add(5, 'hours').add(30, 'minutes');
14254
+ // Display the server time
14255
+ /* tslint:disable */
14256
+ // console.log("Server Time: ", serverTime.format('YYYY-MM-DD HH:mm:ss'));
14257
+ // console.log('eventName', eventName)
14258
+ // console.log('userIdentifier', userIdentifier)
14259
+ let payload = {
14260
+ 'action_time': serverTime.format('YYYY-MM-DD HH:mm:ss'),
14261
+ 'action_device': 'Desktop'
14262
+ };
14263
+ // console.log('payload', payload)
14264
+ console.log('userpayload', userpayload);
14265
+ if (userpayload && (typeof userpayload === 'object' || userpayload.length)) {
14266
+ payload['profile_attribute_updated'] = userpayload.toString();
14267
+ }
14268
+ // console.log('payload', payload)
14269
+ smartech('identify', userIdentifier);
14270
+ smartech('dispatch', eventName, payload);
14271
+ }
14272
+ trackEventForContentAndEvent(eventName, userIdentifier, contentpayload) {
14273
+ // Get the current time (server time)
14274
+ let serverTime = moment();
14275
+ serverTime = serverTime.add(5, 'hours').add(30, 'minutes');
14276
+ // Display the server time
14277
+ /* tslint:disable */
14278
+ // console.log("Server Time: ", serverTime.format('YYYY-MM-DD HH:mm:ss'));
14279
+ // console.log('eventName', eventName)
14280
+ // console.log('userIdentifier', userIdentifier)
14281
+ let payload = {
14282
+ 'action_time': serverTime.format('YYYY-MM-DD HH:mm:ss'),
14283
+ 'action_device': 'Desktop'
14284
+ };
14285
+ // console.log('payload', payload)
14286
+ if (!Object.keys(contentpayload).length) {
14287
+ contentpayload = {};
14288
+ }
14289
+ let mergedPayload = { ...payload, ...contentpayload };
14290
+ // console.log('mergedPayload--', mergedPayload)
14291
+ smartech('identify', userIdentifier);
14292
+ smartech('dispatch', eventName, mergedPayload);
14293
+ }
14294
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetCoreService, deps: [{ token: i1.HttpClient }, { token: i2$1.ConfigurationsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
14245
14295
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetCoreService, providedIn: 'root' }); }
14246
14296
  }
14247
14297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetCoreService, decorators: [{
@@ -14249,7 +14299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14249
14299
  args: [{
14250
14300
  providedIn: 'root',
14251
14301
  }]
14252
- }], ctorParameters: function () { return []; } });
14302
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2$1.ConfigurationsService }]; } });
14253
14303
 
14254
14304
  dayjs.extend(isSameOrBefore);
14255
14305
  var ErrorType$1;
@@ -17705,93 +17755,236 @@ var NsUserProfileDetails;
17705
17755
  })(ECategory = NsUserProfileDetails.ECategory || (NsUserProfileDetails.ECategory = {}));
17706
17756
  })(NsUserProfileDetails || (NsUserProfileDetails = {}));
17707
17757
 
17708
- /**
17709
- * User Profile Service stub
17710
- * Handles user profile related operations
17711
- */
17712
- const ENDPOINT = {
17713
- UPDATE_PROFILE: '/apis/proxies/v8/user/profileDetails',
17714
- SEARCH_PROFILE: '/apis/proxies/v8/user/v1/search',
17715
- GET_GROUPS: '/api/user/v1/groups'
17758
+ // tslint:enable
17759
+ const API_ENDPOINTS$1 = {
17760
+ updateProfileDetails: '/apis/protected/v8/user/profileDetails/updateUser',
17761
+ getUserdetailsFromRegistry: '/apis/proxies/v8/api/user/v2/read',
17762
+ getUserdetails: '/apis/protected/v8/user/details/detailV1',
17763
+ getMasterNationality: '/apis/protected/v8/user/profileRegistry/getMasterNationalities',
17764
+ getMasterCountries: '/apis/protected/v8/user/profileRegistry/getMasterCountries',
17765
+ getMasterLanguages: '/apis/protected/v8/user/profileRegistry/getMasterLanguages',
17766
+ getProfilePageMeta: '/apis/protected/v8/user/profileRegistry/getProfilePageMeta',
17767
+ getAllDepartments: '/apis/protected/v8/portal/listDeptNames',
17768
+ approveRequest: '/apis/protected/v8/workflowhandler/transition',
17769
+ getPendingFields: '/apis/proxies/v8/workflow/v2/userWFApplicationFieldsSearch',
17770
+ getApprovalPendingFields: '/apis/proxies/v8/workflow/v2/userWFApplicationFieldsSearch',
17771
+ getDesignation: '/apis/proxies/v8/user/v1/positions',
17772
+ GET_SEARCH_DESIGNATIONS: '/apis/proxies/v8/designation/search',
17773
+ GET_SEARCH_PUBLIC_DESIGNATIONS: '/apis/public/v8/designation/search',
17774
+ GET_SUNBIRD_IGOT_SEARCH: '/apis/proxies/v8/sunbirdigot/v4/search',
17775
+ editProfileDetails: '/apis/proxies/v8/user/v1/extPatch',
17776
+ updatePrimaryEmail: '/apis/proxies/v8/user/otp/v2/extPatch',
17777
+ updateProfilePic: '/apis/proxies/v8/storage/profilePhotoUpload/profileImage',
17778
+ GET_GROUPS: '/api/user/v1/groups',
17779
+ getApprovalReqs: '/apis/protected/v8/workflowhandler/applicationsSearch',
17780
+ ehrmsDataRequest: '/apis/proxies/v8/ehrms/details',
17781
+ withDrawRequest: '/apis/protected/v8/workflowhandler/transition',
17782
+ approvedDomains: 'apis/proxies/v8/user/v1/email/approvedDomains',
17783
+ GET_DESIGNATION_V2: '/apis/proxies/v8/designation/search',
17784
+ GET_ORGANIZATION_V1: '/apis/proxies/v8/org/v1/search',
17785
+ ORG_CUSTOM_FIELDS: `apis/proxies/v8/customFields/v1/search`,
17786
+ UPDATE_CUSTOM_FIELDS: `apis/proxies/v8/user/profile/v1/update/additionalFields`,
17787
+ READ_CUSTOM_FIELDS_VALUES: `apis/proxies/v8/user/profile/v1/getAdditionalFields`,
17788
+ READ_ORG_DETAILS: 'api/org/v1/read',
17716
17789
  };
17717
17790
  class UserProfileService {
17718
- constructor(http) {
17791
+ constructor(http, translateService) {
17719
17792
  this.http = http;
17793
+ this.translateService = translateService;
17794
+ if (localStorage.getItem('websiteLanguage')) {
17795
+ this.translateService.setDefaultLang('en');
17796
+ const lang = localStorage.getItem('websiteLanguage');
17797
+ this.translateService.use(lang);
17798
+ }
17720
17799
  }
17721
- getUserProfile() {
17722
- return of({});
17800
+ handleTranslateTo(menuName) {
17801
+ // tslint:disable-next-line: prefer-template
17802
+ const translationKey = 'profileInfo.' + menuName.replace(/\s/g, '');
17803
+ return this.translateService.instant(translationKey);
17804
+ }
17805
+ editProfileDetails(data) {
17806
+ return this.http.post(API_ENDPOINTS$1.editProfileDetails, data);
17723
17807
  }
17724
- updateUserProfile(data) {
17725
- return this.http.patch(ENDPOINT.UPDATE_PROFILE, data);
17808
+ updatePrimaryEmailDetails(data) {
17809
+ return this.http.post(API_ENDPOINTS$1.updatePrimaryEmail, data);
17726
17810
  }
17727
- searchProfile(data) {
17728
- return this.http.post(ENDPOINT.SEARCH_PROFILE, data);
17811
+ updateProfileDetails(data) {
17812
+ return this.http.patch(API_ENDPOINTS$1.updateProfileDetails, data);
17729
17813
  }
17730
- getWhiteListDomain() {
17731
- return of({ domains: [] });
17814
+ getUserdetails(email) {
17815
+ return this.http.post(API_ENDPOINTS$1.getUserdetails, { email });
17816
+ }
17817
+ getMasterLanguages() {
17818
+ return this.http.get(API_ENDPOINTS$1.getMasterLanguages);
17819
+ }
17820
+ getMasterNationality() {
17821
+ return this.http.get(API_ENDPOINTS$1.getMasterNationality);
17822
+ }
17823
+ getMasterCountries() {
17824
+ return this.http.get(API_ENDPOINTS$1.getMasterCountries);
17825
+ }
17826
+ getProfilePageMeta() {
17827
+ return this.http.get(API_ENDPOINTS$1.getProfilePageMeta);
17828
+ }
17829
+ getUserdetailsFromRegistry(wid) {
17830
+ return this.http.get(`${API_ENDPOINTS$1.getUserdetailsFromRegistry}/${wid}`)
17831
+ .pipe(map((res) => {
17832
+ return res.result.response;
17833
+ }));
17834
+ }
17835
+ getOrganizationData(request) {
17836
+ return this.http.post(API_ENDPOINTS$1.GET_ORGANIZATION_V1, request);
17837
+ }
17838
+ readOrgData(request) {
17839
+ return this.http.post(API_ENDPOINTS$1.READ_ORG_DETAILS, request);
17840
+ }
17841
+ getAllDepartments() {
17842
+ return this.http.get(API_ENDPOINTS$1.getAllDepartments);
17843
+ }
17844
+ approveRequest(data) {
17845
+ return this.http.post(API_ENDPOINTS$1.approveRequest, data);
17846
+ }
17847
+ listApprovalPendingFields() {
17848
+ return this.http.post(API_ENDPOINTS$1.getPendingFields, {
17849
+ serviceName: 'profile',
17850
+ applicationStatus: 'SEND_FOR_APPROVAL',
17851
+ });
17852
+ }
17853
+ fetchApprovalPendingFields() {
17854
+ return this.http.post(API_ENDPOINTS$1.getApprovalPendingFields, {
17855
+ serviceName: 'profile',
17856
+ applicationStatus: 'SEND_FOR_APPROVAL',
17857
+ });
17858
+ }
17859
+ fetchApprovedFields() {
17860
+ return this.http.post(API_ENDPOINTS$1.getApprovalPendingFields, {
17861
+ serviceName: 'profile',
17862
+ applicationStatus: 'APPROVED',
17863
+ });
17864
+ }
17865
+ listRejectedFields() {
17866
+ return this.http.post(API_ENDPOINTS$1.getPendingFields, {
17867
+ serviceName: 'profile',
17868
+ applicationStatus: 'REJECTED',
17869
+ });
17870
+ }
17871
+ getDesignations(_req) {
17872
+ return this.http.get(API_ENDPOINTS$1.getDesignation);
17873
+ }
17874
+ searchDesignation(_req) {
17875
+ return this.http.post(API_ENDPOINTS$1.GET_SEARCH_DESIGNATIONS, _req);
17876
+ }
17877
+ searchPublicDesignation(_req) {
17878
+ return this.http.post(API_ENDPOINTS$1.GET_SEARCH_PUBLIC_DESIGNATIONS, _req);
17879
+ }
17880
+ searchIgotDesignation(_req) {
17881
+ return this.http.post(API_ENDPOINTS$1.GET_SUNBIRD_IGOT_SEARCH, _req);
17882
+ }
17883
+ getDesignationV2(_req) {
17884
+ return this.http.post(API_ENDPOINTS$1.GET_DESIGNATION_V2, _req);
17885
+ }
17886
+ uploadProfilePhoto(req) {
17887
+ return this.http.post(`${API_ENDPOINTS$1.updateProfilePic}`, req);
17732
17888
  }
17733
17889
  getGroups() {
17734
- return this.http.get(ENDPOINT.GET_GROUPS);
17890
+ return this.http.get(API_ENDPOINTS$1.GET_GROUPS);
17735
17891
  }
17736
- handleTranslateTo(key) {
17737
- return key;
17892
+ getApprovalReqs(data) {
17893
+ return this.http.post(API_ENDPOINTS$1.getApprovalReqs, data);
17738
17894
  }
17739
- searchIgotDesignation(query) {
17740
- return of({ designations: [] });
17895
+ withDrawRequest(userId, wfId) {
17896
+ const payload = {
17897
+ 'action': 'WITHDRAW',
17898
+ 'state': 'SEND_FOR_APPROVAL',
17899
+ 'userId': userId,
17900
+ 'applicationId': userId,
17901
+ 'actorUserId': userId,
17902
+ 'wfId': wfId,
17903
+ 'serviceName': 'profile',
17904
+ 'updateFieldValues': [],
17905
+ 'comment': '',
17906
+ };
17907
+ return this.http.post(API_ENDPOINTS$1.withDrawRequest, payload);
17741
17908
  }
17742
- searchDesignation(query) {
17743
- return of({ designations: [] });
17909
+ fetchEhrmsDetails() {
17910
+ return this.http
17911
+ .get(API_ENDPOINTS$1.ehrmsDataRequest)
17912
+ .pipe(map((result) => result));
17744
17913
  }
17745
- getMasterLanguages() {
17746
- return of({ languages: [] });
17914
+ getWhiteListDomain() {
17915
+ return this.http.get(API_ENDPOINTS$1.approvedDomains);
17747
17916
  }
17748
- editProfileDetails(data) {
17749
- return of({ success: true });
17917
+ fetchCustomFields(requestBody) {
17918
+ return this.http.post(API_ENDPOINTS$1.ORG_CUSTOM_FIELDS, requestBody);
17750
17919
  }
17751
- updatePrimaryEmailDetails(data) {
17752
- return of({ success: true });
17920
+ updateCustomFields(requestBody) {
17921
+ return this.http.post(API_ENDPOINTS$1.UPDATE_CUSTOM_FIELDS, requestBody);
17922
+ }
17923
+ readCustomattributeDetails(userId, orgId) {
17924
+ return this.http.get(`${API_ENDPOINTS$1.READ_CUSTOM_FIELDS_VALUES}/${userId}/${orgId}`);
17753
17925
  }
17754
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserProfileService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
17755
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserProfileService, providedIn: 'root' }); }
17926
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserProfileService, deps: [{ token: i1.HttpClient }, { token: i1$2.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
17927
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserProfileService }); }
17756
17928
  }
17757
17929
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserProfileService, decorators: [{
17758
- type: Injectable,
17759
- args: [{
17760
- providedIn: 'root',
17761
- }]
17762
- }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
17930
+ type: Injectable
17931
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1$2.TranslateService }]; } });
17763
17932
 
17764
- /**
17765
- * Profile V2 Service - Stub implementation
17766
- * Provides profile management functionality
17767
- */
17768
- const ENDPOINTS = {
17769
- CADRE_CONFIG: '/apis/proxies/v8/data/v2/system/settings/get/cadreConfig'
17933
+ const PROTECTED_SLAG_V8 = '/apis/protected/v8';
17934
+ const API_END_POINTS$1 = {
17935
+ DISCUSS_PROFILE: '/apis/protected/v8/discussionHub/users',
17936
+ PROFILE_DETAIL: `${PROTECTED_SLAG_V8}/social/post/timeline`,
17937
+ SOCIAL_VIEW_CONVERSATION: `${PROTECTED_SLAG_V8}/social/post/viewConversation`,
17938
+ // getUserdetailsV2FromRegistry: '/apis/protected/v8/user/profileRegistry/getUserRegistryByUser',
17939
+ getUserdetailsV2FromRegistry: '/apis/proxies/v8/api/user/v2/read',
17940
+ getCadreDetails: '/apis/proxies/v8/data/v2/system/settings/get/cadreConfig',
17941
+ approvalDetails: '/apis/proxies/v8/workflow/v2/userWFApplicationFieldsSearch',
17942
+ withDrawRequest: '/apis/protected/v8/workflowhandler/transition',
17943
+ getFormV2ByID: (id) => `/apis/proxies/v8/forms/v2/getFormById?formId=${id}`,
17770
17944
  };
17771
17945
  class ProfileV2Service {
17772
17946
  constructor(http) {
17773
17947
  this.http = http;
17774
17948
  }
17775
- getProfile(userId) {
17776
- return of(null);
17949
+ fetchDiscussProfile(wid) {
17950
+ return this.http.get(`${API_END_POINTS$1.DISCUSS_PROFILE}/${wid}`);
17777
17951
  }
17778
- updateProfile(profileData) {
17779
- return of({ success: true });
17780
- }
17781
- getProfileDetails(userId) {
17782
- return of(null);
17952
+ fetchProfile(userId) {
17953
+ return this.http.get(`${API_END_POINTS$1.getUserdetailsV2FromRegistry}/${userId}`)
17954
+ .pipe(map(res => {
17955
+ // const roles = _.map(_.get(res, 'result.response.roles'), 'role')
17956
+ // _.set(res, 'result.response.roles', roles)
17957
+ return res;
17958
+ }));
17783
17959
  }
17784
- getFormV2ByID(formId) {
17785
- return of({ fields: [] });
17960
+ fetchPost(request) {
17961
+ return this.http.post(API_END_POINTS$1.SOCIAL_VIEW_CONVERSATION, request);
17786
17962
  }
17787
17963
  fetchCadre() {
17788
- return this.http.get(ENDPOINTS.CADRE_CONFIG);
17964
+ return this.http.get(`${API_END_POINTS$1.getCadreDetails}`);
17789
17965
  }
17790
- fetchApprovalDetails(userId) {
17791
- return of({ approvals: [] });
17966
+ fetchApprovalDetails() {
17967
+ return this.http.post(API_END_POINTS$1.approvalDetails, {
17968
+ serviceName: 'profile',
17969
+ applicationStatus: 'SEND_FOR_APPROVAL',
17970
+ });
17792
17971
  }
17793
17972
  withDrawApprovalRequest(userId, wfId) {
17794
- return of({ success: true });
17973
+ const payload = {
17974
+ 'action': 'WITHDRAW',
17975
+ 'state': 'SEND_FOR_APPROVAL',
17976
+ 'userId': userId,
17977
+ 'applicationId': userId,
17978
+ 'actorUserId': userId,
17979
+ 'wfId': wfId,
17980
+ 'serviceName': 'profile',
17981
+ 'updateFieldValues': [],
17982
+ 'comment': '',
17983
+ };
17984
+ return this.http.post(API_END_POINTS$1.withDrawRequest, payload);
17985
+ }
17986
+ getFormV2ByID(formid) {
17987
+ return this.http.get(API_END_POINTS$1.getFormV2ByID(formid));
17795
17988
  }
17796
17989
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProfileV2Service, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
17797
17990
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProfileV2Service, providedIn: 'root' }); }
@@ -17803,72 +17996,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17803
17996
  }]
17804
17997
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
17805
17998
 
17806
- /**
17807
- * OTP Service - Stub implementation
17808
- * Provides OTP generation and verification functionality
17809
- */
17999
+ const API_ENDPOINTS = {
18000
+ sendOtp: '/apis/proxies/v8/otp/v1/generate',
18001
+ ReSendOtp: '/apis/proxies/v8/otp/v1/generate',
18002
+ VerifyOtp: '/apis/proxies/v8/otp/v1/verify',
18003
+ sendEmailOtp: '/apis/proxies/v8/otp/v3/generate',
18004
+ VerifyEmailOtp: '/apis/proxies/v8/otp/v3/verify',
18005
+ };
17810
18006
  class OtpService {
17811
18007
  constructor(http) {
17812
18008
  this.http = http;
17813
18009
  }
17814
- generateOtp(mobileNumber) {
17815
- return of({ success: true });
17816
- }
17817
- verifyOtp(mobileNumber, otp) {
17818
- return of({ verified: true });
18010
+ sendOtp(mob) {
18011
+ const reqObj = {
18012
+ request: {
18013
+ type: 'phone',
18014
+ key: `${mob}`,
18015
+ },
18016
+ };
18017
+ return this.http.post(API_ENDPOINTS.sendOtp, reqObj);
17819
18018
  }
17820
- resendOtp(mobileNumber) {
17821
- return of({ success: true });
18019
+ resendOtp(mob) {
18020
+ const reqObj = {
18021
+ request: {
18022
+ type: 'phone',
18023
+ key: `${mob}`,
18024
+ },
18025
+ };
18026
+ return this.http.post(API_ENDPOINTS.ReSendOtp, reqObj);
17822
18027
  }
17823
- sendOtp(mobileNumber) {
17824
- return of({ success: true });
18028
+ verifyOTP(otp, mob) {
18029
+ const reqObj = {
18030
+ request: {
18031
+ otp,
18032
+ type: 'phone',
18033
+ key: `${mob}`,
18034
+ },
18035
+ };
18036
+ return this.http.post(API_ENDPOINTS.VerifyOtp, reqObj);
17825
18037
  }
17826
18038
  sendEmailOtp(email) {
17827
- return of({ success: true });
18039
+ const reqObj = {
18040
+ request: {
18041
+ type: 'email',
18042
+ key: `${email}`,
18043
+ contextType: 'extPatch',
18044
+ context: ['profileDetails.personalDetails.primaryEmail'],
18045
+ },
18046
+ };
18047
+ return this.http.post(API_ENDPOINTS.sendEmailOtp, reqObj);
17828
18048
  }
17829
- verifyEmailOTP(email, otp) {
17830
- return of({ verified: true });
18049
+ reSendEmailOtp(email) {
18050
+ const reqObj = {
18051
+ request: {
18052
+ type: 'email',
18053
+ key: `${email}`,
18054
+ contextType: 'extPatch',
18055
+ context: ['profileDetails.personalDetails.primaryEmail'],
18056
+ },
18057
+ };
18058
+ return this.http.post(API_ENDPOINTS.sendEmailOtp, reqObj);
17831
18059
  }
17832
- verifyOTP(mobileNumber, otp) {
17833
- return of({ verified: true });
18060
+ verifyEmailOTP(otp, email) {
18061
+ const reqObj = {
18062
+ request: {
18063
+ otp: otp.toString(),
18064
+ type: 'email',
18065
+ key: `${email}`,
18066
+ },
18067
+ };
18068
+ return this.http.post(API_ENDPOINTS.VerifyEmailOtp, reqObj);
17834
18069
  }
17835
18070
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtpService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
17836
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtpService, providedIn: 'root' }); }
18071
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtpService }); }
17837
18072
  }
17838
18073
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OtpService, decorators: [{
17839
- type: Injectable,
17840
- args: [{
17841
- providedIn: 'root',
17842
- }]
18074
+ type: Injectable
17843
18075
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
17844
18076
 
17845
- /**
17846
- * NPS Grid Service - Stub implementation
17847
- * Provides NPS grid/survey functionality
17848
- */
18077
+ // tslint:enable
18078
+ const API_END_POINTS = {
18079
+ readFeed: (id) => `/apis/proxies/v8/user/v1/feed/${id}`,
18080
+ getFormID: (id) => `/apis/proxies/v8/forms/getFormById?id=${id}`,
18081
+ submitForm: `/apis/proxies/v8/forms/v1/saveFormSubmit`,
18082
+ SUBMIT_ENROLMENT_FORM: `apis/proxies/v8/forms/v2/saveFormSubmit`,
18083
+ deleteFeed: `/apis/proxies/v8/user/feed/v1/delete`,
18084
+ };
17849
18085
  class NPSGridService {
17850
- constructor() { }
17851
- getGridData() {
17852
- return of([]);
18086
+ constructor(http) {
18087
+ this.http = http;
18088
+ this.telemetryEvents = new BehaviorSubject(false);
18089
+ this.updateTelemetryDataObservable = this.telemetryEvents.asObservable();
17853
18090
  }
17854
- submitGridResponse(data) {
17855
- return of({ success: true });
18091
+ updateTelemetryData(state) {
18092
+ this.telemetryEvents.next(state);
17856
18093
  }
17857
- getGridConfig() {
17858
- return of({});
18094
+ getFeedStatus(id) {
18095
+ return this.http.get(API_END_POINTS.readFeed(id));
17859
18096
  }
17860
- submitBpFormWithProfileDetails(formData, profileData) {
17861
- return of({ success: true });
18097
+ getFormData(formid) {
18098
+ return this.http.get(API_END_POINTS.getFormID(formid));
18099
+ }
18100
+ submitPlatformRating(req) {
18101
+ return this.http.post(API_END_POINTS.submitForm, req);
18102
+ }
18103
+ deleteFeed(req) {
18104
+ return this.http.post(API_END_POINTS.deleteFeed, req);
18105
+ }
18106
+ submitBpFormWithProfileDetails(req) {
18107
+ return this.http.post(API_END_POINTS.SUBMIT_ENROLMENT_FORM, req);
17862
18108
  }
17863
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NPSGridService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
17864
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NPSGridService, providedIn: 'root' }); }
18109
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NPSGridService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
18110
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NPSGridService }); }
17865
18111
  }
17866
18112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NPSGridService, decorators: [{
17867
- type: Injectable,
17868
- args: [{
17869
- providedIn: 'root',
17870
- }]
17871
- }], ctorParameters: function () { return []; } });
18113
+ type: Injectable
18114
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
17872
18115
 
17873
18116
  const MOBILE_PATTERN = /^[0]?[6789]\d{9}$/;
17874
18117
  const PIN_CODE_PATTERN = /^[1-9][0-9]{5}$/;
@@ -17943,6 +18186,8 @@ class EnrollProfileFormComponent {
17943
18186
  this.showDoptChanges = false;
17944
18187
  this.verifyEmail = false;
17945
18188
  this.approvedDomainList = [];
18189
+ this.verifiedEmailOtp = '';
18190
+ this.verifiedPhoneOtp = '';
17946
18191
  this.currentDate = new Date();
17947
18192
  this.openDesignationDropdown = false;
17948
18193
  this.openLanguageDropdown = false;
@@ -18259,6 +18504,7 @@ class EnrollProfileFormComponent {
18259
18504
  this.eVerified = true;
18260
18505
  this.emailOtpSent = false;
18261
18506
  this.contextToken = _res.result.contextToken;
18507
+ this.verifiedEmailOtp = this.emailOtpForm.controls['eOtp'].value;
18262
18508
  this.emailOtpForm.reset();
18263
18509
  }, (error) => {
18264
18510
  if (!error.ok) {
@@ -18274,6 +18520,7 @@ class EnrollProfileFormComponent {
18274
18520
  this.verifyMobile = true;
18275
18521
  this.mVerified = true;
18276
18522
  this.otpSent = false;
18523
+ this.verifiedPhoneOtp = this.otpForm.controls['otp'].value;
18277
18524
  this.otpForm.reset();
18278
18525
  }, (error) => {
18279
18526
  if (!error.ok) {
@@ -19165,6 +19412,12 @@ class EnrollProfileFormComponent {
19165
19412
  }
19166
19413
  }
19167
19414
  submitProfile(payload) {
19415
+ if (this.eVerified && this.verifiedEmailOtp) {
19416
+ payload['request']['emailOtp'] = this.verifiedEmailOtp;
19417
+ }
19418
+ if (this.mVerified && this.verifiedPhoneOtp) {
19419
+ payload['request']['phoneOtp'] = this.verifiedPhoneOtp;
19420
+ }
19168
19421
  if (payload && payload['request'] && payload['request']['profileDetails'] && payload['request']['profileDetails']['personalDetails'] && payload['request']['profileDetails']['personalDetails']['dob']) {
19169
19422
  let dobFormat = payload['request']['profileDetails']['personalDetails']['dob'];
19170
19423
  let dob = `${new Date(dobFormat).getDate()}-${new Date(dobFormat).getMonth() + 1}-${new Date(dobFormat).getFullYear()}`;
@@ -19173,6 +19426,7 @@ class EnrollProfileFormComponent {
19173
19426
  if (this.updateProfile) {
19174
19427
  this.addLoader = this.addLoader + 1;
19175
19428
  this.userProfileService.editProfileDetails(payload).subscribe((res) => {
19429
+ debugger;
19176
19430
  this.addLoader = this.addLoader - 1;
19177
19431
  if (res.responseCode === 'OK') {
19178
19432
  this.submitSurevy(true);
@@ -19181,7 +19435,7 @@ class EnrollProfileFormComponent {
19181
19435
  this.addLoader = this.addLoader - 1;
19182
19436
  /* tslint:disable */
19183
19437
  console.log(error);
19184
- this.snackBar.open("something went wrong!");
19438
+ this.snackBar.open(error?.error?.params?.errmsg || "Something went wrong!");
19185
19439
  });
19186
19440
  }
19187
19441
  }
@@ -24066,12 +24320,11 @@ class AppTocHomeV2Component {
24066
24320
  }
24067
24321
  const badge = badgeDetails[0];
24068
24322
  // If badgeEarningDateEnabled is false, don't show badge
24069
- if (!badge.badgeEarningDateEnabled) {
24070
- return false;
24323
+ if (!badge?.badgeEarningDateEnabled) {
24324
+ return true;
24071
24325
  }
24072
24326
  // If badgeEarningDateEnabled is true, show badge only if badgeEarningDateTime has passed
24073
- if (badge.badgeEarningDateEnabled && badge.badgeEarningDateTime) {
24074
- console.log(badge.badgeEarningDateTime, Date.now());
24327
+ if (badge?.badgeEarningDateEnabled && badge?.badgeEarningDateTime) {
24075
24328
  return badge.badgeEarningDateTime > Date.now();
24076
24329
  }
24077
24330
  return false;
@@ -26443,6 +26696,23 @@ class AppTocCiosHomeComponent {
26443
26696
  });
26444
26697
  }
26445
26698
  }
26699
+ showBadgeIcon() {
26700
+ const badgeDetails = this.extContentReadData?.badgeDetails_v1;
26701
+ if (!badgeDetails || !badgeDetails.length) {
26702
+ return false;
26703
+ }
26704
+ const badge = badgeDetails[0];
26705
+ // If badgeEarningDateEnabled is false, don't show badge
26706
+ if (!badge.badgeEarningDateEnabled) {
26707
+ return true;
26708
+ }
26709
+ // If badgeEarningDateEnabled is true, show badge only if badgeEarningDateTime has passed
26710
+ if (badge?.badgeEarningDateEnabled && badge?.badgeEarningDateTime) {
26711
+ console.log(badge.badgeEarningDateTime, Date.now());
26712
+ return badge.badgeEarningDateTime > Date.now();
26713
+ }
26714
+ return false;
26715
+ }
26446
26716
  get showEnroll() {
26447
26717
  return Object.keys(this.userExtCourseEnroll).length === 0 &&
26448
26718
  !this.enrollValidationLoading &&
@@ -26455,11 +26725,11 @@ class AppTocCiosHomeComponent {
26455
26725
  _.get(this.extContentReadData, 'contentPartner.isActive', false);
26456
26726
  }
26457
26727
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i5.CommonMethodsService }, { token: i1$2.TranslateService }, { token: i2$1.ConfigurationsService }, { token: i2$1.EventService }, { token: i2$1.MultilingualTranslationsService }, { token: i2$1.WidgetContentService }, { token: CertificateService }, { token: LoaderService }, { token: i5$4.MatDialog }, { token: i7.MatLegacySnackBar }, { token: NetCoreService }, { token: 'environment', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
26458
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i18.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i18.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i18.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate", "fromMDO"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i12$2.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: SlidersDynamicComponent, selector: "ws-widget-sliders-dynamic", inputs: ["widgetData", "baseContentReadData"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i2$1.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] }); }
26728
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n \n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}\n <!-- <div class=\"knowledge-level-container badgediv\"> -->\n <span *ngIf=\"showBadgeIcon()\" class=\"custom-badge\">\n <img class=\"badge-img w-5 h-5\" src=\"{{ extContentReadData?.badgeDetails_v1?.[0]?.badgeTemplate | pipePublicURL }}\" alt=\"\" srcset=\"\">\n </span>\n <!-- </div> -->\n </div>\n \n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i18.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i18.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i18.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate", "fromMDO"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i12$2.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: SlidersDynamicComponent, selector: "ws-widget-sliders-dynamic", inputs: ["widgetData", "baseContentReadData"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "pipe", type: i2$1.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i2$1.PipePublicURL, name: "pipePublicURL" }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }] }); }
26459
26729
  }
26460
26730
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, decorators: [{
26461
26731
  type: Component,
26462
- args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
26732
+ args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n \n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}\n <!-- <div class=\"knowledge-level-container badgediv\"> -->\n <span *ngIf=\"showBadgeIcon()\" class=\"custom-badge\">\n <img class=\"badge-img w-5 h-5\" src=\"{{ extContentReadData?.badgeDetails_v1?.[0]?.badgeTemplate | pipePublicURL }}\" alt=\"\" srcset=\"\">\n </span>\n <!-- </div> -->\n </div>\n \n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
26463
26733
  }], ctorParameters: function () { return [{ type: i1$1.ActivatedRoute }, { type: i5.CommonMethodsService }, { type: i1$2.TranslateService }, { type: i2$1.ConfigurationsService }, { type: i2$1.EventService }, { type: i2$1.MultilingualTranslationsService }, { type: i2$1.WidgetContentService }, { type: CertificateService }, { type: LoaderService }, { type: i5$4.MatDialog }, { type: i7.MatLegacySnackBar }, { type: NetCoreService }, { type: undefined, decorators: [{
26464
26734
  type: Inject,
26465
26735
  args: ['environment']
@@ -26658,8 +26928,9 @@ class AppTocLibModule {
26658
26928
  ActionService,
26659
26929
  MultilingualTranslationsService,
26660
26930
  CommonMethodsService,
26661
- // UserProfileService, // TODO: Import from @sunbird-cb/user-profile when available
26662
- // OtpService, // TODO: Import from @sunbird-cb/user-profile when available
26931
+ UserProfileService,
26932
+ NPSGridService,
26933
+ OtpService,
26663
26934
  ContentLanguageService,
26664
26935
  TOCMultiLingualDialogModule,
26665
26936
  DatePipe,
@@ -26879,8 +27150,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26879
27150
  ActionService,
26880
27151
  MultilingualTranslationsService,
26881
27152
  CommonMethodsService,
26882
- // UserProfileService, // TODO: Import from @sunbird-cb/user-profile when available
26883
- // OtpService, // TODO: Import from @sunbird-cb/user-profile when available
27153
+ UserProfileService,
27154
+ NPSGridService,
27155
+ OtpService,
26884
27156
  ContentLanguageService,
26885
27157
  TOCMultiLingualDialogModule,
26886
27158
  DatePipe,
@@ -27189,5 +27461,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27189
27461
  * Generated bundle index. Do not edit.
27190
27462
  */
27191
27463
 
27192
- export { AccessControlService, ActionService, AppTocAboutComponent, AppTocAnalyticsTilesComponent, AppTocBannerComponent, AppTocBatchAssignmentsComponent, AppTocCiosHomeComponent, AppTocCiosResolverService, AppTocCiosUserEnrollResolverService, AppTocCohortsComponent, AppTocContentCardComponent, AppTocContentComponent, AppTocContentReadResolverService, AppTocDialogIntroVideoComponent, AppTocDiscussionComponent, AppTocExtPublicResolverService, AppTocHomeComponent, AppTocHomeV2Component, AppTocLibModule, AppTocOverviewComponent, AppTocResolverService, AppTocService, AppTocSessionCardComponent, AppTocSessionsComponent, AppTocSinglePageComponent, AppTocTeachersNotesComponent, AppTocV2Service, CardCompetencyComponent, CardCompetencyModule, CompletionSurveyFormComponent, ConfigResolverService, ContentTocComponent, ContentTocModule, CreateBatchDialogComponent, EnrollLanguageDialogueComponent, EnrollProfileFormComponent, EnrollQuestionnaireComponent, ErrorType, KarmaPointsComponent, KarmaPointsModule, KnowledgeArtifactDetailsComponent, LoadCheckService, MetaTag, NsAppToc, NsCohorts, NsDiscussionForum, ProfileResolverService, PublicSurveyFormComponent, ROOT_WIDGET_CONFIG, ResetRatingsService, RestrictedFeaturesResolverService, ReviewsContentComponent, ShareTocComponent, ShareTocModule, SurveyFormQuestionComponent, SurveyFormSectionComponent, TimerService, TitleTagService, TocKpiValuesComponent, TocKpiValuesModule, ViewerDataService, ViewerUtilService, WIDGET_REGISTERED_LIB_MODULES, WIDGET_REGISTRATION_TOC_LIB_CONFIG, WidgetContentService };
27464
+ export { AccessControlService, ActionService, AppTocAboutComponent, AppTocAnalyticsTilesComponent, AppTocBannerComponent, AppTocBatchAssignmentsComponent, AppTocCiosHomeComponent, AppTocCiosResolverService, AppTocCiosUserEnrollResolverService, AppTocCohortsComponent, AppTocContentCardComponent, AppTocContentComponent, AppTocContentReadResolverService, AppTocDialogIntroVideoComponent, AppTocDiscussionComponent, AppTocExtPublicResolverService, AppTocHomeComponent, AppTocHomeV2Component, AppTocLibModule, AppTocOverviewComponent, AppTocResolverService, AppTocService, AppTocSessionCardComponent, AppTocSessionsComponent, AppTocSinglePageComponent, AppTocTeachersNotesComponent, AppTocV2Service, CardCompetencyComponent, CardCompetencyModule, CompletionSurveyFormComponent, ConfigResolverService, ContentTocComponent, ContentTocModule, CreateBatchDialogComponent, EnrollLanguageDialogueComponent, EnrollProfileFormComponent, EnrollQuestionnaireComponent, ErrorType, KarmaPointsComponent, KarmaPointsModule, KnowledgeArtifactDetailsComponent, LoadCheckService, MetaTag, NsAppToc, NsCohorts, NsDiscussionForum, ProfileResolverService, PublicSurveyFormComponent, ROOT_WIDGET_CONFIG, ResetRatingsService, RestrictedFeaturesResolverService, ReviewsContentComponent, ShareTocComponent, ShareTocModule, SurveyFormQuestionComponent, SurveyFormSectionComponent, TimerService, TitleTagService, TocKpiValuesComponent, TocKpiValuesModule, UserProfileService, ViewerDataService, ViewerUtilService, WIDGET_REGISTERED_LIB_MODULES, WIDGET_REGISTRATION_TOC_LIB_CONFIG, WidgetContentService };
27193
27465
  //# sourceMappingURL=sunbird-cb-toc.mjs.map