@edx/frontend-app-subscription-learner-dashboard 1.56.0 → 1.58.0

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 (78) hide show
  1. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js +1 -1
  2. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js.map +1 -1
  3. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js +1 -1
  4. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js.map +1 -1
  5. package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js +1 -1
  6. package/dist/containers/CourseCard/components/CourseCardActions/ViewCourseButton.js.map +1 -1
  7. package/dist/containers/CourseCard/components/CourseCardBanners/CourseUpgradeButton.js +8 -1
  8. package/dist/containers/CourseCard/components/CourseCardBanners/CourseUpgradeButton.js.map +1 -1
  9. package/dist/containers/CourseCard/components/CourseCardBanners/FindCourseBanner.d.ts +3 -1
  10. package/dist/containers/CourseCard/components/CourseCardBanners/FindCourseBanner.js +6 -2
  11. package/dist/containers/CourseCard/components/CourseCardBanners/FindCourseBanner.js.map +1 -1
  12. package/dist/containers/CourseCard/components/CourseCardBanners/ViewCertificateBanner.js +5 -3
  13. package/dist/containers/CourseCard/components/CourseCardBanners/ViewCertificateBanner.js.map +1 -1
  14. package/dist/containers/CourseCard/components/CourseCardBanners/ViewCourseDetailBanner.d.ts +3 -1
  15. package/dist/containers/CourseCard/components/CourseCardBanners/ViewCourseDetailBanner.js +6 -2
  16. package/dist/containers/CourseCard/components/CourseCardBanners/ViewCourseDetailBanner.js.map +1 -1
  17. package/dist/containers/CourseCard/components/CourseCardBanners/ViewGradesBanner.js +4 -2
  18. package/dist/containers/CourseCard/components/CourseCardBanners/ViewGradesBanner.js.map +1 -1
  19. package/dist/containers/CourseCard/components/CourseCardBanners/index.js +1 -1
  20. package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -1
  21. package/dist/containers/CoursesPanel/CourseList/index.js +10 -1
  22. package/dist/containers/CoursesPanel/CourseList/index.js.map +1 -1
  23. package/dist/containers/CoursesPanel/NoCoursesView/index.js +4 -1
  24. package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -1
  25. package/dist/containers/ProductCard/index.js +5 -1
  26. package/dist/containers/ProductCard/index.js.map +1 -1
  27. package/dist/containers/ProgramDashboard/ProgramProgress/CompletedTabData/CompletedRecordBanner/index.js +3 -1
  28. package/dist/containers/ProgramDashboard/ProgramProgress/CompletedTabData/CompletedRecordBanner/index.js.map +1 -1
  29. package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js +2 -1
  30. package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js.map +1 -1
  31. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCard/index.js +2 -2
  32. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCard/index.js.map +1 -1
  33. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/ProgressCardButton.js +16 -4
  34. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/ProgressCardButton.js.map +1 -1
  35. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/UpgradeCourseButton.js +6 -1
  36. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/UpgradeCourseButton.js.map +1 -1
  37. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/index.js +3 -3
  38. package/dist/containers/ProgramDashboard/ProgramProgress/ProgressCardActions/index.js.map +1 -1
  39. package/dist/containers/ProgramDashboard/ProgramsList/ProgramListCard.js +5 -1
  40. package/dist/containers/ProgramDashboard/ProgramsList/ProgramListCard.js.map +1 -1
  41. package/dist/containers/ProgramDashboard/ProgramsList/index.js +9 -1
  42. package/dist/containers/ProgramDashboard/ProgramsList/index.js.map +1 -1
  43. package/dist/containers/ProgramsPanel/NoProgramsView/index.js +4 -1
  44. package/dist/containers/ProgramsPanel/NoProgramsView/index.js.map +1 -1
  45. package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js +19 -3
  46. package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js.map +1 -1
  47. package/dist/containers/SubscriptionInformation/components/SubscriptionInformation.js +18 -5
  48. package/dist/containers/SubscriptionInformation/components/SubscriptionInformation.js.map +1 -1
  49. package/dist/hooks/useCourseTrackingEvent.d.ts +1 -1
  50. package/dist/hooks/useCourseTrackingEvent.js.map +1 -1
  51. package/dist/hooks/useProgramTrackingEvents.d.ts +2 -0
  52. package/dist/hooks/useProgramTrackingEvents.js +9 -0
  53. package/dist/hooks/useProgramTrackingEvents.js.map +1 -0
  54. package/dist/tracking/constants.js +15 -7
  55. package/dist/tracking/constants.js.map +1 -1
  56. package/dist/tracking/index.d.ts +2 -0
  57. package/dist/tracking/index.js +2 -0
  58. package/dist/tracking/index.js.map +1 -1
  59. package/dist/tracking/trackers/course.d.ts +6 -2
  60. package/dist/tracking/trackers/course.js +7 -2
  61. package/dist/tracking/trackers/course.js.map +1 -1
  62. package/dist/tracking/trackers/program.d.ts +7 -0
  63. package/dist/tracking/trackers/program.js +27 -0
  64. package/dist/tracking/trackers/program.js.map +1 -0
  65. package/dist/tracking/trackers/programProgress.d.ts +16 -0
  66. package/dist/tracking/trackers/programProgress.js +25 -0
  67. package/dist/tracking/trackers/programProgress.js.map +1 -0
  68. package/dist/tracking/trackers/subscription.d.ts +10 -0
  69. package/dist/tracking/trackers/subscription.js +12 -0
  70. package/dist/tracking/trackers/subscription.js.map +1 -0
  71. package/dist/widgets/ProgressiveProfilingQuiz/SearchPageBanners/BannerEntry.js +34 -2
  72. package/dist/widgets/ProgressiveProfilingQuiz/SearchPageBanners/BannerEntry.js.map +1 -1
  73. package/dist/widgets/ProgressiveProfilingQuiz/SearchPageBanners/messages.js +1 -1
  74. package/dist/widgets/ProgressiveProfilingQuiz/SearchPageBanners/messages.js.map +1 -1
  75. package/dist/widgets/ProgressiveProfilingQuiz/data/constants.d.ts +1 -1
  76. package/dist/widgets/ProgressiveProfilingQuiz/data/constants.js +1 -1
  77. package/dist/widgets/ProgressiveProfilingQuiz/data/constants.js.map +1 -1
  78. package/package.json +1 -1
@@ -9,8 +9,9 @@ import { manageSubscriptionURL } from '../../../data/constants/app';
9
9
  import '../index.scss';
10
10
  import { Cached, WarningFilled, Cancel } from '@openedx/paragon/icons';
11
11
  import { subscriptionRenewalURL } from '../../../data/constants/app';
12
+ import { eventNames, trackSubscriptionEvent } from '../../../tracking/trackers/subscription';
12
13
  export const SubscriptionInformation = () => {
13
- var _a, _b, _c, _d;
14
+ var _a, _b, _c, _d, _e;
14
15
  const { data: subsData } = useInitializeSubsDashboard();
15
16
  const { formatMessage } = useIntl();
16
17
  const formatDate = utilHooks.useFormatDate();
@@ -65,14 +66,26 @@ export const SubscriptionInformation = () => {
65
66
  const getSubscriptionAction = useMemo(() => {
66
67
  if (status === 'CANCELLED' || status === 'CANCEL_PENDING') {
67
68
  return ([
68
- _jsx(Button, { "data-testid": "renew-button", className: "renew-button", variant: "tertiary", href: subscriptionRenewalURL, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.renewSubscriptionButton) }, "renew-subscription"),
69
+ _jsx(Button, { "data-testid": "renew-button", className: "renew-button", variant: "tertiary", href: subscriptionRenewalURL, onClick: () => {
70
+ var _a;
71
+ return trackSubscriptionEvent(eventNames.renewSubscriptionClicked, {
72
+ subscription_status: status,
73
+ plan_name: (_a = subsData === null || subsData === void 0 ? void 0 : subsData.userSubscription) === null || _a === void 0 ? void 0 : _a.planName,
74
+ });
75
+ }, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.renewSubscriptionButton) }, "renew-subscription"),
69
76
  ]);
70
77
  }
71
78
  else
72
79
  return ([
73
- _jsx(Button, { variant: "tertiary", "data-testid": "manage-button", href: manageSubscriptionURL, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.manageSubscriptionMessage) }, "manage-subscription"),
80
+ _jsx(Button, { variant: "tertiary", "data-testid": "manage-button", href: manageSubscriptionURL, onClick: () => {
81
+ var _a;
82
+ return trackSubscriptionEvent(eventNames.manageSubscriptionClicked, {
83
+ subscription_status: status,
84
+ plan_name: (_a = subsData === null || subsData === void 0 ? void 0 : subsData.userSubscription) === null || _a === void 0 ? void 0 : _a.planName,
85
+ });
86
+ }, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.manageSubscriptionMessage) }, "manage-subscription"),
74
87
  ]);
75
- }, [formatMessage, status]);
88
+ }, [formatMessage, status, (_d = subsData === null || subsData === void 0 ? void 0 : subsData.userSubscription) === null || _d === void 0 ? void 0 : _d.planName]);
76
89
  const subscriptionStatusIcons = {
77
90
  ACTIVE: Cached,
78
91
  TRIAL_ACTIVE: Cached,
@@ -81,7 +94,7 @@ export const SubscriptionInformation = () => {
81
94
  RENEWAL_PENDING: Cached,
82
95
  CANCEL_PENDING: Cancel,
83
96
  };
84
- const bannerIcon = (_d = subscriptionStatusIcons[status]) !== null && _d !== void 0 ? _d : undefined;
97
+ const bannerIcon = (_e = subscriptionStatusIcons[status]) !== null && _e !== void 0 ? _e : undefined;
85
98
  return (_jsxs("div", { className: "container subscription-information py-5 px-4", children: [_jsx("h2", { className: "mb-4 my-subscription-heading", children: formatMessage(messages.mySubscriptionHeading) }), _jsxs(Alert, { dismissible: false, show: true, actions: getSubscriptionAction, className: "subscription-status-alert bg-white", children: [_jsxs(Alert.Heading, { as: "h6", children: [_jsx(Icon, { src: bannerIcon, className: `icon mr-1 ${bannerIcon === WarningFilled ? 'warning-icon text-warning-500' : ''}`, "data-testid": "subscription-status-icon" }), infoTitle] }), _jsx("p", { children: infoBody })] })] }));
86
99
  };
87
100
  //# sourceMappingURL=SubscriptionInformation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionInformation.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionInformation/components/SubscriptionInformation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAQ,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,CAAC,MAAM,uBAAuB,GAAO,GAAG,EAAE;;IAC9C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,0BAA0B,EAAE,CAAC;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAC7C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,MAAM,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,cAAc,CAAC;YACpB,KAAK,iBAAiB;gBACpB,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,uBAAuB,EAAE;oBAC3D,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvH,QAAQ,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,QAAQ;iBAC/C,CAAC,CAAC,CAAC;gBACJ,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE;oBACjD,uBAAuB,EAAE,UAAU,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,gBAAgB,CAAC;iBAClF,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,gBAAgB;gBACnB,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE;oBAC9D,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBACvH,QAAQ,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,QAAQ;iBAC/C,CAAC,CAAC,CAAC;gBACJ,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EAAE;oBAC5D,0BAA0B,EAAE,UAAU,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,gBAAgB,CAAC;iBACrF,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,WAAW;gBACd,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,0BAA0B,EAAE;oBAC9D,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBAClF,QAAQ,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,QAAQ;iBAC/C,CAAC,CAAC,CAAC;gBACJ,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EAAE;oBAC5D,0BAA0B,EAAE,UAAU,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,gBAAgB,CAAC;iBACrF,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,gBAAgB,EAAE,iDAAiD;gBACtE,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACzD,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB,EAAE;oBACpD,uBAAuB,EAAE,UAAU,CAAC,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,gBAAgB,CAAC;iBAClF,CAAC,CAAC,CAAC;gBACJ,MAAM;QACV,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,QAAQ,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,0CAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5H,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;YAC1D,OAAO,CACL;gBACE,KAAC,MAAM,mBAEO,cAAc,EAC1B,SAAS,EAAC,cAAc,EACxB,OAAO,EAAC,UAAU,EAClB,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,IAAI,EAAC,MAAM,YAEV,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAT5C,oBAAoB,CAUjB;aACV,CACF,CAAC;QACJ,CAAC;;YACC,OAAO,CACL;gBACE,KAAC,MAAM,IAEL,OAAO,EAAC,UAAU,iBACN,eAAe,EAC3B,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,IAAI,EAAC,MAAM,YAEV,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAR9C,qBAAqB,CASlB;aACV,CACF,CAAC;IACN,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5B,MAAM,uBAAuB,GAA4C;QACvE,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,aAAa;QAC7B,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,MAAM;KACvB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAA,uBAAuB,CAAC,MAAM,CAAC,mCAAI,SAAS,CAAC;IAEhE,OAAO,CACL,eAAK,SAAS,EAAC,8CAA8C,aAC3D,aAAI,SAAS,EAAC,8BAA8B,YAAE,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAM,EACjG,MAAC,KAAK,IACJ,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAC,oCAAoC,aAE9C,MAAC,KAAK,CAAC,OAAO,IAAC,EAAE,EAAC,IAAI,aACpB,KAAC,IAAI,IAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,iBAAc,0BAA0B,GAAG,EAC9J,SAAS,IACI,EAChB,sBACG,QAAQ,GACP,IACE,IACJ,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport { Alert, Button, Icon } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport { utilHooks } from '@src/hooks';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport messages from '../messages';\nimport { manageSubscriptionURL } from '@src/data/constants/app';\nimport '../index.scss';\nimport { Cached, WarningFilled, Cancel, Info } from '@openedx/paragon/icons';\nimport { subscriptionRenewalURL } from '@src/data/constants/app';\n\nexport const SubscriptionInformation: FC = () => {\n const { data: subsData } = useInitializeSubsDashboard();\n const { formatMessage } = useIntl();\n const formatDate = utilHooks.useFormatDate();\n const [infoBody, setInfoBody] = useState('');\n const [infoTitle, setInfoTitle] = useState('');\n const status = subsData?.userSubscription?.status;\n\n useEffect(() => {\n if (!status) {\n setInfoTitle('');\n setInfoBody('');\n return;\n }\n\n switch (status) {\n case 'ACTIVE':\n case 'TRIAL_ACTIVE':\n case 'RENEWAL_PENDING':\n setInfoTitle(formatMessage(messages.activeSubscriptionTitle, {\n subscriptionStatus: status.split('_').map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join(' '),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.renewalMessage, {\n subscriptionRenewalDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'CANCEL_PENDING':\n setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {\n subscriptionStatus: status.split('_').map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join(' '),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionRenewalEndDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'CANCELLED':\n setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {\n subscriptionStatus: status.charAt(0).toUpperCase() + status.slice(1).toLowerCase(),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionRenewalEndDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'RENEWAL_FAILED': // also known as 'Payment Error' in figma designs\n setInfoTitle(formatMessage(messages.renewalFailedTitle));\n setInfoBody(formatMessage(messages.renewalFailedBody, {\n subscriptionRenewalDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n }\n }, [formatDate, formatMessage, status, subsData?.userSubscription?.planName, subsData?.userSubscription?.currentPeriodEnd]);\n\n const getSubscriptionAction = useMemo(() => {\n if (status === 'CANCELLED' || status === 'CANCEL_PENDING') {\n return (\n [\n <Button\n key=\"renew-subscription\"\n data-testid=\"renew-button\"\n className=\"renew-button\"\n variant=\"tertiary\"\n href={subscriptionRenewalURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.renewSubscriptionButton)}\n </Button>,\n ]\n );\n } else\n return (\n [\n <Button\n key=\"manage-subscription\"\n variant=\"tertiary\"\n data-testid=\"manage-button\"\n href={manageSubscriptionURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.manageSubscriptionMessage)}\n </Button>,\n ]\n );\n }, [formatMessage, status]);\n\n const subscriptionStatusIcons: Record<string, typeof Info | undefined> = {\n ACTIVE: Cached,\n TRIAL_ACTIVE: Cached,\n CANCELLED: Cancel,\n RENEWAL_FAILED: WarningFilled,\n RENEWAL_PENDING: Cached,\n CANCEL_PENDING: Cancel,\n };\n\n const bannerIcon = subscriptionStatusIcons[status] ?? undefined;\n\n return (\n <div className=\"container subscription-information py-5 px-4\">\n <h2 className=\"mb-4 my-subscription-heading\">{formatMessage(messages.mySubscriptionHeading)}</h2>\n <Alert\n dismissible={false}\n show={true}\n actions={getSubscriptionAction}\n className=\"subscription-status-alert bg-white\"\n >\n <Alert.Heading as=\"h6\">\n <Icon src={bannerIcon} className={`icon mr-1 ${bannerIcon === WarningFilled ? 'warning-icon text-warning-500' : ''}`} data-testid=\"subscription-status-icon\" />\n {infoTitle}\n </Alert.Heading>\n <p>\n {infoBody}\n </p>\n </Alert>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"SubscriptionInformation.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionInformation/components/SubscriptionInformation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport { Alert, Button, Icon } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport { utilHooks } from '@src/hooks';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport messages from '../messages';\nimport { manageSubscriptionURL } from '@src/data/constants/app';\nimport '../index.scss';\nimport { Cached, WarningFilled, Cancel, Info } from '@openedx/paragon/icons';\nimport { subscriptionRenewalURL } from '@src/data/constants/app';\nimport { eventNames, trackSubscriptionEvent } from '@src/tracking/trackers/subscription';\n\nexport const SubscriptionInformation: FC = () => {\n const { data: subsData } = useInitializeSubsDashboard();\n const { formatMessage } = useIntl();\n const formatDate = utilHooks.useFormatDate();\n const [infoBody, setInfoBody] = useState('');\n const [infoTitle, setInfoTitle] = useState('');\n const status = subsData?.userSubscription?.status;\n\n useEffect(() => {\n if (!status) {\n setInfoTitle('');\n setInfoBody('');\n return;\n }\n\n switch (status) {\n case 'ACTIVE':\n case 'TRIAL_ACTIVE':\n case 'RENEWAL_PENDING':\n setInfoTitle(formatMessage(messages.activeSubscriptionTitle, {\n subscriptionStatus: status.split('_').map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join(' '),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.renewalMessage, {\n subscriptionRenewalDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'CANCEL_PENDING':\n setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {\n subscriptionStatus: status.split('_').map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join(' '),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionRenewalEndDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'CANCELLED':\n setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {\n subscriptionStatus: status.charAt(0).toUpperCase() + status.slice(1).toLowerCase(),\n planName: subsData?.userSubscription?.planName,\n }));\n setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionRenewalEndDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n case 'RENEWAL_FAILED': // also known as 'Payment Error' in figma designs\n setInfoTitle(formatMessage(messages.renewalFailedTitle));\n setInfoBody(formatMessage(messages.renewalFailedBody, {\n subscriptionRenewalDate: formatDate(subsData?.userSubscription?.currentPeriodEnd),\n }));\n break;\n }\n }, [formatDate, formatMessage, status, subsData?.userSubscription?.planName, subsData?.userSubscription?.currentPeriodEnd]);\n\n const getSubscriptionAction = useMemo(() => {\n if (status === 'CANCELLED' || status === 'CANCEL_PENDING') {\n return (\n [\n <Button\n key=\"renew-subscription\"\n data-testid=\"renew-button\"\n className=\"renew-button\"\n variant=\"tertiary\"\n href={subscriptionRenewalURL}\n onClick={() => trackSubscriptionEvent(eventNames.renewSubscriptionClicked, {\n subscription_status: status,\n plan_name: subsData?.userSubscription?.planName,\n })}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.renewSubscriptionButton)}\n </Button>,\n ]\n );\n } else\n return (\n [\n <Button\n key=\"manage-subscription\"\n variant=\"tertiary\"\n data-testid=\"manage-button\"\n href={manageSubscriptionURL}\n onClick={() => trackSubscriptionEvent(eventNames.manageSubscriptionClicked, {\n subscription_status: status,\n plan_name: subsData?.userSubscription?.planName,\n })}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.manageSubscriptionMessage)}\n </Button>,\n ]\n );\n }, [formatMessage, status, subsData?.userSubscription?.planName]);\n\n const subscriptionStatusIcons: Record<string, typeof Info | undefined> = {\n ACTIVE: Cached,\n TRIAL_ACTIVE: Cached,\n CANCELLED: Cancel,\n RENEWAL_FAILED: WarningFilled,\n RENEWAL_PENDING: Cached,\n CANCEL_PENDING: Cancel,\n };\n\n const bannerIcon = subscriptionStatusIcons[status] ?? undefined;\n\n return (\n <div className=\"container subscription-information py-5 px-4\">\n <h2 className=\"mb-4 my-subscription-heading\">{formatMessage(messages.mySubscriptionHeading)}</h2>\n <Alert\n dismissible={false}\n show={true}\n actions={getSubscriptionAction}\n className=\"subscription-status-alert bg-white\"\n >\n <Alert.Heading as=\"h6\">\n <Icon src={bannerIcon} className={`icon mr-1 ${bannerIcon === WarningFilled ? 'warning-icon text-warning-500' : ''}`} data-testid=\"subscription-status-icon\" />\n {infoTitle}\n </Alert.Heading>\n <p>\n {infoBody}\n </p>\n </Alert>\n </div>\n );\n};\n"]}
@@ -1,2 +1,2 @@
1
- declare const useCourseTrackingEvent: (tracker: (...a: any[]) => any, cardId: string, ...args: any[]) => (e: Event) => void;
1
+ declare const useCourseTrackingEvent: (tracker: (...a: any[]) => any, cardId: string, ...args: any[]) => (e: Event | React.SyntheticEvent) => void;
2
2
  export default useCourseTrackingEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"useCourseTrackingEvent.js","sourceRoot":"","sources":["../../src/hooks/useCourseTrackingEvent.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,sBAAsB,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAE,GAAG,IAAW,EAAE,EAAE;;IAC/F,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAC,UAAkB,aAAlB,UAAU,uBAAV,UAAU,CAAU,SAAS,0CAAE,QAAQ,CAAC;IAE1D,OAAO,CAAC,CAAQ,EAAE,EAAE;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC","sourcesContent":["import useCourseData from './useCourseData';\n\nconst useCourseTrackingEvent = (tracker: (...a: any[]) => any, cardId: string, ...args: any[]) => {\n const courseData = useCourseData(cardId);\n const courseId = (courseData as any)?.courseRun?.courseId;\n\n return (e: Event) => {\n if (courseId) {\n tracker(courseId, ...args)(e);\n }\n };\n};\n\nexport default useCourseTrackingEvent;\n"]}
1
+ {"version":3,"file":"useCourseTrackingEvent.js","sourceRoot":"","sources":["../../src/hooks/useCourseTrackingEvent.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,MAAM,sBAAsB,GAAG,CAAC,OAA6B,EAAE,MAAc,EAAE,GAAG,IAAW,EAAE,EAAE;;IAC/F,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAC,UAAkB,aAAlB,UAAU,uBAAV,UAAU,CAAU,SAAS,0CAAE,QAAQ,CAAC;IAE1D,OAAO,CAAC,CAA+B,EAAE,EAAE;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC","sourcesContent":["import useCourseData from './useCourseData';\n\nconst useCourseTrackingEvent = (tracker: (...a: any[]) => any, cardId: string, ...args: any[]) => {\n const courseData = useCourseData(cardId);\n const courseId = (courseData as any)?.courseRun?.courseId;\n\n return (e: Event | React.SyntheticEvent) => {\n if (courseId) {\n tracker(courseId, ...args)(e);\n }\n };\n};\n\nexport default useCourseTrackingEvent;\n"]}
@@ -0,0 +1,2 @@
1
+ declare const useProgramTrackingEvent: (tracker: (...a: any[]) => any, programId: string, ...args: any[]) => (e: Event | React.SyntheticEvent) => void;
2
+ export default useProgramTrackingEvent;
@@ -0,0 +1,9 @@
1
+ const useProgramTrackingEvent = (tracker, programId, ...args) => {
2
+ return (e) => {
3
+ if (programId) {
4
+ tracker(programId, ...args)(e);
5
+ }
6
+ };
7
+ };
8
+ export default useProgramTrackingEvent;
9
+ //# sourceMappingURL=useProgramTrackingEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useProgramTrackingEvents.js","sourceRoot":"","sources":["../../src/hooks/useProgramTrackingEvents.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,CAC9B,OAA6B,EAC7B,SAAiB,EACjB,GAAG,IAAW,EACd,EAAE;IACF,OAAO,CAAC,CAA+B,EAAE,EAAE;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,uBAAuB,CAAC","sourcesContent":["const useProgramTrackingEvent = (\n tracker: (...a: any[]) => any,\n programId: string,\n ...args: any[]\n) => {\n return (e: Event | React.SyntheticEvent) => {\n if (programId) {\n tracker(programId, ...args)(e);\n }\n };\n};\n\nexport default useProgramTrackingEvent;\n"]}
@@ -7,7 +7,7 @@ export const categories = StrictDict({
7
7
  filter: 'filter',
8
8
  });
9
9
  export const events = StrictDict({
10
- enterCourseClicked: 'enterCourseClicked',
10
+ courseCardActionClicked: 'courseCardActionClicked',
11
11
  courseImageClicked: 'courseImageClicked',
12
12
  courseTitleClicked: 'courseTitleClicked',
13
13
  courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',
@@ -18,23 +18,31 @@ export const events = StrictDict({
18
18
  leaveSession: 'leaveSession',
19
19
  unenrollReason: 'unenrollReason',
20
20
  entitlementUnenrollReason: 'entitlementUnenrollReason',
21
+ noCoursesViewClicked: 'noCoursesViewClicked',
22
+ noProgramsViewClicked: 'noProgramsViewClicked',
23
+ courseListPageSelected: 'courseListPageSelected',
24
+ programCardActionClicked: 'programCardActionClicked',
21
25
  });
22
26
  export const eventNames = StrictDict({
23
- enterCourseClicked: 'edx.bi.dashboard.enter_course.clicked',
24
- courseImageClicked: 'edx.bi.dashboard.course_image.clicked',
25
- courseTitleClicked: 'edx.bi.dashboard.course_title.clicked',
26
- courseOptionsDropdownClicked: 'edx.bi.dashboard.course_options_dropdown.clicked',
27
+ courseCardActionClicked: 'edx.subscription.dashboard.course_card_action.clicked',
28
+ courseImageClicked: 'edx.subscription.dashboard.course_image.clicked',
29
+ courseTitleClicked: 'edx.subscription.dashboard.course_title.clicked',
30
+ courseOptionsDropdownClicked: 'edx.subscription.dashboard.course_options_dropdown.clicked',
31
+ noCoursesViewClicked: 'edx.subscription.dashboard.no_courses_view.clicked',
32
+ noProgramsViewClicked: 'edx.subscription.dashboard.no_programs_view.clicked',
27
33
  shareClicked: 'edx.course.share_clicked',
34
+ courseListPageSelected: 'edx.subscription.learner.course.list.page.selected',
28
35
  userSettingsChanged: 'edx.user.settings.changed',
29
36
  newSession: 'course-dashboard.new-session',
30
37
  switchSession: 'course-dashboard.switch-session',
31
38
  leaveSession: 'course-dashboard.leave-session',
32
39
  unenrollReason: 'unenrollment_reason.selected',
33
40
  entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',
34
- findCoursesClicked: 'edx.bi.dashboard.find_courses_button.clicked',
35
- purchaseCredit: 'edx.bi.credit.clicked_purchase_credit',
41
+ findCoursesClicked: 'edx.subscription.dashboard.find_courses_button.clicked',
42
+ purchaseCredit: 'edx.subscription.dashboard.clicked_purchase_credit',
36
43
  filterClicked: 'course-dashboard.filter.clicked',
37
44
  filterOptionSelected: 'course-dashboard.filter_option.selected',
45
+ programCardActionClicked: 'edx.subscription.dashboard.program_card_action.clicked',
38
46
  });
39
47
  export const linkNames = StrictDict({
40
48
  learnerHomeNavExplore: 'learner_home_nav_explore',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tracking/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,yBAAyB,EAAE,2BAA2B;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,kBAAkB,EAAE,uCAAuC;IAC3D,kBAAkB,EAAE,uCAAuC;IAC3D,kBAAkB,EAAE,uCAAuC;IAC3D,4BAA4B,EAAE,kDAAkD;IAChF,YAAY,EAAE,0BAA0B;IACxC,mBAAmB,EAAE,2BAA2B;IAChD,UAAU,EAAE,8BAA8B;IAC1C,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,gCAAgC;IAC9C,cAAc,EAAE,8BAA8B;IAC9C,yBAAyB,EAAE,0CAA0C;IACrE,kBAAkB,EAAE,8CAA8C;IAClE,cAAc,EAAE,uCAAuC;IACvD,aAAa,EAAE,iCAAiC;IAChD,oBAAoB,EAAE,yCAAyC;CAChE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,qBAAqB,EAAE,0BAA0B;IACjD,6BAA6B,EAAE,mCAAmC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC","sourcesContent":["import { StrictDict } from '../utils';\n\nexport const categories = StrictDict({\n dashboard: 'dashboard',\n userEngagement: 'user-engagement',\n searchButton: 'search_button',\n credit: 'credit',\n filter: 'filter',\n});\n\nexport const events = StrictDict({\n enterCourseClicked: 'enterCourseClicked',\n courseImageClicked: 'courseImageClicked',\n courseTitleClicked: 'courseTitleClicked',\n courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',\n shareClicked: 'shareClicked',\n userSettingsChanged: 'userSettingsChanged',\n newSession: 'newSession',\n switchSession: 'switchSession',\n leaveSession: 'leaveSession',\n unenrollReason: 'unenrollReason',\n entitlementUnenrollReason: 'entitlementUnenrollReason',\n});\n\nexport const eventNames = StrictDict({\n enterCourseClicked: 'edx.bi.dashboard.enter_course.clicked',\n courseImageClicked: 'edx.bi.dashboard.course_image.clicked',\n courseTitleClicked: 'edx.bi.dashboard.course_title.clicked',\n courseOptionsDropdownClicked: 'edx.bi.dashboard.course_options_dropdown.clicked',\n shareClicked: 'edx.course.share_clicked',\n userSettingsChanged: 'edx.user.settings.changed',\n newSession: 'course-dashboard.new-session',\n switchSession: 'course-dashboard.switch-session',\n leaveSession: 'course-dashboard.leave-session',\n unenrollReason: 'unenrollment_reason.selected',\n entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',\n findCoursesClicked: 'edx.bi.dashboard.find_courses_button.clicked',\n purchaseCredit: 'edx.bi.credit.clicked_purchase_credit',\n filterClicked: 'course-dashboard.filter.clicked',\n filterOptionSelected: 'course-dashboard.filter_option.selected',\n});\n\nexport const linkNames = StrictDict({\n learnerHomeNavExplore: 'learner_home_nav_explore',\n learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',\n});\n\nexport const appName = 'learner-home';\n\nexport default eventNames;\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tracking/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,uBAAuB,EAAE,yBAAyB;IAClD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,uBAAuB,EAAE,uDAAuD;IAChF,kBAAkB,EAAE,iDAAiD;IACrE,kBAAkB,EAAE,iDAAiD;IACrE,4BAA4B,EAAE,4DAA4D;IAC1F,oBAAoB,EAAE,oDAAoD;IAC1E,qBAAqB,EAAE,qDAAqD;IAC5E,YAAY,EAAE,0BAA0B;IACxC,sBAAsB,EAAE,oDAAoD;IAC5E,mBAAmB,EAAE,2BAA2B;IAChD,UAAU,EAAE,8BAA8B;IAC1C,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,gCAAgC;IAC9C,cAAc,EAAE,8BAA8B;IAC9C,yBAAyB,EAAE,0CAA0C;IACrE,kBAAkB,EAAE,wDAAwD;IAC5E,cAAc,EAAE,oDAAoD;IACpE,aAAa,EAAE,iCAAiC;IAChD,oBAAoB,EAAE,yCAAyC;IAC/D,wBAAwB,EAAE,wDAAwD;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,qBAAqB,EAAE,0BAA0B;IACjD,6BAA6B,EAAE,mCAAmC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC","sourcesContent":["import { StrictDict } from '../utils';\n\nexport const categories = StrictDict({\n dashboard: 'dashboard',\n userEngagement: 'user-engagement',\n searchButton: 'search_button',\n credit: 'credit',\n filter: 'filter',\n});\n\nexport const events = StrictDict({\n courseCardActionClicked: 'courseCardActionClicked',\n courseImageClicked: 'courseImageClicked',\n courseTitleClicked: 'courseTitleClicked',\n courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',\n shareClicked: 'shareClicked',\n userSettingsChanged: 'userSettingsChanged',\n newSession: 'newSession',\n switchSession: 'switchSession',\n leaveSession: 'leaveSession',\n unenrollReason: 'unenrollReason',\n entitlementUnenrollReason: 'entitlementUnenrollReason',\n noCoursesViewClicked: 'noCoursesViewClicked',\n noProgramsViewClicked: 'noProgramsViewClicked',\n courseListPageSelected: 'courseListPageSelected',\n programCardActionClicked: 'programCardActionClicked',\n});\n\nexport const eventNames = StrictDict({\n courseCardActionClicked: 'edx.subscription.dashboard.course_card_action.clicked',\n courseImageClicked: 'edx.subscription.dashboard.course_image.clicked',\n courseTitleClicked: 'edx.subscription.dashboard.course_title.clicked',\n courseOptionsDropdownClicked: 'edx.subscription.dashboard.course_options_dropdown.clicked',\n noCoursesViewClicked: 'edx.subscription.dashboard.no_courses_view.clicked',\n noProgramsViewClicked: 'edx.subscription.dashboard.no_programs_view.clicked',\n shareClicked: 'edx.course.share_clicked',\n courseListPageSelected: 'edx.subscription.learner.course.list.page.selected',\n userSettingsChanged: 'edx.user.settings.changed',\n newSession: 'course-dashboard.new-session',\n switchSession: 'course-dashboard.switch-session',\n leaveSession: 'course-dashboard.leave-session',\n unenrollReason: 'unenrollment_reason.selected',\n entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',\n findCoursesClicked: 'edx.subscription.dashboard.find_courses_button.clicked',\n purchaseCredit: 'edx.subscription.dashboard.clicked_purchase_credit',\n filterClicked: 'course-dashboard.filter.clicked',\n filterOptionSelected: 'course-dashboard.filter_option.selected',\n programCardActionClicked: 'edx.subscription.dashboard.program_card_action.clicked',\n});\n\nexport const linkNames = StrictDict({\n learnerHomeNavExplore: 'learner_home_nav_explore',\n learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',\n});\n\nexport const appName = 'learner-home';\n\nexport default eventNames;\n"]}
@@ -1,5 +1,6 @@
1
1
  declare namespace _default {
2
2
  export { course };
3
+ export { program };
3
4
  export { credit };
4
5
  export { engagement };
5
6
  export { entitlements };
@@ -10,6 +11,7 @@ declare namespace _default {
10
11
  export default _default;
11
12
  export * from "./trackingContext";
12
13
  import course from './trackers/course';
14
+ import program from './trackers/program';
13
15
  import credit from './trackers/credit';
14
16
  import engagement from './trackers/engagement';
15
17
  import entitlements from './trackers/entitlements';
@@ -1,4 +1,5 @@
1
1
  import course from './trackers/course';
2
+ import program from './trackers/program';
2
3
  import credit from './trackers/credit';
3
4
  import engagement from './trackers/engagement';
4
5
  import entitlements from './trackers/entitlements';
@@ -7,6 +8,7 @@ import findCourses from './trackers/findCourses';
7
8
  import filter from './trackers/filter';
8
9
  export default {
9
10
  course,
11
+ program,
10
12
  credit,
11
13
  engagement,
12
14
  entitlements,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracking/index.js"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,eAAe;IACb,MAAM;IACN,MAAM;IACN,UAAU;IACV,YAAY;IACZ,WAAW;IACX,WAAW;IACX,MAAM;CACP,CAAC;AAEF,cAAc,mBAAmB,CAAC","sourcesContent":["import course from './trackers/course';\nimport credit from './trackers/credit';\nimport engagement from './trackers/engagement';\nimport entitlements from './trackers/entitlements';\nimport socialShare from './trackers/socialShare';\nimport findCourses from './trackers/findCourses';\nimport filter from './trackers/filter';\n\nexport default {\n course,\n credit,\n engagement,\n entitlements,\n socialShare,\n findCourses,\n filter,\n};\n\nexport * from './trackingContext';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracking/index.js"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AAEvC,eAAe;IACb,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,YAAY;IACZ,WAAW;IACX,WAAW;IACX,MAAM;CACP,CAAC;AAEF,cAAc,mBAAmB,CAAC","sourcesContent":["import course from './trackers/course';\nimport program from './trackers/program';\nimport credit from './trackers/credit';\nimport engagement from './trackers/engagement';\nimport entitlements from './trackers/entitlements';\nimport socialShare from './trackers/socialShare';\nimport findCourses from './trackers/findCourses';\nimport filter from './trackers/filter';\n\nexport default {\n course,\n program,\n credit,\n engagement,\n entitlements,\n socialShare,\n findCourses,\n filter,\n};\n\nexport * from './trackingContext';\n"]}
@@ -1,13 +1,17 @@
1
1
  export function courseEventTracker(eventName: string, courseId: string, options?: [object]): () => void;
2
2
  export function courseLinkTracker(eventName: string): callback;
3
3
  export function courseOptionsDropdownClicked(courseId: any): () => void;
4
+ export function courseCardExternalActionClicked(courseId: any): () => void;
4
5
  export function courseImageClicked(...args: any[]): any;
5
6
  export function courseTitleClicked(...args: any[]): any;
6
- export function enterCourseClicked(...args: any[]): any;
7
+ export function courseCardActionClicked(...args: any[]): any;
8
+ export function noCoursesViewClicked(...args: any[]): any;
7
9
  declare namespace _default {
8
10
  export { courseImageClicked };
9
11
  export { courseOptionsDropdownClicked };
10
12
  export { courseTitleClicked };
11
- export { enterCourseClicked };
13
+ export { courseCardActionClicked };
14
+ export { courseCardExternalActionClicked };
15
+ export { noCoursesViewClicked };
12
16
  }
13
17
  export default _default;
@@ -18,14 +18,19 @@ export const courseEventTracker = (eventName, courseId, options = {}) => createE
18
18
  export const courseLinkTracker = (eventName) => (courseId, href) => (createLinkTracker(module.courseEventTracker(eventName, courseId), href));
19
19
  // Non-Link events
20
20
  export const courseOptionsDropdownClicked = (courseId) => (module.courseEventTracker(eventNames.courseOptionsDropdownClicked, courseId));
21
+ // For target="_blank" links where the browser should handle navigation.
22
+ export const courseCardExternalActionClicked = (courseId) => (module.courseEventTracker(eventNames.courseCardActionClicked, courseId));
21
23
  // Link events (track and then change page location)
22
24
  export const courseImageClicked = (...args) => (module.courseLinkTracker(eventNames.courseImageClicked)(...args));
23
25
  export const courseTitleClicked = (...args) => (module.courseLinkTracker(eventNames.courseTitleClicked)(...args));
24
- export const enterCourseClicked = (...args) => (module.courseLinkTracker(eventNames.enterCourseClicked)(...args));
26
+ export const courseCardActionClicked = (...args) => (module.courseLinkTracker(eventNames.courseCardActionClicked)(...args));
27
+ export const noCoursesViewClicked = (...args) => (module.courseLinkTracker(eventNames.noCoursesViewClicked)(...args));
25
28
  export default {
26
29
  courseImageClicked,
27
30
  courseOptionsDropdownClicked,
28
31
  courseTitleClicked,
29
- enterCourseClicked,
32
+ courseCardActionClicked,
33
+ courseCardExternalActionClicked,
34
+ noCoursesViewClicked,
30
35
  };
31
36
  //# sourceMappingURL=course.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"course.js","sourceRoot":"","sources":["../../../src/tracking/trackers/course.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,gBAAgB;AAChB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,kBAAkB,CACzF,SAAS,kBACP,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAK,OAAO,EAC9D,CAAC;AACF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAClE,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CACxE,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CACxD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAC7E,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAEpE,eAAe;IACb,kBAAkB;IAClB,4BAA4B;IAC5B,kBAAkB;IAClB,kBAAkB;CACnB,CAAC","sourcesContent":["import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../constants';\nimport * as module from './course';\n\n// Utils/Helpers\n/**\n * Generate a segement event tracker for a given course event.\n * @param {string} eventName - segment event name\n * @param {string} courseId - course run identifier\n * @param {[object]} options - optional event data\n */\nexport const courseEventTracker = (eventName, courseId, options = {}) => createEventTracker(\n eventName,\n { category: categories.dashboard, label: courseId, ...options },\n);\n/**\n * Generate a hook to allow components to provide a courseId and link href and provide\n * a link tracker with defined event name and options, over a set of default optiosn.\n * @param {string} eventName - event name for the click event\n * @return {callback} - component hook returning a link tracking event callback\n */\nexport const courseLinkTracker = (eventName) => (courseId, href) => (\n createLinkTracker(module.courseEventTracker(eventName, courseId), href)\n);\n\n// Non-Link events\nexport const courseOptionsDropdownClicked = (courseId) => (\n module.courseEventTracker(eventNames.courseOptionsDropdownClicked, courseId)\n);\n\n// Link events (track and then change page location)\nexport const courseImageClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseImageClicked)(...args));\nexport const courseTitleClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseTitleClicked)(...args));\nexport const enterCourseClicked = (...args) => (\n module.courseLinkTracker(eventNames.enterCourseClicked)(...args));\n\nexport default {\n courseImageClicked,\n courseOptionsDropdownClicked,\n courseTitleClicked,\n enterCourseClicked,\n};\n"]}
1
+ {"version":3,"file":"course.js","sourceRoot":"","sources":["../../../src/tracking/trackers/course.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC,gBAAgB;AAChB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,kBAAkB,CACzF,SAAS,kBACP,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAK,OAAO,EAC9D,CAAC;AACF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAClE,iBAAiB,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CACxE,CAAC;AAEF,kBAAkB;AAClB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CACxD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAC7E,CAAC;AACF,wEAAwE;AACxE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3D,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CACxE,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC7C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAClD,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAC/C,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAEtE,eAAe;IACb,kBAAkB;IAClB,4BAA4B;IAC5B,kBAAkB;IAClB,uBAAuB;IACvB,+BAA+B;IAC/B,oBAAoB;CACrB,CAAC","sourcesContent":["import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../constants';\nimport * as module from './course';\n\n// Utils/Helpers\n/**\n * Generate a segement event tracker for a given course event.\n * @param {string} eventName - segment event name\n * @param {string} courseId - course run identifier\n * @param {[object]} options - optional event data\n */\nexport const courseEventTracker = (eventName, courseId, options = {}) => createEventTracker(\n eventName,\n { category: categories.dashboard, label: courseId, ...options },\n);\n/**\n * Generate a hook to allow components to provide a courseId and link href and provide\n * a link tracker with defined event name and options, over a set of default optiosn.\n * @param {string} eventName - event name for the click event\n * @return {callback} - component hook returning a link tracking event callback\n */\nexport const courseLinkTracker = (eventName) => (courseId, href) => (\n createLinkTracker(module.courseEventTracker(eventName, courseId), href)\n);\n\n// Non-Link events\nexport const courseOptionsDropdownClicked = (courseId) => (\n module.courseEventTracker(eventNames.courseOptionsDropdownClicked, courseId)\n);\n// For target=\"_blank\" links where the browser should handle navigation.\nexport const courseCardExternalActionClicked = (courseId) => (\n module.courseEventTracker(eventNames.courseCardActionClicked, courseId)\n);\n\n// Link events (track and then change page location)\nexport const courseImageClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseImageClicked)(...args));\nexport const courseTitleClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseTitleClicked)(...args));\nexport const courseCardActionClicked = (...args) => (\n module.courseLinkTracker(eventNames.courseCardActionClicked)(...args));\nexport const noCoursesViewClicked = (...args) => (\n module.courseLinkTracker(eventNames.noCoursesViewClicked)(...args));\n\nexport default {\n courseImageClicked,\n courseOptionsDropdownClicked,\n courseTitleClicked,\n courseCardActionClicked,\n courseCardExternalActionClicked,\n noCoursesViewClicked,\n};\n"]}
@@ -0,0 +1,7 @@
1
+ export function programEventTracker(eventName: string, programId: string, options?: object): () => void;
2
+ export function programLinkTracker(eventName: string): callback;
3
+ export function noProgramsViewClicked(href: any): (e: any) => number;
4
+ declare namespace _default {
5
+ export { noProgramsViewClicked };
6
+ }
7
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';
2
+ import { categories, eventNames } from '../constants';
3
+ import * as module from './program';
4
+ // Utils/Helpers
5
+ /**
6
+ * Generate a Segment event tracker for a given program event.
7
+ * @param {string} eventName - Segment event name
8
+ * @param {string} programId - program identifier
9
+ * @param {object} options - optional event data
10
+ */
11
+ export const programEventTracker = (eventName, programId, options = {}) => createEventTracker(eventName, Object.assign({ category: categories.dashboard, programId }, options));
12
+ /**
13
+ * Generate a hook to allow components to provide a programId and link href and provide
14
+ * a link tracker with defined event name and options, over a set of default optiosn.
15
+ * @param {string} eventName - event name for the click event
16
+ * @return {callback} - component hook returning a link tracking event callback
17
+ */
18
+ export const programLinkTracker = (eventName) => (programId, href) => (createLinkTracker(module.programEventTracker(eventName, programId, {}), href));
19
+ // Link events (track and then change page location)
20
+ export const noProgramsViewClicked = (href) => (createLinkTracker(createEventTracker(eventNames.noProgramsViewClicked, {
21
+ category: categories.dashboard,
22
+ control: 'no-programs-view-button',
23
+ }), href));
24
+ export default {
25
+ noProgramsViewClicked,
26
+ };
27
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/tracking/trackers/program.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,gBAAgB;AAChB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAC3F,SAAS,kBACP,QAAQ,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,IAAK,OAAO,EACxD,CAAC;AACF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CACpE,iBAAiB,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAC9E,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAC7C,iBAAiB,CACf,kBAAkB,CAAC,UAAU,CAAC,qBAAqB,EAAE;IACnD,QAAQ,EAAE,UAAU,CAAC,SAAS;IAC9B,OAAO,EAAE,yBAAyB;CACnC,CAAC,EACF,IAAI,CACL,CAAC,CAAC;AAEL,eAAe;IACb,qBAAqB;CACtB,CAAC","sourcesContent":["import { createEventTracker, createLinkTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../constants';\nimport * as module from './program';\n\n// Utils/Helpers\n/**\n * Generate a Segment event tracker for a given program event.\n * @param {string} eventName - Segment event name\n * @param {string} programId - program identifier\n * @param {object} options - optional event data\n */\nexport const programEventTracker = (eventName, programId, options = {}) => createEventTracker(\n eventName,\n { category: categories.dashboard, programId, ...options },\n);\n/**\n * Generate a hook to allow components to provide a programId and link href and provide\n * a link tracker with defined event name and options, over a set of default optiosn.\n * @param {string} eventName - event name for the click event\n * @return {callback} - component hook returning a link tracking event callback\n */\nexport const programLinkTracker = (eventName) => (programId, href) => (\n createLinkTracker(module.programEventTracker(eventName, programId, {}), href)\n);\n\n// Link events (track and then change page location)\nexport const noProgramsViewClicked = (href) => (\n createLinkTracker(\n createEventTracker(eventNames.noProgramsViewClicked, {\n category: categories.dashboard,\n control: 'no-programs-view-button',\n }),\n href,\n ));\n\nexport default {\n noProgramsViewClicked,\n};\n"]}
@@ -0,0 +1,16 @@
1
+ export declare const eventNames: {
2
+ programProgressResumeButtonClicked: string;
3
+ programProgressViewCourseButtonClicked: string;
4
+ programProgressUpgradeWithMySubscriptionButtonClicked: string;
5
+ programProgressViewCertificateButtonClicked: string;
6
+ programProgressHelpCenterButtonClicked: string;
7
+ programProgressMyProgramRecordsButtonClicked: string;
8
+ programProgressReturntoDashboardLinkClicked: string;
9
+ };
10
+ export declare const trackProgramProgressResumeCourseButtonClicked: (eventProperties: any) => void;
11
+ export declare const trackProgramProgressViewCourseButtonClicked: (eventProperties: any) => void;
12
+ export declare const trackProgramProgressViewCertificateButtonClicked: (eventProperties: any) => void;
13
+ export declare const trackProgramProgressReturntoDashboardLinkClicked: (eventProperties: any) => void;
14
+ export declare const trackProgramProgressUpgradeWithMySubscriptionButtonClicked: (eventProperties: any) => void;
15
+ export declare const trackProgramProgressHelpCenterButtonClicked: (eventProperties: any) => void;
16
+ export declare const trackProgramProgressMyProgramRecordsButtonClicked: (eventProperties: any) => void;
@@ -0,0 +1,25 @@
1
+ import { createEventTracker } from '../../data/services/segment/utils';
2
+ export const eventNames = {
3
+ programProgressResumeButtonClicked: 'edx.program.progress.resume.button.clicked',
4
+ programProgressViewCourseButtonClicked: 'edx.program.progress.view.course.button.clicked',
5
+ programProgressUpgradeWithMySubscriptionButtonClicked: 'edx.program.progress.upgrade.with.my.subscription.button.clicked',
6
+ programProgressViewCertificateButtonClicked: 'edx.program.progress.view.certificate.button.clicked',
7
+ programProgressHelpCenterButtonClicked: 'edx.program.progress.my.help.center.button.clicked',
8
+ programProgressMyProgramRecordsButtonClicked: 'edx.program.progress.my.program.records.button.clicked',
9
+ programProgressReturntoDashboardLinkClicked: 'edx.program.progress.return.to.dashboard.link.clicked',
10
+ };
11
+ // Event tracker for program progress resume button click
12
+ export const trackProgramProgressResumeCourseButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressResumeButtonClicked, Object.assign({}, eventProperties))();
13
+ // Event tracker for program progress view course button click
14
+ export const trackProgramProgressViewCourseButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressViewCourseButtonClicked, Object.assign({}, eventProperties))();
15
+ // Event tracker for program progress view certificate button click
16
+ export const trackProgramProgressViewCertificateButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressViewCertificateButtonClicked, Object.assign({}, eventProperties))();
17
+ // Event tracker for program progress return to dashboard link click
18
+ export const trackProgramProgressReturntoDashboardLinkClicked = (eventProperties) => createEventTracker(eventNames.programProgressReturntoDashboardLinkClicked, Object.assign({}, eventProperties))();
19
+ // Event tracker for program progress upgrade with my subscription button click
20
+ export const trackProgramProgressUpgradeWithMySubscriptionButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressUpgradeWithMySubscriptionButtonClicked, Object.assign({}, eventProperties))();
21
+ // Event tracker for program progress help center button click
22
+ export const trackProgramProgressHelpCenterButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressHelpCenterButtonClicked, Object.assign({}, eventProperties))();
23
+ // Event tracker for program progress my program records button click
24
+ export const trackProgramProgressMyProgramRecordsButtonClicked = (eventProperties) => createEventTracker(eventNames.programProgressMyProgramRecordsButtonClicked, Object.assign({}, eventProperties))();
25
+ //# sourceMappingURL=programProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programProgress.js","sourceRoot":"","sources":["../../../src/tracking/trackers/programProgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,kCAAkC,EAAE,4CAA4C;IAChF,sCAAsC,EAAE,iDAAiD;IACzF,qDAAqD,EAAE,kEAAkE;IACzH,2CAA2C,EAAE,sDAAsD;IACnG,sCAAsC,EAAE,oDAAoD;IAC5F,4CAA4C,EAAE,wDAAwD;IACtG,2CAA2C,EAAE,uDAAuD;CACrG,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,6CAA6C,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CAClG,UAAU,CAAC,kCAAkC,oBACxC,eAAe,EACrB,EAAE,CAAC;AAEJ,8DAA8D;AAC9D,MAAM,CAAC,MAAM,2CAA2C,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CAChG,UAAU,CAAC,sCAAsC,oBAC5C,eAAe,EACrB,EAAE,CAAC;AAEJ,mEAAmE;AACnE,MAAM,CAAC,MAAM,gDAAgD,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CACrG,UAAU,CAAC,2CAA2C,oBACjD,eAAe,EACrB,EAAE,CAAC;AAEJ,oEAAoE;AACpE,MAAM,CAAC,MAAM,gDAAgD,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CACrG,UAAU,CAAC,2CAA2C,oBACjD,eAAe,EACrB,EAAE,CAAC;AAEJ,+EAA+E;AAC/E,MAAM,CAAC,MAAM,0DAA0D,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CAC/G,UAAU,CAAC,qDAAqD,oBAC3D,eAAe,EACrB,EAAE,CAAC;AAEJ,8DAA8D;AAC9D,MAAM,CAAC,MAAM,2CAA2C,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CAChG,UAAU,CAAC,sCAAsC,oBAC5C,eAAe,EACrB,EAAE,CAAC;AAEJ,qEAAqE;AACrE,MAAM,CAAC,MAAM,iDAAiD,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,kBAAkB,CACtG,UAAU,CAAC,4CAA4C,oBAClD,eAAe,EACrB,EAAE,CAAC","sourcesContent":["import { createEventTracker } from '@src/data/services/segment/utils';\n\nexport const eventNames = {\n programProgressResumeButtonClicked: 'edx.program.progress.resume.button.clicked',\n programProgressViewCourseButtonClicked: 'edx.program.progress.view.course.button.clicked',\n programProgressUpgradeWithMySubscriptionButtonClicked: 'edx.program.progress.upgrade.with.my.subscription.button.clicked',\n programProgressViewCertificateButtonClicked: 'edx.program.progress.view.certificate.button.clicked',\n programProgressHelpCenterButtonClicked: 'edx.program.progress.my.help.center.button.clicked',\n programProgressMyProgramRecordsButtonClicked: 'edx.program.progress.my.program.records.button.clicked',\n programProgressReturntoDashboardLinkClicked: 'edx.program.progress.return.to.dashboard.link.clicked',\n};\n\n// Event tracker for program progress resume button click\nexport const trackProgramProgressResumeCourseButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressResumeButtonClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress view course button click\nexport const trackProgramProgressViewCourseButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressViewCourseButtonClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress view certificate button click\nexport const trackProgramProgressViewCertificateButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressViewCertificateButtonClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress return to dashboard link click\nexport const trackProgramProgressReturntoDashboardLinkClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressReturntoDashboardLinkClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress upgrade with my subscription button click\nexport const trackProgramProgressUpgradeWithMySubscriptionButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressUpgradeWithMySubscriptionButtonClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress help center button click\nexport const trackProgramProgressHelpCenterButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressHelpCenterButtonClicked,\n { ...eventProperties },\n)();\n\n// Event tracker for program progress my program records button click\nexport const trackProgramProgressMyProgramRecordsButtonClicked = (eventProperties) => createEventTracker(\n eventNames.programProgressMyProgramRecordsButtonClicked,\n { ...eventProperties },\n)();\n"]}
@@ -0,0 +1,10 @@
1
+ export declare const eventNames: {
2
+ paginationPageSelected: string;
3
+ cardTileSelected: string;
4
+ subscriptionBannerViewed: string;
5
+ subscriptionBannerDismissed: string;
6
+ subscriptionBannerActionClicked: string;
7
+ manageSubscriptionClicked: string;
8
+ renewSubscriptionClicked: string;
9
+ };
10
+ export declare const trackSubscriptionEvent: (eventName: string, properties?: Record<string, unknown>) => void;
@@ -0,0 +1,12 @@
1
+ import { createEventTracker } from '../../data/services/segment/utils';
2
+ export const eventNames = {
3
+ paginationPageSelected: 'edx.subscription.learner.pagination.page.selected',
4
+ cardTileSelected: 'edx.subscription.learner.card.tile.selected',
5
+ subscriptionBannerViewed: 'edx.subscription.learner.subscription.banner.viewed',
6
+ subscriptionBannerDismissed: 'edx.subscription.learner.subscription.banner.dismissed',
7
+ subscriptionBannerActionClicked: 'edx.subscription.learner.subscription.banner.action.clicked',
8
+ manageSubscriptionClicked: 'edx.subscription.learner.manage.subscription.clicked',
9
+ renewSubscriptionClicked: 'edx.subscription.learner.renew.subscription.clicked',
10
+ };
11
+ export const trackSubscriptionEvent = (eventName, properties = {}) => (createEventTracker(eventName, properties)());
12
+ //# sourceMappingURL=subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../../src/tracking/trackers/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,sBAAsB,EAAE,mDAAmD;IAC3E,gBAAgB,EAAE,6CAA6C;IAC/D,wBAAwB,EAAE,qDAAqD;IAC/E,2BAA2B,EAAE,wDAAwD;IACrF,+BAA+B,EAAE,6DAA6D;IAC9F,yBAAyB,EAAE,sDAAsD;IACjF,wBAAwB,EAAE,qDAAqD;CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAiB,EAAE,aAAsC,EAAE,EAAE,EAAE,CAAC,CACrG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAC5C,CAAC","sourcesContent":["import { createEventTracker } from '@src/data/services/segment/utils';\n\nexport const eventNames = {\n paginationPageSelected: 'edx.subscription.learner.pagination.page.selected',\n cardTileSelected: 'edx.subscription.learner.card.tile.selected',\n subscriptionBannerViewed: 'edx.subscription.learner.subscription.banner.viewed',\n subscriptionBannerDismissed: 'edx.subscription.learner.subscription.banner.dismissed',\n subscriptionBannerActionClicked: 'edx.subscription.learner.subscription.banner.action.clicked',\n manageSubscriptionClicked: 'edx.subscription.learner.manage.subscription.clicked',\n renewSubscriptionClicked: 'edx.subscription.learner.renew.subscription.clicked',\n};\n\nexport const trackSubscriptionEvent = (eventName: string, properties: Record<string, unknown> = {}) => (\n createEventTracker(eventName, properties)()\n);\n"]}
@@ -1,10 +1,20 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef, useEffect } from 'react';
2
3
  import { useProgressiveProfilingQuiz } from '../ProgressiveProfilingQuizProvider';
3
- import { useIntl } from '@openedx/frontend-base';
4
+ import { getAuthenticatedUser, useIntl } from '@openedx/frontend-base';
4
5
  import { Banner } from './Banner';
5
6
  import messages from './messages';
6
7
  import { PROGRESSIVE_PROFILING_USER_STATUS } from '../data/constants';
7
8
  import { trackProgressiveProfilingSearchPageBannerClick } from '../../../tracking/trackers/progressiveProfiling';
9
+ // Prefix is namespaced per-user so a different user (or a cleared/incognito profile) on the
10
+ // same browser is treated as never having seen the auto-opened modal before.
11
+ const AUTO_OPEN_KEY_PREFIX = 'progressiveProfiling.autoOpened.';
12
+ const getAutoOpenKey = () => {
13
+ const user = getAuthenticatedUser();
14
+ if (!(user === null || user === void 0 ? void 0 : user.userId))
15
+ return null;
16
+ return `${AUTO_OPEN_KEY_PREFIX}${user.userId}`;
17
+ };
8
18
  /**
9
19
  * Single slot entry point.
10
20
  * Reads progressive profiling state from context and selects one CTA.
@@ -13,9 +23,31 @@ export const BannerEntry = () => {
13
23
  var _a, _b, _c, _d, _e;
14
24
  const { openModal, answers, progressiveProfileStatus, } = useProgressiveProfilingQuiz();
15
25
  const { formatMessage } = useIntl();
26
+ const hasAttemptedAutoOpen = useRef(false);
27
+ const { status, remainingQuestions } = progressiveProfileStatus || {};
28
+ /*
29
+ Auto-trigger the survey modal the very first time this user (on this browser/device) lands
30
+ on the Search page with a not-started progressive profile. Once opened - regardless of
31
+ whether the user completes, abandons, or closes it - it's flagged as "seen" for that user so
32
+ it never auto-opens again, even if the backend status hasn't caught up yet (e.g. abandoned
33
+ partway through, before any answers were saved).
34
+ */
35
+ useEffect(() => {
36
+ if (hasAttemptedAutoOpen.current)
37
+ return;
38
+ if (!status || status !== PROGRESSIVE_PROFILING_USER_STATUS.NOT_STARTED)
39
+ return;
40
+ const autoOpenKey = getAutoOpenKey();
41
+ if (!autoOpenKey)
42
+ return; // No authenticated user available yet; try again next render.
43
+ if (localStorage.getItem(autoOpenKey))
44
+ return;
45
+ hasAttemptedAutoOpen.current = true;
46
+ localStorage.setItem(autoOpenKey, 'true');
47
+ openModal();
48
+ }, [status, openModal]);
16
49
  if (!progressiveProfileStatus)
17
50
  return null;
18
- const { status, remainingQuestions } = progressiveProfileStatus || {};
19
51
  const learningGoal = (_c = (_b = (_a = answers === null || answers === void 0 ? void 0 : answers['learning-goal']) === null || _a === void 0 ? void 0 : _a.selectedValues) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.replaceAll('-', ' ');
20
52
  const interests = (_e = (_d = answers === null || answers === void 0 ? void 0 : answers['interests-declared']) === null || _d === void 0 ? void 0 : _d.selectedValues) !== null && _e !== void 0 ? _e : [];
21
53
  const formattedInterests = interests.length > 1
@@ -1 +1 @@
1
- {"version":3,"file":"BannerEntry.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/SearchPageBanners/BannerEntry.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,8CAA8C,EAAE,MAAM,6CAA6C,CAAC;AAE7G;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAO,GAAG,EAAE;;IAClC,MAAM,EACJ,SAAS,EACT,OAAO,EACP,wBAAwB,GACzB,GAAG,2BAA2B,EAAE,CAAC;IAClC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,IAAI,CAAC,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,wBAAwB,IAAI,EAAE,CAAC;IAEtE,MAAM,YAAY,GAAG,MAAA,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,eAAe,CAAC,0CAAE,cAAc,0CAAG,CAAC,CAAC,0CAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,oBAAoB,CAAC,0CAAE,cAAc,mCAAI,EAAE,CAAC;IACxE,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QAC7C,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAChE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjB,+DAA+D;IAC/D,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,SAAS,EAAE,CAAC;QACZ,8CAA8C,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF,IAAI,KAAK,GAAc,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/D,IAAI,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAE9D,IAAI,MAAM,KAAK,iCAAiC,CAAC,QAAQ,EAAE,CAAC;QAC1D,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,2BAAS,MAAM,GAAU,EAAE,CAAC,CAAC;QAC1I,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,MAAM,KAAK,iCAAiC,CAAC,UAAU,EAAE,CAAC;QAC5D,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACxE,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAC,MAAM,IAAC,aAAa,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAI,CAAC;AAC5F,CAAC,CAAC","sourcesContent":["import { FC, ReactNode } from 'react';\nimport { useProgressiveProfilingQuiz } from '../ProgressiveProfilingQuizProvider';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { Banner } from './Banner';\nimport messages from './messages';\nimport { PROGRESSIVE_PROFILING_USER_STATUS } from '../data/constants';\nimport { trackProgressiveProfilingSearchPageBannerClick } from '@src/tracking/trackers/progressiveProfiling';\n\n/**\n * Single slot entry point.\n * Reads progressive profiling state from context and selects one CTA.\n */\nexport const BannerEntry: FC = () => {\n const {\n openModal,\n answers,\n progressiveProfileStatus,\n } = useProgressiveProfilingQuiz();\n const { formatMessage } = useIntl();\n\n if (!progressiveProfileStatus) return null;\n\n const { status, remainingQuestions } = progressiveProfileStatus || {};\n\n const learningGoal = answers?.['learning-goal']?.selectedValues?.[0]?.replaceAll('-', ' ');\n const interests = answers?.['interests-declared']?.selectedValues ?? [];\n const formattedInterests = interests.length > 1\n ? `${interests.slice(0, -1).join(', ')} and ${interests.at(-1)}`\n : interests[0];\n\n // Handle button click for the banner and track the click event\n const handleButtonClick = () => {\n openModal();\n trackProgressiveProfilingSearchPageBannerClick({ eventStatus: status });\n };\n\n let title: ReactNode = formatMessage(messages.notStartedTitle);\n let buttonText = formatMessage(messages.notStartedButtonText);\n\n if (status === PROGRESSIVE_PROFILING_USER_STATUS.COMPLETE) {\n title = formatMessage(messages.completeTitle, { learningGoal, interests: formattedInterests, bold: chunks => <strong>{chunks}</strong> });\n buttonText = formatMessage(messages.completeButtonText);\n }\n\n if (status === PROGRESSIVE_PROFILING_USER_STATUS.INCOMPLETE) {\n title = formatMessage(messages.incompleteTitle, { remainingQuestions });\n buttonText = formatMessage(messages.incompleteButtonText);\n }\n\n return <Banner onButtonClick={handleButtonClick} title={title} buttonText={buttonText} />;\n};\n"]}
1
+ {"version":3,"file":"BannerEntry.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/SearchPageBanners/BannerEntry.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, ReactNode, useRef, useEffect } from 'react';\nimport { useProgressiveProfilingQuiz } from '../ProgressiveProfilingQuizProvider';\nimport { getAuthenticatedUser, useIntl } from '@openedx/frontend-base';\n\nimport { Banner } from './Banner';\nimport messages from './messages';\nimport { PROGRESSIVE_PROFILING_USER_STATUS } from '../data/constants';\nimport { trackProgressiveProfilingSearchPageBannerClick } from '@src/tracking/trackers/progressiveProfiling';\n\n// Prefix is namespaced per-user so a different user (or a cleared/incognito profile) on the\n// same browser is treated as never having seen the auto-opened modal before.\nconst AUTO_OPEN_KEY_PREFIX = 'progressiveProfiling.autoOpened.';\n\nconst getAutoOpenKey = (): string | null => {\n const user = getAuthenticatedUser();\n if (!user?.userId) return null;\n return `${AUTO_OPEN_KEY_PREFIX}${user.userId}`;\n};\n\n/**\n * Single slot entry point.\n * Reads progressive profiling state from context and selects one CTA.\n */\nexport const BannerEntry: FC = () => {\n const {\n openModal,\n answers,\n progressiveProfileStatus,\n } = useProgressiveProfilingQuiz();\n const { formatMessage } = useIntl();\n const hasAttemptedAutoOpen = useRef(false);\n const { status, remainingQuestions } = progressiveProfileStatus || {};\n\n /*\n Auto-trigger the survey modal the very first time this user (on this browser/device) lands\n on the Search page with a not-started progressive profile. Once opened - regardless of\n whether the user completes, abandons, or closes it - it's flagged as \"seen\" for that user so\n it never auto-opens again, even if the backend status hasn't caught up yet (e.g. abandoned\n partway through, before any answers were saved).\n */\n useEffect(() => {\n if (hasAttemptedAutoOpen.current) return;\n if (!status || status !== PROGRESSIVE_PROFILING_USER_STATUS.NOT_STARTED) return;\n\n const autoOpenKey = getAutoOpenKey();\n if (!autoOpenKey) return; // No authenticated user available yet; try again next render.\n\n if (localStorage.getItem(autoOpenKey)) return;\n\n hasAttemptedAutoOpen.current = true;\n localStorage.setItem(autoOpenKey, 'true');\n openModal();\n }, [status, openModal]);\n\n if (!progressiveProfileStatus) return null;\n\n const learningGoal = answers?.['learning-goal']?.selectedValues?.[0]?.replaceAll('-', ' ');\n const interests = answers?.['interests-declared']?.selectedValues ?? [];\n const formattedInterests = interests.length > 1\n ? `${interests.slice(0, -1).join(', ')} and ${interests.at(-1)}`\n : interests[0];\n\n // Handle button click for the banner and track the click event\n const handleButtonClick = () => {\n openModal();\n trackProgressiveProfilingSearchPageBannerClick({ eventStatus: status });\n };\n\n let title: ReactNode = formatMessage(messages.notStartedTitle);\n let buttonText = formatMessage(messages.notStartedButtonText);\n\n if (status === PROGRESSIVE_PROFILING_USER_STATUS.COMPLETE) {\n title = formatMessage(messages.completeTitle, { learningGoal, interests: formattedInterests, bold: chunks => <strong>{chunks}</strong> });\n buttonText = formatMessage(messages.completeButtonText);\n }\n\n if (status === PROGRESSIVE_PROFILING_USER_STATUS.INCOMPLETE) {\n title = formatMessage(messages.incompleteTitle, { remainingQuestions });\n buttonText = formatMessage(messages.incompleteButtonText);\n }\n\n return <Banner onButtonClick={handleButtonClick} title={title} buttonText={buttonText} />;\n};\n"]}
@@ -27,7 +27,7 @@ const messages = defineMessages({
27
27
  },
28
28
  completeButtonText: {
29
29
  id: 'progressiveProfiling.searchPage.banner.complete.buttonText',
30
- defaultMessage: 'Share my goals',
30
+ defaultMessage: 'Update my goals',
31
31
  description: 'Button text to be shown on banner when the progressive profiling quiz is complete',
32
32
  },
33
33
  });
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/SearchPageBanners/messages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,eAAe,EAAE;QACf,EAAE,EAAE,yDAAyD;QAC7D,cAAc,EAAE,4BAA4B;QAC5C,WAAW,EAAE,sFAAsF;KACpG;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,4FAA4F;KAC1G;IACD,eAAe,EAAE;QACf,EAAE,EAAE,yDAAyD;QAC7D,cAAc,EAAE,iJAAiJ;QACjK,WAAW,EAAE,+EAA+E;KAC7F;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,qFAAqF;KACnG;IACD,aAAa,EAAE;QACb,EAAE,EAAE,uDAAuD;QAC3D,cAAc,EAAE,4FAA4F;QAC5G,WAAW,EAAE,6EAA6E;KAC3F;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,4DAA4D;QAChE,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,mFAAmF;KACjG;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n notStartedTitle: {\n id: 'progressiveProfiling.searchPage.banner.notStarted.title',\n defaultMessage: 'What do you want to learn?',\n description: 'Title to be shown on banner when the progressive profiling quiz has not been started',\n },\n notStartedButtonText: {\n id: 'progressiveProfiling.searchPage.banner.notStarted.buttonText',\n defaultMessage: 'Share my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz has not been started',\n },\n incompleteTitle: {\n id: 'progressiveProfiling.searchPage.banner.incomplete.title',\n defaultMessage: 'Answer {remainingQuestions, plural, =0 {# more question} one {# more question} other {# more questions}} and get better course recommendations.',\n description: 'Title to be shown on banner when the progressive profiling quiz is incomplete',\n },\n incompleteButtonText: {\n id: 'progressiveProfiling.searchPage.banner.incomplete.buttonText',\n defaultMessage: 'Finish sharing my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz is incomplete',\n },\n completeTitle: {\n id: 'progressiveProfiling.searchPage.banner.complete.title',\n defaultMessage: 'Your learning on edX to <bold>{learningGoal}</bold> and you\\'re interested in {interests}.',\n description: 'Title to be shown on banner when the progressive profiling quiz is complete',\n },\n completeButtonText: {\n id: 'progressiveProfiling.searchPage.banner.complete.buttonText',\n defaultMessage: 'Share my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz is complete',\n },\n});\n\nexport default messages;\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/SearchPageBanners/messages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,eAAe,EAAE;QACf,EAAE,EAAE,yDAAyD;QAC7D,cAAc,EAAE,4BAA4B;QAC5C,WAAW,EAAE,sFAAsF;KACpG;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,gBAAgB;QAChC,WAAW,EAAE,4FAA4F;KAC1G;IACD,eAAe,EAAE;QACf,EAAE,EAAE,yDAAyD;QAC7D,cAAc,EAAE,iJAAiJ;QACjK,WAAW,EAAE,+EAA+E;KAC7F;IACD,oBAAoB,EAAE;QACpB,EAAE,EAAE,8DAA8D;QAClE,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,qFAAqF;KACnG;IACD,aAAa,EAAE;QACb,EAAE,EAAE,uDAAuD;QAC3D,cAAc,EAAE,4FAA4F;QAC5G,WAAW,EAAE,6EAA6E;KAC3F;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,4DAA4D;QAChE,cAAc,EAAE,iBAAiB;QACjC,WAAW,EAAE,mFAAmF;KACjG;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n notStartedTitle: {\n id: 'progressiveProfiling.searchPage.banner.notStarted.title',\n defaultMessage: 'What do you want to learn?',\n description: 'Title to be shown on banner when the progressive profiling quiz has not been started',\n },\n notStartedButtonText: {\n id: 'progressiveProfiling.searchPage.banner.notStarted.buttonText',\n defaultMessage: 'Share my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz has not been started',\n },\n incompleteTitle: {\n id: 'progressiveProfiling.searchPage.banner.incomplete.title',\n defaultMessage: 'Answer {remainingQuestions, plural, =0 {# more question} one {# more question} other {# more questions}} and get better course recommendations.',\n description: 'Title to be shown on banner when the progressive profiling quiz is incomplete',\n },\n incompleteButtonText: {\n id: 'progressiveProfiling.searchPage.banner.incomplete.buttonText',\n defaultMessage: 'Finish sharing my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz is incomplete',\n },\n completeTitle: {\n id: 'progressiveProfiling.searchPage.banner.complete.title',\n defaultMessage: 'Your learning on edX to <bold>{learningGoal}</bold> and you\\'re interested in {interests}.',\n description: 'Title to be shown on banner when the progressive profiling quiz is complete',\n },\n completeButtonText: {\n id: 'progressiveProfiling.searchPage.banner.complete.buttonText',\n defaultMessage: 'Update my goals',\n description: 'Button text to be shown on banner when the progressive profiling quiz is complete',\n },\n});\n\nexport default messages;\n"]}
@@ -8,6 +8,6 @@ export type ProgressiveProfilingQuizStepKey = typeof PROGRESSIVE_PROFILING_QUIZ_
8
8
  export declare const PROGRESSIVE_PROFILING_USER_STATUS: {
9
9
  readonly INCOMPLETE: "incomplete";
10
10
  readonly COMPLETE: "complete";
11
- readonly NOT_STARTED: "not-started";
11
+ readonly NOT_STARTED: "not_started";
12
12
  };
13
13
  export declare const getProgressiveProfilingStepName: (stepIndex: number) => ProgressiveProfilingQuizStepKey | undefined;
@@ -7,7 +7,7 @@ export const PROGRESSIVE_PROFILING_QUIZ_STEPS = {
7
7
  export const PROGRESSIVE_PROFILING_USER_STATUS = {
8
8
  INCOMPLETE: 'incomplete',
9
9
  COMPLETE: 'complete',
10
- NOT_STARTED: 'not-started',
10
+ NOT_STARTED: 'not_started',
11
11
  };
12
12
  export const getProgressiveProfilingStepName = (stepIndex) => (Object.values(PROGRESSIVE_PROFILING_QUIZ_STEPS)[stepIndex]);
13
13
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/data/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;CAClB,CAAC;AAKX,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,SAAiB,EAA+C,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC","sourcesContent":["export const PROGRESSIVE_PROFILING_QUIZ_STEPS = {\n LEARNING_GOAL: 'learning-goal',\n LEARNING_MOTIVATION: 'learning-motivation',\n INTERESTS_DECLARED: 'interests-declared',\n WORK_STATUS: 'work-status',\n} as const;\n\nexport type ProgressiveProfilingQuizStepKey =\n typeof PROGRESSIVE_PROFILING_QUIZ_STEPS[keyof typeof PROGRESSIVE_PROFILING_QUIZ_STEPS];\n\nexport const PROGRESSIVE_PROFILING_USER_STATUS = {\n INCOMPLETE: 'incomplete',\n COMPLETE: 'complete',\n NOT_STARTED: 'not-started',\n} as const;\n\nexport const getProgressiveProfilingStepName = (stepIndex: number): ProgressiveProfilingQuizStepKey | undefined => (Object.values(PROGRESSIVE_PROFILING_QUIZ_STEPS)[stepIndex]);\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/widgets/ProgressiveProfilingQuiz/data/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;CAClB,CAAC;AAKX,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,SAAiB,EAA+C,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC","sourcesContent":["export const PROGRESSIVE_PROFILING_QUIZ_STEPS = {\n LEARNING_GOAL: 'learning-goal',\n LEARNING_MOTIVATION: 'learning-motivation',\n INTERESTS_DECLARED: 'interests-declared',\n WORK_STATUS: 'work-status',\n} as const;\n\nexport type ProgressiveProfilingQuizStepKey =\n typeof PROGRESSIVE_PROFILING_QUIZ_STEPS[keyof typeof PROGRESSIVE_PROFILING_QUIZ_STEPS];\n\nexport const PROGRESSIVE_PROFILING_USER_STATUS = {\n INCOMPLETE: 'incomplete',\n COMPLETE: 'complete',\n NOT_STARTED: 'not_started',\n} as const;\n\nexport const getProgressiveProfilingStepName = (stepIndex: number): ProgressiveProfilingQuizStepKey | undefined => (Object.values(PROGRESSIVE_PROFILING_QUIZ_STEPS)[stepIndex]);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-app-subscription-learner-dashboard",
3
- "version": "1.56.0",
3
+ "version": "1.58.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",