@edx/frontend-app-subscription-learner-dashboard 1.10.0 → 1.11.1
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.
- package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js +4 -4
- package/dist/containers/CourseCard/components/CourseCardActions/BeginCourseButton.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js +4 -4
- package/dist/containers/CourseCard/components/CourseCardActions/ResumeButton.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardActions/index.js +3 -2
- package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js +2 -2
- package/dist/containers/CourseCard/components/CourseCardBanners/CertificateBanner.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +2 -2
- package/dist/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js +2 -2
- package/dist/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +3 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js +2 -2
- package/dist/containers/CourseCard/components/CourseCardMenu/hooks.js.map +1 -1
- package/dist/containers/CourseFilterControls/CourseFilterControls.js +3 -3
- package/dist/containers/CourseFilterControls/CourseFilterControls.js.map +1 -1
- package/dist/containers/CoursesPanel/NoCoursesView/index.js +2 -2
- package/dist/containers/CoursesPanel/NoCoursesView/index.js.map +1 -1
- package/dist/containers/CoursesPanel/index.js +6 -10
- package/dist/containers/CoursesPanel/index.js.map +1 -1
- package/dist/containers/CoursesPanel/messages.d.ts +1 -9
- package/dist/containers/CoursesPanel/messages.js +1 -6
- package/dist/containers/CoursesPanel/messages.js.map +1 -1
- package/dist/containers/Dashboard/DashboardContent.d.ts +2 -0
- package/dist/containers/Dashboard/DashboardContent.js +5 -0
- package/dist/containers/Dashboard/DashboardContent.js.map +1 -0
- package/dist/containers/Dashboard/index.js +5 -5
- package/dist/containers/Dashboard/index.js.map +1 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js +2 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js.map +1 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.js +29 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.js +12 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.scss +63 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.d.ts +20 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js +21 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js.map +1 -1
- package/dist/containers/ProgramDashboard/data/constants.d.ts +7 -0
- package/dist/containers/ProgramDashboard/data/constants.js +7 -0
- package/dist/containers/ProgramDashboard/data/constants.js.map +1 -1
- package/dist/data/hooks/index.d.ts +2 -2
- package/dist/data/hooks/index.js +2 -2
- package/dist/data/hooks/index.js.map +1 -1
- package/dist/data/hooks/queryHooks.d.ts +165 -2
- package/dist/data/hooks/queryHooks.js +34 -8
- package/dist/data/hooks/queryHooks.js.map +1 -1
- package/dist/data/hooks/queryKeys.d.ts +2 -1
- package/dist/data/hooks/queryKeys.js +2 -1
- package/dist/data/hooks/queryKeys.js.map +1 -1
- package/dist/data/services/subs/api.d.ts +2 -0
- package/dist/data/services/subs/api.js +11 -0
- package/dist/data/services/subs/api.js.map +1 -1
- package/dist/data/services/subs/index.d.ts +1 -1
- package/dist/data/services/subs/index.js +1 -1
- package/dist/data/services/subs/index.js.map +1 -1
- package/dist/data/services/subs/urls.d.ts +3 -0
- package/dist/data/services/subs/urls.js +10 -0
- package/dist/data/services/subs/urls.js.map +1 -1
- package/dist/hooks/useCourseData.js +2 -2
- package/dist/hooks/useCourseData.js.map +1 -1
- package/dist/hooks/useIsMasquerading.js +2 -2
- package/dist/hooks/useIsMasquerading.js.map +1 -1
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +2 -2
- package/dist/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js.map +1 -1
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +2 -2
- package/dist/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,21 +5,21 @@ import { useIntl } from '@openedx/frontend-base';
|
|
|
5
5
|
import { EXECUTIVE_EDUCATION_COURSE_MODES } from '../../../../data/constants/course';
|
|
6
6
|
import track from '../../../../tracking';
|
|
7
7
|
import { useCourseData, useCourseTrackingEvent } from '../../../../hooks';
|
|
8
|
-
import {
|
|
8
|
+
import { useInitializeSubsDashboard } from '../../../../data/hooks';
|
|
9
9
|
import useActionDisabledState from '../hooks';
|
|
10
10
|
import ActionButton from './ActionButton';
|
|
11
11
|
import messages from './messages';
|
|
12
12
|
export const BeginCourseButton = ({ cardId }) => {
|
|
13
13
|
var _a;
|
|
14
14
|
const { formatMessage } = useIntl();
|
|
15
|
-
const { data: learnerData } =
|
|
15
|
+
const { data: learnerData } = useInitializeSubsDashboard();
|
|
16
16
|
const courseData = useCourseData(cardId);
|
|
17
17
|
const homeUrl = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _a === void 0 ? void 0 : _a.homeUrl;
|
|
18
18
|
const execEdTrackingParam = useMemo(() => {
|
|
19
19
|
const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);
|
|
20
|
-
const { authOrgId } = learnerData.enterpriseDashboard || {};
|
|
20
|
+
const { authOrgId } = (learnerData === null || learnerData === void 0 ? void 0 : learnerData.enterpriseDashboard) || {};
|
|
21
21
|
return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';
|
|
22
|
-
}, [courseData.enrollment.mode, learnerData.enterpriseDashboard]);
|
|
22
|
+
}, [courseData.enrollment.mode, learnerData === null || learnerData === void 0 ? void 0 : learnerData.enterpriseDashboard]);
|
|
23
23
|
const { disableBeginCourse } = useActionDisabledState(cardId);
|
|
24
24
|
const handleClick = useCourseTrackingEvent(track.course.enterCourseClicked, cardId, homeUrl + execEdTrackingParam);
|
|
25
25
|
return (_jsx(ActionButton, { disabled: disableBeginCourse, as: "a", href: "#", onClick: handleClick, children: formatMessage(messages.beginCourse) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BeginCourseButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BeginCourseButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,sBAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,OAAO,CAAC;IAC/C,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,EAAE,SAAS,EAAE,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,KAAI,EAAE,CAAC;QAC7D,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,kBAAkB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,sBAAsB,CACxC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAC/B,MAAM,EACN,OAAO,GAAG,mBAAmB,CAC9B,CAAC;IACF,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAE,kBAAkB,EAC5B,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,WAAW,YAEnB,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GACvB,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AACF,eAAe,iBAAiB,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport { EXECUTIVE_EDUCATION_COURSE_MODES } from '@src/data/constants/course';\n\nimport track from '@src/tracking';\nimport { useCourseData, useCourseTrackingEvent } from '@src/hooks';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport useActionDisabledState from '../hooks';\nimport ActionButton from './ActionButton';\nimport messages from './messages';\n\nexport const BeginCourseButton = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const { data: learnerData } = useInitializeSubsDashboard();\n const courseData = useCourseData(cardId);\n const homeUrl = courseData?.courseRun?.homeUrl;\n const execEdTrackingParam = useMemo(() => {\n const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);\n const { authOrgId } = learnerData?.enterpriseDashboard || {};\n return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';\n }, [courseData.enrollment.mode, learnerData?.enterpriseDashboard]);\n const { disableBeginCourse } = useActionDisabledState(cardId);\n\n const handleClick = useCourseTrackingEvent(\n track.course.enterCourseClicked,\n cardId,\n homeUrl + execEdTrackingParam,\n );\n return (\n <ActionButton\n disabled={disableBeginCourse}\n as=\"a\"\n href=\"#\"\n onClick={handleClick}\n >\n {formatMessage(messages.beginCourse)}\n </ActionButton>\n );\n};\nBeginCourseButton.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\nexport default BeginCourseButton;\n"]}
|
|
@@ -6,21 +6,21 @@ import { EXECUTIVE_EDUCATION_COURSE_MODES } from '../../../../data/constants/cou
|
|
|
6
6
|
import { baseAppUrl } from '../../../../data/services/lms/urls';
|
|
7
7
|
import track from '../../../../tracking';
|
|
8
8
|
import { useCourseTrackingEvent, useCourseData } from '../../../../hooks';
|
|
9
|
-
import {
|
|
9
|
+
import { useInitializeSubsDashboard } from '../../../../data/hooks';
|
|
10
10
|
import useActionDisabledState from '../hooks';
|
|
11
11
|
import ActionButton from './ActionButton';
|
|
12
12
|
import messages from './messages';
|
|
13
13
|
export const ResumeButton = ({ cardId }) => {
|
|
14
14
|
var _a;
|
|
15
15
|
const { formatMessage } = useIntl();
|
|
16
|
-
const { data: learnerData } =
|
|
16
|
+
const { data: learnerData } = useInitializeSubsDashboard();
|
|
17
17
|
const courseData = useCourseData(cardId);
|
|
18
18
|
const resumeUrl = baseAppUrl((_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _a === void 0 ? void 0 : _a.resumeUrl);
|
|
19
19
|
const execEdTrackingParam = useMemo(() => {
|
|
20
20
|
const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);
|
|
21
|
-
const { authOrgId } = learnerData.enterpriseDashboard || {};
|
|
21
|
+
const { authOrgId } = (learnerData === null || learnerData === void 0 ? void 0 : learnerData.enterpriseDashboard) || {};
|
|
22
22
|
return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';
|
|
23
|
-
}, [courseData.enrollment.mode, learnerData.enterpriseDashboard]);
|
|
23
|
+
}, [courseData.enrollment.mode, learnerData === null || learnerData === void 0 ? void 0 : learnerData.enterpriseDashboard]);
|
|
24
24
|
const { disableResumeCourse } = useActionDisabledState(cardId);
|
|
25
25
|
const handleClick = useCourseTrackingEvent(track.course.enterCourseClicked, cardId, resumeUrl + execEdTrackingParam);
|
|
26
26
|
return (_jsx(ActionButton, { disabled: disableResumeCourse, as: "a", href: "#", onClick: handleClick, children: formatMessage(messages.resume) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResumeButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/ResumeButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ResumeButton.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/ResumeButton.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,sBAAsB,MAAM,UAAU,CAAC;AAC9C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/F,MAAM,EAAE,SAAS,EAAE,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,KAAI,EAAE,CAAC;QAC7D,OAAO,gBAAgB,CAAC,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,mBAAmB,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,mBAAmB,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG,sBAAsB,CACxC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAC/B,MAAM,EACN,SAAS,GAAG,mBAAmB,CAChC,CAAC;IACF,OAAO,CACL,KAAC,YAAY,IACX,QAAQ,EAAE,mBAAmB,EAC7B,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,WAAW,YAEnB,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAClB,CAChB,CAAC;AACJ,CAAC,CAAC;AACF,YAAY,CAAC,SAAS,GAAG;IACvB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AACF,eAAe,YAAY,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { EXECUTIVE_EDUCATION_COURSE_MODES } from '@src/data/constants/course';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\nimport track from '@src/tracking';\nimport { useCourseTrackingEvent, useCourseData } from '@src/hooks';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport useActionDisabledState from '../hooks';\nimport ActionButton from './ActionButton';\nimport messages from './messages';\n\nexport const ResumeButton = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const { data: learnerData } = useInitializeSubsDashboard();\n const courseData = useCourseData(cardId);\n const resumeUrl = baseAppUrl(courseData?.courseRun?.resumeUrl);\n const execEdTrackingParam = useMemo(() => {\n const isExecEd2UCourse = EXECUTIVE_EDUCATION_COURSE_MODES.includes(courseData.enrollment.mode);\n const { authOrgId } = learnerData?.enterpriseDashboard || {};\n return isExecEd2UCourse ? `?org_id=${authOrgId}` : '';\n }, [courseData.enrollment.mode, learnerData?.enterpriseDashboard]);\n const { disableResumeCourse } = useActionDisabledState(cardId);\n\n const handleClick = useCourseTrackingEvent(\n track.course.enterCourseClicked,\n cardId,\n resumeUrl + execEdTrackingParam,\n );\n return (\n <ActionButton\n disabled={disableResumeCourse}\n as=\"a\"\n href=\"#\"\n onClick={handleClick}\n >\n {formatMessage(messages.resume)}\n </ActionButton>\n );\n};\nResumeButton.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\nexport default ResumeButton;\n"]}
|
|
@@ -11,11 +11,12 @@ import ResumeButton from './ResumeButton';
|
|
|
11
11
|
import ViewCourseButton from './ViewCourseButton';
|
|
12
12
|
import messages from './messages';
|
|
13
13
|
export const CourseCardActions = ({ cardId, verifiedCourse }) => {
|
|
14
|
+
var _a, _b;
|
|
14
15
|
const cardData = useCourseData(cardId);
|
|
15
16
|
const { formatMessage } = useIntl();
|
|
16
|
-
const hasStarted = cardData.enrollment.hasStarted || false;
|
|
17
|
+
const hasStarted = ((_a = cardData === null || cardData === void 0 ? void 0 : cardData.enrollment) === null || _a === void 0 ? void 0 : _a.hasStarted) || false;
|
|
17
18
|
const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);
|
|
18
|
-
const isArchived = cardData.courseRun.isArchived || false;
|
|
19
|
+
const isArchived = ((_b = cardData === null || cardData === void 0 ? void 0 : cardData.courseRun) === null || _b === void 0 ? void 0 : _b.isArchived) || false;
|
|
19
20
|
return (_jsxs(Row, { className: "align-items-center mt-3", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse ? (_jsx(Badge, { variant: "success", className: "px-3 py-2", children: formatMessage(messages.subsVerifiedCourseText) })) : (_jsx("span", { className: "small text-info", children: formatMessage(messages.subsIncludedCourseText) })) }), _jsx(Col, { xs: 12, className: "d-flex justify-content-end", sm: 6, children: _jsxs(ActionRow, { "data-test-id": "CourseCardActions", children: [_jsx(CourseCardActionSlot, { cardId: cardId }), isEntitlement && (isFulfilled
|
|
20
21
|
? _jsx(ViewCourseButton, { cardId: cardId })
|
|
21
22
|
: _jsx(SelectSessionButton, { cardId: cardId })), (isArchived && !isEntitlement) && (_jsx(ViewCourseButton, { cardId: cardId })), !(isArchived || isEntitlement) && (hasStarted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAG,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAG,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,0CAAE,UAAU,KAAI,KAAK,CAAC;IAC7D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,CAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,SAAS,0CAAE,UAAU,KAAI,KAAK,CAAC;IAE5D,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,aACpC,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,cAAc,YAKvC,cAAc,CAAC,CAAC,CAAC,CACd,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,YACzC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,CACX,CAAC,CAAC,CAAC,CACA,eAAM,SAAS,EAAC,iBAAiB,YAC5B,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC5C,CACV,GACC,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,4BAA4B,EAAC,EAAE,EAAE,CAAC,YACrD,MAAC,SAAS,oBAAc,mBAAmB,aACzC,KAAC,oBAAoB,IAAC,MAAM,EAAE,MAAM,GAAI,EACvC,aAAa,IAAI,CAAC,WAAW;4BAC5B,CAAC,CAAC,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI;4BACtC,CAAC,CAAC,KAAC,mBAAmB,IAAC,MAAM,EAAE,MAAM,GAAI,CAC1C,EACA,CAAC,UAAU,IAAI,CAAC,aAAa,CAAC,IAAI,CACjC,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,CACrC,EACA,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU;4BAC5C,CAAC,CAAC,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,GAAI;4BAClC,CAAC,CAAC,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,GAAI,CACxC,IACS,GACV,IACJ,CAEP,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;CAC/B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ActionRow, Row, Col, Badge } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useCourseData, useEntitlementInfo } from '@src/hooks';\n\nimport CourseCardActionSlot from '@src/slots/CourseCardActionSlot';\nimport SelectSessionButton from './SelectSessionButton';\nimport BeginCourseButton from './BeginCourseButton';\nimport ResumeButton from './ResumeButton';\nimport ViewCourseButton from './ViewCourseButton';\nimport messages from './messages';\n\nexport const CourseCardActions = ({ cardId, verifiedCourse }) => {\n const cardData = useCourseData(cardId);\n const { formatMessage } = useIntl();\n const hasStarted = cardData?.enrollment?.hasStarted || false;\n const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);\n const isArchived = cardData?.courseRun?.isArchived || false;\n\n return (\n <Row className=\"align-items-center mt-3\">\n <Col xs={12} sm={6} className=\"mb-2 mb-lg-0\">\n {/* TODO [TEMP]: Showing 2 types of badges for now. After backend connection, can anticipate 3rd type of badge as well\n Reason: Development before backend connection\n Action: Revisit after backend connection and finalize badge types and conditions for each type\n */}\n {verifiedCourse ? (\n <Badge variant=\"success\" className=\"px-3 py-2\">\n {formatMessage(messages.subsVerifiedCourseText)}\n </Badge>\n ) : (\n <span className=\"small text-info\">\n {formatMessage(messages.subsIncludedCourseText)}\n </span>\n )}\n </Col>\n\n <Col xs={12} className=\"d-flex justify-content-end\" sm={6}>\n <ActionRow data-test-id=\"CourseCardActions\">\n <CourseCardActionSlot cardId={cardId} />\n {isEntitlement && (isFulfilled\n ? <ViewCourseButton cardId={cardId} />\n : <SelectSessionButton cardId={cardId} />\n )}\n {(isArchived && !isEntitlement) && (\n <ViewCourseButton cardId={cardId} />\n )}\n {!(isArchived || isEntitlement) && (hasStarted\n ? <ResumeButton cardId={cardId} />\n : <BeginCourseButton cardId={cardId} />\n )}\n </ActionRow>\n </Col>\n </Row>\n \n );\n};\nCourseCardActions.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n};\n\nexport default CourseCardActions;\n"]}
|
|
@@ -6,13 +6,13 @@ import { MailtoLink, Hyperlink } from '@openedx/paragon';
|
|
|
6
6
|
import { CheckCircle } from '@openedx/paragon/icons';
|
|
7
7
|
import { useIntl } from '@openedx/frontend-base';
|
|
8
8
|
import { baseAppUrl } from '../../../../data/services/lms/urls';
|
|
9
|
-
import {
|
|
9
|
+
import { useInitializeSubsDashboard } from '../../../../data/hooks';
|
|
10
10
|
import { utilHooks, useCourseData } from '../../../../hooks';
|
|
11
11
|
import Banner from '../../../../components/Banner';
|
|
12
12
|
import messages from './messages';
|
|
13
13
|
const { useFormatDate } = utilHooks;
|
|
14
14
|
export const CertificateBanner = ({ cardId }) => {
|
|
15
|
-
const { data: learnerHomeData } =
|
|
15
|
+
const { data: learnerHomeData } = useInitializeSubsDashboard();
|
|
16
16
|
const courseData = useCourseData(cardId);
|
|
17
17
|
const { certificate = {}, isVerified = false, isAudit = false, isPassing = false, isArchived = false, minPassingGrade = 0, progressUrl = '', } = useMemo(() => {
|
|
18
18
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CertificateBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.jsx"],"names":[],"mappings":";AAAA,4BAA4B;AAC5B,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"CertificateBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.jsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MailtoLink, Hyperlink } from '@openedx/paragon';\nimport { CheckCircle } from '@openedx/paragon/icons';\nimport { useIntl } from '@openedx/frontend-base';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\n\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport { utilHooks, useCourseData } from '@src/hooks';\nimport Banner from '@src/components/Banner';\n\nimport messages from './messages';\n\nconst { useFormatDate } = utilHooks;\n\nexport const CertificateBanner = ({ cardId }) => {\n const { data: learnerHomeData } = useInitializeSubsDashboard();\n const courseData = useCourseData(cardId);\n const {\n certificate = {},\n isVerified = false,\n isAudit = false,\n isPassing = false,\n isArchived = false,\n minPassingGrade = 0,\n progressUrl = '',\n } = useMemo(() => ({\n isVerified: courseData?.enrollment?.isVerified,\n isAudit: courseData?.enrollment?.isAudit,\n certificate: courseData?.certificate || {},\n isPassing: courseData?.gradeData?.isPassing,\n isArchived: courseData?.courseRun?.isArchived,\n minPassingGrade: Math.floor((courseData?.courseRun?.minPassingGrade ?? 0) * 100),\n progressUrl: baseAppUrl(courseData?.courseRun?.progressUrl || ''),\n }), [courseData]);\n const { supportEmail, billingEmail } = useMemo(\n () => ({\n supportEmail: learnerHomeData?.platformSettings?.supportEmail,\n billingEmail: learnerHomeData?.platformSettings?.billingEmail,\n }),\n [learnerHomeData],\n );\n const { formatMessage } = useIntl();\n const formatDate = useFormatDate();\n\n const emailLink = address => <MailtoLink to={address}>{address}</MailtoLink>;\n\n if (certificate.isRestricted) {\n return (\n <Banner variant=\"danger\">\n { supportEmail ? formatMessage(messages.certRestricted, { supportEmail: emailLink(supportEmail) }) : formatMessage(messages.certRestrictedNoEmail)}\n {isVerified && ' '}\n {isVerified && (billingEmail ? formatMessage(messages.certRefundContactBilling, { billingEmail: emailLink(billingEmail) }) : formatMessage(messages.certRefundContactBillingNoEmail))}\n </Banner>\n );\n }\n if (certificate.isDownloadable) {\n return (\n <Banner variant=\"success\" icon={CheckCircle}>\n {formatMessage(messages.certReady)}\n {certificate.certPreviewUrl && (\n <>\n {' '}\n <Hyperlink isInline destination={baseAppUrl(certificate.certPreviewUrl)}>\n {formatMessage(messages.viewCertificate)}\n </Hyperlink>\n </>\n )}\n </Banner>\n );\n }\n if (!isPassing) {\n if (isAudit) {\n return (\n <Banner>\n {formatMessage(messages.passingGrade, { minPassingGrade })}\n </Banner>\n );\n }\n if (isArchived) {\n return (\n <Banner variant=\"warning\">\n {formatMessage(messages.notEligibleForCert)}\n {' '}\n <Hyperlink isInline destination={progressUrl}>{formatMessage(messages.viewGrades)}</Hyperlink>\n </Banner>\n );\n }\n return (\n <Banner variant=\"warning\">\n {formatMessage(messages.certMinGrade, { minPassingGrade })}\n </Banner>\n );\n }\n if (certificate.isEarned && new Date(certificate.availableDate) > new Date()) {\n return (\n <Banner>\n {formatMessage(\n messages.gradeAndCertReadyAfter,\n { availableDate: formatDate(certificate.availableDate) },\n )}\n </Banner>\n );\n }\n\n return null;\n};\nCertificateBanner.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default CertificateBanner;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { useInitializeSubsDashboard } from '../../../../../data/hooks';
|
|
3
3
|
import { StrictDict } from '../../../../../utils';
|
|
4
4
|
import { useCourseData } from '../../../../../hooks';
|
|
5
5
|
import ApprovedContent from './views/ApprovedContent';
|
|
@@ -15,7 +15,7 @@ export const statusComponents = StrictDict({
|
|
|
15
15
|
export const useCreditBannerData = (cardId) => {
|
|
16
16
|
var _a;
|
|
17
17
|
const courseData = useCourseData(cardId);
|
|
18
|
-
const { data: learnerHomeData } =
|
|
18
|
+
const { data: learnerHomeData } = useInitializeSubsDashboard();
|
|
19
19
|
const supportEmail = useMemo(() => { var _a; return ((_a = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.platformSettings) === null || _a === void 0 ? void 0 : _a.supportEmail); }, [learnerHomeData]);
|
|
20
20
|
const credit = useMemo(() => {
|
|
21
21
|
const creditData = courseData === null || courseData === void 0 ? void 0 : courseData.credit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../../src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../../src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,eAAe,MAAM,yBAAyB,CAAC;AACtD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,cAAc,MAAM,wBAAwB,CAAC;AACpD,OAAO,eAAe,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,eAAe;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,EAAE;;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC/D,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,WAAC,OAAA,CAAC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,YAAY,CAAC,CAAA,EAAA,EACvD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,UAAU,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC;QACtC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;YAC/C,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,aAAa,EAAE,UAAU,CAAC,aAAa;SACxC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,UAAU,CAAA,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IACnD,IAAI,gBAAgB,GAAG,eAAe,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,gBAAgB,GAAG,kBAAkB,CAAC;QACxC,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACjE,gBAAgB,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,oFAAoF;IACtF,CAAC;IACD,OAAO;QACL,gBAAgB;QAChB,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe;IACb,mBAAmB;CACpB,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\nimport { StrictDict } from '@src/utils';\n\nimport { useCourseData } from '@src/hooks';\n\nimport ApprovedContent from './views/ApprovedContent';\nimport EligibleContent from './views/EligibleContent';\nimport MustRequestContent from './views/MustRequestContent';\nimport PendingContent from './views/PendingContent';\nimport RejectedContent from './views/RejectedContent';\n\nexport const statusComponents = StrictDict({\n pending: PendingContent,\n approved: ApprovedContent,\n rejected: RejectedContent,\n});\n\nexport const useCreditBannerData = (cardId) => {\n const courseData = useCourseData(cardId);\n const { data: learnerHomeData } = useInitializeSubsDashboard();\n const supportEmail = useMemo(\n () => (learnerHomeData?.platformSettings?.supportEmail),\n [learnerHomeData],\n );\n\n const credit = useMemo(() => {\n const creditData = courseData?.credit;\n if (!creditData || Object.keys(creditData).length === 0) {\n return { isEligible: false };\n }\n return {\n isEligible: true,\n providerStatusUrl: creditData.providerStatusUrl,\n providerName: creditData.providerName,\n providerId: creditData.providerId,\n error: creditData.error,\n purchased: creditData.purchased,\n requestStatus: creditData.requestStatus,\n };\n }, [courseData]);\n if (!credit.isEligible || !courseData?.credit?.isEligible) {\n return null;\n }\n\n const { error, purchased, requestStatus } = credit;\n let ContentComponent = EligibleContent;\n if (purchased) {\n if (requestStatus == null) {\n ContentComponent = MustRequestContent;\n } else if (Object.keys(statusComponents).includes(requestStatus)) {\n ContentComponent = statusComponents[requestStatus];\n }\n // Current behavior is to show Elligible State if unknown request status is returned\n }\n return {\n ContentComponent,\n error,\n supportEmail,\n };\n};\n\nexport default {\n useCreditBannerData,\n};\n"]}
|
|
@@ -6,11 +6,11 @@ import { Button, MailtoLink } from '@openedx/paragon';
|
|
|
6
6
|
import { utilHooks, useCourseData, useEntitlementInfo } from '../../../../hooks';
|
|
7
7
|
import { useSelectSessionModal } from '../../../../data/context';
|
|
8
8
|
import Banner from '../../../../components/Banner';
|
|
9
|
-
import {
|
|
9
|
+
import { useInitializeSubsDashboard } from '../../../../data/hooks';
|
|
10
10
|
import messages from './messages';
|
|
11
11
|
export const EntitlementBanner = ({ cardId }) => {
|
|
12
12
|
const { formatMessage } = useIntl();
|
|
13
|
-
const { data: learnerHomeData } =
|
|
13
|
+
const { data: learnerHomeData } = useInitializeSubsDashboard();
|
|
14
14
|
const courseData = useCourseData(cardId);
|
|
15
15
|
const { isEntitlement, hasSessions, isFulfilled, changeDeadline, showExpirationWarning, isExpired, } = useEntitlementInfo(courseData);
|
|
16
16
|
const supportEmail = useMemo(() => { var _a; return (_a = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.platformSettings) === null || _a === void 0 ? void 0 : _a.supportEmail; }, [learnerHomeData]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitlementBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"EntitlementBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC/D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,EACJ,aAAa,EACb,WAAW,EACX,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,SAAS,GACV,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,WAAC,OAAA,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,gBAAgB,0CAAE,YAAY,CAAA,EAAA,EACrD,CAAC,eAAe,CAAC,CAClB,CAAC;IACF,MAAM,EAAE,wBAAwB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAE7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CACL,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,YACtB,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE;gBAC9C,SAAS,EAAE,YAAY,IAAI,KAAC,UAAU,IAAC,EAAE,EAAE,YAAY,YAAG,YAAY,GAAc;aACrF,CAAC,GACK,CACV,CAAC;IACJ,CAAC;IACD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,MAAM,cACJ,aAAa,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAC/C,cAAc,EAAE,UAAU,CAAC,cAAc,CAAC;gBAC1C,mBAAmB,EAAE,CACnB,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC,YACrG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,GAC/B,CACV;aACF,CAAC,GACK,CACV,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,KAAC,MAAM,cACJ,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GACpC,CACV,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;CACpC,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport { Button, MailtoLink } from '@openedx/paragon';\n\nimport { utilHooks, useCourseData, useEntitlementInfo } from '@src/hooks';\nimport { useSelectSessionModal } from '@src/data/context';\nimport Banner from '@src/components/Banner';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\n\nimport messages from './messages';\n\nexport const EntitlementBanner = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const { data: learnerHomeData } = useInitializeSubsDashboard();\n const courseData = useCourseData(cardId);\n\n const {\n isEntitlement,\n hasSessions,\n isFulfilled,\n changeDeadline,\n showExpirationWarning,\n isExpired,\n } = useEntitlementInfo(courseData);\n const supportEmail = useMemo(\n () => learnerHomeData?.platformSettings?.supportEmail,\n [learnerHomeData],\n );\n const { updateSelectSessionModal } = useSelectSessionModal();\n const formatDate = utilHooks.useFormatDate();\n\n if (!isEntitlement) {\n return null;\n }\n\n if (!hasSessions && !isFulfilled) {\n return (\n <Banner variant=\"warning\">\n {formatMessage(messages.entitlementUnavailable, {\n emailLink: supportEmail && <MailtoLink to={supportEmail}>{supportEmail}</MailtoLink>,\n })}\n </Banner>\n );\n }\n if (showExpirationWarning) {\n return (\n <Banner>\n {formatMessage(messages.entitlementExpiringSoon, {\n changeDeadline: formatDate(changeDeadline),\n selectSessionButton: (\n <Button variant=\"link\" size=\"inline\" className=\"m-0 p-0\" onClick={() => updateSelectSessionModal(cardId)}>\n {formatMessage(messages.selectSession)}\n </Button>\n ),\n })}\n </Banner>\n );\n }\n if (isExpired) {\n return (\n <Banner>\n {formatMessage(messages.entitlementExpired)}\n </Banner>\n );\n }\n return null;\n};\nEntitlementBanner.propTypes = {\n cardId: PropTypes.string.isRequired,\n};\n\nexport default EntitlementBanner;\n"]}
|
|
@@ -6,6 +6,9 @@ import messages from './messages';
|
|
|
6
6
|
export const useAccessMessage = ({ cardId }) => {
|
|
7
7
|
const { formatMessage } = useIntl();
|
|
8
8
|
const courseData = useCourseData(cardId);
|
|
9
|
+
if (!(courseData === null || courseData === void 0 ? void 0 : courseData.courseRun)) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
9
12
|
const { courseRun, enrollment } = courseData || {};
|
|
10
13
|
const formatDate = utilHooks.useFormatDate();
|
|
11
14
|
if (!courseRun.isStarted) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/hooks.js"],"names":[],"mappings":"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","sourcesContent":["import { useIntl } from '@openedx/frontend-base';\nimport { utilHooks, useCourseData, useEntitlementInfo } from '@src/hooks';\nimport { useSelectSessionModal } from '@src/data/context';\n\nimport * as hooks from './hooks';\nimport messages from './messages';\n\nexport const useAccessMessage = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n\n if (!courseData?.courseRun) {\n return null;\n }\n\n const { courseRun, enrollment } = courseData || {};\n const formatDate = utilHooks.useFormatDate();\n if (!courseRun.isStarted) {\n if (!courseRun.startDate && !courseRun.advertisedStart) {\n return null;\n }\n const startDate = courseRun.advertisedStart || formatDate(courseRun.startDate);\n return formatMessage(messages.courseStarts, { startDate });\n }\n if (enrollment?.isEnrolled) {\n const { isArchived, endDate } = courseRun;\n const {\n accessExpirationDate,\n isAuditAccessExpired,\n } = enrollment;\n\n if (enrollment.isAudit && accessExpirationDate) {\n return formatMessage(\n isAuditAccessExpired ? messages.accessExpired : messages.accessExpires,\n { accessExpirationDate: formatDate(accessExpirationDate) },\n );\n }\n if (!endDate) {\n return null;\n }\n return formatMessage(\n isArchived ? messages.courseEnded : messages.courseEnds,\n { endDate: formatDate(endDate) },\n );\n }\n return null;\n};\n\nexport const useCardDetailsData = ({ cardId }) => {\n const { formatMessage } = useIntl();\n const courseData = useCourseData(cardId);\n const providerName = courseData?.courseProvider?.name;\n const courseNumber = courseData?.course?.courseNumber;\n const {\n isEntitlement,\n isFulfilled,\n canChange,\n } = useEntitlementInfo(courseData);\n const { updateSelectSessionModal } = useSelectSessionModal();\n\n return {\n providerName: providerName || formatMessage(messages.unknownProviderName),\n accessMessage: hooks.useAccessMessage({ cardId }),\n isEntitlement,\n isFulfilled,\n canChange,\n openSessionModal: () => updateSelectSessionModal(cardId),\n courseNumber,\n changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),\n };\n};\n\nexport default useCardDetailsData;\n"]}
|
|
@@ -2,7 +2,7 @@ import track from '../../../../tracking';
|
|
|
2
2
|
import { useCourseData, useCourseTrackingEvent } from '../../../../hooks';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { StrictDict } from '../../../../utils';
|
|
5
|
-
import {
|
|
5
|
+
import { useInitializeSubsDashboard } from '../../../../data/hooks';
|
|
6
6
|
export const state = StrictDict({
|
|
7
7
|
isUnenrollConfirmVisible: (val) => useState(val), // eslint-disable-line
|
|
8
8
|
isEmailSettingsVisible: (val) => useState(val), // eslint-disable-line
|
|
@@ -32,7 +32,7 @@ export const useHandleToggleDropdown = (cardId) => {
|
|
|
32
32
|
};
|
|
33
33
|
};
|
|
34
34
|
export const useCardSocialSettingsData = (cardId) => {
|
|
35
|
-
const { data: learnerHomeData } =
|
|
35
|
+
const { data: learnerHomeData } = useInitializeSubsDashboard();
|
|
36
36
|
const courseData = useCourseData(cardId);
|
|
37
37
|
const socialShareSettings = learnerHomeData === null || learnerHomeData === void 0 ? void 0 : learnerHomeData.socialShareSettings;
|
|
38
38
|
const { socialShareUrl } = (courseData === null || courseData === void 0 ? void 0 : courseData.course) || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/hooks.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardMenu/hooks.js"],"names":[],"mappings":"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","sourcesContent":["import track from '@src/tracking';\nimport { useCourseData, useCourseTrackingEvent } from '@src/hooks';\nimport { useState } from 'react';\nimport { StrictDict } from '@src/utils';\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\n\nexport const state = StrictDict({\n isUnenrollConfirmVisible: (val) => useState(val), // eslint-disable-line\n isEmailSettingsVisible: (val) => useState(val), // eslint-disable-line\n});\n\nexport const useUnenrollData = () => {\n const [isVisible, setIsVisible] = state.isUnenrollConfirmVisible(false);\n return {\n show: () => setIsVisible(true),\n hide: () => setIsVisible(false),\n isVisible,\n };\n};\n\nexport const useEmailSettings = () => {\n const [isVisible, setIsVisible] = state.isEmailSettingsVisible(false);\n return {\n show: () => setIsVisible(true),\n hide: () => setIsVisible(false),\n isVisible,\n };\n};\n\nexport const useHandleToggleDropdown = (cardId) => {\n const trackCourseEvent = useCourseTrackingEvent(\n track.course.courseOptionsDropdownClicked,\n cardId,\n );\n return (isOpen) => {\n if (isOpen) {\n trackCourseEvent();\n }\n };\n};\n\nexport const useCardSocialSettingsData = (cardId) => {\n const { data: learnerHomeData } = useInitializeSubsDashboard();\n const courseData = useCourseData(cardId);\n const socialShareSettings = learnerHomeData?.socialShareSettings;\n const { socialShareUrl } = courseData?.course || {};\n const defaultSettings = { isEnabled: false, shareUrl: '' };\n\n if (!socialShareSettings) {\n return { facebook: defaultSettings, twitter: defaultSettings };\n }\n const { facebook, twitter } = socialShareSettings;\n const loadSettings = (target) => ({\n isEnabled: target.isEnabled,\n shareUrl: `${socialShareUrl}?${target.utmParams}`,\n });\n return { facebook: loadSettings(facebook), twitter: loadSettings(twitter) };\n};\n\nexport const useOptionVisibility = (cardId) => {\n const courseData = useCourseData(cardId);\n const isEmailEnabled = courseData?.enrollment?.isEmailEnabled ?? false;\n const isEnrolled = courseData?.enrollment?.isEnrolled ?? false;\n const { twitter, facebook } = useCardSocialSettingsData(cardId);\n const isEarned = courseData?.certificate?.isEarned ?? false;\n\n const shouldShowUnenrollItem = isEnrolled && !isEarned;\n const shouldShowDropdown = (\n shouldShowUnenrollItem\n || isEmailEnabled\n || facebook.isEnabled\n || twitter.isEnabled\n );\n\n return {\n shouldShowUnenrollItem,\n shouldShowDropdown,\n };\n};\n"]}
|
|
@@ -4,7 +4,7 @@ import { useIntl } from '@openedx/frontend-base';
|
|
|
4
4
|
import track from '../../tracking';
|
|
5
5
|
import { Button, Form, Icon, ModalPopup, Sheet, breakpoints, useWindowSize, ModalCloseButton, } from '@openedx/paragon';
|
|
6
6
|
import { Close, Tune } from '@openedx/paragon/icons';
|
|
7
|
-
import {
|
|
7
|
+
import { useInitializeSubsCourseDashboard } from '../../data/hooks';
|
|
8
8
|
import { useFilters } from '../../data/context';
|
|
9
9
|
import FilterForm from './components/FilterForm';
|
|
10
10
|
import SortForm from './components/SortForm';
|
|
@@ -14,8 +14,8 @@ export const CourseFilterControls = () => {
|
|
|
14
14
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
15
15
|
const [targetRef, setTargetRef] = React.useState(null);
|
|
16
16
|
const { formatMessage } = useIntl();
|
|
17
|
-
const { data } =
|
|
18
|
-
const hasCourses = React.useMemo(() => { var _a; return ((_a = data === null || data === void 0 ? void 0 : data.
|
|
17
|
+
const { data } = useInitializeSubsCourseDashboard();
|
|
18
|
+
const hasCourses = React.useMemo(() => { var _a; return ((_a = data === null || data === void 0 ? void 0 : data.subscriptionCourses) === null || _a === void 0 ? void 0 : _a.length) > 0; }, [data]);
|
|
19
19
|
const { filters, sortBy, setSortBy, addFilter, removeFilter, } = useFilters();
|
|
20
20
|
const openFiltersOptions = () => {
|
|
21
21
|
track.filter.filterClicked();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CourseFilterControls.js","sourceRoot":"","sources":["../../../src/containers/CourseFilterControls/CourseFilterControls.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EACL,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,KAAK,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"CourseFilterControls.js","sourceRoot":"","sources":["../../../src/containers/CourseFilterControls/CourseFilterControls.jsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport track from '@src/tracking';\nimport {\n Button,\n Form,\n Icon,\n ModalPopup,\n Sheet,\n breakpoints,\n useWindowSize,\n ModalCloseButton,\n} from '@openedx/paragon';\nimport { Close, Tune } from '@openedx/paragon/icons';\n\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\nimport { useFilters } from '@src/data/context';\nimport FilterForm from './components/FilterForm';\nimport SortForm from './components/SortForm';\nimport messages from './messages';\n\nimport './index.scss';\n\nexport const CourseFilterControls = () => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [targetRef, setTargetRef] = React.useState(null);\n const { formatMessage } = useIntl();\n const { data } = useInitializeSubsCourseDashboard();\n const hasCourses = React.useMemo(() => data?.subscriptionCourses?.length > 0, [data]);\n const {\n filters, sortBy, setSortBy, addFilter, removeFilter,\n } = useFilters();\n\n const openFiltersOptions = () => {\n track.filter.filterClicked();\n setIsOpen(true);\n };\n const closeFiltersOptions = () => {\n track.filter.filterOptionSelected(filters);\n setIsOpen(false);\n };\n\n const handleSortChange = (event) => {\n setSortBy(event.target.value);\n };\n\n const handleFilterChange = ({ target: { checked, value } }) => {\n const update = checked ? addFilter : removeFilter;\n update(value);\n };\n const { width } = useWindowSize();\n const isMobile = width < breakpoints.small.minWidth;\n\n return (\n <div id=\"course-filter-controls\">\n <Button\n ref={setTargetRef}\n variant=\"outline-primary\"\n iconBefore={Tune}\n onClick={openFiltersOptions}\n disabled={!hasCourses}\n >\n {formatMessage(messages.refine)}\n </Button>\n <Form>\n {isMobile\n ? (\n <Sheet\n className=\"w-75\"\n position=\"left\"\n show={isOpen}\n onClose={closeFiltersOptions}\n >\n <div className=\"p-1 mr-3\">\n <b>{formatMessage(messages.refine)}</b>\n </div>\n <hr />\n <div className=\"filter-form-row\">\n <FilterForm {...{ filters, handleFilterChange }} />\n </div>\n <div className=\"filter-form-row text-left m-1\">\n <SortForm {...{ sortBy, handleSortChange }} />\n </div>\n <div className=\"pgn__modal-close-container\">\n <ModalCloseButton variant=\"tertiary\" onClick={closeFiltersOptions}>\n <Icon src={Close} />\n </ModalCloseButton>\n </div>\n </Sheet>\n ) : (\n <ModalPopup\n positionRef={targetRef}\n isOpen={isOpen}\n onClose={closeFiltersOptions}\n placement=\"bottom-end\"\n >\n <div\n id=\"course-filter-controls-card\"\n className=\"bg-white p-3 rounded shadow d-flex flex-row\"\n >\n <div className=\"filter-form-col\">\n <FilterForm {...{ filters, handleFilterChange }} />\n </div>\n <hr className=\"h-100 bg-primary-200 mx-3 my-0\" />\n <div className=\"filter-form-col text-left m-1\">\n <SortForm {...{ sortBy, handleSortChange }} />\n </div>\n </div>\n </ModalPopup>\n )}\n </Form>\n </div>\n );\n};\n\nexport default CourseFilterControls;\n"]}
|
|
@@ -5,11 +5,11 @@ import messages from './messages';
|
|
|
5
5
|
import { Button } from '@openedx/paragon';
|
|
6
6
|
import { Search } from '@openedx/paragon/icons';
|
|
7
7
|
import { baseAppUrl } from '../../../data/services/lms/urls';
|
|
8
|
-
import {
|
|
8
|
+
import { useInitializeSubsDashboard } from '../../../data/hooks';
|
|
9
9
|
export const NoCoursesView = () => {
|
|
10
10
|
var _a;
|
|
11
11
|
const { formatMessage } = useIntl();
|
|
12
|
-
const { data: learnerData } =
|
|
12
|
+
const { data: learnerData } = useInitializeSubsDashboard();
|
|
13
13
|
const courseSearchUrl = ((_a = learnerData === null || learnerData === void 0 ? void 0 : learnerData.platformSettings) === null || _a === void 0 ? void 0 : _a.courseSearchUrl) || '';
|
|
14
14
|
return (_jsxs("div", { className: "no-courses-content-view", children: [_jsx("p", { children: formatMessage(messages.inProgressCoursesPrompt) }), _jsx(Button, { variant: "brand", as: "a", href: baseAppUrl(courseSearchUrl), iconBefore: Search, children: formatMessage(messages.findCoursesButton) })] }));
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/containers/CoursesPanel/NoCoursesView/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/containers/CoursesPanel/NoCoursesView/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;;IAChC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,0BAA0B,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAG,CAAA,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,gBAAgB,0CAAE,eAAe,KAAI,EAAE,CAAC;IAE7E,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,sBAAI,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAK,EACxD,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,EAAE,EAAC,GAAG,EACN,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,EACjC,UAAU,EAAE,MAAM,YAEjB,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GACnC,IACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import React from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\nimport { Button } from '@openedx/paragon';\nimport { Search } from '@openedx/paragon/icons';\nimport { baseAppUrl } from '@src/data/services/lms/urls';\n\nimport { useInitializeSubsDashboard } from '@src/data/hooks';\n\nexport const NoCoursesView = () => {\n const { formatMessage } = useIntl();\n const { data: learnerData } = useInitializeSubsDashboard();\n const courseSearchUrl = learnerData?.platformSettings?.courseSearchUrl || '';\n\n return (\n <div className=\"no-courses-content-view\">\n <p>{formatMessage(messages.inProgressCoursesPrompt)}</p>\n <Button\n variant=\"brand\"\n as=\"a\"\n href={baseAppUrl(courseSearchUrl)}\n iconBefore={Search}\n >\n {formatMessage(messages.findCoursesButton)}\n </Button>\n </div>\n );\n};\n\nexport default NoCoursesView;\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React, { useMemo } from 'react';
|
|
3
3
|
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
-
import {
|
|
5
|
-
import { CourseFilterControls, } from '../../containers/CourseFilterControls';
|
|
4
|
+
import { useInitializeSubsCourseDashboard } from '../../data/hooks';
|
|
6
5
|
import CourseListSlot from '../../slots/CourseListSlot';
|
|
7
6
|
import NoCoursesViewSlot from '../../slots/NoCoursesViewSlot';
|
|
8
7
|
import { useFilters } from '../../data/context';
|
|
@@ -10,14 +9,14 @@ import { getVisibleList } from '../../utils/dataTransformers';
|
|
|
10
9
|
import messages from './messages';
|
|
11
10
|
import './index.scss';
|
|
12
11
|
/**
|
|
13
|
-
* Renders the list of CourseCards
|
|
12
|
+
* Renders the list of CourseCards
|
|
14
13
|
* Also houses the NoCoursesView to display if the user hasn't enrolled in any courses.
|
|
15
14
|
* @returns List of courses as CourseCards or empty state
|
|
16
15
|
*/
|
|
17
16
|
export const CoursesPanel = () => {
|
|
18
17
|
const { formatMessage } = useIntl();
|
|
19
|
-
const { data } =
|
|
20
|
-
const hasCourses = useMemo(() => { var _a; return ((_a = data === null || data === void 0 ? void 0 : data.
|
|
18
|
+
const { data } = useInitializeSubsCourseDashboard();
|
|
19
|
+
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
20
|
const { filters, sortBy, pageNumber, setPageNumber, } = useFilters();
|
|
22
21
|
const { visibleList, numPages } = useMemo(() => {
|
|
23
22
|
const transformedCourses = (data === null || data === void 0 ? void 0 : data.coursesByCardId)
|
|
@@ -31,17 +30,14 @@ export const CoursesPanel = () => {
|
|
|
31
30
|
setPageNumber(1);
|
|
32
31
|
}
|
|
33
32
|
}, [numPages, pageNumber, setPageNumber]);
|
|
34
|
-
// TODO [TEMP]: Passing data twice and displaying the list twice, also fixed the corresponding test cases to reflect this.
|
|
35
|
-
// Reason: Requirements not finalized
|
|
36
|
-
// Action: Revisit after UX and data confirmation
|
|
37
33
|
const courseListData = {
|
|
34
|
+
showFilters: true,
|
|
38
35
|
setPageNumber,
|
|
39
36
|
numPages,
|
|
40
37
|
visibleList,
|
|
41
38
|
verifiedCourse: true,
|
|
42
39
|
};
|
|
43
|
-
|
|
44
|
-
return (_jsxs("div", { className: "course-list-container", children: [_jsxs("div", { className: "course-list-heading-container", children: [_jsx("h2", { className: "course-list-title", children: formatMessage(messages.myCourses) }), _jsx("p", { className: "mb-4.5", children: formatMessage(messages.lastSession) })] }), hasCourses ? _jsx(CourseListSlot, { courseListData: courseListData }) : _jsx(NoCoursesViewSlot, {}), _jsx("div", { className: "course-list-heading-container", children: _jsx("h2", { className: "course-list-title text-gray-700", children: formatMessage(messages.limitedCourse) }) }), hasCourses ? _jsx(CourseListSlot, { courseListData: limitedCourseListData }) : _jsx(NoCoursesViewSlot, {})] }));
|
|
40
|
+
return (_jsxs("div", { className: "course-list-container", children: [_jsxs("div", { className: "course-list-heading-container", children: [_jsx("h2", { className: "course-list-title", children: formatMessage(messages.myCourses) }), _jsx("p", { className: "mb-4.5", children: formatMessage(messages.lastSession) })] }), hasCourses ? _jsx(CourseListSlot, { courseListData: courseListData }) : _jsx(NoCoursesViewSlot, {})] }));
|
|
45
41
|
};
|
|
46
42
|
CoursesPanel.propTypes = {};
|
|
47
43
|
export default CoursesPanel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/CoursesPanel/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/CoursesPanel/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,cAAc,CAAC;AAEtB;;;;EAIE;AACF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,gCAAgC,EAAE,CAAC;IACpD,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,MAAM,EACJ,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,GAC3C,GAAG,UAAU,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7C,MAAM,kBAAkB,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe;YAC9C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,cAAc,CACnB,kBAAkB,EAClB,OAAO,EACP,MAAM,EACN,UAAU,CACX,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAExC,uDAAuD;IACvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC;YAC1C,aAAa,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG;QACrB,WAAW,EAAE,IAAI;QACjB,aAAa;QACb,QAAQ;QACR,WAAW;QACX,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,+BAA+B,aAC5C,aAAI,SAAS,EAAC,mBAAmB,YAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAM,EAC1E,YAAG,SAAS,EAAC,QAAQ,YAAE,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAK,IAC3D,EACL,UAAU,CAAC,CAAC,CAAC,KAAC,cAAc,IAAC,cAAc,EAAE,cAAc,GAAI,CAAC,CAAC,CAAC,KAAC,iBAAiB,KAAG,IACpF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;AAE5B,eAAe,YAAY,CAAC","sourcesContent":["import React, { useMemo } from 'react';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\nimport CourseListSlot from '../../slots/CourseListSlot';\nimport NoCoursesViewSlot from '../../slots/NoCoursesViewSlot';\nimport { useFilters } from '@src/data/context';\n\nimport { getVisibleList } from '@src/utils/dataTransformers';\n\nimport messages from './messages';\n\nimport './index.scss';\n\n/**\n * Renders the list of CourseCards\n * Also houses the NoCoursesView to display if the user hasn't enrolled in any courses.\n * @returns List of courses as CourseCards or empty state\n*/\nexport const CoursesPanel = () => {\n const { formatMessage } = useIntl();\n const { data } = useInitializeSubsCourseDashboard();\n const hasCourses = useMemo(() => data?.subscriptionCourses?.length > 0, [data]);\n\n const {\n filters, sortBy, pageNumber, setPageNumber,\n } = useFilters();\n const { visibleList, numPages } = useMemo(() => {\n const transformedCourses = data?.coursesByCardId\n ? Object.values(data.coursesByCardId)\n : [];\n return getVisibleList(\n transformedCourses,\n filters,\n sortBy,\n pageNumber,\n );\n }, [data, filters, sortBy, pageNumber]);\n\n // Clamp page number when filtered/mutated list shrinks\n React.useEffect(() => {\n if (numPages > 0 && pageNumber > numPages) {\n setPageNumber(1);\n }\n }, [numPages, pageNumber, setPageNumber]);\n\n const courseListData = {\n showFilters: true,\n setPageNumber,\n numPages,\n visibleList,\n verifiedCourse: true,\n };\n\n return (\n <div className=\"course-list-container\">\n <div className=\"course-list-heading-container\">\n <h2 className=\"course-list-title\">{formatMessage(messages.myCourses)}</h2>\n <p className=\"mb-4.5\">{formatMessage(messages.lastSession)}</p>\n </div>\n {hasCourses ? <CourseListSlot courseListData={courseListData} /> : <NoCoursesViewSlot />}\n </div>\n );\n};\n\nCoursesPanel.propTypes = {};\n\nexport default CoursesPanel;\n"]}
|
|
@@ -5,7 +5,7 @@ declare namespace messages {
|
|
|
5
5
|
let defaultMessage: string;
|
|
6
6
|
let description: string;
|
|
7
7
|
}
|
|
8
|
-
namespace
|
|
8
|
+
namespace lastSession {
|
|
9
9
|
let id_1: string;
|
|
10
10
|
export { id_1 as id };
|
|
11
11
|
let defaultMessage_1: string;
|
|
@@ -13,12 +13,4 @@ declare namespace messages {
|
|
|
13
13
|
let description_1: string;
|
|
14
14
|
export { description_1 as description };
|
|
15
15
|
}
|
|
16
|
-
namespace lastSession {
|
|
17
|
-
let id_2: string;
|
|
18
|
-
export { id_2 as id };
|
|
19
|
-
let defaultMessage_2: string;
|
|
20
|
-
export { defaultMessage_2 as defaultMessage };
|
|
21
|
-
let description_2: string;
|
|
22
|
-
export { description_2 as description };
|
|
23
|
-
}
|
|
24
16
|
}
|
|
@@ -2,14 +2,9 @@ import { defineMessages } from '@openedx/frontend-base';
|
|
|
2
2
|
const messages = defineMessages({
|
|
3
3
|
myCourses: {
|
|
4
4
|
id: 'dashboard.mycourses',
|
|
5
|
-
defaultMessage: '
|
|
5
|
+
defaultMessage: 'My courses',
|
|
6
6
|
description: 'Label for courses belonging to a user\'s active subscription',
|
|
7
7
|
},
|
|
8
|
-
limitedCourse: {
|
|
9
|
-
id: 'subs.limitedCourses',
|
|
10
|
-
defaultMessage: 'Limited access courses',
|
|
11
|
-
description: 'Label for subscription courses with limited access',
|
|
12
|
-
},
|
|
13
8
|
lastSession: {
|
|
14
9
|
id: 'subs.lastSession',
|
|
15
10
|
defaultMessage: 'Last session was Thursday, May 20, 2026.', // This is a placeholder default message. The actual message should be dynamic based on the last session date received via api.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/CoursesPanel/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,qBAAqB;QACzB,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/CoursesPanel/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,SAAS,EAAE;QACT,EAAE,EAAE,qBAAqB;QACzB,cAAc,EAAE,YAAY;QAC5B,WAAW,EAAE,8DAA8D;KAC5E;IACD,WAAW,EAAE;QACX,EAAE,EAAE,kBAAkB;QACtB,cAAc,EAAE,0CAA0C,EAAE,+HAA+H;QAC3L,WAAW,EAAE,iEAAiE;KAC/E;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n myCourses: {\n id: 'dashboard.mycourses',\n defaultMessage: 'My courses',\n description: 'Label for courses belonging to a user\\'s active subscription',\n },\n lastSession: {\n id: 'subs.lastSession',\n defaultMessage: 'Last session was Thursday, May 20, 2026.', // This is a placeholder default message. The actual message should be dynamic based on the last session date received via api.\n description: 'Label for subscription courses to show last session information',\n }\n});\n\nexport default messages;\n"]}
|