@edx/frontend-app-subscription-learner-dashboard 1.31.2 → 1.32.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 (34) hide show
  1. package/dist/containers/CourseCard/components/CourseCardActions/index.js +1 -1
  2. package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -1
  3. package/dist/containers/CourseCard/components/CourseCardActions/messages.d.ts +0 -8
  4. package/dist/containers/CourseCard/components/CourseCardActions/messages.js +1 -6
  5. package/dist/containers/CourseCard/components/CourseCardActions/messages.js.map +1 -1
  6. package/dist/containers/CourseCard/components/CourseCardBanners/RedeemBanner.js +1 -1
  7. package/dist/containers/CourseCard/components/CourseCardBanners/RedeemBanner.js.map +1 -1
  8. package/dist/containers/CourseCard/components/CourseCardBanners/index.d.ts +7 -1
  9. package/dist/containers/CourseCard/components/CourseCardBanners/index.js +14 -13
  10. package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -1
  11. package/dist/containers/CourseCard/components/CourseCardBanners/messages.d.ts +14 -6
  12. package/dist/containers/CourseCard/components/CourseCardBanners/messages.js +5 -0
  13. package/dist/containers/CourseCard/components/CourseCardBanners/messages.js.map +1 -1
  14. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.d.ts +2 -0
  15. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +8 -2
  16. package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -1
  17. package/dist/containers/CourseCard/components/CourseCardDetails/index.js +2 -2
  18. package/dist/containers/CourseCard/components/CourseCardDetails/index.js.map +1 -1
  19. package/dist/containers/CourseCard/index.d.ts +7 -1
  20. package/dist/containers/CourseCard/index.js +5 -2
  21. package/dist/containers/CourseCard/index.js.map +1 -1
  22. package/dist/containers/CoursesPanel/CourseList/index.js +5 -2
  23. package/dist/containers/CoursesPanel/CourseList/index.js.map +1 -1
  24. package/dist/containers/CoursesPanel/index.js +5 -2
  25. package/dist/containers/CoursesPanel/index.js.map +1 -1
  26. package/dist/containers/Dashboard/DashboardTabs.js +3 -6
  27. package/dist/containers/Dashboard/DashboardTabs.js.map +1 -1
  28. package/dist/containers/HistoryPanel/index.js +0 -1
  29. package/dist/containers/HistoryPanel/index.js.map +1 -1
  30. package/dist/data/hooks/queryHooks.js +16 -9
  31. package/dist/data/hooks/queryHooks.js.map +1 -1
  32. package/dist/widgets/LearnerDashboardHeader/app.js +1 -1
  33. package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -1
  34. package/package.json +1 -1
@@ -15,7 +15,7 @@ export const CourseCardActions = ({ cardId, verifiedCourse, isHistoryTab }) => {
15
15
  const hasStarted = ((_a = cardData === null || cardData === void 0 ? void 0 : cardData.enrollment) === null || _a === void 0 ? void 0 : _a.hasStarted) || false;
16
16
  const { isEntitlement } = useEntitlementInfo(cardData);
17
17
  const isArchived = ((_b = cardData === null || cardData === void 0 ? void 0 : cardData.courseRun) === null || _b === void 0 ? void 0 : _b.isArchived) || false;
18
- return (_jsxs(Row, { className: "align-items-center mt-3", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse && !isHistoryTab ? (_jsx(Badge, { variant: "success", className: "px-3 py-2", children: formatMessage(messages.subsVerifiedCourseText) })) : (!isHistoryTab && (_jsx("span", { className: "small text-info", children: formatMessage(messages.subsIncludedCourseText) }))) }), _jsx(Col, { xs: 12, className: "d-flex justify-content-end", sm: 6, children: !isHistoryTab && (_jsxs(ActionRow, { "data-testid": "CourseCardActions", children: [_jsx(CourseCardActionSlot, { cardId: cardId }), !(isArchived || isEntitlement) && (hasStarted
18
+ return (_jsxs(Row, { className: "align-items-center", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse && !isHistoryTab && (_jsx(Badge, { variant: "success", className: "px-3 py-2", children: formatMessage(messages.subsVerifiedCourseText) })) }), _jsx(Col, { xs: 12, className: "d-flex justify-content-end", sm: 6, children: !isHistoryTab && (_jsxs(ActionRow, { "data-testid": "CourseCardActions", children: [_jsx(CourseCardActionSlot, { cardId: cardId }), !(isArchived || isEntitlement) && (hasStarted
19
19
  ? _jsx(ResumeButton, { cardId: cardId })
20
20
  : _jsx(BeginCourseButton, { cardId: cardId }))] })) })] }));
21
21
  };
@@ -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,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE;;IAC5E,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,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACvD,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,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAC/B,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,YACzC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,CACX,CAAC,CAAC,CAAC,CACA,CAAC,YAAY,IAAI,CACf,eAAM,SAAS,EAAC,iBAAiB,YAC5B,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC5C,CACR,CACJ,GACC,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,4BAA4B,EAAC,EAAE,EAAE,CAAC,YACxD,CAAC,YAAY,IAAI,CACd,MAAC,SAAS,mBAAa,mBAAmB,aACxC,KAAC,oBAAoB,IAAC,MAAM,EAAE,MAAM,GAAI,EAWvC,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,CACb,GACG,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;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,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 BeginCourseButton from './BeginCourseButton';\nimport ResumeButton from './ResumeButton';\nimport messages from './messages';\n\nexport const CourseCardActions = ({ cardId, verifiedCourse, isHistoryTab }) => {\n const cardData = useCourseData(cardId);\n const { formatMessage } = useIntl();\n const hasStarted = cardData?.enrollment?.hasStarted || false;\n const { isEntitlement } = 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 && !isHistoryTab ? (\n <Badge variant=\"success\" className=\"px-3 py-2\">\n {formatMessage(messages.subsVerifiedCourseText)}\n </Badge>\n ) : (\n !isHistoryTab && (\n <span className=\"small text-info\">\n {formatMessage(messages.subsIncludedCourseText)}\n </span>\n )\n )}\n </Col>\n\n <Col xs={12} className=\"d-flex justify-content-end\" sm={6}>\n {!isHistoryTab && (\n <ActionRow data-testid=\"CourseCardActions\">\n <CourseCardActionSlot cardId={cardId} />\n {/* Currently, only the Begin and Resume actions are supported as per the Figma design.\n Keep the following actions commented out for now; they can be enabled in the future\n if the corresponding functionality is required. */}\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 )}\n </Col>\n </Row>\n \n );\n};\nCourseCardActions.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCardActions;\n"]}
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,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE;;IAC5E,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,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACvD,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,oBAAoB,aAC/B,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,cAAc,YAKvC,cAAc,IAAI,CAAC,YAAY,IAAI,CAChC,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,WAAW,YACzC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAC3C,CACX,GACC,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAC,4BAA4B,EAAC,EAAE,EAAE,CAAC,YACxD,CAAC,YAAY,IAAI,CACd,MAAC,SAAS,mBAAa,mBAAmB,aACxC,KAAC,oBAAoB,IAAC,MAAM,EAAE,MAAM,GAAI,EAWvC,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,CACb,GACG,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;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,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 BeginCourseButton from './BeginCourseButton';\nimport ResumeButton from './ResumeButton';\nimport messages from './messages';\n\nexport const CourseCardActions = ({ cardId, verifiedCourse, isHistoryTab }) => {\n const cardData = useCourseData(cardId);\n const { formatMessage } = useIntl();\n const hasStarted = cardData?.enrollment?.hasStarted || false;\n const { isEntitlement } = useEntitlementInfo(cardData);\n const isArchived = cardData?.courseRun?.isArchived || false;\n\n return (\n <Row className=\"align-items-center\">\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 && !isHistoryTab && (\n <Badge variant=\"success\" className=\"px-3 py-2\">\n {formatMessage(messages.subsVerifiedCourseText)}\n </Badge>\n )}\n </Col>\n\n <Col xs={12} className=\"d-flex justify-content-end\" sm={6}>\n {!isHistoryTab && (\n <ActionRow data-testid=\"CourseCardActions\">\n <CourseCardActionSlot cardId={cardId} />\n {/* Currently, only the Begin and Resume actions are supported as per the Figma design.\n Keep the following actions commented out for now; they can be enabled in the future\n if the corresponding functionality is required. */}\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 )}\n </Col>\n </Row>\n \n );\n};\nCourseCardActions.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCardActions;\n"]}
@@ -37,12 +37,4 @@ declare namespace messages {
37
37
  let defaultMessage_4: string;
38
38
  export { defaultMessage_4 as defaultMessage };
39
39
  }
40
- namespace subsIncludedCourseText {
41
- let id_5: string;
42
- export { id_5 as id };
43
- let description_5: string;
44
- export { description_5 as description };
45
- let defaultMessage_5: string;
46
- export { defaultMessage_5 as defaultMessage };
47
- }
48
40
  }
@@ -23,12 +23,7 @@ const messages = defineMessages({
23
23
  subsVerifiedCourseText: {
24
24
  id: 'subs.learner-dash.courseCard.actions.verifiedText',
25
25
  description: 'Text for verified courses included in edx Unlimited',
26
- defaultMessage: 'Verified with edX Unlimited',
27
- },
28
- subsIncludedCourseText: {
29
- id: 'subs.learner-dash.courseCard.actions.includedText',
30
- description: 'Text for unverified (audited) courses included in edx Unlimited',
31
- defaultMessage: 'Included in edX Unlimited',
26
+ defaultMessage: 'Verified with your subscription',
32
27
  },
33
28
  });
34
29
  export default messages;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,WAAW,EAAE;QACX,EAAE,EAAE,6CAA6C;QACjD,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,cAAc;KAC/B;IACD,MAAM,EAAE;QACN,EAAE,EAAE,wCAAwC;QAC5C,WAAW,EAAE,gCAAgC;QAC7C,cAAc,EAAE,QAAQ;KACzB;IACD,UAAU,EAAE;QACV,EAAE,EAAE,4CAA4C;QAChD,WAAW,EAAE,qCAAqC;QAClD,cAAc,EAAE,aAAa;KAC9B;IACD,aAAa,EAAE;QACb,EAAE,EAAE,+CAA+C;QACnD,WAAW,EAAE,wCAAwC;QACrD,cAAc,EAAE,gBAAgB;KACjC;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,mDAAmD;QACvD,WAAW,EAAE,qDAAqD;QAClE,cAAc,EAAE,6BAA6B;KAC9C;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,mDAAmD;QACvD,WAAW,EAAE,iEAAiE;QAC9E,cAAc,EAAE,2BAA2B;KAC5C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n beginCourse: {\n id: 'learner-dash.courseCard.actions.beginCourse',\n description: 'Course card begin-course button text',\n defaultMessage: 'Begin Course',\n },\n resume: {\n id: 'learner-dash.courseCard.actions.resume',\n description: 'Course card resume button text',\n defaultMessage: 'Resume',\n },\n viewCourse: {\n id: 'learner-dash.courseCard.actions.viewCourse',\n description: 'Course card view-course button text',\n defaultMessage: 'View Course',\n },\n selectSession: {\n id: 'learner-dash.courseCard.actions.selectSession',\n description: 'Course card select-session button text',\n defaultMessage: 'Select Session',\n },\n subsVerifiedCourseText: {\n id: 'subs.learner-dash.courseCard.actions.verifiedText',\n description: 'Text for verified courses included in edx Unlimited',\n defaultMessage: 'Verified with edX Unlimited',\n },\n subsIncludedCourseText: {\n id: 'subs.learner-dash.courseCard.actions.includedText',\n description: 'Text for unverified (audited) courses included in edx Unlimited',\n defaultMessage: 'Included in edX Unlimited',\n },\n});\n\nexport default messages;\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,WAAW,EAAE;QACX,EAAE,EAAE,6CAA6C;QACjD,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,cAAc;KAC/B;IACD,MAAM,EAAE;QACN,EAAE,EAAE,wCAAwC;QAC5C,WAAW,EAAE,gCAAgC;QAC7C,cAAc,EAAE,QAAQ;KACzB;IACD,UAAU,EAAE;QACV,EAAE,EAAE,4CAA4C;QAChD,WAAW,EAAE,qCAAqC;QAClD,cAAc,EAAE,aAAa;KAC9B;IACD,aAAa,EAAE;QACb,EAAE,EAAE,+CAA+C;QACnD,WAAW,EAAE,wCAAwC;QACrD,cAAc,EAAE,gBAAgB;KACjC;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,mDAAmD;QACvD,WAAW,EAAE,qDAAqD;QAClE,cAAc,EAAE,iCAAiC;KAClD;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n beginCourse: {\n id: 'learner-dash.courseCard.actions.beginCourse',\n description: 'Course card begin-course button text',\n defaultMessage: 'Begin Course',\n },\n resume: {\n id: 'learner-dash.courseCard.actions.resume',\n description: 'Course card resume button text',\n defaultMessage: 'Resume',\n },\n viewCourse: {\n id: 'learner-dash.courseCard.actions.viewCourse',\n description: 'Course card view-course button text',\n defaultMessage: 'View Course',\n },\n selectSession: {\n id: 'learner-dash.courseCard.actions.selectSession',\n description: 'Course card select-session button text',\n defaultMessage: 'Select Session',\n },\n subsVerifiedCourseText: {\n id: 'subs.learner-dash.courseCard.actions.verifiedText',\n description: 'Text for verified courses included in edx Unlimited',\n defaultMessage: 'Verified with your subscription',\n },\n});\n\nexport default messages;\n"]}
@@ -4,7 +4,7 @@ import { useIntl } from '@openedx/frontend-base';
4
4
  import messages from './messages';
5
5
  const RedeemBanner = () => {
6
6
  const { formatMessage } = useIntl();
7
- return (_jsx(Card.Status, { variant: "warning", className: "bg-light", children: _jsxs(Row, { className: "align-items-center mt-1", children: [_jsx(Col, { xs: 12, lg: 8, className: "pe-lg-3", children: _jsx("p", { className: "mb-0 font-weight-semi-bold", children: "This is a limited set of courses. More details will follow soon." }) }), _jsx(Col, { xs: 12, sm: 4, className: "d-flex justify-content-end mt-2 mt-lg-0", children: _jsx(Button, { variant: "outline-dark", "data-testid": "view-redeem-button", size: "md", children: formatMessage(messages.redeem) }) })] }) }));
7
+ return (_jsx(Card.Status, { variant: "warning", className: "bg-light", children: _jsxs(Row, { className: "align-items-center mt-1", children: [_jsx(Col, { xs: 12, lg: 8, className: "pe-lg-3", children: _jsx("p", { className: "mb-0 font-weight-semi-bold", children: formatMessage(messages.subscriptionRedeemBannerText) }) }), _jsx(Col, { xs: 12, sm: 4, className: "d-flex justify-content-end mt-2 mt-lg-0", children: _jsx(Button, { variant: "outline-dark", "data-testid": "view-redeem-button", size: "md", children: formatMessage(messages.redeem) }) })] }) }));
8
8
  };
9
9
  export default RedeemBanner;
10
10
  //# sourceMappingURL=RedeemBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedeemBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/RedeemBanner.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,YAAY,GAAG,GAAG,EAAE;IACtB,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,CACH,KAAC,IAAI,CAAC,MAAM,IACR,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,UAAU,YAEpB,MAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,aACpC,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,YACnC,YAAG,SAAS,EAAC,4BAA4B,iFAErC,GACF,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACd,SAAS,EAAC,yCAAyC,YAEnD,KAAC,MAAM,IAAC,OAAO,EAAC,cAAc,iBAAa,oBAAoB,EACvD,IAAI,EAAC,IAAI,YAEZ,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAC1B,GACP,IACJ,GACI,CACjB,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import { Card, Button, Row, Col } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\n\nconst RedeemBanner = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Card.Status\n variant=\"warning\"\n className=\"bg-light\"\n >\n <Row className=\"align-items-center mt-1\">\n <Col xs={12} lg={8} className=\"pe-lg-3\">\n <p className=\"mb-0 font-weight-semi-bold\">\n This is a limited set of courses. More details will follow soon.\n </p>\n </Col>\n\n <Col xs={12} sm={4}\n className=\"d-flex justify-content-end mt-2 mt-lg-0\"\n >\n <Button variant=\"outline-dark\" data-testid=\"view-redeem-button\"\n size=\"md\"\n >\n {formatMessage(messages.redeem)}\n </Button>\n </Col>\n </Row>\n </Card.Status>\n );\n};\n\nexport default RedeemBanner;\n"]}
1
+ {"version":3,"file":"RedeemBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/RedeemBanner.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,YAAY,GAAG,GAAG,EAAE;IACtB,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,CACH,KAAC,IAAI,CAAC,MAAM,IACR,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,UAAU,YAEpB,MAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,aACpC,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,YACnC,YAAG,SAAS,EAAC,4BAA4B,YACpC,aAAa,CAAC,QAAQ,CAAC,4BAA4B,CAAC,GACrD,GACF,EAEN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACd,SAAS,EAAC,yCAAyC,YAEnD,KAAC,MAAM,IAAC,OAAO,EAAC,cAAc,iBAAa,oBAAoB,EACvD,IAAI,EAAC,IAAI,YAEZ,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAC1B,GACP,IACJ,GACI,CACjB,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import { Card, Button, Row, Col } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\n\nconst RedeemBanner = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Card.Status\n variant=\"warning\"\n className=\"bg-light\"\n >\n <Row className=\"align-items-center mt-1\">\n <Col xs={12} lg={8} className=\"pe-lg-3\">\n <p className=\"mb-0 font-weight-semi-bold\">\n {formatMessage(messages.subscriptionRedeemBannerText)}\n </p>\n </Col>\n\n <Col xs={12} sm={4}\n className=\"d-flex justify-content-end mt-2 mt-lg-0\"\n >\n <Button variant=\"outline-dark\" data-testid=\"view-redeem-button\"\n size=\"md\"\n >\n {formatMessage(messages.redeem)}\n </Button>\n </Col>\n </Row>\n </Card.Status>\n );\n};\n\nexport default RedeemBanner;\n"]}
@@ -1,13 +1,19 @@
1
- export function CourseCardBanners({ cardId, verifiedCourse, isHistoryTab }: {
1
+ export function CourseCardBanners({ cardId, verifiedCourse, isHistoryTab, isAudit, isAuditAccessExpired, canUpgrade }: {
2
2
  cardId: any;
3
3
  verifiedCourse: any;
4
4
  isHistoryTab: any;
5
+ isAudit: any;
6
+ isAuditAccessExpired: any;
7
+ canUpgrade: any;
5
8
  }): import("react/jsx-runtime").JSX.Element | null;
6
9
  export namespace CourseCardBanners {
7
10
  namespace propTypes {
8
11
  let cardId: PropTypes.Validator<string>;
9
12
  let verifiedCourse: PropTypes.Requireable<boolean>;
10
13
  let isHistoryTab: PropTypes.Requireable<boolean>;
14
+ let isAudit: PropTypes.Requireable<boolean>;
15
+ let isAuditAccessExpired: PropTypes.Requireable<boolean>;
16
+ let canUpgrade: PropTypes.Requireable<boolean>;
11
17
  }
12
18
  }
13
19
  export default CourseCardBanners;
@@ -1,26 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import PropTypes from 'prop-types';
3
3
  import { useCourseData } from '../../../../hooks';
4
- import RedeemBanner from './RedeemBanner';
5
4
  import UpgradeBanner from './UpgradeBanner';
6
5
  import ViewCertificateBanner from './ViewCertificateBanner';
7
6
  import ViewGradesBanner from './ViewGradesBanner';
8
- export const CourseCardBanners = ({ cardId, verifiedCourse, isHistoryTab }) => {
9
- var _a, _b, _c, _d, _e, _f, _g;
7
+ export const CourseCardBanners = ({ cardId, verifiedCourse, isHistoryTab, isAudit, isAuditAccessExpired, canUpgrade }) => {
8
+ var _a, _b, _c, _d, _e, _f;
10
9
  const courseData = useCourseData(cardId);
11
10
  if (!courseData) {
12
11
  return null;
13
12
  }
14
- const isAuditAccessExpired = ((_a = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isAuditAccessExpired) || false;
15
- const isFromNonUpgradeableCourses = (courseData === null || courseData === void 0 ? void 0 : courseData.isFromNonUpgradeableCourses) || false;
16
- const upgradeUrl = (_c = (_b = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _b === void 0 ? void 0 : _b.marketingUrl) !== null && _c !== void 0 ? _c : '';
17
- const showHistoryUpgradeBanner = isHistoryTab && isAuditAccessExpired && !isFromNonUpgradeableCourses;
18
- const isDownloadable = ((_d = courseData === null || courseData === void 0 ? void 0 : courseData.certificate) === null || _d === void 0 ? void 0 : _d.isDownloadable) || false;
19
- const isCompletedButNotPassed = !!((_e = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _e === void 0 ? void 0 : _e.isArchived)
20
- && ((_f = courseData === null || courseData === void 0 ? void 0 : courseData.gradeData) === null || _f === void 0 ? void 0 : _f.isPassing) === false
21
- && !((_g = courseData === null || courseData === void 0 ? void 0 : courseData.certificate) === null || _g === void 0 ? void 0 : _g.isEarned);
22
- return (_jsxs("div", { className: "course-card-banners", "data-testid": "CourseCardBanners", children: [showHistoryUpgradeBanner && (_jsx(UpgradeBanner, { upgradeUrl: upgradeUrl })), (!verifiedCourse && !isAuditAccessExpired) &&
23
- _jsx(RedeemBanner, {}), isDownloadable &&
13
+ const upgradeUrl = (_b = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _a === void 0 ? void 0 : _a.marketingUrl) !== null && _b !== void 0 ? _b : '';
14
+ const showUpgradeBanner = (isHistoryTab
15
+ && isAuditAccessExpired
16
+ && (courseData === null || courseData === void 0 ? void 0 : courseData.isFromNonUpgradeableCourses)) || (!isHistoryTab && isAudit && canUpgrade);
17
+ const isDownloadable = ((_c = courseData === null || courseData === void 0 ? void 0 : courseData.certificate) === null || _c === void 0 ? void 0 : _c.isDownloadable) || false;
18
+ const isCompletedButNotPassed = !!((_d = courseData === null || courseData === void 0 ? void 0 : courseData.courseRun) === null || _d === void 0 ? void 0 : _d.isArchived)
19
+ && ((_e = courseData === null || courseData === void 0 ? void 0 : courseData.gradeData) === null || _e === void 0 ? void 0 : _e.isPassing) === false
20
+ && !((_f = courseData === null || courseData === void 0 ? void 0 : courseData.certificate) === null || _f === void 0 ? void 0 : _f.isEarned);
21
+ return (_jsxs("div", { className: "course-card-banners", "data-testid": "CourseCardBanners", children: [showUpgradeBanner && (_jsx(UpgradeBanner, { upgradeUrl: upgradeUrl })), isDownloadable &&
24
22
  _jsx(ViewCertificateBanner, { cardId: cardId }), isCompletedButNotPassed &&
25
23
  _jsx(ViewGradesBanner, { cardId: cardId })] }));
26
24
  };
@@ -28,6 +26,9 @@ CourseCardBanners.propTypes = {
28
26
  cardId: PropTypes.string.isRequired,
29
27
  verifiedCourse: PropTypes.bool,
30
28
  isHistoryTab: PropTypes.bool,
29
+ isAudit: PropTypes.bool,
30
+ isAuditAccessExpired: PropTypes.bool,
31
+ canUpgrade: PropTypes.bool,
31
32
  };
32
33
  export default CourseCardBanners;
33
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,EAAE;;IAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,oBAAoB,GAAG,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,0CAAE,oBAAoB,KAAI,KAAK,CAAC;IACnF,MAAM,2BAA2B,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,2BAA2B,KAAI,KAAK,CAAC;IACrF,MAAM,UAAU,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,YAAY,mCAAI,EAAE,CAAC;IAC7D,MAAM,wBAAwB,GAAG,YAAY,IAAI,oBAAoB,IAAI,CAAC,2BAA2B,CAAC;IACtG,MAAM,cAAc,GAAG,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,0CAAE,cAAc,KAAI,KAAK,CAAC;IACxE,MAAM,uBAAuB,GAAG,CAAC,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,UAAU,CAAA;WAC7D,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,SAAS,MAAK,KAAK;WAC1C,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,0CAAE,QAAQ,CAAA,CAAC;IAEzC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,iBAAa,mBAAmB,aACjE,wBAAwB,IAAI,CAC3B,KAAC,aAAa,IAAC,UAAU,EAAE,UAAU,GAAI,CAC1C,EACA,CAAC,CAAC,cAAc,IAAI,CAAC,oBAAoB,CAAC;gBACzC,KAAC,YAAY,KAAG,EAEjB,cAAc;gBACb,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,GAAI,EAE1C,uBAAuB;gBACtB,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,IAElC,CACP,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useCourseData } from '@src/hooks';\nimport RedeemBanner from './RedeemBanner';\nimport UpgradeBanner from './UpgradeBanner';\nimport ViewCertificateBanner from './ViewCertificateBanner';\nimport ViewGradesBanner from './ViewGradesBanner';\n\nexport const CourseCardBanners = ({ cardId, verifiedCourse, isHistoryTab }) => {\n const courseData = useCourseData(cardId);\n if (!courseData) {\n return null;\n }\n\n const isAuditAccessExpired = courseData?.enrollment?.isAuditAccessExpired || false;\n const isFromNonUpgradeableCourses = courseData?.isFromNonUpgradeableCourses || false;\n const upgradeUrl = courseData?.courseRun?.marketingUrl ?? '';\n const showHistoryUpgradeBanner = isHistoryTab && isAuditAccessExpired && !isFromNonUpgradeableCourses;\n const isDownloadable = courseData?.certificate?.isDownloadable || false;\n const isCompletedButNotPassed = !!courseData?.courseRun?.isArchived\n && courseData?.gradeData?.isPassing === false\n && !courseData?.certificate?.isEarned;\n\n return (\n <div className=\"course-card-banners\" data-testid=\"CourseCardBanners\">\n {showHistoryUpgradeBanner && (\n <UpgradeBanner upgradeUrl={upgradeUrl} />\n )}\n {(!verifiedCourse && !isAuditAccessExpired) &&\n <RedeemBanner />\n }\n {isDownloadable &&\n <ViewCertificateBanner cardId={cardId} />\n }\n {isCompletedButNotPassed &&\n <ViewGradesBanner cardId={cardId} />\n }\n </div>\n );\n};\nCourseCardBanners.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCardBanners;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,EAAE,EAAE;;IACvH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,YAAY,mCAAI,EAAE,CAAC;IAC7D,MAAM,iBAAiB,GAAG,CAAC,YAAY;WAClC,oBAAoB;YACpB,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,2BAA2B,CAAA,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,0CAAE,cAAc,KAAI,KAAK,CAAC;IACxE,MAAM,uBAAuB,GAAG,CAAC,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,UAAU,CAAA;WAC7D,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,0CAAE,SAAS,MAAK,KAAK;WAC1C,CAAC,CAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,0CAAE,QAAQ,CAAA,CAAC;IAEzC,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,iBAAa,mBAAmB,aACjE,iBAAiB,IAAI,CACpB,KAAC,aAAa,IAAC,UAAU,EAAE,UAAU,GAAI,CAC1C,EACA,cAAc;gBACb,KAAC,qBAAqB,IAAC,MAAM,EAAE,MAAM,GAAI,EAE1C,uBAAuB;gBACtB,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,GAAI,IAElC,CACP,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;IAC5B,OAAO,EAAE,SAAS,CAAC,IAAI;IACvB,oBAAoB,EAAE,SAAS,CAAC,IAAI;IACpC,UAAU,EAAE,SAAS,CAAC,IAAI;CAC3B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { useCourseData } from '@src/hooks';\nimport UpgradeBanner from './UpgradeBanner';\nimport ViewCertificateBanner from './ViewCertificateBanner';\nimport ViewGradesBanner from './ViewGradesBanner';\n\nexport const CourseCardBanners = ({ cardId, verifiedCourse, isHistoryTab, isAudit, isAuditAccessExpired, canUpgrade }) => {\n const courseData = useCourseData(cardId);\n if (!courseData) {\n return null;\n }\n\n const upgradeUrl = courseData?.courseRun?.marketingUrl ?? '';\n const showUpgradeBanner = (isHistoryTab\n && isAuditAccessExpired\n && courseData?.isFromNonUpgradeableCourses) || (!isHistoryTab && isAudit && canUpgrade);\n const isDownloadable = courseData?.certificate?.isDownloadable || false;\n const isCompletedButNotPassed = !!courseData?.courseRun?.isArchived\n && courseData?.gradeData?.isPassing === false\n && !courseData?.certificate?.isEarned;\n\n return (\n <div className=\"course-card-banners\" data-testid=\"CourseCardBanners\">\n {showUpgradeBanner && (\n <UpgradeBanner upgradeUrl={upgradeUrl} />\n )}\n {isDownloadable &&\n <ViewCertificateBanner cardId={cardId} />\n }\n {isCompletedButNotPassed &&\n <ViewGradesBanner cardId={cardId} />\n }\n </div>\n );\n};\nCourseCardBanners.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n isAudit: PropTypes.bool,\n isAuditAccessExpired: PropTypes.bool,\n canUpgrade: PropTypes.bool,\n};\n\nexport default CourseCardBanners;\n"]}
@@ -173,7 +173,7 @@ declare namespace messages {
173
173
  let defaultMessage_21: string;
174
174
  export { defaultMessage_21 as defaultMessage };
175
175
  }
176
- namespace upgradeAction {
176
+ namespace subscriptionRedeemBannerText {
177
177
  let id_22: string;
178
178
  export { id_22 as id };
179
179
  let description_22: string;
@@ -181,7 +181,7 @@ declare namespace messages {
181
181
  let defaultMessage_22: string;
182
182
  export { defaultMessage_22 as defaultMessage };
183
183
  }
184
- namespace verifiedBannerText {
184
+ namespace upgradeAction {
185
185
  let id_23: string;
186
186
  export { id_23 as id };
187
187
  let description_23: string;
@@ -189,7 +189,7 @@ declare namespace messages {
189
189
  let defaultMessage_23: string;
190
190
  export { defaultMessage_23 as defaultMessage };
191
191
  }
192
- namespace completedAndPassedBannerText {
192
+ namespace verifiedBannerText {
193
193
  let id_24: string;
194
194
  export { id_24 as id };
195
195
  let description_24: string;
@@ -197,7 +197,7 @@ declare namespace messages {
197
197
  let defaultMessage_24: string;
198
198
  export { defaultMessage_24 as defaultMessage };
199
199
  }
200
- namespace congratulationsText {
200
+ namespace completedAndPassedBannerText {
201
201
  let id_25: string;
202
202
  export { id_25 as id };
203
203
  let description_25: string;
@@ -205,7 +205,7 @@ declare namespace messages {
205
205
  let defaultMessage_25: string;
206
206
  export { defaultMessage_25 as defaultMessage };
207
207
  }
208
- namespace courseCompletedBannerText {
208
+ namespace congratulationsText {
209
209
  let id_26: string;
210
210
  export { id_26 as id };
211
211
  let description_26: string;
@@ -213,7 +213,7 @@ declare namespace messages {
213
213
  let defaultMessage_26: string;
214
214
  export { defaultMessage_26 as defaultMessage };
215
215
  }
216
- namespace viewGradesText {
216
+ namespace courseCompletedBannerText {
217
217
  let id_27: string;
218
218
  export { id_27 as id };
219
219
  let description_27: string;
@@ -221,4 +221,12 @@ declare namespace messages {
221
221
  let defaultMessage_27: string;
222
222
  export { defaultMessage_27 as defaultMessage };
223
223
  }
224
+ namespace viewGradesText {
225
+ let id_28: string;
226
+ export { id_28 as id };
227
+ let description_28: string;
228
+ export { description_28 as description };
229
+ let defaultMessage_28: string;
230
+ export { defaultMessage_28 as defaultMessage };
231
+ }
224
232
  }
@@ -110,6 +110,11 @@ const messages = defineMessages({
110
110
  description: 'Banner text for subscription courses where audit access has expired',
111
111
  defaultMessage: 'This course is included in your subscription. Upgrade to get full course access.',
112
112
  },
113
+ subscriptionRedeemBannerText: {
114
+ id: 'learner-dash.courseCard.banners.subscriptionRedeemBannerText',
115
+ description: 'Banner text for subscription courses where audit access has expired',
116
+ defaultMessage: 'This course is included in your subscription. Redeem to get full course access.',
117
+ },
113
118
  upgradeAction: {
114
119
  id: 'learner-dash.courseCard.banners.upgradeAction',
115
120
  description: 'Upgrade button text for subscription upgrade banner',
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/messages.js"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n auditAccessExpired: {\n id: 'learner-dash.courseCard.banners.auditAccessExpired',\n description: 'Audit access expiration banner message',\n defaultMessage: 'Your audit access to this course has expired.',\n },\n findAnotherCourse: {\n id: 'learner-dash.courseCard.banners.findAnotherCourse',\n description: 'Action prompt taking learners to course exploration',\n defaultMessage: 'Find another course',\n },\n certRestricted: {\n id: 'learner-dash.courseCard.banners.certificateRestricted',\n description: 'Restricted certificate warning message',\n defaultMessage: 'Your Certificate of Achievement is being held pending confirmation that the issuance of your Certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria, and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know by contacting {supportEmail}.',\n },\n certRestrictedNoEmail: {\n id: 'learner-dash.courseCard.banners.certificateRestrictedNoEmail',\n description: 'Restricted certificate warning message',\n defaultMessage: 'Your Certificate of Achievement is being held pending confirmation that the issuance of your Certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria, and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know.',\n },\n certRefundContactBilling: {\n id: 'learner-dash.courseCard.banners.certificateRefundContactBilling',\n description: 'Message to learners to contact billing for certificate refunds',\n defaultMessage: 'If you would like a refund on your Certificate of Achievement, please contact our billing address {billingEmail}',\n },\n certRefundContactBillingNoEmail: {\n id: 'learner-dash.courseCard.banners.certificateRefundContactBillingNoEmail',\n description: 'Message to learners to contact billing for certificate refunds',\n defaultMessage: 'If you would like a refund on your Certificate of Achievement, please contact us.',\n },\n passingGrade: {\n id: 'learner-dash.courseCard.banners.passingGrade',\n description: 'Message to learners with minimum passing grade for the course',\n defaultMessage: 'Grade required to pass the course: {minPassingGrade}\\u200f%',\n },\n notEligibleForCert: {\n id: 'learner-dash.courseCard.banners.notEligibleForCert',\n description: 'Certificate inelligibility message',\n defaultMessage: 'You are not eligible for a certificate.',\n },\n viewGrades: {\n id: 'learner-dash.courseCard.banners.viewGrades',\n description: 'Gradses link text',\n defaultMessage: 'View grades.',\n },\n certReady: {\n id: 'learner-dash.courseCard.banners.certReady',\n description: 'Certificate ready message',\n defaultMessage: 'Congratulations. Your certificate is ready.',\n },\n viewCertificate: {\n id: 'learner-dash.courseCard.banners.viewCertificate',\n description: 'Certificate link text',\n defaultMessage: 'View Certificate',\n },\n certMinGrade: {\n id: 'learner-dash.courseCard.banners.certMinGrade',\n description: 'Passing grade requirement message',\n defaultMessage: 'Grade required for a certificate: {minPassingGrade}\\u200f%',\n },\n downloadCertificate: {\n id: 'learner-dash.courseCard.banners.downloadCertificate',\n description: 'Certificate download link text',\n defaultMessage: 'Download Certificate.',\n },\n gradeAndCertReadyAfter: {\n id: 'learner-dash.courseCard.banners.gradseAndCertReadyAfter',\n description: 'Grade and certificate availability date message',\n defaultMessage: 'Your grade and certificate will be ready after {availableDate}.',\n },\n entitlementUnavailable: {\n id: 'learner-dash.courseCard.banners.entitlementUnavailable',\n description: 'Entitlement course message when no sessions are available',\n defaultMessage: 'There are no sessions available at the moment. The course team will create new sessions soon. If no sessions appear, please contact {emailLink} for information.',\n },\n entitlementExpiringSoon: {\n id: 'learner-dash.courseCard.banners.entitlementExpiringSoon',\n description: 'Entitlement course message when the entitlement is expiring soon.',\n defaultMessage: 'You must {selectSessionButton} by {changeDeadline} to access the course.',\n },\n entitlementExpired: {\n id: 'learner-dash.courseCard.banners.entitlementExpired',\n description: 'Entitlement course message when the entitlement is expired.',\n defaultMessage: 'You can no longer change sessions.',\n },\n selectSession: {\n id: 'learner-dash.courseCard.banners.selectSession',\n description: 'Entitlement session selection link text',\n defaultMessage: 'select a session',\n },\n prerequisitesNotMet: {\n id: 'learner-dash.courseCard.banners.prerequisitesNotMet',\n description: 'Message to learners with unmet prerequisites',\n defaultMessage: 'You can\\'t access this course just yet because you have not met the pre-requisites.',\n },\n courseHasNotStarted: {\n id: 'learner-dash.courseCard.banners.courseHasNotStarted',\n description: 'Course has not started message',\n defaultMessage: 'You can\\'t access this course just yet because the course hasn\\'t started yet. The course will start on {startDate}.',\n },\n redeem: {\n id: 'learner-dash.courseCard.banners.redeem',\n description: 'Redeem link text',\n defaultMessage: 'Redeem',\n },\n subscriptionUpgradeBannerText: {\n id: 'learner-dash.courseCard.banners.subscriptionUpgradeBannerText',\n description: 'Banner text for subscription courses where audit access has expired',\n defaultMessage: 'This course is included in your subscription. Upgrade to get full course access.',\n },\n upgradeAction: {\n id: 'learner-dash.courseCard.banners.upgradeAction',\n description: 'Upgrade button text for subscription upgrade banner',\n defaultMessage: 'Upgrade',\n },\n verifiedBannerText: {\n id: 'learner-dash.courseCard.banners.verifiedBannerText',\n description: 'Banner text for verified courses',\n defaultMessage: 'You passed this course on {date} and earned a verified certificate.',\n },\n completedAndPassedBannerText: {\n id: 'learner-dash.courseCard.banners.completedAndPassedBannerText',\n description: 'Banner text for completed and passed courses',\n defaultMessage: 'You completed and passed this course on {date}.',\n },\n congratulationsText: {\n id: 'learner-dash.courseCard.banners.congratulationsText',\n description: 'Congratulations text for verified courses',\n defaultMessage: 'Congratulations!',\n },\n courseCompletedBannerText: {\n id: 'learner-dash.courseCard.banners.courseCompletedBannerText',\n description: 'Course completed banner text for verified courses',\n defaultMessage: 'You completed this course on {date}.',\n },\n viewGradesText: {\n id: 'learner-dash.courseCard.banners.viewGradesText',\n description: 'View grades link text for verified courses',\n defaultMessage: 'View grades',\n },\n});\n\nexport default messages;\n"]}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/messages.js"],"names":[],"mappings":"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","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n auditAccessExpired: {\n id: 'learner-dash.courseCard.banners.auditAccessExpired',\n description: 'Audit access expiration banner message',\n defaultMessage: 'Your audit access to this course has expired.',\n },\n findAnotherCourse: {\n id: 'learner-dash.courseCard.banners.findAnotherCourse',\n description: 'Action prompt taking learners to course exploration',\n defaultMessage: 'Find another course',\n },\n certRestricted: {\n id: 'learner-dash.courseCard.banners.certificateRestricted',\n description: 'Restricted certificate warning message',\n defaultMessage: 'Your Certificate of Achievement is being held pending confirmation that the issuance of your Certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria, and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know by contacting {supportEmail}.',\n },\n certRestrictedNoEmail: {\n id: 'learner-dash.courseCard.banners.certificateRestrictedNoEmail',\n description: 'Restricted certificate warning message',\n defaultMessage: 'Your Certificate of Achievement is being held pending confirmation that the issuance of your Certificate is in compliance with strict U.S. embargoes on Iran, Cuba, Syria, and Sudan. If you think our system has mistakenly identified you as being connected with one of those countries, please let us know.',\n },\n certRefundContactBilling: {\n id: 'learner-dash.courseCard.banners.certificateRefundContactBilling',\n description: 'Message to learners to contact billing for certificate refunds',\n defaultMessage: 'If you would like a refund on your Certificate of Achievement, please contact our billing address {billingEmail}',\n },\n certRefundContactBillingNoEmail: {\n id: 'learner-dash.courseCard.banners.certificateRefundContactBillingNoEmail',\n description: 'Message to learners to contact billing for certificate refunds',\n defaultMessage: 'If you would like a refund on your Certificate of Achievement, please contact us.',\n },\n passingGrade: {\n id: 'learner-dash.courseCard.banners.passingGrade',\n description: 'Message to learners with minimum passing grade for the course',\n defaultMessage: 'Grade required to pass the course: {minPassingGrade}\\u200f%',\n },\n notEligibleForCert: {\n id: 'learner-dash.courseCard.banners.notEligibleForCert',\n description: 'Certificate inelligibility message',\n defaultMessage: 'You are not eligible for a certificate.',\n },\n viewGrades: {\n id: 'learner-dash.courseCard.banners.viewGrades',\n description: 'Gradses link text',\n defaultMessage: 'View grades.',\n },\n certReady: {\n id: 'learner-dash.courseCard.banners.certReady',\n description: 'Certificate ready message',\n defaultMessage: 'Congratulations. Your certificate is ready.',\n },\n viewCertificate: {\n id: 'learner-dash.courseCard.banners.viewCertificate',\n description: 'Certificate link text',\n defaultMessage: 'View Certificate',\n },\n certMinGrade: {\n id: 'learner-dash.courseCard.banners.certMinGrade',\n description: 'Passing grade requirement message',\n defaultMessage: 'Grade required for a certificate: {minPassingGrade}\\u200f%',\n },\n downloadCertificate: {\n id: 'learner-dash.courseCard.banners.downloadCertificate',\n description: 'Certificate download link text',\n defaultMessage: 'Download Certificate.',\n },\n gradeAndCertReadyAfter: {\n id: 'learner-dash.courseCard.banners.gradseAndCertReadyAfter',\n description: 'Grade and certificate availability date message',\n defaultMessage: 'Your grade and certificate will be ready after {availableDate}.',\n },\n entitlementUnavailable: {\n id: 'learner-dash.courseCard.banners.entitlementUnavailable',\n description: 'Entitlement course message when no sessions are available',\n defaultMessage: 'There are no sessions available at the moment. The course team will create new sessions soon. If no sessions appear, please contact {emailLink} for information.',\n },\n entitlementExpiringSoon: {\n id: 'learner-dash.courseCard.banners.entitlementExpiringSoon',\n description: 'Entitlement course message when the entitlement is expiring soon.',\n defaultMessage: 'You must {selectSessionButton} by {changeDeadline} to access the course.',\n },\n entitlementExpired: {\n id: 'learner-dash.courseCard.banners.entitlementExpired',\n description: 'Entitlement course message when the entitlement is expired.',\n defaultMessage: 'You can no longer change sessions.',\n },\n selectSession: {\n id: 'learner-dash.courseCard.banners.selectSession',\n description: 'Entitlement session selection link text',\n defaultMessage: 'select a session',\n },\n prerequisitesNotMet: {\n id: 'learner-dash.courseCard.banners.prerequisitesNotMet',\n description: 'Message to learners with unmet prerequisites',\n defaultMessage: 'You can\\'t access this course just yet because you have not met the pre-requisites.',\n },\n courseHasNotStarted: {\n id: 'learner-dash.courseCard.banners.courseHasNotStarted',\n description: 'Course has not started message',\n defaultMessage: 'You can\\'t access this course just yet because the course hasn\\'t started yet. The course will start on {startDate}.',\n },\n redeem: {\n id: 'learner-dash.courseCard.banners.redeem',\n description: 'Redeem link text',\n defaultMessage: 'Redeem',\n },\n subscriptionUpgradeBannerText: {\n id: 'learner-dash.courseCard.banners.subscriptionUpgradeBannerText',\n description: 'Banner text for subscription courses where audit access has expired',\n defaultMessage: 'This course is included in your subscription. Upgrade to get full course access.',\n },\n subscriptionRedeemBannerText: {\n id: 'learner-dash.courseCard.banners.subscriptionRedeemBannerText',\n description: 'Banner text for subscription courses where audit access has expired',\n defaultMessage: 'This course is included in your subscription. Redeem to get full course access.',\n },\n upgradeAction: {\n id: 'learner-dash.courseCard.banners.upgradeAction',\n description: 'Upgrade button text for subscription upgrade banner',\n defaultMessage: 'Upgrade',\n },\n verifiedBannerText: {\n id: 'learner-dash.courseCard.banners.verifiedBannerText',\n description: 'Banner text for verified courses',\n defaultMessage: 'You passed this course on {date} and earned a verified certificate.',\n },\n completedAndPassedBannerText: {\n id: 'learner-dash.courseCard.banners.completedAndPassedBannerText',\n description: 'Banner text for completed and passed courses',\n defaultMessage: 'You completed and passed this course on {date}.',\n },\n congratulationsText: {\n id: 'learner-dash.courseCard.banners.congratulationsText',\n description: 'Congratulations text for verified courses',\n defaultMessage: 'Congratulations!',\n },\n courseCompletedBannerText: {\n id: 'learner-dash.courseCard.banners.courseCompletedBannerText',\n description: 'Course completed banner text for verified courses',\n defaultMessage: 'You completed this course on {date}.',\n },\n viewGradesText: {\n id: 'learner-dash.courseCard.banners.viewGradesText',\n description: 'View grades link text for verified courses',\n defaultMessage: 'View grades',\n },\n});\n\nexport default messages;\n"]}
@@ -14,5 +14,7 @@ export function useCardDetailsData({ cardId }: {
14
14
  openSessionModal: () => void;
15
15
  courseNumber: any;
16
16
  changeOrLeaveSessionMessage: string;
17
+ isAudit: any;
18
+ canUpgrade: any;
17
19
  };
18
20
  export default hooks.useCardDetailsData;
@@ -32,12 +32,16 @@ export const useAccessMessage = ({ cardId }) => {
32
32
  return null;
33
33
  };
34
34
  export const useCardDetailsData = ({ cardId }) => {
35
- var _a, _b, _c;
35
+ var _a, _b, _c, _d, _e;
36
36
  const { formatMessage } = useIntl();
37
37
  const courseData = useCourseData(cardId);
38
- const providerName = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseProvider) === null || _a === void 0 ? void 0 : _a.name;
38
+ const providerName = typeof (courseData === null || courseData === void 0 ? void 0 : courseData.courseProvider) === 'string'
39
+ ? courseData.courseProvider
40
+ : (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseProvider) === null || _a === void 0 ? void 0 : _a.name;
39
41
  const courseNumber = (_b = courseData === null || courseData === void 0 ? void 0 : courseData.course) === null || _b === void 0 ? void 0 : _b.courseNumber;
40
42
  const isAuditAccessExpired = ((_c = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _c === void 0 ? void 0 : _c.isAuditAccessExpired) || false;
43
+ const isAudit = ((_d = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _d === void 0 ? void 0 : _d.isAudit) || false;
44
+ const canUpgrade = ((_e = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _e === void 0 ? void 0 : _e.canUpgrade) || false;
41
45
  const isFromNonUpgradeableCourses = (courseData === null || courseData === void 0 ? void 0 : courseData.isFromNonUpgradeableCourses) || false;
42
46
  const { isEntitlement, isFulfilled, canChange, } = useEntitlementInfo(courseData);
43
47
  const { updateSelectSessionModal } = useSelectSessionModal();
@@ -52,6 +56,8 @@ export const useCardDetailsData = ({ cardId }) => {
52
56
  openSessionModal: () => updateSelectSessionModal(cardId),
53
57
  courseNumber,
54
58
  changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),
59
+ isAudit,
60
+ canUpgrade,
55
61
  };
56
62
  };
57
63
  export default useCardDetailsData;
@@ -1 +1 @@
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 isAuditAccessExpired = courseData?.enrollment?.isAuditAccessExpired || false;\n const isFromNonUpgradeableCourses = courseData?.isFromNonUpgradeableCourses || false;\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 isAuditAccessExpired,\n isFromNonUpgradeableCourses,\n openSessionModal: () => updateSelectSessionModal(cardId),\n courseNumber,\n changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),\n };\n};\n\nexport default useCardDetailsData;\n"]}
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 = typeof courseData?.courseProvider === 'string'\n ? courseData.courseProvider\n : courseData?.courseProvider?.name;\n const courseNumber = courseData?.course?.courseNumber;\n const isAuditAccessExpired = courseData?.enrollment?.isAuditAccessExpired || false;\n const isAudit = courseData?.enrollment?.isAudit || false;\n const canUpgrade = courseData?.enrollment?.canUpgrade || false;\n const isFromNonUpgradeableCourses = courseData?.isFromNonUpgradeableCourses || false;\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 isAuditAccessExpired,\n isFromNonUpgradeableCourses,\n openSessionModal: () => updateSelectSessionModal(cardId),\n courseNumber,\n changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),\n isAudit,\n canUpgrade,\n };\n};\n\nexport default useCardDetailsData;\n"]}
@@ -9,8 +9,8 @@ import useCardDetailsData from './hooks';
9
9
  import './index.scss';
10
10
  export const CourseCardDetails = ({ cardId, isHistoryTab = false }) => {
11
11
  const { formatMessage } = useIntl();
12
- const { providerName, accessMessage, isEntitlement, isFulfilled, canChange, openSessionModal, changeOrLeaveSessionMessage, isAuditAccessExpired, isFromNonUpgradeableCourses, } = useCardDetailsData({ cardId });
13
- const showAuditTrackBadge = isHistoryTab && isAuditAccessExpired;
12
+ const { providerName, accessMessage, isEntitlement, isFulfilled, canChange, openSessionModal, changeOrLeaveSessionMessage, isAuditAccessExpired, isAudit, canUpgrade, isFromNonUpgradeableCourses, } = useCardDetailsData({ cardId });
13
+ const showAuditTrackBadge = (isHistoryTab && isAuditAccessExpired) || (!isHistoryTab && isAudit && canUpgrade);
14
14
  const showDefaultAccessMessage = !(isEntitlement && !isFulfilled) && accessMessage;
15
15
  let renderedAccessMessage = null;
16
16
  if (isHistoryTab && isAuditAccessExpired) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,kBAAkB,MAAM,SAAS,CAAC;AACzC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,EAAE,EAAE;IACpE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,EACJ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,2BAA2B,GAC5B,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEnC,MAAM,mBAAmB,GAAG,YAAY,IAAI,oBAAoB,CAAC;IACjE,MAAM,wBAAwB,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC;IAEnF,IAAI,qBAAqB,GAAG,IAAI,CAAC;IAEjC,IAAI,YAAY,IAAI,oBAAoB,EAAE,CAAC;QACzC,qBAAqB,GAAG,2BAA2B;YACjD,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACvD,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CACL,8BAAiB,mBAAmB,aAC7B,YAAY,IAAI,CACf,eAAM,SAAS,EAAC,uBAAuB,iBAAa,iBAAiB,YAClE,YAAY,GACR,CACR,EAEA,wBAAwB,IAAI,CAC3B,eAAM,SAAS,EAAC,qBAAqB,iBAAa,iBAAiB,YAChE,aAAa,GACT,CACR,EAEA,mBAAmB,IAAI,CACtB,0BACE,KAAC,KAAK,IAAC,SAAS,EAAC,sCAAsC,iBAAa,mBAAmB,YACpF,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAClC,EACP,qBAAqB,IAAI,CACxB,eAAM,SAAS,EAAC,qBAAqB,iBAAa,6BAA6B,YAC5E,qBAAqB,GACjB,CACR,IACG,CACP,EAEA,aAAa,IAAI,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,CAC3C,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAE,gBAAgB,YAC/E,2BAA2B,GACrB,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\nimport { Button } from '@openedx/paragon';\nimport { Badge } from '@openedx/paragon';\nimport useCardDetailsData from './hooks';\nimport './index.scss';\n\nexport const CourseCardDetails = ({ cardId, isHistoryTab = false }) => {\n const { formatMessage } = useIntl();\n\n const {\n providerName,\n accessMessage,\n isEntitlement,\n isFulfilled,\n canChange,\n openSessionModal,\n changeOrLeaveSessionMessage,\n isAuditAccessExpired,\n isFromNonUpgradeableCourses,\n } = useCardDetailsData({ cardId });\n\n const showAuditTrackBadge = isHistoryTab && isAuditAccessExpired;\n const showDefaultAccessMessage = !(isEntitlement && !isFulfilled) && accessMessage;\n\n let renderedAccessMessage = null;\n\n if (isHistoryTab && isAuditAccessExpired) {\n renderedAccessMessage = isFromNonUpgradeableCourses\n ? formatMessage(messages.auditAccessExpiredNotIncluded)\n : formatMessage(messages.auditAccessExpired);\n }\n\n return (\n <div data-testid=\"CourseCardDetails\">\n {providerName && (\n <span className=\"small text-muted mr-2\" data-testid=\"course-provider\">\n {providerName}\n </span>\n )}\n\n {showDefaultAccessMessage && (\n <span className=\"small text-gray-700\" data-testid=\"course-end-date\">\n {accessMessage}\n </span>\n )}\n\n {showAuditTrackBadge && (\n <div>\n <Badge className=\"mr-2 mt-2 bg-light-200 text-dark-700\" data-testid=\"audit-track-badge\">\n {formatMessage(messages.auditTrackBadge)}\n </Badge>\n {renderedAccessMessage && (\n <span className=\"small text-gray-700\" data-testid=\"course-audit-access-expired\">\n {renderedAccessMessage}\n </span>\n )}\n </div>\n )}\n \n {isEntitlement && isFulfilled && canChange ? (\n <Button variant=\"link\" size=\"inline\" className=\"m-0 p-0\" onClick={openSessionModal}>\n {changeOrLeaveSessionMessage}\n </Button>\n ) : null}\n </div>\n );\n};\n\nCourseCardDetails.propTypes = {\n cardId: PropTypes.string.isRequired,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCardDetails;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,kBAAkB,MAAM,SAAS,CAAC;AACzC,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,EAAE,EAAE;IACpE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,EACJ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,OAAO,EACP,UAAU,EACV,2BAA2B,GAC5B,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEnC,MAAM,mBAAmB,GAAG,CAAC,YAAY,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC;IAC/G,MAAM,wBAAwB,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC;IAEnF,IAAI,qBAAqB,GAAG,IAAI,CAAC;IAEjC,IAAI,YAAY,IAAI,oBAAoB,EAAE,CAAC;QACzC,qBAAqB,GAAG,2BAA2B;YACjD,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACvD,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CACL,8BAAiB,mBAAmB,aAC7B,YAAY,IAAI,CACf,eAAM,SAAS,EAAC,uBAAuB,iBAAa,iBAAiB,YAClE,YAAY,GACR,CACR,EAEA,wBAAwB,IAAI,CAC3B,eAAM,SAAS,EAAC,qBAAqB,iBAAa,iBAAiB,YAChE,aAAa,GACT,CACR,EAEA,mBAAmB,IAAI,CACtB,0BACE,KAAC,KAAK,IAAC,SAAS,EAAC,sCAAsC,iBAAa,mBAAmB,YACpF,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAClC,EACP,qBAAqB,IAAI,CACxB,eAAM,SAAS,EAAC,qBAAqB,iBAAa,6BAA6B,YAC5E,qBAAqB,GACjB,CACR,IACG,CACP,EAEA,aAAa,IAAI,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,CAC3C,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAE,gBAAgB,YAC/E,2BAA2B,GACrB,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,iBAAiB,CAAC,SAAS,GAAG;IAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC;AAEF,eAAe,iBAAiB,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@openedx/frontend-base';\nimport messages from './messages';\nimport { Button } from '@openedx/paragon';\nimport { Badge } from '@openedx/paragon';\nimport useCardDetailsData from './hooks';\nimport './index.scss';\n\nexport const CourseCardDetails = ({ cardId, isHistoryTab = false }) => {\n const { formatMessage } = useIntl();\n\n const {\n providerName,\n accessMessage,\n isEntitlement,\n isFulfilled,\n canChange,\n openSessionModal,\n changeOrLeaveSessionMessage,\n isAuditAccessExpired,\n isAudit,\n canUpgrade,\n isFromNonUpgradeableCourses,\n } = useCardDetailsData({ cardId });\n\n const showAuditTrackBadge = (isHistoryTab && isAuditAccessExpired) || (!isHistoryTab && isAudit && canUpgrade);\n const showDefaultAccessMessage = !(isEntitlement && !isFulfilled) && accessMessage;\n\n let renderedAccessMessage = null;\n\n if (isHistoryTab && isAuditAccessExpired) {\n renderedAccessMessage = isFromNonUpgradeableCourses\n ? formatMessage(messages.auditAccessExpiredNotIncluded)\n : formatMessage(messages.auditAccessExpired);\n }\n\n return (\n <div data-testid=\"CourseCardDetails\">\n {providerName && (\n <span className=\"small text-muted mr-2\" data-testid=\"course-provider\">\n {providerName}\n </span>\n )}\n\n {showDefaultAccessMessage && (\n <span className=\"small text-gray-700\" data-testid=\"course-end-date\">\n {accessMessage}\n </span>\n )}\n\n {showAuditTrackBadge && (\n <div>\n <Badge className=\"mr-2 mt-2 bg-light-200 text-dark-700\" data-testid=\"audit-track-badge\">\n {formatMessage(messages.auditTrackBadge)}\n </Badge>\n {renderedAccessMessage && (\n <span className=\"small text-gray-700\" data-testid=\"course-audit-access-expired\">\n {renderedAccessMessage}\n </span>\n )}\n </div>\n )}\n \n {isEntitlement && isFulfilled && canChange ? (\n <Button variant=\"link\" size=\"inline\" className=\"m-0 p-0\" onClick={openSessionModal}>\n {changeOrLeaveSessionMessage}\n </Button>\n ) : null}\n </div>\n );\n};\n\nCourseCardDetails.propTypes = {\n cardId: PropTypes.string.isRequired,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCardDetails;\n"]}
@@ -1,13 +1,19 @@
1
- export function CourseCard({ cardId, verifiedCourse, isHistoryTab, }: {
1
+ export function CourseCard({ cardId, verifiedCourse, isAudit, isHistoryTab, isAuditAccessExpired, canUpgrade, }: {
2
2
  cardId: any;
3
3
  verifiedCourse: any;
4
+ isAudit: any;
4
5
  isHistoryTab: any;
6
+ isAuditAccessExpired: any;
7
+ canUpgrade: any;
5
8
  }): import("react/jsx-runtime").JSX.Element;
6
9
  export namespace CourseCard {
7
10
  namespace propTypes {
8
11
  let cardId: PropTypes.Validator<string>;
9
12
  let verifiedCourse: PropTypes.Requireable<boolean>;
13
+ let isAudit: PropTypes.Requireable<boolean>;
10
14
  let isHistoryTab: PropTypes.Requireable<boolean>;
15
+ let isAuditAccessExpired: PropTypes.Requireable<boolean>;
16
+ let canUpgrade: PropTypes.Requireable<boolean>;
11
17
  }
12
18
  }
13
19
  export default CourseCard;
@@ -8,15 +8,18 @@ import CourseCardDetails from './components/CourseCardDetails';
8
8
  import CourseCardTitle from './components/CourseCardTitle';
9
9
  import './CourseCard.scss';
10
10
  import CourseCardBanners from './components/CourseCardBanners';
11
- export const CourseCard = ({ cardId, verifiedCourse, isHistoryTab, }) => {
11
+ export const CourseCard = ({ cardId, verifiedCourse, isAudit, isHistoryTab, isAuditAccessExpired, canUpgrade, }) => {
12
12
  const isCollapsed = useIsCollapsed();
13
13
  const orientation = isCollapsed ? 'vertical' : 'horizontal';
14
- return (_jsx("div", { className: "mb-4.5 course-card", id: cardId, "data-testid": "CourseCard", children: _jsx(Card, { orientation: orientation, children: _jsxs("div", { className: "d-flex flex-column w-100", children: [_jsx("div", Object.assign({}, (!isCollapsed && { className: 'd-flex' }), { children: _jsxs(Card.Body, { children: [_jsx(Card.Header, { title: _jsx(CourseCardTitle, { cardId: cardId }), actions: _jsx(CourseCardMenu, { cardId: cardId }) }), _jsxs(Card.Section, { className: "pt-0", children: [_jsx(CourseCardDetails, { cardId: cardId, isHistoryTab: isHistoryTab }), _jsx(CourseCardActions, { cardId: cardId, verifiedCourse: verifiedCourse, isHistoryTab: isHistoryTab })] })] }) })), _jsx(CourseCardBanners, { cardId: cardId, verifiedCourse: verifiedCourse, isHistoryTab: isHistoryTab })] }) }) }));
14
+ return (_jsx("div", { className: "mb-4.5 course-card", id: cardId, "data-testid": "CourseCard", children: _jsx(Card, { orientation: orientation, children: _jsxs("div", { className: "d-flex flex-column w-100", children: [_jsx("div", Object.assign({}, (!isCollapsed && { className: 'd-flex' }), { children: _jsxs(Card.Body, { children: [_jsx(Card.Header, { title: _jsx(CourseCardTitle, { cardId: cardId }), actions: _jsx(CourseCardMenu, { cardId: cardId }) }), _jsxs(Card.Section, { className: "pt-0", children: [_jsx(CourseCardDetails, { cardId: cardId, isHistoryTab: isHistoryTab }), _jsx(CourseCardActions, { cardId: cardId, verifiedCourse: verifiedCourse, isHistoryTab: isHistoryTab })] })] }) })), _jsx(CourseCardBanners, { cardId: cardId, verifiedCourse: verifiedCourse, isAudit: isAudit, isHistoryTab: isHistoryTab, isAuditAccessExpired: isAuditAccessExpired, canUpgrade: canUpgrade })] }) }) }));
15
15
  };
16
16
  CourseCard.propTypes = {
17
17
  cardId: PropTypes.string.isRequired,
18
18
  verifiedCourse: PropTypes.bool,
19
+ isAudit: PropTypes.bool,
19
20
  isHistoryTab: PropTypes.bool,
21
+ isAuditAccessExpired: PropTypes.bool,
22
+ canUpgrade: PropTypes.bool,
20
23
  };
21
24
  export default CourseCard;
22
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/CourseCard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAE3D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,EACN,cAAc,EACd,YAAY,GACb,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5D,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,EAAC,EAAE,EAAE,MAAM,iBAAc,YAAY,YACtE,KAAC,IAAI,IAAC,WAAW,EAAE,WAAW,YAC5B,eAAK,SAAS,EAAC,0BAA0B,aACvC,8BAAS,CAAC,CAAC,WAAW,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,cAChD,MAAC,IAAI,CAAC,IAAI,eACR,KAAC,IAAI,CAAC,MAAM,IACV,KAAK,EAAE,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,GAAI,EAC1C,OAAO,EAAE,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,GAC3C,EACF,MAAC,IAAI,CAAC,OAAO,IAAC,SAAS,EAAC,MAAM,aAC5B,KAAC,iBAAiB,IAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GAC1B,EACF,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,GAAG,IACnF,IACL,IACR,EACN,KAAC,iBAAiB,IAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,GAC1B,IACE,GACD,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AACF,UAAU,CAAC,SAAS,GAAG;IACrB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Card } from '@openedx/paragon';\n\nimport { useIsCollapsed } from './hooks';\nimport CourseCardMenu from './components/CourseCardMenu';\nimport CourseCardActions from './components/CourseCardActions';\nimport CourseCardDetails from './components/CourseCardDetails';\nimport CourseCardTitle from './components/CourseCardTitle';\n\nimport './CourseCard.scss';\nimport CourseCardBanners from './components/CourseCardBanners';\n\nexport const CourseCard = ({\n cardId,\n verifiedCourse,\n isHistoryTab,\n}) => {\n const isCollapsed = useIsCollapsed();\n const orientation = isCollapsed ? 'vertical' : 'horizontal';\n return (\n <div className=\"mb-4.5 course-card\" id={cardId} data-testid=\"CourseCard\">\n <Card orientation={orientation}>\n <div className=\"d-flex flex-column w-100\">\n <div {...(!isCollapsed && { className: 'd-flex' })}>\n <Card.Body>\n <Card.Header\n title={<CourseCardTitle cardId={cardId} />}\n actions={<CourseCardMenu cardId={cardId} />}\n />\n <Card.Section className=\"pt-0\">\n <CourseCardDetails\n cardId={cardId}\n isHistoryTab={isHistoryTab}\n />\n <CourseCardActions cardId={cardId} verifiedCourse={verifiedCourse} isHistoryTab={isHistoryTab}/>\n </Card.Section>\n </Card.Body>\n </div>\n <CourseCardBanners\n cardId={cardId}\n verifiedCourse={verifiedCourse}\n isHistoryTab={isHistoryTab}\n />\n </div>\n </Card>\n </div>\n );\n};\nCourseCard.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n};\n\nexport default CourseCard;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/CourseCard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAE3D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,MAAM,EACN,cAAc,EACd,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,UAAU,GACX,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5D,OAAO,CACL,cAAK,SAAS,EAAC,oBAAoB,EAAC,EAAE,EAAE,MAAM,iBAAc,YAAY,YACtE,KAAC,IAAI,IAAC,WAAW,EAAE,WAAW,YAC5B,eAAK,SAAS,EAAC,0BAA0B,aACvC,8BAAS,CAAC,CAAC,WAAW,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,cAChD,MAAC,IAAI,CAAC,IAAI,eACR,KAAC,IAAI,CAAC,MAAM,IACV,KAAK,EAAE,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,GAAI,EAC1C,OAAO,EAAE,KAAC,cAAc,IAAC,MAAM,EAAE,MAAM,GAAI,GAC3C,EACF,MAAC,IAAI,CAAC,OAAO,IAAC,SAAS,EAAC,MAAM,aAC5B,KAAC,iBAAiB,IAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GAC1B,EACF,KAAC,iBAAiB,IAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,GAAG,IACnF,IACL,IACR,EACN,KAAC,iBAAiB,IAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,GACtB,IACE,GACD,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AACF,UAAU,CAAC,SAAS,GAAG;IACrB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACnC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,OAAO,EAAE,SAAS,CAAC,IAAI;IACvB,YAAY,EAAE,SAAS,CAAC,IAAI;IAC5B,oBAAoB,EAAE,SAAS,CAAC,IAAI;IACpC,UAAU,EAAE,SAAS,CAAC,IAAI;CAC3B,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Card } from '@openedx/paragon';\n\nimport { useIsCollapsed } from './hooks';\nimport CourseCardMenu from './components/CourseCardMenu';\nimport CourseCardActions from './components/CourseCardActions';\nimport CourseCardDetails from './components/CourseCardDetails';\nimport CourseCardTitle from './components/CourseCardTitle';\n\nimport './CourseCard.scss';\nimport CourseCardBanners from './components/CourseCardBanners';\n\nexport const CourseCard = ({\n cardId,\n verifiedCourse,\n isAudit,\n isHistoryTab,\n isAuditAccessExpired,\n canUpgrade,\n}) => {\n const isCollapsed = useIsCollapsed();\n const orientation = isCollapsed ? 'vertical' : 'horizontal';\n return (\n <div className=\"mb-4.5 course-card\" id={cardId} data-testid=\"CourseCard\">\n <Card orientation={orientation}>\n <div className=\"d-flex flex-column w-100\">\n <div {...(!isCollapsed && { className: 'd-flex' })}>\n <Card.Body>\n <Card.Header\n title={<CourseCardTitle cardId={cardId} />}\n actions={<CourseCardMenu cardId={cardId} />}\n />\n <Card.Section className=\"pt-0\">\n <CourseCardDetails\n cardId={cardId}\n isHistoryTab={isHistoryTab}\n />\n <CourseCardActions cardId={cardId} verifiedCourse={verifiedCourse} isHistoryTab={isHistoryTab}/>\n </Card.Section>\n </Card.Body>\n </div>\n <CourseCardBanners\n cardId={cardId}\n verifiedCourse={verifiedCourse}\n isAudit={isAudit}\n isHistoryTab={isHistoryTab}\n isAuditAccessExpired={isAuditAccessExpired}\n canUpgrade={canUpgrade}\n />\n </div>\n </Card>\n </div>\n );\n};\nCourseCard.propTypes = {\n cardId: PropTypes.string.isRequired,\n verifiedCourse: PropTypes.bool,\n isAudit: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n isAuditAccessExpired: PropTypes.bool,\n canUpgrade: PropTypes.bool,\n};\n\nexport default CourseCard;\n"]}
@@ -4,9 +4,12 @@ import { Pagination } from '@openedx/paragon';
4
4
  import CourseCard from '../../../containers/CourseCard';
5
5
  import { useIsCollapsed } from './hooks';
6
6
  export const CourseList = ({ courseListData }) => {
7
- const { setPageNumber, numPages, visibleList, verifiedCourse, isHistoryTab, } = courseListData;
7
+ const { setPageNumber, numPages, visibleList, isHistoryTab, } = courseListData;
8
8
  const isCollapsed = useIsCollapsed();
9
- return (_jsx(_Fragment, { children: _jsxs("div", { className: "d-flex flex-column flex-grow-1", children: [visibleList.map(({ cardId }) => (_jsx(CourseCard, { cardId: cardId, verifiedCourse: verifiedCourse, isHistoryTab: isHistoryTab }, cardId))), numPages > 1 && (_jsx(Pagination, { variant: isCollapsed ? 'reduced' : 'secondary', paginationLabel: "Course List", className: "mx-auto mb-2", pageCount: numPages, onPageSelect: setPageNumber }))] }) }));
9
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "d-flex flex-column flex-grow-1", children: [visibleList.map((course) => {
10
+ var _a, _b, _c, _d;
11
+ return (_jsx(CourseCard, { cardId: course.cardId, verifiedCourse: (_a = course === null || course === void 0 ? void 0 : course.enrollment) === null || _a === void 0 ? void 0 : _a.isVerified, isAudit: (_b = course === null || course === void 0 ? void 0 : course.enrollment) === null || _b === void 0 ? void 0 : _b.isAudit, isHistoryTab: isHistoryTab, isAuditAccessExpired: (_c = course === null || course === void 0 ? void 0 : course.enrollment) === null || _c === void 0 ? void 0 : _c.isAuditAccessExpired, canUpgrade: (_d = course === null || course === void 0 ? void 0 : course.enrollment) === null || _d === void 0 ? void 0 : _d.canUpgrade }, course.cardId));
12
+ }), numPages > 1 && (_jsx(Pagination, { variant: isCollapsed ? 'reduced' : 'secondary', paginationLabel: "Course List", className: "mx-auto mb-2", pageCount: numPages, onPageSelect: setPageNumber }))] }) }));
10
13
  };
11
14
  export const courseListDataShape = PropTypes.shape({
12
15
  showFilters: PropTypes.bool.isRequired,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/containers/CoursesPanel/CourseList/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,UAAU,MAAM,4BAA4B,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,MAAM,EACJ,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,GACnE,GAAG,cAAc,CAAC;IAEnB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CACL,4BACE,eAAK,SAAS,EAAC,gCAAgC,aAC5C,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAC/B,KAAC,UAAU,IAET,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,IAHrB,MAAM,CAIX,CACH,CAAC,EACD,QAAQ,GAAG,CAAC,IAAI,CACf,KAAC,UAAU,IACT,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAC9C,eAAe,EAAC,aAAa,EAC7B,SAAS,EAAC,cAAc,EACxB,SAAS,EAAE,QAAQ,EACnB,YAAY,EAAE,aAAa,GAC3B,CACH,IACG,GACL,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;IACjD,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACtC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU;IAC5D,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACrC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACxC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC,CAAC;AAEH,UAAU,CAAC,SAAS,GAAG;IACrB,cAAc,EAAE,mBAAmB;CACpC,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Pagination } from '@openedx/paragon';\nimport CourseCard from '@src/containers/CourseCard';\n\nimport { useIsCollapsed } from './hooks';\n\nexport const CourseList = ({ courseListData }) => {\n const {\n setPageNumber, numPages, visibleList, verifiedCourse, isHistoryTab,\n } = courseListData;\n\n const isCollapsed = useIsCollapsed();\n return (\n <>\n <div className=\"d-flex flex-column flex-grow-1\">\n {visibleList.map(({ cardId }) => (\n <CourseCard\n key={cardId}\n cardId={cardId}\n verifiedCourse={verifiedCourse}\n isHistoryTab={isHistoryTab}\n />\n ))}\n {numPages > 1 && (\n <Pagination\n variant={isCollapsed ? 'reduced' : 'secondary'}\n paginationLabel=\"Course List\"\n className=\"mx-auto mb-2\"\n pageCount={numPages}\n onPageSelect={setPageNumber}\n />\n )}\n </div>\n </>\n );\n};\n\nexport const courseListDataShape = PropTypes.shape({\n showFilters: PropTypes.bool.isRequired,\n visibleList: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n numPages: PropTypes.number.isRequired,\n setPageNumber: PropTypes.func.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n});\n\nCourseList.propTypes = {\n courseListData: courseListDataShape,\n};\n\nexport default CourseList;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/containers/CoursesPanel/CourseList/index.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,UAAU,MAAM,4BAA4B,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;IAC/C,MAAM,EACJ,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,GACnD,GAAG,cAAc,CAAC;IAEnB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,CACL,4BACE,eAAK,SAAS,EAAC,gCAAgC,aAC5C,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;;oBAAC,OAAA,CAC3B,KAAC,UAAU,IAET,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,cAAc,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,UAAU,EAC9C,OAAO,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,OAAO,EACpC,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,oBAAoB,EAC9D,UAAU,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,UAAU,IANrC,MAAM,CAAC,MAAM,CAOlB,CACH,CAAA;iBAAA,CAAC,EACD,QAAQ,GAAG,CAAC,IAAI,CACf,KAAC,UAAU,IACT,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAC9C,eAAe,EAAC,aAAa,EAC7B,SAAS,EAAC,cAAc,EACxB,SAAS,EAAE,QAAQ,EACnB,YAAY,EAAE,aAAa,GAC3B,CACH,IACG,GACL,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC,KAAK,CAAC;IACjD,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACtC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU;IAC5D,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;IACrC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU;IACxC,cAAc,EAAE,SAAS,CAAC,IAAI;IAC9B,YAAY,EAAE,SAAS,CAAC,IAAI;CAC7B,CAAC,CAAC;AAEH,UAAU,CAAC,SAAS,GAAG;IACrB,cAAc,EAAE,mBAAmB;CACpC,CAAC;AAEF,eAAe,UAAU,CAAC","sourcesContent":["import PropTypes from 'prop-types';\n\nimport { Pagination } from '@openedx/paragon';\nimport CourseCard from '@src/containers/CourseCard';\n\nimport { useIsCollapsed } from './hooks';\n\nexport const CourseList = ({ courseListData }) => {\n const {\n setPageNumber, numPages, visibleList, isHistoryTab,\n } = courseListData;\n\n const isCollapsed = useIsCollapsed();\n return (\n <>\n <div className=\"d-flex flex-column flex-grow-1\">\n {visibleList.map((course) => (\n <CourseCard\n key={course.cardId}\n cardId={course.cardId}\n verifiedCourse={course?.enrollment?.isVerified}\n isAudit={course?.enrollment?.isAudit}\n isHistoryTab={isHistoryTab}\n isAuditAccessExpired={course?.enrollment?.isAuditAccessExpired}\n canUpgrade={course?.enrollment?.canUpgrade}\n />\n ))}\n {numPages > 1 && (\n <Pagination\n variant={isCollapsed ? 'reduced' : 'secondary'}\n paginationLabel=\"Course List\"\n className=\"mx-auto mb-2\"\n pageCount={numPages}\n onPageSelect={setPageNumber}\n />\n )}\n </div>\n </>\n );\n};\n\nexport const courseListDataShape = PropTypes.shape({\n showFilters: PropTypes.bool.isRequired,\n visibleList: PropTypes.arrayOf(PropTypes.shape()).isRequired,\n numPages: PropTypes.number.isRequired,\n setPageNumber: PropTypes.func.isRequired,\n verifiedCourse: PropTypes.bool,\n isHistoryTab: PropTypes.bool,\n});\n\nCourseList.propTypes = {\n courseListData: courseListDataShape,\n};\n\nexport default CourseList;\n"]}
@@ -17,7 +17,11 @@ import './index.scss';
17
17
  export const CoursesPanel = () => {
18
18
  const { formatMessage } = useIntl();
19
19
  const { data } = useInitializeSubsCourseDashboard();
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]);
20
+ const hasCourses = useMemo(() => {
21
+ var _a, _b;
22
+ return (((_a = data === null || data === void 0 ? void 0 : data.subscriptionCourses) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0
23
+ || (((_b = data === null || data === void 0 ? void 0 : data.upgradeableCourses) === null || _b === void 0 ? void 0 : _b.length) || 0) > 0;
24
+ }, [data]);
21
25
  const { filters, sortBy, pageNumber, setPageNumber, } = useFilters();
22
26
  const { visibleList, numPages } = useMemo(() => {
23
27
  const transformedCourses = (data === null || data === void 0 ? void 0 : data.coursesByCardId)
@@ -36,7 +40,6 @@ export const CoursesPanel = () => {
36
40
  setPageNumber,
37
41
  numPages,
38
42
  visibleList,
39
- verifiedCourse: true,
40
43
  };
41
44
  return (_jsxs("div", { className: "course-list-container", children: [_jsxs("div", { className: "course-list-heading-container mb-3", children: [_jsx("h2", { className: "course-list-title", children: formatMessage(messages.myCourses) }), _jsx("div", { className: "course-filter-controls-container", children: _jsx(CourseFilterControls, {}) })] }), hasCourses ? _jsx(CourseListSlot, { courseListData: courseListData }) : _jsx(NoCoursesViewSlot, {})] }));
42
45
  };
@@ -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,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,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,oCAAoC,aACjD,aAAI,SAAS,EAAC,mBAAmB,YAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAM,EAC1E,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,oBAAoB,KAAG,GACpB,IACF,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 { CourseFilterControls } from '@src/containers/CourseFilterControls';\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 mb-3\">\n <h2 className=\"course-list-title\">{formatMessage(messages.myCourses)}</h2>\n <div className=\"course-filter-controls-container\">\n <CourseFilterControls />\n </div>\n </div>\n {hasCourses ? <CourseListSlot courseListData={courseListData} /> : <NoCoursesViewSlot />}\n </div>\n );\n};\n\nCoursesPanel.propTypes = {};\n\nexport default CoursesPanel;\n"]}
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,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,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,CACxB,GAAG,EAAE;;QACH,OAAA,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,0CAAE,MAAM,KAAI,CAAC,CAAC,GAAG,CAAC;eACzC,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,0CAAE,MAAM,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA;KAAA,EAChD,CAAC,IAAI,CAAC,CACP,CAAC;IACF,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;KACZ,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAK,SAAS,EAAC,oCAAoC,aACjD,aAAI,SAAS,EAAC,mBAAmB,YAAE,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAM,EAC1E,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,oBAAoB,KAAG,GACpB,IACF,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 { CourseFilterControls } from '@src/containers/CourseFilterControls';\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(\n () =>\n (data?.subscriptionCourses?.length || 0) > 0\n || (data?.upgradeableCourses?.length || 0) > 0,\n [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 };\n\n return (\n <div className=\"course-list-container\">\n <div className=\"course-list-heading-container mb-3\">\n <h2 className=\"course-list-title\">{formatMessage(messages.myCourses)}</h2>\n <div className=\"course-filter-controls-container\">\n <CourseFilterControls />\n </div>\n </div>\n {hasCourses ? <CourseListSlot courseListData={courseListData} /> : <NoCoursesViewSlot />}\n </div>\n );\n};\n\nCoursesPanel.propTypes = {};\n\nexport default CoursesPanel;\n"]}
@@ -8,12 +8,9 @@ import { useInitializeSubsCourseDashboard } from '../../data/hooks';
8
8
  const DashboardTabs = () => {
9
9
  var _a;
10
10
  const { data } = useInitializeSubsCourseDashboard();
11
- const historyCourses = useMemo(() => {
12
- const transformedCourses = (data === null || data === void 0 ? void 0 : data.coursesByCardId)
13
- ? Object.values(data.coursesByCardId)
14
- : [];
15
- return transformedCourses.filter(course => { var _a; return (_a = course === null || course === void 0 ? void 0 : course.enrollment) === null || _a === void 0 ? void 0 : _a.isAuditAccessExpired; });
16
- }, [data]);
11
+ const historyCourses = useMemo(() => ((data === null || data === void 0 ? void 0 : data.historyCoursesByCardId)
12
+ ? Object.values(data.historyCoursesByCardId)
13
+ : []), [data]);
17
14
  const hasCourseHistory = useMemo(() => historyCourses.length > 0, [historyCourses]);
18
15
  // Defining the tabs here
19
16
  const dashboardTabs = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardTabs.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/DashboardTabs.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,aAAa,GAAG,GAAG,EAAE;;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,gCAAgC,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,kBAAkB,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe;YAC9C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAU;YAC9C,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,kBAAkB,CAAC,MAAM,CAC9B,MAAM,CAAC,EAAE,WAAC,OAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAE,oBAAoB,CAAA,EAAA,CACnD,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAEpF,yBAAyB;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG;YACX;gBACE,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,KAAC,YAAY,KAAG;aACxB;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,KAAC,aAAa,KAAG;aACzB;SACF,CAAC;QAEF,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,KAAC,YAAY,IAAC,cAAc,EAAE,cAAc,GAAI;aACxD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,IAAI,IACH,EAAE,EAAC,6BAA6B,EAChC,gBAAgB,EAAE,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,GAAG,EACvC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAC,MAAM,EAChB,YAAY,kBAEX,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACxB,KAAC,GAAG,IAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,YACrC,GAAG,CAAC,KAAK,IADmC,GAAG,CAAC,GAAG,CAEhD,CACP,CAAC,GACG,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import React, { useMemo, useState, useCallback } from 'react';\nimport { Tabs, Tab } from '@openedx/paragon';\nimport CoursesPanel from '../CoursesPanel';\nimport ProgramsPanel from '../ProgramsPanel';\nimport HistoryPanel from '../HistoryPanel';\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\n\nconst DashboardTabs = () => {\n const { data } = useInitializeSubsCourseDashboard();\n\n const historyCourses = useMemo(() => {\n const transformedCourses = data?.coursesByCardId\n ? Object.values(data.coursesByCardId) as any[]\n : [];\n\n return transformedCourses.filter(\n course => course?.enrollment?.isAuditAccessExpired,\n );\n }, [data]);\n const hasCourseHistory = useMemo(() => historyCourses.length > 0, [historyCourses]);\n\n // Defining the tabs here\n const dashboardTabs = useMemo(() => {\n const tabs = [\n {\n key: 'courses',\n title: 'Courses',\n panel: <CoursesPanel />,\n },\n {\n key: 'programs',\n title: 'Programs',\n panel: <ProgramsPanel />,\n },\n ];\n\n if (hasCourseHistory) {\n tabs.push({\n key: 'history',\n title: 'Course history',\n panel: <HistoryPanel historyCourses={historyCourses} />,\n });\n }\n\n return tabs;\n }, [hasCourseHistory, historyCourses]);\n\n const [activeTab, setActiveTab] = useState(dashboardTabs[0].key);\n const handleTabSelect = useCallback((tabKey) => {\n if (tabKey) {\n setActiveTab(tabKey);\n }\n }, []);\n\n return (\n <Tabs\n id=\"subscription-dashboard-tabs\"\n defaultActiveKey={dashboardTabs[0]?.key}\n activeKey={activeTab}\n onSelect={handleTabSelect}\n className=\"mb-4\"\n mountOnEnter\n >\n {dashboardTabs.map(tab => (\n <Tab eventKey={tab.key} title={tab.title} key={tab.key}>\n {tab.panel}\n </Tab>\n ))}\n </Tabs>\n );\n};\n\nexport default DashboardTabs;\n"]}
1
+ {"version":3,"file":"DashboardTabs.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/DashboardTabs.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,aAAa,GAAG,GAAG,EAAE;;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,gCAAgC,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CACnC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,sBAAsB;QAC1B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAU;QACrD,CAAC,CAAC,EAAE,CACP,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACpF,yBAAyB;IACzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG;YACX;gBACE,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,KAAC,YAAY,KAAG;aACxB;YACD;gBACE,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,KAAC,aAAa,KAAG;aACzB;SACF,CAAC;QAEF,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,KAAC,YAAY,IAAC,cAAc,EAAE,cAAc,GAAI;aACxD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,IAAI,IACH,EAAE,EAAC,6BAA6B,EAChC,gBAAgB,EAAE,MAAA,aAAa,CAAC,CAAC,CAAC,0CAAE,GAAG,EACvC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAC,MAAM,EAChB,YAAY,kBAEX,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACxB,KAAC,GAAG,IAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,YACrC,GAAG,CAAC,KAAK,IADmC,GAAG,CAAC,GAAG,CAEhD,CACP,CAAC,GACG,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import React, { useMemo, useState, useCallback } from 'react';\nimport { Tabs, Tab } from '@openedx/paragon';\nimport CoursesPanel from '../CoursesPanel';\nimport ProgramsPanel from '../ProgramsPanel';\nimport HistoryPanel from '../HistoryPanel';\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\n\nconst DashboardTabs = () => {\n const { data } = useInitializeSubsCourseDashboard();\n\n const historyCourses = useMemo(() => (\n data?.historyCoursesByCardId\n ? Object.values(data.historyCoursesByCardId) as any[]\n : []\n ), [data]);\n const hasCourseHistory = useMemo(() => historyCourses.length > 0, [historyCourses]);\n // Defining the tabs here\n const dashboardTabs = useMemo(() => {\n const tabs = [\n {\n key: 'courses',\n title: 'Courses',\n panel: <CoursesPanel />,\n },\n {\n key: 'programs',\n title: 'Programs',\n panel: <ProgramsPanel />,\n },\n ];\n\n if (hasCourseHistory) {\n tabs.push({\n key: 'history',\n title: 'Course history',\n panel: <HistoryPanel historyCourses={historyCourses} />,\n });\n }\n\n return tabs;\n }, [hasCourseHistory, historyCourses]);\n\n const [activeTab, setActiveTab] = useState(dashboardTabs[0].key);\n const handleTabSelect = useCallback((tabKey) => {\n if (tabKey) {\n setActiveTab(tabKey);\n }\n }, []);\n\n return (\n <Tabs\n id=\"subscription-dashboard-tabs\"\n defaultActiveKey={dashboardTabs[0]?.key}\n activeKey={activeTab}\n onSelect={handleTabSelect}\n className=\"mb-4\"\n mountOnEnter\n >\n {dashboardTabs.map(tab => (\n <Tab eventKey={tab.key} title={tab.title} key={tab.key}>\n {tab.panel}\n </Tab>\n ))}\n </Tabs>\n );\n};\n\nexport default DashboardTabs;\n"]}
@@ -22,7 +22,6 @@ export const HistoryPanel = ({ historyCourses }) => {
22
22
  setPageNumber,
23
23
  numPages,
24
24
  visibleList,
25
- verifiedCourse: true,
26
25
  isHistoryTab: true,
27
26
  };
28
27
  return (_jsxs("div", { className: "course-list-container", children: [_jsx("div", { className: "course-list-heading-container", children: _jsx("h2", { className: "course-list-title", children: formatMessage(messages.myCourseHistory) }) }), hasCourses && _jsx(CourseListSlot, { courseListData: courseListData })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/HistoryPanel/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;IACxE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAE9E,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,OAAO,cAAc,CACnB,cAAc,EACd,OAAO,EACP,MAAM,EACN,UAAU,CACX,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAElD,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;QACpB,YAAY,EAAE,IAAI;KACnB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,cAAK,SAAS,EAAC,+BAA+B,YAC5C,aAAI,SAAS,EAAC,mBAAmB,YAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAM,GAC5E,EACL,UAAU,IAAI,KAAC,cAAc,IAAC,cAAc,EAAE,cAAc,GAAI,IAC7D,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import React, { FC, useMemo } from 'react';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport CourseListSlot from '../../slots/CourseListSlot';\nimport { useFilters } from '@src/data/context';\n\nimport { getVisibleList } from '@src/utils/dataTransformers';\n\nimport messages from './messages';\nimport { HistoryPanelProps } from './data/types';\n\nexport const HistoryPanel: FC<HistoryPanelProps> = ({ historyCourses }) => {\n const { formatMessage } = useIntl();\n const hasCourses = useMemo(() => historyCourses.length > 0, [historyCourses]);\n\n const {\n filters, sortBy, pageNumber, setPageNumber,\n } = useFilters();\n const { visibleList, numPages } = useMemo(() => {\n return getVisibleList(\n historyCourses,\n filters,\n sortBy,\n pageNumber,\n );\n }, [historyCourses, filters, sortBy, pageNumber]);\n\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 isHistoryTab: 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.myCourseHistory)}</h2>\n </div>\n {hasCourses && <CourseListSlot courseListData={courseListData} />}\n </div>\n );\n};\n\nexport default HistoryPanel;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/HistoryPanel/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;IACxE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAE9E,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,OAAO,cAAc,CACnB,cAAc,EACd,OAAO,EACP,MAAM,EACN,UAAU,CACX,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAElD,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,YAAY,EAAE,IAAI;KACnB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACpC,cAAK,SAAS,EAAC,+BAA+B,YAC5C,aAAI,SAAS,EAAC,mBAAmB,YAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAM,GAC5E,EACL,UAAU,IAAI,KAAC,cAAc,IAAC,cAAc,EAAE,cAAc,GAAI,IAC7D,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC","sourcesContent":["import React, { FC, useMemo } from 'react';\n\nimport { useIntl } from '@openedx/frontend-base';\n\nimport CourseListSlot from '../../slots/CourseListSlot';\nimport { useFilters } from '@src/data/context';\n\nimport { getVisibleList } from '@src/utils/dataTransformers';\n\nimport messages from './messages';\nimport { HistoryPanelProps } from './data/types';\n\nexport const HistoryPanel: FC<HistoryPanelProps> = ({ historyCourses }) => {\n const { formatMessage } = useIntl();\n const hasCourses = useMemo(() => historyCourses.length > 0, [historyCourses]);\n\n const {\n filters, sortBy, pageNumber, setPageNumber,\n } = useFilters();\n const { visibleList, numPages } = useMemo(() => {\n return getVisibleList(\n historyCourses,\n filters,\n sortBy,\n pageNumber,\n );\n }, [historyCourses, filters, sortBy, pageNumber]);\n\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 isHistoryTab: 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.myCourseHistory)}</h2>\n </div>\n {hasCourses && <CourseListSlot courseListData={courseListData} />}\n </div>\n );\n};\n\nexport default HistoryPanel;\n"]}
@@ -14,10 +14,6 @@ import GlobalDataContext from '../../data/contexts/GlobalDataContext';
14
14
  import { getTransformedCourseDataObject } from '../../utils/dataTransformers';
15
15
  import { learnerDashboardQueryKeys } from './queryKeys';
16
16
  import { getProgramProgressData, getProgramsListData, initializeCourseList, initializeSubsList } from '../../data/services/subs';
17
- const getCombinedCourses = (data) => ([
18
- ...((data === null || data === void 0 ? void 0 : data.subscriptionCourses) || []).map(course => (Object.assign(Object.assign({}, course), { isFromNonUpgradeableCourses: false }))),
19
- ...((data === null || data === void 0 ? void 0 : data.nonUpgradeableCourses) || []).map(course => (Object.assign(Object.assign({}, course), { isFromNonUpgradeableCourses: true }))),
20
- ]);
21
17
  const useInitializeSubsDashboard = () => {
22
18
  const { masqueradeUser } = useMasquerade();
23
19
  const queryClient = useQueryClient();
@@ -64,13 +60,25 @@ const useInitializeSubsCourseDashboard = () => {
64
60
  queryKey: learnerDashboardQueryKeys.initializeSubsCourseDashboard(masqueradeUser),
65
61
  queryFn: () => __awaiter(void 0, void 0, void 0, function* () {
66
62
  const data = yield initializeCourseList(masqueradeUser);
67
- const combinedCourses = getCombinedCourses(data);
68
- return Object.assign(Object.assign({}, data), { coursesByCardId: getTransformedCourseDataObject(combinedCourses) });
63
+ const subscriptionAndUpgradeableCourses = [
64
+ ...((data === null || data === void 0 ? void 0 : data.subscriptionCourses) || []).map(course => (Object.assign(Object.assign({}, course), { isFromNonUpgradeableCourses: false }))),
65
+ ...((data === null || data === void 0 ? void 0 : data.upgradeableCourses) || []).map(course => (Object.assign(Object.assign({}, course), { isFromNonUpgradeableCourses: false }))),
66
+ ];
67
+ const nonUpgradeableCoursesWithFlag = ((data === null || data === void 0 ? void 0 : data.nonUpgradeableCourses) || []).map(course => (Object.assign(Object.assign({}, course), { isFromNonUpgradeableCourses: true })));
68
+ const allCourses = [
69
+ ...subscriptionAndUpgradeableCourses,
70
+ ...nonUpgradeableCoursesWithFlag,
71
+ ];
72
+ // Transform only once so cardIds remain consistent everywhere.
73
+ const coursesByCardId = getTransformedCourseDataObject(allCourses);
74
+ // Filter the already-transformed courses to preserve the same cardIds.
75
+ const historyCoursesByCardId = Object.fromEntries(Object.entries(coursesByCardId).filter(([, course]) => { var _a; return ((_a = course === null || course === void 0 ? void 0 : course.enrollment) === null || _a === void 0 ? void 0 : _a.isAuditAccessExpired) === true; }));
76
+ return Object.assign(Object.assign({}, data), { coursesByCardId,
77
+ historyCoursesByCardId });
69
78
  }),
70
- staleTime: 5 * 60 * 1000, // 5 minutes — dashboard data rarely changes while viewing
79
+ staleTime: 5 * 60 * 1000,
71
80
  retry: (failureCount, error) => {
72
81
  var _a, _b;
73
- // Don't retry client errors (4xx) — they won't resolve on retry
74
82
  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)
75
83
  return false;
76
84
  return failureCount < 3;
@@ -78,7 +86,6 @@ const useInitializeSubsCourseDashboard = () => {
78
86
  retryOnMount: !masqueradeUser,
79
87
  refetchOnMount: !masqueradeUser,
80
88
  });
81
- // When masquerading fails, fall back to the normal user's cached data
82
89
  let { data } = query;
83
90
  if (masqueradeUser && query.isError) {
84
91
  data = queryClient.getQueryData(learnerDashboardQueryKeys.initializeSubsCourseDashboard(undefined));
@@ -1 +1 @@
1
- {"version":3,"file":"queryHooks.js","sourceRoot":"","sources":["../../../src/data/hooks/queryHooks.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,iBAAiB,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEhI,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,KAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAC9C,MAAM,KACT,2BAA2B,EAAE,KAAK,IAClC,CAAC;IACH,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,qBAAqB,KAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,iCAChD,MAAM,KACT,2BAA2B,EAAE,IAAI,IACjC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,GAAG,EAAE;IACtC,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAEpF,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,QAAQ,EAAE,yBAAyB,CAAC,uBAAuB,CAAC,cAAc,CAAC;QAC3E,OAAO,EAAE,GAAS,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;YACtD,yBACK,IAAI,EACP;QACJ,CAAC,CAAA;QACD,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,0DAA0D;QACpF,KAAK,EAAE,CAAC,YAAY,EAAE,KAAU,EAAE,EAAE;;YAClC,gEAAgE;YAChE,IAAI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,KAAI,GAAG,IAAI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,IAAG,GAAG;gBAAE,OAAO,KAAK,CAAC;YAClF,OAAO,YAAY,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,EAAE,CAAC,cAAc;QAC7B,cAAc,EAAE,CAAC,cAAc;KAChC,CAAC,CAAC;IAEH,iFAAiF;IACjF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;gBACzD,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,EAAE,CAAC;gBACvD,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE5E,sEAAsE;IACtE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACrB,IAAI,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,uCAAY,KAAK,KAAE,IAAI,IAAG;AAC5B,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,GAAG,EAAE;IAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,QAAQ,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,cAAc,CAAC;QACjF,OAAO,EAAE,GAAS,EAAE;YAClB,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACjD,uCACK,IAAI,KACP,eAAe,EAAE,8BAA8B,CAAC,eAAe,CAAC,IAChE;QACJ,CAAC,CAAA;QACD,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,0DAA0D;QACpF,KAAK,EAAE,CAAC,YAAY,EAAE,KAAU,EAAE,EAAE;;YAClC,gEAAgE;YAChE,IAAI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,KAAI,GAAG,IAAI,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,0CAAE,MAAM,IAAG,GAAG;gBAAE,OAAO,KAAK,CAAC;YAClF,OAAO,YAAY,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,YAAY,EAAE,CAAC,cAAc;QAC7B,cAAc,EAAE,CAAC,cAAc;KAChC,CAAC,CAAC;IAEH,sEAAsE;IACtE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACrB,IAAI,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,yBAAyB,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,uCAAY,KAAK,KAAE,IAAI,IAAG;AAC5B,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,OAAO,QAAQ,CAAkB;QAC/B,QAAQ,EAAE,CAAC,cAAc,CAAC;QAC1B,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,KAAK;QACZ,oBAAoB,EAAE,KAAK;KAC5B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC9C,OAAO,QAAQ,CAAsB;QACnC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,gBAAgB;QAC1C,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,sBAAsB,EACtB,mBAAmB,GACpB,CAAC","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 getCombinedCourses = (data) => ([\n ...(data?.subscriptionCourses || []).map(course => ({\n ...course,\n isFromNonUpgradeableCourses: false,\n })),\n ...(data?.nonUpgradeableCourses || []).map(course => ({\n ...course,\n isFromNonUpgradeableCourses: true,\n })),\n]);\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 const combinedCourses = getCombinedCourses(data);\n return {\n ...data,\n coursesByCardId: getTransformedCourseDataObject(combinedCourses),\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
+ {"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\n const subscriptionAndUpgradeableCourses = [\n ...(data?.subscriptionCourses || []).map(course => ({\n ...course,\n isFromNonUpgradeableCourses: false,\n })),\n ...(data?.upgradeableCourses || []).map(course => ({\n ...course,\n isFromNonUpgradeableCourses: false,\n })),\n ];\n\n const nonUpgradeableCoursesWithFlag = (data?.nonUpgradeableCourses || []).map(course => ({\n ...course,\n isFromNonUpgradeableCourses: true,\n }));\n\n const allCourses = [\n ...subscriptionAndUpgradeableCourses,\n ...nonUpgradeableCoursesWithFlag,\n ];\n\n // Transform only once so cardIds remain consistent everywhere.\n const coursesByCardId = getTransformedCourseDataObject(allCourses);\n\n // Filter the already-transformed courses to preserve the same cardIds.\n const historyCoursesByCardId = Object.fromEntries(\n Object.entries(coursesByCardId as Record<string, { enrollment?: { isAuditAccessExpired?: boolean } }>).filter(\n ([, course]) => course?.enrollment?.isAuditAccessExpired === true,\n ),\n );\n\n return {\n ...data,\n coursesByCardId,\n historyCoursesByCardId,\n };\n },\n staleTime: 5 * 60 * 1000,\n retry: (failureCount, error: any) => {\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 let { data } = query;\n\n if (masqueradeUser && query.isError) {\n data = queryClient.getQueryData(\n learnerDashboardQueryKeys.initializeSubsCourseDashboard(undefined),\n );\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"]}
@@ -53,7 +53,7 @@ const app = {
53
53
  slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
54
54
  id: 'org.edx.frontend.widget.header.user.menu.manageSubscription.v1',
55
55
  op: WidgetOperationTypes.APPEND,
56
- element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.manageSubscription'].defaultMessage, url: "/subscription-manage", variant: "dropdownItem" }))
56
+ element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.manageSubscription'].defaultMessage, url: "/manage-subscription", variant: "dropdownItem" }))
57
57
  },
58
58
  {
59
59
  slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/app.tsx"],"names":[],"mappings":"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","sourcesContent":["import { App, LinkMenuItem, WidgetOperationTypes, getAppConfig } from '@openedx/frontend-base';\n\nimport { appId, subscriptionDashboardUrlPath, subscriptionSignoutRole } from '../../constants';\n\nimport ConfirmEmailBanner from './ConfirmEmailBanner';\nimport ProgramsLinkMenuItem from './ProgramsLinkMenuItem';\nimport SupportLinkMenuItem from './SupportLinkMenuItem';\nimport OrderHistoryLinkMenuItem from './OrderHistoryLinkMenuItem';\nimport messages from '@src/messages';\n\nconst app: App = {\n appId: 'org.openedx.frontend.app.learnerDashboard.header',\n slots: [\n {\n slotId: 'org.openedx.frontend.slot.header.main.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerConfirmEmail.v1',\n op: WidgetOperationTypes.PREPEND,\n component: ConfirmEmailBanner,\n },\n {\n slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkPrograms.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <ProgramsLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ENABLE_PROGRAMS === true,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkSupport.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <SupportLinkMenuItem\n variant=\"dropdownItem\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).SUPPORT_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkOrderHistory.v1',\n op: WidgetOperationTypes.INSERT_BEFORE,\n relatedId: 'org.openedx.frontend.widget.header.desktopAuthenticatedMenuLogout.v1',\n element: (\n <OrderHistoryLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ORDER_HISTORY_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.desktopRight.v1',\n id: 'org.edx.frontend.widget.learnerHome.headerLinkDashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <div className=\"px-3\">\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"hyperlink\"\n />\n </div>\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.header.user.menu.manageSubscription.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.manageSubscription'].defaultMessage}\n url=\"/subscription-manage\"\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.headerAuthenticatedMenuSignOut.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.signOut'].defaultMessage}\n role={subscriptionSignoutRole}\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.dashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"dropdownItem\"\n />\n )\n },\n // {\n // // TO-DO : Resume your last course will be implemented seprately in a different ticket.(Ticket: SUBS-818)\n // // https://2u-internal.atlassian.net/browse/SUBS-818\n // slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n // id: 'org.openedx.frontend.widget.learnerDashboard.headerAuthenticatedMenuLastCourse.v1',\n // op: WidgetOperationTypes.PREPEND,\n // element: (\n // <LinkMenuItem\n // label={messages['header.user.menu.lastCourse'].defaultMessage}\n // url=\"/last-course\"\n // variant=\"dropdownItem\"\n // />\n // )\n // },\n ]\n};\n\nexport default app;\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/app.tsx"],"names":[],"mappings":"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","sourcesContent":["import { App, LinkMenuItem, WidgetOperationTypes, getAppConfig } from '@openedx/frontend-base';\n\nimport { appId, subscriptionDashboardUrlPath, subscriptionSignoutRole } from '../../constants';\n\nimport ConfirmEmailBanner from './ConfirmEmailBanner';\nimport ProgramsLinkMenuItem from './ProgramsLinkMenuItem';\nimport SupportLinkMenuItem from './SupportLinkMenuItem';\nimport OrderHistoryLinkMenuItem from './OrderHistoryLinkMenuItem';\nimport messages from '@src/messages';\n\nconst app: App = {\n appId: 'org.openedx.frontend.app.learnerDashboard.header',\n slots: [\n {\n slotId: 'org.openedx.frontend.slot.header.main.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerConfirmEmail.v1',\n op: WidgetOperationTypes.PREPEND,\n component: ConfirmEmailBanner,\n },\n {\n slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkPrograms.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <ProgramsLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ENABLE_PROGRAMS === true,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkSupport.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <SupportLinkMenuItem\n variant=\"dropdownItem\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).SUPPORT_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkOrderHistory.v1',\n op: WidgetOperationTypes.INSERT_BEFORE,\n relatedId: 'org.openedx.frontend.widget.header.desktopAuthenticatedMenuLogout.v1',\n element: (\n <OrderHistoryLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ORDER_HISTORY_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.desktopRight.v1',\n id: 'org.edx.frontend.widget.learnerHome.headerLinkDashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <div className=\"px-3\">\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"hyperlink\"\n />\n </div>\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.header.user.menu.manageSubscription.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.manageSubscription'].defaultMessage}\n url=\"/manage-subscription\"\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.headerAuthenticatedMenuSignOut.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.signOut'].defaultMessage}\n role={subscriptionSignoutRole}\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.dashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"dropdownItem\"\n />\n )\n },\n // {\n // // TO-DO : Resume your last course will be implemented seprately in a different ticket.(Ticket: SUBS-818)\n // // https://2u-internal.atlassian.net/browse/SUBS-818\n // slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n // id: 'org.openedx.frontend.widget.learnerDashboard.headerAuthenticatedMenuLastCourse.v1',\n // op: WidgetOperationTypes.PREPEND,\n // element: (\n // <LinkMenuItem\n // label={messages['header.user.menu.lastCourse'].defaultMessage}\n // url=\"/last-course\"\n // variant=\"dropdownItem\"\n // />\n // )\n // },\n ]\n};\n\nexport default app;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-app-subscription-learner-dashboard",
3
- "version": "1.31.2",
3
+ "version": "1.32.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",