@edx/frontend-app-subscription-learner-dashboard 1.11.0 → 1.12.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.
- package/dist/containers/CourseCard/components/CourseCardActions/index.d.ts +3 -1
- package/dist/containers/CourseCard/components/CourseCardActions/index.js +4 -3
- package/dist/containers/CourseCard/components/CourseCardActions/index.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/UpgradeBanner.d.ts +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/UpgradeBanner.js +14 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/UpgradeBanner.js.map +1 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/index.d.ts +3 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js +10 -3
- package/dist/containers/CourseCard/components/CourseCardBanners/index.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.d.ts +16 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.js +10 -0
- package/dist/containers/CourseCard/components/CourseCardBanners/messages.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.d.ts +2 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js +5 -1
- package/dist/containers/CourseCard/components/CourseCardDetails/hooks.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardDetails/index.d.ts +3 -2
- package/dist/containers/CourseCard/components/CourseCardDetails/index.js +16 -4
- package/dist/containers/CourseCard/components/CourseCardDetails/index.js.map +1 -1
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.d.ts +24 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.js +15 -0
- package/dist/containers/CourseCard/components/CourseCardDetails/messages.js.map +1 -1
- package/dist/containers/CourseCard/index.d.ts +3 -1
- package/dist/containers/CourseCard/index.js +3 -2
- package/dist/containers/CourseCard/index.js.map +1 -1
- package/dist/containers/CoursesPanel/CourseList/index.d.ts +1 -0
- package/dist/containers/CoursesPanel/CourseList/index.js +3 -2
- package/dist/containers/CoursesPanel/CourseList/index.js.map +1 -1
- package/dist/containers/CoursesPanel/index.js +2 -7
- package/dist/containers/CoursesPanel/index.js.map +1 -1
- package/dist/containers/CoursesPanel/messages.d.ts +1 -9
- package/dist/containers/CoursesPanel/messages.js +1 -6
- package/dist/containers/CoursesPanel/messages.js.map +1 -1
- package/dist/containers/Dashboard/DashboardContent.d.ts +2 -0
- package/dist/containers/Dashboard/DashboardContent.js +5 -0
- package/dist/containers/Dashboard/DashboardContent.js.map +1 -0
- package/dist/containers/Dashboard/DashboardTabs.js +2 -1
- package/dist/containers/Dashboard/DashboardTabs.js.map +1 -1
- package/dist/containers/Dashboard/index.js +2 -2
- package/dist/containers/Dashboard/index.js.map +1 -1
- package/dist/containers/HistoryPanel/index.d.ts +5 -0
- package/dist/containers/HistoryPanel/index.js +41 -0
- package/dist/containers/HistoryPanel/index.js.map +1 -0
- package/dist/containers/HistoryPanel/messages.d.ts +8 -0
- package/dist/containers/HistoryPanel/messages.js +10 -0
- package/dist/containers/HistoryPanel/messages.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js +2 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgress.js.map +1 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.js +29 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/ProgramProgressCircle.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.d.ts +4 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.js +12 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.js.map +1 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/ProgramProgressSidebar/index.scss +63 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.d.ts +20 -0
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js +21 -1
- package/dist/containers/ProgramDashboard/ProgramProgress/messages.js.map +1 -1
- package/dist/containers/ProgramDashboard/data/constants.d.ts +7 -0
- package/dist/containers/ProgramDashboard/data/constants.js +7 -0
- package/dist/containers/ProgramDashboard/data/constants.js.map +1 -1
- package/dist/data/hooks/queryHooks.js +6 -1
- package/dist/data/hooks/queryHooks.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export function CourseCardActions({ cardId, verifiedCourse }: {
|
|
1
|
+
export function CourseCardActions({ cardId, verifiedCourse, isHistoryTab }: {
|
|
2
2
|
cardId: any;
|
|
3
3
|
verifiedCourse: any;
|
|
4
|
+
isHistoryTab: any;
|
|
4
5
|
}): import("react/jsx-runtime").JSX.Element;
|
|
5
6
|
export namespace CourseCardActions {
|
|
6
7
|
namespace propTypes {
|
|
7
8
|
let cardId: PropTypes.Validator<string>;
|
|
8
9
|
let verifiedCourse: PropTypes.Requireable<boolean>;
|
|
10
|
+
let isHistoryTab: PropTypes.Requireable<boolean>;
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
export default CourseCardActions;
|
|
@@ -10,22 +10,23 @@ import BeginCourseButton from './BeginCourseButton';
|
|
|
10
10
|
import ResumeButton from './ResumeButton';
|
|
11
11
|
import ViewCourseButton from './ViewCourseButton';
|
|
12
12
|
import messages from './messages';
|
|
13
|
-
export const CourseCardActions = ({ cardId, verifiedCourse }) => {
|
|
13
|
+
export const CourseCardActions = ({ cardId, verifiedCourse, isHistoryTab }) => {
|
|
14
14
|
var _a, _b;
|
|
15
15
|
const cardData = useCourseData(cardId);
|
|
16
16
|
const { formatMessage } = useIntl();
|
|
17
17
|
const hasStarted = ((_a = cardData === null || cardData === void 0 ? void 0 : cardData.enrollment) === null || _a === void 0 ? void 0 : _a.hasStarted) || false;
|
|
18
18
|
const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);
|
|
19
19
|
const isArchived = ((_b = cardData === null || cardData === void 0 ? void 0 : cardData.courseRun) === null || _b === void 0 ? void 0 : _b.isArchived) || false;
|
|
20
|
-
return (_jsxs(Row, { className: "align-items-center mt-3", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse ? (_jsx(Badge, { variant: "success", className: "px-3 py-2", children: formatMessage(messages.subsVerifiedCourseText) })) : (_jsx("span", { className: "small text-info", children: formatMessage(messages.subsIncludedCourseText) })) }), _jsx(Col, { xs: 12, className: "d-flex justify-content-end", sm: 6, children: _jsxs(ActionRow, { "data-
|
|
20
|
+
return (_jsxs(Row, { className: "align-items-center mt-3", children: [_jsx(Col, { xs: 12, sm: 6, className: "mb-2 mb-lg-0", children: verifiedCourse && !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 }), isEntitlement && (isFulfilled
|
|
21
21
|
? _jsx(ViewCourseButton, { cardId: cardId })
|
|
22
22
|
: _jsx(SelectSessionButton, { cardId: cardId })), (isArchived && !isEntitlement) && (_jsx(ViewCourseButton, { cardId: cardId })), !(isArchived || isEntitlement) && (hasStarted
|
|
23
23
|
? _jsx(ResumeButton, { cardId: cardId })
|
|
24
|
-
: _jsx(BeginCourseButton, { cardId: cardId }))] }) })] }));
|
|
24
|
+
: _jsx(BeginCourseButton, { cardId: cardId }))] })) })] }));
|
|
25
25
|
};
|
|
26
26
|
CourseCardActions.propTypes = {
|
|
27
27
|
cardId: PropTypes.string.isRequired,
|
|
28
28
|
verifiedCourse: PropTypes.bool,
|
|
29
|
+
isHistoryTab: PropTypes.bool,
|
|
29
30
|
};
|
|
30
31
|
export default CourseCardActions;
|
|
31
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAG,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,oBAAoB,MAAM,iCAAiC,CAAC;AACnE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardActions/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { ActionRow, Row, Col, Badge } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport { useCourseData, useEntitlementInfo } from '@src/hooks';\n\nimport CourseCardActionSlot from '@src/slots/CourseCardActionSlot';\nimport SelectSessionButton from './SelectSessionButton';\nimport BeginCourseButton from './BeginCourseButton';\nimport ResumeButton from './ResumeButton';\nimport ViewCourseButton from './ViewCourseButton';\nimport messages from './messages';\n\nexport const CourseCardActions = ({ cardId, verifiedCourse, isHistoryTab }) => {\n const cardData = useCourseData(cardId);\n const { formatMessage } = useIntl();\n const hasStarted = cardData?.enrollment?.hasStarted || false;\n const { isEntitlement, isFulfilled } = useEntitlementInfo(cardData);\n const isArchived = cardData?.courseRun?.isArchived || false;\n\n return (\n <Row className=\"align-items-center mt-3\">\n <Col xs={12} sm={6} className=\"mb-2 mb-lg-0\">\n {/* TODO [TEMP]: Showing 2 types of badges for now. After backend connection, can anticipate 3rd type of badge as well\n Reason: Development before backend connection\n Action: Revisit after backend connection and finalize badge types and conditions for each type\n */}\n {verifiedCourse && !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 {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"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default UpgradeBanner;
|
|
2
|
+
declare function UpgradeBanner({ upgradeUrl }: {
|
|
3
|
+
upgradeUrl: any;
|
|
4
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare namespace UpgradeBanner {
|
|
6
|
+
namespace propTypes {
|
|
7
|
+
let upgradeUrl: PropTypes.Requireable<string>;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
4
|
+
import { Button, Card, Col, Row } from '@openedx/paragon';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
const UpgradeBanner = ({ upgradeUrl }) => {
|
|
7
|
+
const { formatMessage } = useIntl();
|
|
8
|
+
return (_jsx(Card.Status, { variant: "warning", className: "bg-light-200", "data-testid": "subscription-upgrade-banner", 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.subscriptionUpgradeBannerText) }) }), _jsx(Col, { xs: 12, sm: 4, className: "d-flex justify-content-end mt-2 mt-lg-0", children: _jsx(Button, { variant: "outline-dark", size: "md", href: upgradeUrl || undefined, "data-testid": "subscription-upgrade-button", children: formatMessage(messages.upgradeAction) }) })] }) }));
|
|
9
|
+
};
|
|
10
|
+
UpgradeBanner.propTypes = {
|
|
11
|
+
upgradeUrl: PropTypes.string,
|
|
12
|
+
};
|
|
13
|
+
export default UpgradeBanner;
|
|
14
|
+
//# sourceMappingURL=UpgradeBanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpgradeBanner.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardBanners/UpgradeBanner.jsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,aAAa,GAAG,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;IACvC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,OAAO,CACL,KAAC,IAAI,CAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAC,cAAc,iBAAa,6BAA6B,YAC/F,MAAC,GAAG,IAAC,SAAS,EAAC,yBAAyB,aACtC,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,YACrC,YAAG,SAAS,EAAC,4BAA4B,YACtC,aAAa,CAAC,QAAQ,CAAC,6BAA6B,CAAC,GACpD,GACA,EACN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,yCAAyC,YACrE,KAAC,MAAM,IACL,OAAO,EAAC,cAAc,EACtB,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,UAAU,IAAI,SAAS,iBACjB,6BAA6B,YAExC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,GAC/B,GACL,IACF,GACM,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,aAAa,CAAC,SAAS,GAAG;IACxB,UAAU,EAAE,SAAS,CAAC,MAAM;CAC7B,CAAC;AAEF,eAAe,aAAa,CAAC","sourcesContent":["import PropTypes from 'prop-types';\nimport { useIntl } from '@openedx/frontend-base';\nimport { Button, Card, Col, Row } from '@openedx/paragon';\n\nimport messages from './messages';\n\nconst UpgradeBanner = ({ upgradeUrl }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Card.Status variant=\"warning\" className=\"bg-light-200\" data-testid=\"subscription-upgrade-banner\">\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.subscriptionUpgradeBannerText)}\n </p>\n </Col>\n <Col xs={12} sm={4} className=\"d-flex justify-content-end mt-2 mt-lg-0\">\n <Button\n variant=\"outline-dark\"\n size=\"md\"\n href={upgradeUrl || undefined}\n data-testid=\"subscription-upgrade-button\"\n >\n {formatMessage(messages.upgradeAction)}\n </Button>\n </Col>\n </Row>\n </Card.Status>\n );\n};\n\nUpgradeBanner.propTypes = {\n upgradeUrl: PropTypes.string,\n};\n\nexport default UpgradeBanner;\n"]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export function CourseCardBanners({ cardId, verifiedCourse }: {
|
|
1
|
+
export function CourseCardBanners({ cardId, verifiedCourse, isHistoryTab }: {
|
|
2
2
|
cardId: any;
|
|
3
3
|
verifiedCourse: any;
|
|
4
|
+
isHistoryTab: any;
|
|
4
5
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
5
6
|
export namespace CourseCardBanners {
|
|
6
7
|
namespace propTypes {
|
|
7
8
|
let cardId: PropTypes.Validator<string>;
|
|
8
9
|
let verifiedCourse: PropTypes.Requireable<boolean>;
|
|
10
|
+
let isHistoryTab: PropTypes.Requireable<boolean>;
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
export default CourseCardBanners;
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
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
4
|
import RedeemBanner from './RedeemBanner';
|
|
5
|
-
|
|
5
|
+
import UpgradeBanner from './UpgradeBanner';
|
|
6
|
+
export const CourseCardBanners = ({ cardId, verifiedCourse, isHistoryTab }) => {
|
|
7
|
+
var _a, _b, _c;
|
|
6
8
|
const courseData = useCourseData(cardId);
|
|
7
9
|
if (!courseData) {
|
|
8
10
|
return null;
|
|
9
11
|
}
|
|
10
|
-
|
|
12
|
+
const isAuditAccessExpired = ((_a = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _a === void 0 ? void 0 : _a.isAuditAccessExpired) || false;
|
|
13
|
+
const isFromNonUpgradeableCourses = (courseData === null || courseData === void 0 ? void 0 : courseData.isFromNonUpgradeableCourses) || false;
|
|
14
|
+
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 : '';
|
|
15
|
+
const showHistoryUpgradeBanner = isHistoryTab && isAuditAccessExpired && !isFromNonUpgradeableCourses;
|
|
16
|
+
return (_jsxs("div", { className: "course-card-banners", "data-testid": "CourseCardBanners", children: [showHistoryUpgradeBanner && (_jsx(UpgradeBanner, { upgradeUrl: upgradeUrl })), (!verifiedCourse && !isAuditAccessExpired) && _jsx(RedeemBanner, {})] }));
|
|
11
17
|
};
|
|
12
18
|
CourseCardBanners.propTypes = {
|
|
13
19
|
cardId: PropTypes.string.isRequired,
|
|
14
20
|
verifiedCourse: PropTypes.bool,
|
|
21
|
+
isHistoryTab: PropTypes.bool,
|
|
15
22
|
};
|
|
16
23
|
export default CourseCardBanners;
|
|
17
24
|
//# 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;
|
|
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;AAE5C,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;IAEtG,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,IAAI,KAAC,YAAY,KAAG,IAC3D,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';\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\n return (\n <div className=\"course-card-banners\" data-testid=\"CourseCardBanners\">\n {showHistoryUpgradeBanner && (\n <UpgradeBanner upgradeUrl={upgradeUrl} />\n )}\n {(!verifiedCourse && !isAuditAccessExpired) && <RedeemBanner />}\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"]}
|
|
@@ -165,4 +165,20 @@ declare namespace messages {
|
|
|
165
165
|
let defaultMessage_20: string;
|
|
166
166
|
export { defaultMessage_20 as defaultMessage };
|
|
167
167
|
}
|
|
168
|
+
namespace subscriptionUpgradeBannerText {
|
|
169
|
+
let id_21: string;
|
|
170
|
+
export { id_21 as id };
|
|
171
|
+
let description_21: string;
|
|
172
|
+
export { description_21 as description };
|
|
173
|
+
let defaultMessage_21: string;
|
|
174
|
+
export { defaultMessage_21 as defaultMessage };
|
|
175
|
+
}
|
|
176
|
+
namespace upgradeAction {
|
|
177
|
+
let id_22: string;
|
|
178
|
+
export { id_22 as id };
|
|
179
|
+
let description_22: string;
|
|
180
|
+
export { description_22 as description };
|
|
181
|
+
let defaultMessage_22: string;
|
|
182
|
+
export { defaultMessage_22 as defaultMessage };
|
|
183
|
+
}
|
|
168
184
|
}
|
|
@@ -105,6 +105,16 @@ const messages = defineMessages({
|
|
|
105
105
|
description: 'Redeem link text',
|
|
106
106
|
defaultMessage: 'Redeem',
|
|
107
107
|
},
|
|
108
|
+
subscriptionUpgradeBannerText: {
|
|
109
|
+
id: 'learner-dash.courseCard.banners.subscriptionUpgradeBannerText',
|
|
110
|
+
description: 'Banner text for subscription courses where audit access has expired',
|
|
111
|
+
defaultMessage: 'This course is included in your subscription. Upgrade to get full course access.',
|
|
112
|
+
},
|
|
113
|
+
upgradeAction: {
|
|
114
|
+
id: 'learner-dash.courseCard.banners.upgradeAction',
|
|
115
|
+
description: 'Upgrade button text for subscription upgrade banner',
|
|
116
|
+
defaultMessage: 'Upgrade',
|
|
117
|
+
},
|
|
108
118
|
});
|
|
109
119
|
export default messages;
|
|
110
120
|
//# sourceMappingURL=messages.js.map
|
|
@@ -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});\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 upgradeAction: {\n id: 'learner-dash.courseCard.banners.upgradeAction',\n description: 'Upgrade button text for subscription upgrade banner',\n defaultMessage: 'Upgrade',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -9,6 +9,8 @@ export function useCardDetailsData({ cardId }: {
|
|
|
9
9
|
isEntitlement: boolean;
|
|
10
10
|
isFulfilled: any;
|
|
11
11
|
canChange: boolean | undefined;
|
|
12
|
+
isAuditAccessExpired: any;
|
|
13
|
+
isFromNonUpgradeableCourses: any;
|
|
12
14
|
openSessionModal: () => void;
|
|
13
15
|
courseNumber: any;
|
|
14
16
|
changeOrLeaveSessionMessage: string;
|
|
@@ -32,11 +32,13 @@ export const useAccessMessage = ({ cardId }) => {
|
|
|
32
32
|
return null;
|
|
33
33
|
};
|
|
34
34
|
export const useCardDetailsData = ({ cardId }) => {
|
|
35
|
-
var _a, _b;
|
|
35
|
+
var _a, _b, _c;
|
|
36
36
|
const { formatMessage } = useIntl();
|
|
37
37
|
const courseData = useCourseData(cardId);
|
|
38
38
|
const providerName = (_a = courseData === null || courseData === void 0 ? void 0 : courseData.courseProvider) === null || _a === void 0 ? void 0 : _a.name;
|
|
39
39
|
const courseNumber = (_b = courseData === null || courseData === void 0 ? void 0 : courseData.course) === null || _b === void 0 ? void 0 : _b.courseNumber;
|
|
40
|
+
const isAuditAccessExpired = ((_c = courseData === null || courseData === void 0 ? void 0 : courseData.enrollment) === null || _c === void 0 ? void 0 : _c.isAuditAccessExpired) || false;
|
|
41
|
+
const isFromNonUpgradeableCourses = (courseData === null || courseData === void 0 ? void 0 : courseData.isFromNonUpgradeableCourses) || false;
|
|
40
42
|
const { isEntitlement, isFulfilled, canChange, } = useEntitlementInfo(courseData);
|
|
41
43
|
const { updateSelectSessionModal } = useSelectSessionModal();
|
|
42
44
|
return {
|
|
@@ -45,6 +47,8 @@ export const useCardDetailsData = ({ cardId }) => {
|
|
|
45
47
|
isEntitlement,
|
|
46
48
|
isFulfilled,
|
|
47
49
|
canChange,
|
|
50
|
+
isAuditAccessExpired,
|
|
51
|
+
isFromNonUpgradeableCourses,
|
|
48
52
|
openSessionModal: () => updateSelectSessionModal(cardId),
|
|
49
53
|
courseNumber,
|
|
50
54
|
changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),
|
|
@@ -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 {\n isEntitlement,\n isFulfilled,\n canChange,\n } = useEntitlementInfo(courseData);\n const { updateSelectSessionModal } = useSelectSessionModal();\n\n return {\n providerName: providerName || formatMessage(messages.unknownProviderName),\n accessMessage: hooks.useAccessMessage({ cardId }),\n isEntitlement,\n isFulfilled,\n canChange,\n openSessionModal: () => updateSelectSessionModal(cardId),\n courseNumber,\n changeOrLeaveSessionMessage: formatMessage(messages.changeOrLeaveSessionButton),\n };\n};\n\nexport default useCardDetailsData;\n"]}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/hooks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAA,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAC7C,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe,IAAI,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/E,OAAO,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;QAC1C,MAAM,EACJ,oBAAoB,EACpB,oBAAoB,GACrB,GAAG,UAAU,CAAC;QAEf,IAAI,UAAU,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;YAC/C,OAAO,aAAa,CAClB,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EACtE,EAAE,oBAAoB,EAAE,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,aAAa,CAClB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EACvD,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;;IAC/C,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,0CAAE,IAAI,CAAC;IACtD,MAAM,YAAY,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,0CAAE,YAAY,CAAC;IACtD,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,EACJ,aAAa,EACb,WAAW,EACX,SAAS,GACV,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,wBAAwB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAE7D,OAAO;QACL,YAAY,EAAE,YAAY,IAAI,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACzE,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QACjD,aAAa;QACb,WAAW;QACX,SAAS;QACT,oBAAoB;QACpB,2BAA2B;QAC3B,gBAAgB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACxD,YAAY;QACZ,2BAA2B,EAAE,aAAa,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAChF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC","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,11 +1,12 @@
|
|
|
1
|
-
export function CourseCardDetails({ cardId }: {
|
|
1
|
+
export function CourseCardDetails({ cardId, isHistoryTab }: {
|
|
2
2
|
cardId: any;
|
|
3
|
+
isHistoryTab?: boolean | undefined;
|
|
3
4
|
}): import("react/jsx-runtime").JSX.Element;
|
|
4
5
|
export namespace CourseCardDetails {
|
|
5
6
|
namespace propTypes {
|
|
6
7
|
let cardId: PropTypes.Validator<string>;
|
|
8
|
+
let isHistoryTab: PropTypes.Requireable<boolean>;
|
|
7
9
|
}
|
|
8
|
-
let defaultProps: {};
|
|
9
10
|
}
|
|
10
11
|
export default CourseCardDetails;
|
|
11
12
|
import PropTypes from 'prop-types';
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
+
import { useIntl } from '@openedx/frontend-base';
|
|
5
|
+
import messages from './messages';
|
|
4
6
|
import { Button } from '@openedx/paragon';
|
|
7
|
+
import { Badge } from '@openedx/paragon';
|
|
5
8
|
import useCardDetailsData from './hooks';
|
|
6
9
|
import './index.scss';
|
|
7
|
-
export const CourseCardDetails = ({ cardId }) => {
|
|
8
|
-
const {
|
|
9
|
-
|
|
10
|
+
export const CourseCardDetails = ({ cardId, isHistoryTab = false }) => {
|
|
11
|
+
const { formatMessage } = useIntl();
|
|
12
|
+
const { providerName, accessMessage, isEntitlement, isFulfilled, canChange, openSessionModal, changeOrLeaveSessionMessage, isAuditAccessExpired, isFromNonUpgradeableCourses, } = useCardDetailsData({ cardId });
|
|
13
|
+
const showAuditTrackBadge = isHistoryTab && isAuditAccessExpired;
|
|
14
|
+
const showDefaultAccessMessage = !(isEntitlement && !isFulfilled) && accessMessage;
|
|
15
|
+
let renderedAccessMessage = null;
|
|
16
|
+
if (isHistoryTab && isAuditAccessExpired) {
|
|
17
|
+
renderedAccessMessage = isFromNonUpgradeableCourses
|
|
18
|
+
? formatMessage(messages.auditAccessExpiredNotIncluded)
|
|
19
|
+
: formatMessage(messages.auditAccessExpired);
|
|
20
|
+
}
|
|
21
|
+
return (_jsxs("div", { "data-testid": "CourseCardDetails", children: [providerName && (_jsx("span", { className: "small text-muted mr-2", "data-testid": "course-provider", children: providerName })), showDefaultAccessMessage && (_jsx("span", { className: "small text-gray-700", "data-testid": "course-end-date", children: accessMessage })), showAuditTrackBadge && (_jsxs("div", { children: [_jsx(Badge, { className: "mr-2 mt-2 bg-light-200 text-dark-700", "data-testid": "audit-track-badge", children: formatMessage(messages.auditTrackBadge) }), renderedAccessMessage && (_jsx("span", { className: "small text-gray-700", "data-testid": "course-audit-access-expired", children: renderedAccessMessage }))] })), isEntitlement && isFulfilled && canChange ? (_jsx(Button, { variant: "link", size: "inline", className: "m-0 p-0", onClick: openSessionModal, children: changeOrLeaveSessionMessage })) : null] }));
|
|
10
22
|
};
|
|
11
23
|
CourseCardDetails.propTypes = {
|
|
12
24
|
cardId: PropTypes.string.isRequired,
|
|
25
|
+
isHistoryTab: PropTypes.bool,
|
|
13
26
|
};
|
|
14
|
-
CourseCardDetails.defaultProps = {};
|
|
15
27
|
export default CourseCardDetails;
|
|
16
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -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;
|
|
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"]}
|
|
@@ -53,4 +53,28 @@ declare namespace messages {
|
|
|
53
53
|
let defaultMessage_6: string;
|
|
54
54
|
export { defaultMessage_6 as defaultMessage };
|
|
55
55
|
}
|
|
56
|
+
namespace auditTrackBadge {
|
|
57
|
+
let id_7: string;
|
|
58
|
+
export { id_7 as id };
|
|
59
|
+
let description_7: string;
|
|
60
|
+
export { description_7 as description };
|
|
61
|
+
let defaultMessage_7: string;
|
|
62
|
+
export { defaultMessage_7 as defaultMessage };
|
|
63
|
+
}
|
|
64
|
+
namespace auditAccessExpired {
|
|
65
|
+
let id_8: string;
|
|
66
|
+
export { id_8 as id };
|
|
67
|
+
let description_8: string;
|
|
68
|
+
export { description_8 as description };
|
|
69
|
+
let defaultMessage_8: string;
|
|
70
|
+
export { defaultMessage_8 as defaultMessage };
|
|
71
|
+
}
|
|
72
|
+
namespace auditAccessExpiredNotIncluded {
|
|
73
|
+
let id_9: string;
|
|
74
|
+
export { id_9 as id };
|
|
75
|
+
let description_9: string;
|
|
76
|
+
export { description_9 as description };
|
|
77
|
+
let defaultMessage_9: string;
|
|
78
|
+
export { defaultMessage_9 as defaultMessage };
|
|
79
|
+
}
|
|
56
80
|
}
|
|
@@ -35,6 +35,21 @@ const messages = defineMessages({
|
|
|
35
35
|
description: 'Button for trigger change or leave session for entitlement course',
|
|
36
36
|
defaultMessage: 'Change or leave session',
|
|
37
37
|
},
|
|
38
|
+
auditTrackBadge: {
|
|
39
|
+
id: 'learner-dash.courseCard.CourseCardDetails.auditTrackBadge',
|
|
40
|
+
description: 'Label for audit track on course card',
|
|
41
|
+
defaultMessage: 'Audit track',
|
|
42
|
+
},
|
|
43
|
+
auditAccessExpired: {
|
|
44
|
+
id: 'learner-dash.courseCard.CourseCardDetails.auditAccessExpired',
|
|
45
|
+
description: 'Short access expired message for audited course',
|
|
46
|
+
defaultMessage: 'Access expired.',
|
|
47
|
+
},
|
|
48
|
+
auditAccessExpiredNotIncluded: {
|
|
49
|
+
id: 'learner-dash.courseCard.CourseCardDetails.auditAccessExpiredNotIncluded',
|
|
50
|
+
description: 'Access expired message for non-upgradeable audited course',
|
|
51
|
+
defaultMessage: 'Access expired. This course is not included in your subscription.',
|
|
52
|
+
},
|
|
38
53
|
});
|
|
39
54
|
export default messages;
|
|
40
55
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,0EAA0E;QACvF,cAAc,EAAE,uCAAuC;KACxD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,uCAAuC;KACxD;IACD,WAAW,EAAE;QACX,EAAE,EAAE,uDAAuD;QAC3D,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,wBAAwB;KACzC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,sDAAsD;QAC1D,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,uBAAuB;KACxC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,wDAAwD;QAC5D,WAAW,EAAE,2CAA2C;QACxD,cAAc,EAAE,2BAA2B;KAC5C;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,+DAA+D;QACnE,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,SAAS;KAC1B;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,sEAAsE;QAC1E,WAAW,EAAE,mEAAmE;QAChF,cAAc,EAAE,yBAAyB;KAC1C;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n accessExpired: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpired',\n description: 'Course access expiration date message on course card for expired access.',\n defaultMessage: 'Access expired {accessExpirationDate}',\n },\n accessExpires: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpires',\n description: 'Course access expiration date message on course card.',\n defaultMessage: 'Access expires {accessExpirationDate}',\n },\n courseEnded: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnded',\n description: 'Course ended message on course card.',\n defaultMessage: 'Course ended {endDate}',\n },\n courseEnds: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnds',\n description: 'Course ending message on course card.',\n defaultMessage: 'Course ends {endDate}',\n },\n courseStarts: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseStarts',\n description: 'Course start date message on course card.',\n defaultMessage: 'Course starts {startDate}',\n },\n unknownProviderName: {\n id: 'learner-dash.courseCard.CourseCardDetails.unknownProviderName',\n description: 'Provider name display when name is unknown',\n defaultMessage: 'Unknown',\n },\n changeOrLeaveSessionButton: {\n id: 'learner-dash.courseCard.CourseCardDetails.changeOrLeaveSessionButton',\n description: 'Button for trigger change or leave session for entitlement course',\n defaultMessage: 'Change or leave session',\n },\n});\n\nexport default messages;\n"]}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/containers/CourseCard/components/CourseCardDetails/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,0EAA0E;QACvF,cAAc,EAAE,uCAAuC;KACxD;IACD,aAAa,EAAE;QACb,EAAE,EAAE,yDAAyD;QAC7D,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,uCAAuC;KACxD;IACD,WAAW,EAAE;QACX,EAAE,EAAE,uDAAuD;QAC3D,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,wBAAwB;KACzC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,sDAAsD;QAC1D,WAAW,EAAE,uCAAuC;QACpD,cAAc,EAAE,uBAAuB;KACxC;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,wDAAwD;QAC5D,WAAW,EAAE,2CAA2C;QACxD,cAAc,EAAE,2BAA2B;KAC5C;IACD,mBAAmB,EAAE;QACnB,EAAE,EAAE,+DAA+D;QACnE,WAAW,EAAE,4CAA4C;QACzD,cAAc,EAAE,SAAS;KAC1B;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,sEAAsE;QAC1E,WAAW,EAAE,mEAAmE;QAChF,cAAc,EAAE,yBAAyB;KAC1C;IACD,eAAe,EAAE;QACf,EAAE,EAAE,2DAA2D;QAC/D,WAAW,EAAE,sCAAsC;QACnD,cAAc,EAAE,aAAa;KAC9B;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,8DAA8D;QAClE,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE,iBAAiB;KAClC;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,yEAAyE;QAC7E,WAAW,EAAE,2DAA2D;QACxE,cAAc,EAAE,mEAAmE;KACpF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n accessExpired: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpired',\n description: 'Course access expiration date message on course card for expired access.',\n defaultMessage: 'Access expired {accessExpirationDate}',\n },\n accessExpires: {\n id: 'learner-dash.courseCard.CourseCardDetails.accessExpires',\n description: 'Course access expiration date message on course card.',\n defaultMessage: 'Access expires {accessExpirationDate}',\n },\n courseEnded: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnded',\n description: 'Course ended message on course card.',\n defaultMessage: 'Course ended {endDate}',\n },\n courseEnds: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseEnds',\n description: 'Course ending message on course card.',\n defaultMessage: 'Course ends {endDate}',\n },\n courseStarts: {\n id: 'learner-dash.courseCard.CourseCardDetails.courseStarts',\n description: 'Course start date message on course card.',\n defaultMessage: 'Course starts {startDate}',\n },\n unknownProviderName: {\n id: 'learner-dash.courseCard.CourseCardDetails.unknownProviderName',\n description: 'Provider name display when name is unknown',\n defaultMessage: 'Unknown',\n },\n changeOrLeaveSessionButton: {\n id: 'learner-dash.courseCard.CourseCardDetails.changeOrLeaveSessionButton',\n description: 'Button for trigger change or leave session for entitlement course',\n defaultMessage: 'Change or leave session',\n },\n auditTrackBadge: {\n id: 'learner-dash.courseCard.CourseCardDetails.auditTrackBadge',\n description: 'Label for audit track on course card',\n defaultMessage: 'Audit track',\n },\n auditAccessExpired: {\n id: 'learner-dash.courseCard.CourseCardDetails.auditAccessExpired',\n description: 'Short access expired message for audited course',\n defaultMessage: 'Access expired.',\n },\n auditAccessExpiredNotIncluded: {\n id: 'learner-dash.courseCard.CourseCardDetails.auditAccessExpiredNotIncluded',\n description: 'Access expired message for non-upgradeable audited course',\n defaultMessage: 'Access expired. This course is not included in your subscription.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
export function CourseCard({ cardId, verifiedCourse }: {
|
|
1
|
+
export function CourseCard({ cardId, verifiedCourse, isHistoryTab, }: {
|
|
2
2
|
cardId: any;
|
|
3
3
|
verifiedCourse: any;
|
|
4
|
+
isHistoryTab: any;
|
|
4
5
|
}): import("react/jsx-runtime").JSX.Element;
|
|
5
6
|
export namespace CourseCard {
|
|
6
7
|
namespace propTypes {
|
|
7
8
|
let cardId: PropTypes.Validator<string>;
|
|
8
9
|
let verifiedCourse: PropTypes.Requireable<boolean>;
|
|
10
|
+
let isHistoryTab: PropTypes.Requireable<boolean>;
|
|
9
11
|
}
|
|
10
12
|
}
|
|
11
13
|
export default CourseCard;
|
|
@@ -8,14 +8,15 @@ 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 }) => {
|
|
11
|
+
export const CourseCard = ({ cardId, verifiedCourse, isHistoryTab, }) => {
|
|
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 }), _jsx(CourseCardActions, { cardId: cardId, verifiedCourse: verifiedCourse })] })] }) })), _jsx(CourseCardBanners, { cardId: cardId, verifiedCourse: verifiedCourse })] }) }) }));
|
|
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 })] }) }) }));
|
|
15
15
|
};
|
|
16
16
|
CourseCard.propTypes = {
|
|
17
17
|
cardId: PropTypes.string.isRequired,
|
|
18
18
|
verifiedCourse: PropTypes.bool,
|
|
19
|
+
isHistoryTab: PropTypes.bool,
|
|
19
20
|
};
|
|
20
21
|
export default CourseCard;
|
|
21
22
|
//# 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,
|
|
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"]}
|
|
@@ -12,6 +12,7 @@ export const courseListDataShape: PropTypes.Requireable<PropTypes.InferProps<{
|
|
|
12
12
|
numPages: PropTypes.Validator<number>;
|
|
13
13
|
setPageNumber: PropTypes.Validator<(...args: any[]) => any>;
|
|
14
14
|
verifiedCourse: PropTypes.Requireable<boolean>;
|
|
15
|
+
isHistoryTab: PropTypes.Requireable<boolean>;
|
|
15
16
|
}>>;
|
|
16
17
|
export default CourseList;
|
|
17
18
|
import PropTypes from 'prop-types';
|
|
@@ -4,9 +4,9 @@ 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, } = courseListData;
|
|
7
|
+
const { setPageNumber, numPages, visibleList, verifiedCourse, 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 }, 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(({ 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 }))] }) }));
|
|
10
10
|
};
|
|
11
11
|
export const courseListDataShape = PropTypes.shape({
|
|
12
12
|
showFilters: PropTypes.bool.isRequired,
|
|
@@ -14,6 +14,7 @@ export const courseListDataShape = PropTypes.shape({
|
|
|
14
14
|
numPages: PropTypes.number.isRequired,
|
|
15
15
|
setPageNumber: PropTypes.func.isRequired,
|
|
16
16
|
verifiedCourse: PropTypes.bool,
|
|
17
|
+
isHistoryTab: PropTypes.bool,
|
|
17
18
|
});
|
|
18
19
|
CourseList.propTypes = {
|
|
19
20
|
courseListData: courseListDataShape,
|
|
@@ -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,
|
|
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"]}
|