@edx/frontend-app-subscription-learner-dashboard 1.9.0 → 1.11.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 (57) hide show
  1. package/dist/assets/Unlimited.svg +23 -0
  2. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js +4 -4
  3. package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js.map +1 -1
  4. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js +4 -4
  5. package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js.map +1 -1
  6. package/dist/containers/CourseCard/components/CourseCardActions/index.js +3 -2
  7. package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -1
  8. package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js +2 -2
  9. package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js.map +1 -1
  10. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +2 -2
  11. package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js.map +1 -1
  12. package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js +2 -2
  13. package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js.map +1 -1
  14. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +3 -0
  15. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -1
  16. package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js +2 -2
  17. package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js.map +1 -1
  18. package/dist/containers/CourseFilterControls/CourseFilterControls.js +3 -3
  19. package/dist/containers/CourseFilterControls/CourseFilterControls.js.map +1 -1
  20. package/dist/containers/CoursesPanel/NoCoursesView/index.js +2 -2
  21. package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -1
  22. package/dist/containers/CoursesPanel/index.js +4 -3
  23. package/dist/containers/CoursesPanel/index.js.map +1 -1
  24. package/dist/containers/Dashboard/index.js +3 -3
  25. package/dist/containers/Dashboard/index.js.map +1 -1
  26. package/dist/data/hooks/index.d.ts +2 -2
  27. package/dist/data/hooks/index.js +2 -2
  28. package/dist/data/hooks/index.js.map +1 -1
  29. package/dist/data/hooks/queryHooks.d.ts +165 -2
  30. package/dist/data/hooks/queryHooks.js +34 -8
  31. package/dist/data/hooks/queryHooks.js.map +1 -1
  32. package/dist/data/hooks/queryKeys.d.ts +2 -1
  33. package/dist/data/hooks/queryKeys.js +2 -1
  34. package/dist/data/hooks/queryKeys.js.map +1 -1
  35. package/dist/data/services/subs/api.d.ts +2 -0
  36. package/dist/data/services/subs/api.js +11 -0
  37. package/dist/data/services/subs/api.js.map +1 -1
  38. package/dist/data/services/subs/index.d.ts +1 -1
  39. package/dist/data/services/subs/index.js +1 -1
  40. package/dist/data/services/subs/index.js.map +1 -1
  41. package/dist/data/services/subs/urls.d.ts +3 -0
  42. package/dist/data/services/subs/urls.js +10 -0
  43. package/dist/data/services/subs/urls.js.map +1 -1
  44. package/dist/hooks/useCourseData.js +2 -2
  45. package/dist/hooks/useCourseData.js.map +1 -1
  46. package/dist/hooks/useIsMasquerading.js +2 -2
  47. package/dist/hooks/useIsMasquerading.js.map +1 -1
  48. package/dist/messages.d.ts +25 -0
  49. package/dist/messages.js +25 -0
  50. package/dist/messages.js.map +1 -1
  51. package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +2 -2
  52. package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js.map +1 -1
  53. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +2 -2
  54. package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js.map +1 -1
  55. package/dist/widgets/LearnerDashboardHeader/app.js +31 -0
  56. package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -1
  57. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { useSelectSessionModal } from '../../data/context';
4
- import { useInitializeLearnerHome } from '../../data/hooks';
4
+ import { useInitializeSubsCourseDashboard } from '../../data/hooks';
5
5
  import SelectSessionModal from '../../containers/SelectSessionModal';
6
6
  import DashboardTabs from './DashboardTabs';
7
7
  import DashboardModalSlot from '../../slots/DashboardModalSlot';
@@ -13,11 +13,11 @@ import './index.scss';
13
13
  import { SubscriptionBanner } from '../SubscriptionBanner';
14
14
  import { DashboardTitle } from './DashboardTitle';
15
15
  export const Dashboard = () => {
16
- const { data, isPending } = useInitializeLearnerHome();
16
+ const { data, isPending } = useInitializeSubsCourseDashboard();
17
17
  const { pageTitle } = hooks.useDashboardMessages();
18
18
  const { selectSessionModal } = useSelectSessionModal();
19
19
  const showSelectSessionModal = selectSessionModal.cardId !== null;
20
- const hasCourses = useMemo(() => { var _a; return ((_a = data === null || data === void 0 ? void 0 : data.courses) === null || _a === void 0 ? void 0 : _a.length) > 0; }, [data]);
20
+ const hasCourses = useMemo(() => { var _a; return ((_a = data === null || data === void 0 ? void 0 : data.subscriptionCourses) === null || _a === void 0 ? void 0 : _a.length) > 0; }, [data]);
21
21
  return (_jsx("div", { id: "learnerdashboardroot", children: _jsx("main", { children: _jsxs("div", { id: "dashboard-container", className: "d-flex flex-column p-2 pt-0", children: [_jsx("h1", { className: "sr-only", children: pageTitle }), !isPending && (_jsxs(_Fragment, { children: [_jsx(DashboardModalSlot, {}), (hasCourses && showSelectSessionModal) && _jsx(SelectSessionModal, {})] })), _jsx("div", { id: "dashboard-content", "data-testid": "dashboard-content", children: isPending
22
22
  ? (_jsx(LoadingView, {}))
23
23
  : (_jsxs(DashboardLayout, { children: [_jsx(SubscriptionBanner, {}), _jsx(DashboardTitle, {}), _jsx(DashboardTabs, {}), _jsx(RecentlyViewedPanel, {})] })) })] }) }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,mBAAmB,MAAM,wBAAwB,CAAC;AAEzD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,wBAAwB,EAAE,CAAC;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACnD,MAAM,EAAE,kBAAkB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACvD,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,KAAK,IAAI,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,0CAAE,MAAM,IAAG,CAAC,CAAA,EAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,OAAO,CACL,cAAK,EAAE,EAAC,sBAAsB,YAC5B,yBACE,eAAK,EAAE,EAAC,qBAAqB,EAAC,SAAS,EAAC,6BAA6B,aACnE,aAAI,SAAS,EAAC,SAAS,YAAE,SAAS,GAAM,EACvC,CAAC,SAAS,IAAI,CACb,8BACE,KAAC,kBAAkB,KAAG,EACrB,CAAC,UAAU,IAAI,sBAAsB,CAAC,IAAI,KAAC,kBAAkB,KAAG,IAChE,CACJ,EACD,cAAK,EAAE,EAAC,mBAAmB,iBAAa,mBAAmB,YACxD,SAAS;4BACR,CAAC,CAAC,CAAC,KAAC,WAAW,KAAG,CAAC;4BACnB,CAAC,CAAC,CACA,MAAC,eAAe,eACd,KAAC,kBAAkB,KAAG,EACtB,KAAC,cAAc,KAAG,EAClB,KAAC,aAAa,KAAG,EACjB,KAAC,mBAAmB,KAAG,IACP,CACnB,GACC,IACF,GACD,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { useMemo } from 'react';\n\nimport { useSelectSessionModal } from '@src/data/context';\nimport { useInitializeLearnerHome } from '@src/data/hooks';\nimport SelectSessionModal from '../../containers/SelectSessionModal';\nimport DashboardTabs from './DashboardTabs';\nimport DashboardModalSlot from '../../slots/DashboardModalSlot';\nimport RecentlyViewedPanel from '../RecentlyViewedPanel';\n\nimport LoadingView from './LoadingView';\nimport DashboardLayout from './DashboardLayout';\n\nimport hooks from './hooks';\nimport './index.scss';\nimport { SubscriptionBanner } from '../SubscriptionBanner';\nimport { DashboardTitle } from './DashboardTitle';\n\nexport const Dashboard = () => {\n const { data, isPending } = useInitializeLearnerHome();\n const { pageTitle } = hooks.useDashboardMessages();\n const { selectSessionModal } = useSelectSessionModal();\n const showSelectSessionModal = selectSessionModal.cardId !== null;\n\n const hasCourses = useMemo(() => data?.courses?.length > 0, [data]);\n\n return (\n <div id=\"learnerdashboardroot\">\n <main>\n <div id=\"dashboard-container\" className=\"d-flex flex-column p-2 pt-0\">\n <h1 className=\"sr-only\">{pageTitle}</h1>\n {!isPending && (\n <>\n <DashboardModalSlot />\n {(hasCourses && showSelectSessionModal) && <SelectSessionModal />}\n </>\n )}\n <div id=\"dashboard-content\" data-testid=\"dashboard-content\">\n {isPending\n ? (<LoadingView />)\n : (\n <DashboardLayout>\n <SubscriptionBanner />\n <DashboardTitle />\n <DashboardTabs />\n <RecentlyViewedPanel />\n </DashboardLayout>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default Dashboard;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,mBAAmB,MAAM,wBAAwB,CAAC;AAEzD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gCAAgC,EAAE,CAAC;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACnD,MAAM,EAAE,kBAAkB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACvD,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,KAAK,IAAI,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,0CAAE,MAAM,IAAG,CAAC,CAAA,EAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhF,OAAO,CACL,cAAK,EAAE,EAAC,sBAAsB,YAC5B,yBACE,eAAK,EAAE,EAAC,qBAAqB,EAAC,SAAS,EAAC,6BAA6B,aACnE,aAAI,SAAS,EAAC,SAAS,YAAE,SAAS,GAAM,EACvC,CAAC,SAAS,IAAI,CACb,8BACE,KAAC,kBAAkB,KAAG,EACrB,CAAC,UAAU,IAAI,sBAAsB,CAAC,IAAI,KAAC,kBAAkB,KAAG,IAChE,CACJ,EACD,cAAK,EAAE,EAAC,mBAAmB,iBAAa,mBAAmB,YACxD,SAAS;4BACR,CAAC,CAAC,CAAC,KAAC,WAAW,KAAG,CAAC;4BACnB,CAAC,CAAC,CACA,MAAC,eAAe,eACd,KAAC,kBAAkB,KAAG,EACtB,KAAC,cAAc,KAAG,EAClB,KAAC,aAAa,KAAG,EACjB,KAAC,mBAAmB,KAAG,IACP,CACnB,GACC,IACF,GACD,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { useMemo } from 'react';\n\nimport { useSelectSessionModal } from '@src/data/context';\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\nimport SelectSessionModal from '../../containers/SelectSessionModal';\nimport DashboardTabs from './DashboardTabs';\nimport DashboardModalSlot from '../../slots/DashboardModalSlot';\nimport RecentlyViewedPanel from '../RecentlyViewedPanel';\n\nimport LoadingView from './LoadingView';\nimport DashboardLayout from './DashboardLayout';\n\nimport hooks from './hooks';\nimport './index.scss';\nimport { SubscriptionBanner } from '../SubscriptionBanner';\nimport { DashboardTitle } from './DashboardTitle';\n\nexport const Dashboard = () => {\n const { data, isPending } = useInitializeSubsCourseDashboard();\n const { pageTitle } = hooks.useDashboardMessages();\n const { selectSessionModal } = useSelectSessionModal();\n const showSelectSessionModal = selectSessionModal.cardId !== null;\n\n const hasCourses = useMemo(() => data?.subscriptionCourses?.length > 0, [data]);\n\n return (\n <div id=\"learnerdashboardroot\">\n <main>\n <div id=\"dashboard-container\" className=\"d-flex flex-column p-2 pt-0\">\n <h1 className=\"sr-only\">{pageTitle}</h1>\n {!isPending && (\n <>\n <DashboardModalSlot />\n {(hasCourses && showSelectSessionModal) && <SelectSessionModal />}\n </>\n )}\n <div id=\"dashboard-content\" data-testid=\"dashboard-content\">\n {isPending\n ? (<LoadingView />)\n : (\n <DashboardLayout>\n <SubscriptionBanner />\n <DashboardTitle />\n <DashboardTabs />\n <RecentlyViewedPanel />\n </DashboardLayout>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default Dashboard;\n"]}
@@ -1,3 +1,3 @@
1
- import { useInitializeLearnerHome, useProgramsListData, useProgramProgressData } from './queryHooks';
1
+ import { useInitializeSubsDashboard, useProgramsListData, useProgramProgressData, useInitializeSubsCourseDashboard } from './queryHooks';
2
2
  import { useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail } from './mutationHooks';
3
- export { useInitializeLearnerHome, useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail, useProgramsListData, useProgramProgressData, };
3
+ export { useInitializeSubsDashboard, useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail, useProgramsListData, useProgramProgressData, useInitializeSubsCourseDashboard, };
@@ -1,4 +1,4 @@
1
- import { useInitializeLearnerHome, useProgramsListData, useProgramProgressData } from './queryHooks';
1
+ import { useInitializeSubsDashboard, useProgramsListData, useProgramProgressData, useInitializeSubsCourseDashboard } from './queryHooks';
2
2
  import { useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail, } from './mutationHooks';
3
- export { useInitializeLearnerHome, useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail, useProgramsListData, useProgramProgressData, };
3
+ export { useInitializeSubsDashboard, useUnenrollFromCourse, useUpdateEntitlementEnrollment, useDeleteEntitlementEnrollment, useUpdateEmailSettings, useCreateCreditRequest, useSendConfirmEmail, useProgramsListData, useProgramProgressData, useInitializeSubsCourseDashboard, };
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EACL,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,CAAC","sourcesContent":["import { useInitializeLearnerHome, useProgramsListData, useProgramProgressData } from './queryHooks';\nimport {\n useUnenrollFromCourse,\n useUpdateEntitlementEnrollment,\n useDeleteEntitlementEnrollment,\n useUpdateEmailSettings,\n useCreateCreditRequest,\n useSendConfirmEmail,\n} from './mutationHooks';\n\nexport {\n useInitializeLearnerHome,\n useUnenrollFromCourse,\n useUpdateEntitlementEnrollment,\n useDeleteEntitlementEnrollment,\n useUpdateEmailSettings,\n useCreateCreditRequest,\n useSendConfirmEmail,\n useProgramsListData,\n useProgramProgressData,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/data/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AACzI,OAAO,EACL,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,gCAAgC,GACjC,CAAC","sourcesContent":["import { useInitializeSubsDashboard, useProgramsListData, useProgramProgressData, useInitializeSubsCourseDashboard } from './queryHooks';\nimport {\n useUnenrollFromCourse,\n useUpdateEntitlementEnrollment,\n useDeleteEntitlementEnrollment,\n useUpdateEmailSettings,\n useCreateCreditRequest,\n useSendConfirmEmail,\n} from './mutationHooks';\n\nexport {\n useInitializeSubsDashboard,\n useUnenrollFromCourse,\n useUpdateEntitlementEnrollment,\n useDeleteEntitlementEnrollment,\n useUpdateEmailSettings,\n useCreateCreditRequest,\n useSendConfirmEmail,\n useProgramsListData,\n useProgramProgressData,\n useInitializeSubsCourseDashboard,\n};\n"]}
@@ -1,5 +1,168 @@
1
1
  import { ProgramListData, ProgramProgressData } from '@src/containers/ProgramDashboard/data/types';
2
- declare const useInitializeLearnerHome: () => {
2
+ declare const useInitializeSubsDashboard: () => {
3
+ data: any;
4
+ error: any;
5
+ isError: true;
6
+ isPending: false;
7
+ isLoading: false;
8
+ isLoadingError: false;
9
+ isRefetchError: true;
10
+ isSuccess: false;
11
+ isPlaceholderData: false;
12
+ status: "error";
13
+ dataUpdatedAt: number;
14
+ errorUpdatedAt: number;
15
+ failureCount: number;
16
+ failureReason: any;
17
+ errorUpdateCount: number;
18
+ isFetched: boolean;
19
+ isFetchedAfterMount: boolean;
20
+ isFetching: boolean;
21
+ isInitialLoading: boolean;
22
+ isPaused: boolean;
23
+ isRefetching: boolean;
24
+ isStale: boolean;
25
+ isEnabled: boolean;
26
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
27
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
28
+ promise: Promise<any>;
29
+ } | {
30
+ data: any;
31
+ error: null;
32
+ isError: false;
33
+ isPending: false;
34
+ isLoading: false;
35
+ isLoadingError: false;
36
+ isRefetchError: false;
37
+ isSuccess: true;
38
+ isPlaceholderData: false;
39
+ status: "success";
40
+ dataUpdatedAt: number;
41
+ errorUpdatedAt: number;
42
+ failureCount: number;
43
+ failureReason: any;
44
+ errorUpdateCount: number;
45
+ isFetched: boolean;
46
+ isFetchedAfterMount: boolean;
47
+ isFetching: boolean;
48
+ isInitialLoading: boolean;
49
+ isPaused: boolean;
50
+ isRefetching: boolean;
51
+ isStale: boolean;
52
+ isEnabled: boolean;
53
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
54
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
55
+ promise: Promise<any>;
56
+ } | {
57
+ data: any;
58
+ error: any;
59
+ isError: true;
60
+ isPending: false;
61
+ isLoading: false;
62
+ isLoadingError: true;
63
+ isRefetchError: false;
64
+ isSuccess: false;
65
+ isPlaceholderData: false;
66
+ status: "error";
67
+ dataUpdatedAt: number;
68
+ errorUpdatedAt: number;
69
+ failureCount: number;
70
+ failureReason: any;
71
+ errorUpdateCount: number;
72
+ isFetched: boolean;
73
+ isFetchedAfterMount: boolean;
74
+ isFetching: boolean;
75
+ isInitialLoading: boolean;
76
+ isPaused: boolean;
77
+ isRefetching: boolean;
78
+ isStale: boolean;
79
+ isEnabled: boolean;
80
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
81
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
82
+ promise: Promise<any>;
83
+ } | {
84
+ data: any;
85
+ error: null;
86
+ isError: false;
87
+ isPending: true;
88
+ isLoading: true;
89
+ isLoadingError: false;
90
+ isRefetchError: false;
91
+ isSuccess: false;
92
+ isPlaceholderData: false;
93
+ status: "pending";
94
+ dataUpdatedAt: number;
95
+ errorUpdatedAt: number;
96
+ failureCount: number;
97
+ failureReason: any;
98
+ errorUpdateCount: number;
99
+ isFetched: boolean;
100
+ isFetchedAfterMount: boolean;
101
+ isFetching: boolean;
102
+ isInitialLoading: boolean;
103
+ isPaused: boolean;
104
+ isRefetching: boolean;
105
+ isStale: boolean;
106
+ isEnabled: boolean;
107
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
108
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
109
+ promise: Promise<any>;
110
+ } | {
111
+ data: any;
112
+ error: null;
113
+ isError: false;
114
+ isPending: true;
115
+ isLoadingError: false;
116
+ isRefetchError: false;
117
+ isSuccess: false;
118
+ isPlaceholderData: false;
119
+ status: "pending";
120
+ dataUpdatedAt: number;
121
+ errorUpdatedAt: number;
122
+ failureCount: number;
123
+ failureReason: any;
124
+ errorUpdateCount: number;
125
+ isFetched: boolean;
126
+ isFetchedAfterMount: boolean;
127
+ isFetching: boolean;
128
+ isLoading: boolean;
129
+ isInitialLoading: boolean;
130
+ isPaused: boolean;
131
+ isRefetching: boolean;
132
+ isStale: boolean;
133
+ isEnabled: boolean;
134
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
135
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
136
+ promise: Promise<any>;
137
+ } | {
138
+ data: any;
139
+ isError: false;
140
+ error: null;
141
+ isPending: false;
142
+ isLoading: false;
143
+ isLoadingError: false;
144
+ isRefetchError: false;
145
+ isSuccess: true;
146
+ isPlaceholderData: true;
147
+ status: "success";
148
+ dataUpdatedAt: number;
149
+ errorUpdatedAt: number;
150
+ failureCount: number;
151
+ failureReason: any;
152
+ errorUpdateCount: number;
153
+ isFetched: boolean;
154
+ isFetchedAfterMount: boolean;
155
+ isFetching: boolean;
156
+ isInitialLoading: boolean;
157
+ isPaused: boolean;
158
+ isRefetching: boolean;
159
+ isStale: boolean;
160
+ isEnabled: boolean;
161
+ refetch: (options?: import("@tanstack/query-core").RefetchOptions) => Promise<import("@tanstack/query-core").QueryObserverResult<any, any>>;
162
+ fetchStatus: import("@tanstack/query-core").FetchStatus;
163
+ promise: Promise<any>;
164
+ };
165
+ declare const useInitializeSubsCourseDashboard: () => {
3
166
  data: any;
4
167
  error: any;
5
168
  isError: true;
@@ -164,4 +327,4 @@ declare const useInitializeLearnerHome: () => {
164
327
  };
165
328
  declare const useProgramsListData: () => import("@tanstack/react-query").UseQueryResult<ProgramListData, Error>;
166
329
  declare const useProgramProgressData: (uuid: string) => import("@tanstack/react-query").UseQueryResult<ProgramProgressData, Error>;
167
- export { useInitializeLearnerHome, useProgramProgressData, useProgramsListData, };
330
+ export { useInitializeSubsDashboard, useInitializeSubsCourseDashboard, useProgramProgressData, useProgramsListData, };
@@ -11,19 +11,18 @@ import { useQuery, useQueryClient } from '@tanstack/react-query';
11
11
  import { useContext, useEffect } from 'react';
12
12
  import { useMasquerade } from '../../data/context';
13
13
  import GlobalDataContext from '../../data/contexts/GlobalDataContext';
14
- import { initializeList, } from '../../data/services/lms/api';
15
14
  import { getTransformedCourseDataObject } from '../../utils/dataTransformers';
16
15
  import { learnerDashboardQueryKeys } from './queryKeys';
17
- import { getProgramProgressData, getProgramsListData } from '../../data/services/subs';
18
- const useInitializeLearnerHome = () => {
16
+ import { getProgramProgressData, getProgramsListData, initializeCourseList, initializeSubsList } from '../../data/services/subs';
17
+ const useInitializeSubsDashboard = () => {
19
18
  const { masqueradeUser } = useMasquerade();
20
19
  const queryClient = useQueryClient();
21
20
  const { setEmailConfirmation, setPlatformSettings } = useContext(GlobalDataContext);
22
21
  const query = useQuery({
23
- queryKey: learnerDashboardQueryKeys.initialize(masqueradeUser),
22
+ queryKey: learnerDashboardQueryKeys.initializeSubsDashboard(masqueradeUser),
24
23
  queryFn: () => __awaiter(void 0, void 0, void 0, function* () {
25
- const data = yield initializeList(masqueradeUser);
26
- return Object.assign(Object.assign({}, data), { coursesByCardId: getTransformedCourseDataObject((data === null || data === void 0 ? void 0 : data.courses) || []) });
24
+ const data = yield initializeSubsList(masqueradeUser);
25
+ return Object.assign({}, data);
27
26
  }),
28
27
  staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing
29
28
  retry: (failureCount, error) => {
@@ -50,7 +49,34 @@ const useInitializeLearnerHome = () => {
50
49
  // When masquerading fails, fall back to the normal user's cached data
51
50
  let { data } = query;
52
51
  if (masqueradeUser && query.isError) {
53
- data = queryClient.getQueryData(learnerDashboardQueryKeys.initialize(undefined));
52
+ data = queryClient.getQueryData(learnerDashboardQueryKeys.initializeSubsDashboard(undefined));
53
+ }
54
+ return Object.assign(Object.assign({}, query), { data });
55
+ };
56
+ const useInitializeSubsCourseDashboard = () => {
57
+ const { masqueradeUser } = useMasquerade();
58
+ const queryClient = useQueryClient();
59
+ const query = useQuery({
60
+ queryKey: learnerDashboardQueryKeys.initializeSubsCourseDashboard(masqueradeUser),
61
+ queryFn: () => __awaiter(void 0, void 0, void 0, function* () {
62
+ const data = yield initializeCourseList(masqueradeUser);
63
+ return Object.assign(Object.assign({}, data), { coursesByCardId: getTransformedCourseDataObject((data === null || data === void 0 ? void 0 : data.subscriptionCourses) || []) });
64
+ }),
65
+ staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing
66
+ retry: (failureCount, error) => {
67
+ var _a, _b;
68
+ // Don't retry client errors (4xx) — they won't resolve on retry
69
+ if (((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) >= 400 && ((_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.status) < 500)
70
+ return false;
71
+ return failureCount < 3;
72
+ },
73
+ retryOnMount: !masqueradeUser,
74
+ refetchOnMount: !masqueradeUser,
75
+ });
76
+ // When masquerading fails, fall back to the normal user's cached data
77
+ let { data } = query;
78
+ if (masqueradeUser && query.isError) {
79
+ data = queryClient.getQueryData(learnerDashboardQueryKeys.initializeSubsCourseDashboard(undefined));
54
80
  }
55
81
  return Object.assign(Object.assign({}, query), { data });
56
82
  };
@@ -71,5 +97,5 @@ const useProgramProgressData = (uuid) => {
71
97
  retry: 2,
72
98
  });
73
99
  };
74
- export { useInitializeLearnerHome, useProgramProgressData, useProgramsListData, };
100
+ export { useInitializeSubsDashboard, useInitializeSubsCourseDashboard, useProgramProgressData, useProgramsListData, };
75
101
  //# sourceMappingURL=queryHooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queryHooks.js","sourceRoot":"","sources":["../../../src/data/hooks/queryHooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useContext, useEffect } from 'react';\nimport { useMasquerade } from '@src/data/context';\nimport GlobalDataContext from '@src/data/contexts/GlobalDataContext';\nimport {\n initializeList,\n} from '@src/data/services/lms/api';\nimport { ProgramListData, ProgramProgressData } from '@src/containers/ProgramDashboard/data/types';\nimport { getTransformedCourseDataObject } from '@src/utils/dataTransformers';\nimport { learnerDashboardQueryKeys } from './queryKeys';\nimport { getProgramProgressData, getProgramsListData } from '@src/data/services/subs';\n\nconst useInitializeLearnerHome = () => {\n const { masqueradeUser } = useMasquerade();\n const queryClient = useQueryClient();\n const { setEmailConfirmation, setPlatformSettings } = useContext(GlobalDataContext);\n\n const query = useQuery({\n queryKey: learnerDashboardQueryKeys.initialize(masqueradeUser),\n queryFn: async () => {\n const data = await initializeList(masqueradeUser);\n return {\n ...data,\n coursesByCardId: getTransformedCourseDataObject(data?.courses || []),\n };\n },\n staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing\n retry: (failureCount, error: any) => {\n // Don't retry client errors (4xx) — they won't resolve on retry\n if (error?.response?.status >= 400 && error?.response?.status < 500) return false;\n return failureCount < 3;\n },\n retryOnMount: !masqueradeUser,\n refetchOnMount: !masqueradeUser,\n });\n\n // Populate shell-level GlobalDataProvider so header widgets can access this data\n useEffect(() => {\n if (query.data && !masqueradeUser) {\n if (query.data.emailConfirmation && setEmailConfirmation) {\n setEmailConfirmation(query.data.emailConfirmation);\n }\n if (query.data.platformSettings && setPlatformSettings) {\n setPlatformSettings(query.data.platformSettings);\n }\n }\n }, [masqueradeUser, query.data, setEmailConfirmation, setPlatformSettings]);\n\n // When masquerading fails, fall back to the normal user's cached data\n let { data } = query;\n if (masqueradeUser && query.isError) {\n data = queryClient.getQueryData(learnerDashboardQueryKeys.initialize(undefined));\n }\n\n return { ...query, data };\n};\n\nconst useProgramsListData = () => {\n return useQuery<ProgramListData>({\n queryKey: ['programsList'],\n queryFn: getProgramsListData,\n retry: false,\n refetchOnWindowFocus: false,\n });\n};\n\nconst useProgramProgressData = (uuid: string) => {\n return useQuery<ProgramProgressData>({\n queryKey: ['programProgress', uuid],\n queryFn: () => getProgramProgressData(uuid),\n enabled: !!uuid,\n staleTime: 1000 * 60 * 5, // 5 min caching\n retry: 2,\n });\n};\n\nexport {\n useInitializeLearnerHome,\n useProgramProgressData,\n useProgramsListData,\n};\n"]}
1
+ {"version":3,"file":"queryHooks.js","sourceRoot":"","sources":["../../../src/data/hooks/queryHooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useContext, useEffect } from 'react';\nimport { useMasquerade } from '@src/data/context';\nimport GlobalDataContext from '@src/data/contexts/GlobalDataContext';\nimport { ProgramListData, ProgramProgressData } from '@src/containers/ProgramDashboard/data/types';\nimport { getTransformedCourseDataObject } from '@src/utils/dataTransformers';\nimport { learnerDashboardQueryKeys } from './queryKeys';\nimport { getProgramProgressData, getProgramsListData, initializeCourseList, initializeSubsList } from '@src/data/services/subs';\n\nconst useInitializeSubsDashboard = () => {\n const { masqueradeUser } = useMasquerade();\n const queryClient = useQueryClient();\n const { setEmailConfirmation, setPlatformSettings } = useContext(GlobalDataContext);\n\n const query = useQuery({\n queryKey: learnerDashboardQueryKeys.initializeSubsDashboard(masqueradeUser),\n queryFn: async () => {\n const data = await initializeSubsList(masqueradeUser);\n return {\n ...data,\n };\n },\n staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing\n retry: (failureCount, error: any) => {\n // Don't retry client errors (4xx) — they won't resolve on retry\n if (error?.response?.status >= 400 && error?.response?.status < 500) return false;\n return failureCount < 3;\n },\n retryOnMount: !masqueradeUser,\n refetchOnMount: !masqueradeUser,\n });\n\n // Populate shell-level GlobalDataProvider so header widgets can access this data\n useEffect(() => {\n if (query.data && !masqueradeUser) {\n if (query.data.emailConfirmation && setEmailConfirmation) {\n setEmailConfirmation(query.data.emailConfirmation);\n }\n if (query.data.platformSettings && setPlatformSettings) {\n setPlatformSettings(query.data.platformSettings);\n }\n }\n }, [masqueradeUser, query.data, setEmailConfirmation, setPlatformSettings]);\n\n // When masquerading fails, fall back to the normal user's cached data\n let { data } = query;\n if (masqueradeUser && query.isError) {\n data = queryClient.getQueryData(learnerDashboardQueryKeys.initializeSubsDashboard(undefined));\n }\n\n return { ...query, data };\n};\n\nconst useInitializeSubsCourseDashboard = () => {\n const { masqueradeUser } = useMasquerade();\n const queryClient = useQueryClient();\n\n const query = useQuery({\n queryKey: learnerDashboardQueryKeys.initializeSubsCourseDashboard(masqueradeUser),\n queryFn: async () => {\n const data = await initializeCourseList(masqueradeUser);\n return {\n ...data,\n coursesByCardId: getTransformedCourseDataObject(data?.subscriptionCourses || []),\n };\n },\n staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing\n retry: (failureCount, error: any) => {\n // Don't retry client errors (4xx) — they won't resolve on retry\n if (error?.response?.status >= 400 && error?.response?.status < 500) return false;\n return failureCount < 3;\n },\n retryOnMount: !masqueradeUser,\n refetchOnMount: !masqueradeUser,\n });\n\n // When masquerading fails, fall back to the normal user's cached data\n let { data } = query;\n if (masqueradeUser && query.isError) {\n data = queryClient.getQueryData(learnerDashboardQueryKeys.initializeSubsCourseDashboard(undefined));\n }\n\n return { ...query, data };\n};\n\nconst useProgramsListData = () => {\n return useQuery<ProgramListData>({\n queryKey: ['programsList'],\n queryFn: getProgramsListData,\n retry: false,\n refetchOnWindowFocus: false,\n });\n};\n\nconst useProgramProgressData = (uuid: string) => {\n return useQuery<ProgramProgressData>({\n queryKey: ['programProgress', uuid],\n queryFn: () => getProgramProgressData(uuid),\n enabled: !!uuid,\n staleTime: 1000 * 60 * 5, // 5 min caching\n retry: 2,\n });\n};\n\nexport {\n useInitializeSubsDashboard,\n useInitializeSubsCourseDashboard,\n useProgramProgressData,\n useProgramsListData,\n};\n"]}
@@ -1,7 +1,8 @@
1
1
  export declare const learnerDashboardQueryKeys: {
2
2
  all: readonly ["learner-dashboard"];
3
3
  initializeBase: () => readonly ["learner-dashboard", "initialize"];
4
- initialize: (masqueradedUser?: string | null) => readonly ["learner-dashboard", "initialize", string | null | undefined];
4
+ initializeSubsDashboard: (masqueradedUser?: string | null) => readonly ["learner-dashboard", "initialize", "learner-home", string | null | undefined];
5
+ initializeSubsCourseDashboard: (masqueradedUser?: string | null) => readonly ["learner-dashboard", "initialize", "subs-course-dashboard", string | null | undefined];
5
6
  };
6
7
  export declare const learnerDashboardMutationKeys: {
7
8
  unenrollFromCourse: () => readonly ["learner-dashboard", "unenrollFromCourse"];
@@ -2,7 +2,8 @@ const BASE_KEY = ['learner-dashboard'];
2
2
  export const learnerDashboardQueryKeys = {
3
3
  all: BASE_KEY,
4
4
  initializeBase: () => [...BASE_KEY, 'initialize'],
5
- initialize: (masqueradedUser) => [...BASE_KEY, 'initialize', masqueradedUser],
5
+ initializeSubsDashboard: (masqueradedUser) => [...BASE_KEY, 'initialize', 'learner-home', masqueradedUser],
6
+ initializeSubsCourseDashboard: (masqueradedUser) => [...BASE_KEY, 'initialize', 'subs-course-dashboard', masqueradedUser],
6
7
  };
7
8
  export const learnerDashboardMutationKeys = {
8
9
  unenrollFromCourse: () => [...BASE_KEY, 'unenrollFromCourse'],
@@ -1 +1 @@
1
- {"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/data/hooks/queryKeys.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,mBAAmB,CAAU,CAAC;AAEhD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAU;IAC1D,UAAU,EAAE,CAAC,eAA+B,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAU;CACvG,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,oBAAoB,CAAU;IACtE,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,6BAA6B,CAAU;IACxF,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,6BAA6B,CAAU;IACxF,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,qBAAqB,CAAU;IACxE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,qBAAqB,CAAU;IACxE,gBAAgB,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,kBAAkB,EAAE,YAAY,CAAU;CACrG,CAAC","sourcesContent":["const BASE_KEY = ['learner-dashboard'] as const;\n\nexport const learnerDashboardQueryKeys = {\n all: BASE_KEY,\n initializeBase: () => [...BASE_KEY, 'initialize'] as const,\n initialize: (masqueradedUser?: string | null) => [...BASE_KEY, 'initialize', masqueradedUser] as const,\n};\n\nexport const learnerDashboardMutationKeys = {\n unenrollFromCourse: () => [...BASE_KEY, 'unenrollFromCourse'] as const,\n updateEntitlementEnrollment: () => [...BASE_KEY, 'updateEntitlementEnrollment'] as const,\n deleteEntitlementEnrollment: () => [...BASE_KEY, 'deleteEntitlementEnrollment'] as const,\n updateEmailSettings: () => [...BASE_KEY, 'updateEmailSettings'] as const,\n createCreditRequest: () => [...BASE_KEY, 'createCreditRequest'] as const,\n sendConfirmEmail: (sendEmailUrl: string) => [...BASE_KEY, 'sendConfirmEmail', sendEmailUrl] as const,\n};\n"]}
1
+ {"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/data/hooks/queryKeys.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,mBAAmB,CAAU,CAAC;AAEhD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAU;IAC1D,uBAAuB,EAAE,CAAC,eAA+B,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,CAAU;IACnI,6BAA6B,EAAE,CAAC,eAA+B,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,EAAE,uBAAuB,EAAE,eAAe,CAAU;CACnJ,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,oBAAoB,CAAU;IACtE,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,6BAA6B,CAAU;IACxF,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,6BAA6B,CAAU;IACxF,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,qBAAqB,CAAU;IACxE,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,qBAAqB,CAAU;IACxE,gBAAgB,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,kBAAkB,EAAE,YAAY,CAAU;CACrG,CAAC","sourcesContent":["const BASE_KEY = ['learner-dashboard'] as const;\n\nexport const learnerDashboardQueryKeys = {\n all: BASE_KEY,\n initializeBase: () => [...BASE_KEY, 'initialize'] as const,\n initializeSubsDashboard: (masqueradedUser?: string | null) => [...BASE_KEY, 'initialize', 'learner-home', masqueradedUser] as const,\n initializeSubsCourseDashboard: (masqueradedUser?: string | null) => [...BASE_KEY, 'initialize', 'subs-course-dashboard', masqueradedUser] as const,\n};\n\nexport const learnerDashboardMutationKeys = {\n unenrollFromCourse: () => [...BASE_KEY, 'unenrollFromCourse'] as const,\n updateEntitlementEnrollment: () => [...BASE_KEY, 'updateEntitlementEnrollment'] as const,\n deleteEntitlementEnrollment: () => [...BASE_KEY, 'deleteEntitlementEnrollment'] as const,\n updateEmailSettings: () => [...BASE_KEY, 'updateEmailSettings'] as const,\n createCreditRequest: () => [...BASE_KEY, 'createCreditRequest'] as const,\n sendConfirmEmail: (sendEmailUrl: string) => [...BASE_KEY, 'sendConfirmEmail', sendEmailUrl] as const,\n};\n"]}
@@ -1,3 +1,5 @@
1
+ export declare const initializeSubsList: (user: any) => Promise<any>;
2
+ export declare const initializeCourseList: (user: any) => Promise<any>;
1
3
  export declare const fetchRecommendedCourses: () => Promise<{
2
4
  id: number;
3
5
  title: string;
@@ -9,6 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { getAuthenticatedHttpClient } from '@openedx/frontend-base';
11
11
  import { programProgressUrl, programsApiUrl } from './urls';
12
+ import { apiKeys } from '../../../data/services/lms/constants';
13
+ import urls from '../../../data/services/subs/urls';
14
+ import { stringifyUrl } from '../../../data/services/lms/utils';
15
+ export const initializeSubsList = (user) => __awaiter(void 0, void 0, void 0, function* () {
16
+ const { data } = yield getAuthenticatedHttpClient().get(stringifyUrl(urls.getSubsInitApiUrl(), { [apiKeys.user]: user }));
17
+ return data;
18
+ });
19
+ export const initializeCourseList = (user) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const { data } = yield getAuthenticatedHttpClient().get(stringifyUrl(urls.getSubsCoursesApiUrl(), { [apiKeys.user]: user }));
21
+ return data;
22
+ });
12
23
  const optimizedData = (data, size) => (data.length > size ? `${data.slice(0, size)}...` : data);
13
24
  export const fetchRecommendedCourses = () => __awaiter(void 0, void 0, void 0, function* () {
14
25
  /* TODO [TEMP]: Replace with actual API call to fetch recommended courses data. For now, returning hardcoded data to simulate the API response. Also, built the test case for the same.
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/data/services/subs/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAuthenticatedHttpClient } from '@openedx/frontend-base';\nimport { programProgressUrl, programsApiUrl } from './urls';\n\nconst optimizedData = (data: string, size: number) => (data.length > size ? `${data.slice(0, size)}...` : data);\n\nexport const fetchRecommendedCourses = async () => {\n /* TODO [TEMP]: Replace with actual API call to fetch recommended courses data. For now, returning hardcoded data to simulate the API response. Also, built the test case for the same.\n Reason: The API endpoint is not yet available and the data structure is still being finalized.\n Action: Revisit after endpoint is made available.\n */\n\n try {\n const finalData = [\n {\n id: 1,\n title: optimizedData('Essence Mascara Lash Princess', 30),\n body: optimizedData('The Essence Mascara Lash Princess is a popular mascara known for its volumizing and lengthening effects. Achieve dramatic lashes with this long-lasting and cruelty-free formula.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 2,\n title: optimizedData('Eyeshadow Palette with Mirror', 30),\n body: optimizedData(\"The Eyeshadow Palette with Mirror offers a versatile range of eyeshadow shades for creating stunning eye looks. With a built-in mirror, it's convenient for on-the-go makeup application.\", 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 3,\n title: optimizedData('Powder Canister', 30),\n body: optimizedData('The Powder Canister is a finely milled setting powder designed to set makeup and control shine. With a lightweight and translucent formula, it provides a smooth and matte finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/thumbnail.webp',\n isProgram: true, // TODO\n tagText: 'Professional Certificate',\n footerLabel: '2 Courses'\n },\n {\n id: 4,\n title: optimizedData('Red Lipstick', 30),\n body: optimizedData('The Red Lipstick is a classic and bold choice for adding a pop of color to your lips. With a creamy and pigmented formula, it provides a vibrant and long-lasting finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n }\n ];\n\n return finalData;\n } catch (error) {\n console.error('Error fetching cards data:', error);\n throw error;\n }\n};\n\nexport const fetchRecentlyViewedCoursesAndPrograms = async () => {\n /* TODO [TEMP]: Replace with actual API call to fetch recently viewed courses and programs data.\n Reason: The API endpoint is not yet available and the data structure is still being finalized.\n Action: Revisit after endpoint is made available.\n */\n\n try {\n const finalData = [\n {\n id: 1,\n title: optimizedData('Data Analytics Fundamentals', 30),\n body: optimizedData('Learn the core concepts of data analytics, including data cleaning, visualization, and basic statistical interpretation.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 2,\n title: optimizedData('Product Management Essentials', 30),\n body: optimizedData('Review the workflows, tools, and communication patterns used by product managers to guide delivery across teams.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 3,\n title: optimizedData('AI Product Strategy', 30),\n body: optimizedData('Continue a professional certificate covering AI roadmap planning, experimentation, and responsible product delivery.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/thumbnail.webp',\n isProgram: true,\n tagText: 'Professional Certificate',\n footerLabel: '3 Courses'\n },\n {\n id: 4,\n title: optimizedData('Red Lipstick', 30),\n body: optimizedData('The Red Lipstick is a classic and bold choice for adding a pop of color to your lips. With a creamy and pigmented formula, it provides a vibrant and long-lasting finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n }\n ];\n\n return finalData;\n } catch (error) {\n console.error('Error fetching recently viewed courses and programs data:', error);\n throw error;\n }\n};\n\nexport const getProgramProgressData = async (uuid: string) => {\n try {\n const { data } = await getAuthenticatedHttpClient().get(programProgressUrl(uuid));\n return data;\n } catch (error) {\n console.error('Error fetching program progress data:', error);\n throw error;\n }\n};\n\nexport const getProgramsListData = async () => {\n try {\n const { data } = await getAuthenticatedHttpClient().get(programsApiUrl());\n return data;\n } catch (error) {\n console.error('Error fetching program list data:', error);\n throw error;\n }\n};\n"]}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/data/services/subs/api.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAuthenticatedHttpClient } from '@openedx/frontend-base';\nimport { programProgressUrl, programsApiUrl } from './urls';\n\nimport { apiKeys } from '@src/data/services/lms/constants';\nimport urls from '@src/data/services/subs/urls';\nimport { stringifyUrl } from '@src/data/services/lms/utils';\n\nexport const initializeSubsList = async (user) => {\n const { data } = await getAuthenticatedHttpClient().get(\n stringifyUrl(urls.getSubsInitApiUrl(), { [apiKeys.user]: user }),\n );\n return data;\n};\n\nexport const initializeCourseList = async (user) => {\n const { data } = await getAuthenticatedHttpClient().get(\n stringifyUrl(urls.getSubsCoursesApiUrl(), { [apiKeys.user]: user }),\n );\n return data;\n};\n\nconst optimizedData = (data: string, size: number) => (data.length > size ? `${data.slice(0, size)}...` : data);\n\nexport const fetchRecommendedCourses = async () => {\n /* TODO [TEMP]: Replace with actual API call to fetch recommended courses data. For now, returning hardcoded data to simulate the API response. Also, built the test case for the same.\n Reason: The API endpoint is not yet available and the data structure is still being finalized.\n Action: Revisit after endpoint is made available.\n */\n\n try {\n const finalData = [\n {\n id: 1,\n title: optimizedData('Essence Mascara Lash Princess', 30),\n body: optimizedData('The Essence Mascara Lash Princess is a popular mascara known for its volumizing and lengthening effects. Achieve dramatic lashes with this long-lasting and cruelty-free formula.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 2,\n title: optimizedData('Eyeshadow Palette with Mirror', 30),\n body: optimizedData(\"The Eyeshadow Palette with Mirror offers a versatile range of eyeshadow shades for creating stunning eye looks. With a built-in mirror, it's convenient for on-the-go makeup application.\", 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 3,\n title: optimizedData('Powder Canister', 30),\n body: optimizedData('The Powder Canister is a finely milled setting powder designed to set makeup and control shine. With a lightweight and translucent formula, it provides a smooth and matte finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/thumbnail.webp',\n isProgram: true, // TODO\n tagText: 'Professional Certificate',\n footerLabel: '2 Courses'\n },\n {\n id: 4,\n title: optimizedData('Red Lipstick', 30),\n body: optimizedData('The Red Lipstick is a classic and bold choice for adding a pop of color to your lips. With a creamy and pigmented formula, it provides a vibrant and long-lasting finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n }\n ];\n\n return finalData;\n } catch (error) {\n console.error('Error fetching cards data:', error);\n throw error;\n }\n};\n\nexport const fetchRecentlyViewedCoursesAndPrograms = async () => {\n /* TODO [TEMP]: Replace with actual API call to fetch recently viewed courses and programs data.\n Reason: The API endpoint is not yet available and the data structure is still being finalized.\n Action: Revisit after endpoint is made available.\n */\n\n try {\n const finalData = [\n {\n id: 1,\n title: optimizedData('Data Analytics Fundamentals', 30),\n body: optimizedData('Learn the core concepts of data analytics, including data cleaning, visualization, and basic statistical interpretation.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/essence-mascara-lash-princess/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 2,\n title: optimizedData('Product Management Essentials', 30),\n body: optimizedData('Review the workflows, tools, and communication patterns used by product managers to guide delivery across teams.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/eyeshadow-palette-with-mirror/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n },\n {\n id: 3,\n title: optimizedData('AI Product Strategy', 30),\n body: optimizedData('Continue a professional certificate covering AI roadmap planning, experimentation, and responsible product delivery.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/powder-canister/thumbnail.webp',\n isProgram: true,\n tagText: 'Professional Certificate',\n footerLabel: '3 Courses'\n },\n {\n id: 4,\n title: optimizedData('Red Lipstick', 30),\n body: optimizedData('The Red Lipstick is a classic and bold choice for adding a pop of color to your lips. With a creamy and pigmented formula, it provides a vibrant and long-lasting finish.', 100),\n url: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/1.webp',\n thumbnail: 'https://cdn.dummyjson.com/product-images/beauty/red-lipstick/thumbnail.webp',\n isProgram: false,\n tagText: '',\n footerLabel: 'Course'\n }\n ];\n\n return finalData;\n } catch (error) {\n console.error('Error fetching recently viewed courses and programs data:', error);\n throw error;\n }\n};\n\nexport const getProgramProgressData = async (uuid: string) => {\n try {\n const { data } = await getAuthenticatedHttpClient().get(programProgressUrl(uuid));\n return data;\n } catch (error) {\n console.error('Error fetching program progress data:', error);\n throw error;\n }\n};\n\nexport const getProgramsListData = async () => {\n try {\n const { data } = await getAuthenticatedHttpClient().get(programsApiUrl());\n return data;\n } catch (error) {\n console.error('Error fetching program list data:', error);\n throw error;\n }\n};\n"]}
@@ -1 +1 @@
1
- export { fetchRecommendedCourses, fetchRecentlyViewedCoursesAndPrograms, getProgramProgressData, getProgramsListData, } from './api';
1
+ export { fetchRecommendedCourses, fetchRecentlyViewedCoursesAndPrograms, getProgramProgressData, getProgramsListData, initializeCourseList, initializeSubsList, } from './api';
@@ -1,2 +1,2 @@
1
- export { fetchRecommendedCourses, fetchRecentlyViewedCoursesAndPrograms, getProgramProgressData, getProgramsListData, } from './api';
1
+ export { fetchRecommendedCourses, fetchRecentlyViewedCoursesAndPrograms, getProgramProgressData, getProgramsListData, initializeCourseList, initializeSubsList, } from './api';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/services/subs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qCAAqC,EACrC,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,OAAO,CAAC","sourcesContent":["export {\n fetchRecommendedCourses,\n fetchRecentlyViewedCoursesAndPrograms,\n getProgramProgressData,\n getProgramsListData,\n} from './api';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/services/subs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qCAAqC,EACrC,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,OAAO,CAAC","sourcesContent":["export {\n fetchRecommendedCourses,\n fetchRecentlyViewedCoursesAndPrograms,\n getProgramProgressData,\n getProgramsListData,\n initializeCourseList,\n initializeSubsList,\n} from './api';\n"]}
@@ -1,3 +1,6 @@
1
1
  export declare const getApiUrl: () => string;
2
2
  export declare const programProgressUrl: (uuid: string) => string;
3
3
  export declare const programsApiUrl: () => string;
4
+ export declare const getSubsCoursesApiUrl: () => string;
5
+ declare const _default: any;
6
+ export default _default;
@@ -1,5 +1,15 @@
1
1
  import { getSiteConfig } from '@openedx/frontend-base';
2
+ import StrictDict from '../../../utils/StrictDict';
2
3
  export const getApiUrl = () => (`${getSiteConfig().lmsBaseUrl}/api`);
4
+ const getSubsInitApiUrl = () => (`${getApiUrl()}/subscription/init/`);
3
5
  export const programProgressUrl = (uuid) => `${getApiUrl()}/subscription/programs/${encodeURIComponent(uuid)}/`;
4
6
  export const programsApiUrl = () => `${getApiUrl()}/subscription/programs/dashboard/`;
7
+ export const getSubsCoursesApiUrl = () => (`${getApiUrl()}/subscription/courses/dashboard/`);
8
+ export default StrictDict({
9
+ getApiUrl,
10
+ programProgressUrl,
11
+ programsApiUrl,
12
+ getSubsCoursesApiUrl,
13
+ getSubsInitApiUrl,
14
+ });
5
15
  //# sourceMappingURL=urls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../../src/data/services/subs/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,SAAS,EAAE,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AACxH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,GAAG,SAAS,EAAE,mCAAmC,CAAC","sourcesContent":["import { getSiteConfig } from '@openedx/frontend-base';\n\nexport const getApiUrl = () => (`${getSiteConfig().lmsBaseUrl}/api`);\n\nexport const programProgressUrl = (uuid: string) => `${getApiUrl()}/subscription/programs/${encodeURIComponent(uuid)}/`;\nexport const programsApiUrl = () => `${getApiUrl()}/subscription/programs/dashboard/`;\n"]}
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../../../src/data/services/subs/urls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC;AAErE,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,SAAS,EAAE,0BAA0B,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;AAExH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,GAAG,SAAS,EAAE,mCAAmC,CAAC;AAEtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,EAAE,kCAAkC,CAAC,CAAC;AAE7F,eAAe,UAAU,CAAC;IACxB,SAAS;IACT,kBAAkB;IAClB,cAAc;IACd,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAC","sourcesContent":["import { getSiteConfig } from '@openedx/frontend-base';\nimport StrictDict from '@src/utils/StrictDict';\n\nexport const getApiUrl = () => (`${getSiteConfig().lmsBaseUrl}/api`);\n\nconst getSubsInitApiUrl = () => (`${getApiUrl()}/subscription/init/`);\n\nexport const programProgressUrl = (uuid: string) => `${getApiUrl()}/subscription/programs/${encodeURIComponent(uuid)}/`;\n\nexport const programsApiUrl = () => `${getApiUrl()}/subscription/programs/dashboard/`;\n\nexport const getSubsCoursesApiUrl = () => (`${getApiUrl()}/subscription/courses/dashboard/`);\n\nexport default StrictDict({\n getApiUrl,\n programProgressUrl,\n programsApiUrl,\n getSubsCoursesApiUrl,\n getSubsInitApiUrl,\n});\n"]}
@@ -1,7 +1,7 @@
1
- import { useInitializeLearnerHome } from '../data/hooks';
1
+ import { useInitializeSubsCourseDashboard } from '../data/hooks';
2
2
  const useCourseData = (cardId) => {
3
3
  var _a;
4
- const { data } = useInitializeLearnerHome();
4
+ const { data } = useInitializeSubsCourseDashboard();
5
5
  return (_a = data === null || data === void 0 ? void 0 : data.coursesByCardId) === null || _a === void 0 ? void 0 : _a[cardId];
6
6
  };
7
7
  export default useCourseData;
@@ -1 +1 @@
1
- {"version":3,"file":"useCourseData.js","sourceRoot":"","sources":["../../src/hooks/useCourseData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;;IACvC,MAAM,EAAE,IAAI,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAC5C,OAAO,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,0CAAG,MAAM,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useInitializeLearnerHome } from '@src/data/hooks';\n\nconst useCourseData = (cardId: string) => {\n const { data } = useInitializeLearnerHome();\n return data?.coursesByCardId?.[cardId];\n};\n\nexport default useCourseData;\n"]}
1
+ {"version":3,"file":"useCourseData.js","sourceRoot":"","sources":["../../src/hooks/useCourseData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;;IACvC,MAAM,EAAE,IAAI,EAAE,GAAG,gCAAgC,EAAE,CAAC;IACpD,OAAO,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,0CAAG,MAAM,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import { useInitializeSubsCourseDashboard } from '@src/data/hooks';\n\nconst useCourseData = (cardId: string) => {\n const { data } = useInitializeSubsCourseDashboard();\n return data?.coursesByCardId?.[cardId];\n};\n\nexport default useCourseData;\n"]}
@@ -1,8 +1,8 @@
1
1
  import { useMasquerade } from '../data/context';
2
- import { useInitializeLearnerHome } from '../data/hooks';
2
+ import { useInitializeSubsDashboard } from '../data/hooks';
3
3
  const useIsMasquerading = () => {
4
4
  const { masqueradeUser } = useMasquerade();
5
- const { isError } = useInitializeLearnerHome();
5
+ const { isError } = useInitializeSubsDashboard();
6
6
  return !!masqueradeUser && !isError;
7
7
  };
8
8
  export default useIsMasquerading;
@@ -1 +1 @@
1
- {"version":3,"file":"useIsMasquerading.js","sourceRoot":"","sources":["../../src/hooks/useIsMasquerading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAC/C,OAAO,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC;AACtC,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import { useMasquerade } from '@src/data/context';\nimport { useInitializeLearnerHome } from '@src/data/hooks';\n\nconst useIsMasquerading = () => {\n const { masqueradeUser } = useMasquerade();\n const { isError } = useInitializeLearnerHome();\n return !!masqueradeUser && !isError;\n};\n\nexport default useIsMasquerading;\n"]}
1
+ {"version":3,"file":"useIsMasquerading.js","sourceRoot":"","sources":["../../src/hooks/useIsMasquerading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,iBAAiB,GAAG,GAAG,EAAE;IAC7B,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,0BAA0B,EAAE,CAAC;IACjD,OAAO,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC;AACtC,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import { useMasquerade } from '@src/data/context';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\n\nconst useIsMasquerading = () => {\n const { masqueradeUser } = useMasquerade();\n const { isError } = useInitializeSubsDashboard();\n return !!masqueradeUser && !isError;\n};\n\nexport default useIsMasquerading;\n"]}
@@ -10,4 +10,29 @@ declare const messages: {
10
10
  description: string;
11
11
  defaultMessage: string;
12
12
  };
13
+ 'header.user.menu.lastCourse': {
14
+ id: string;
15
+ defaultMessage: string;
16
+ description: string;
17
+ };
18
+ 'header.user.menu.dashboard': {
19
+ id: string;
20
+ defaultMessage: string;
21
+ description: string;
22
+ };
23
+ 'header.user.menu.myCourses': {
24
+ id: string;
25
+ defaultMessage: string;
26
+ description: string;
27
+ };
28
+ 'header.user.menu.orderHistory': {
29
+ id: string;
30
+ defaultMessage: string;
31
+ description: string;
32
+ };
33
+ 'header.user.menu.help': {
34
+ id: string;
35
+ defaultMessage: string;
36
+ description: string;
37
+ };
13
38
  };
package/dist/messages.js CHANGED
@@ -10,6 +10,31 @@ const messages = defineMessages({
10
10
  description: 'Page title: Subscription Dashboard',
11
11
  defaultMessage: 'Subscription Dashboard',
12
12
  },
13
+ 'header.user.menu.lastCourse': {
14
+ id: 'header.user.menu.lastCourse',
15
+ defaultMessage: 'Resume your last course',
16
+ description: 'Link to resume last course',
17
+ },
18
+ 'header.user.menu.dashboard': {
19
+ id: 'header.user.menu.dashboard',
20
+ defaultMessage: 'Dashboard',
21
+ description: 'Link to the Dashboard',
22
+ },
23
+ 'header.user.menu.myCourses': {
24
+ id: 'header.user.menu.myCourses',
25
+ defaultMessage: 'My courses',
26
+ description: 'Link to the My Courses',
27
+ },
28
+ 'header.user.menu.orderHistory': {
29
+ id: 'header.user.menu.orderHistory',
30
+ defaultMessage: 'Order History',
31
+ description: 'Link to the Order History',
32
+ },
33
+ 'header.user.menu.help': {
34
+ id: 'header.user.menu.help',
35
+ defaultMessage: 'Help',
36
+ description: 'Link to the Help',
37
+ },
13
38
  });
14
39
  export default messages;
15
40
  //# sourceMappingURL=messages.js.map