@edx/frontend-app-subscription-learner-dashboard 1.15.0 → 1.16.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/Dashboard/DashboardContent.d.ts +5 -2
- package/dist/containers/Dashboard/DashboardContent.js +1 -1
- package/dist/containers/Dashboard/DashboardContent.js.map +1 -1
- package/dist/containers/Dashboard/DashboardTabs.d.ts +4 -1
- package/dist/containers/Dashboard/DashboardTabs.js +23 -18
- package/dist/containers/Dashboard/DashboardTabs.js.map +1 -1
- package/dist/containers/Dashboard/index.js +3 -1
- package/dist/containers/Dashboard/index.js.map +1 -1
- package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js +30 -8
- package/dist/containers/SubscriptionBanner/components/SubscriptionBanner.js.map +1 -1
- package/dist/containers/SubscriptionBanner/messages.d.ts +10 -0
- package/dist/containers/SubscriptionBanner/messages.js +22 -11
- package/dist/containers/SubscriptionBanner/messages.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
interface IDashboardContentProps {
|
|
2
|
+
hasCourseHistory: boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare const DashboardContent: ({ hasCourseHistory }: IDashboardContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Row, Col } from '@openedx/paragon';
|
|
3
3
|
import DashboardTabs from './DashboardTabs';
|
|
4
|
-
export const DashboardContent = () => (_jsxs(Row, { children: [_jsx(Col, { xs: 12, lg: 8, children: _jsx(DashboardTabs, {}) }), _jsx(Col, { xs: 12, lg: 4, className: "mt-4", "data-testid": "dashboard-sidebar", children: _jsxs("div", { className: "dashboard-sidebar", children: [_jsx("h2", { children: "Sidebar" }), _jsx("p", { children: "This is the sidebar content." })] }) })] }));
|
|
4
|
+
export const DashboardContent = ({ hasCourseHistory }) => (_jsxs(Row, { children: [_jsx(Col, { xs: 12, lg: 8, children: _jsx(DashboardTabs, { hasCourseHistory: hasCourseHistory }) }), _jsx(Col, { xs: 12, lg: 4, className: "mt-4", "data-testid": "dashboard-sidebar", children: _jsxs("div", { className: "dashboard-sidebar", children: [_jsx("h2", { children: "Sidebar" }), _jsx("p", { children: "This is the sidebar content." })] }) })] }));
|
|
5
5
|
//# sourceMappingURL=DashboardContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardContent.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/DashboardContent.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"DashboardContent.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/DashboardContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAM5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,EAA0B,EAAE,EAAE,CAAC,CAChF,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,YAChB,KAAC,aAAa,IAAC,gBAAgB,EAAE,gBAAgB,GAAI,GACjD,EACN,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAC,MAAM,iBAAa,mBAAmB,YAClE,eAAK,SAAS,EAAC,mBAAmB,aAEhC,mCAAgB,EAChB,uDAAmC,IAC/B,GACF,IACF,CACP,CAAC","sourcesContent":["import { Row, Col } from '@openedx/paragon';\nimport DashboardTabs from './DashboardTabs';\n\ninterface IDashboardContentProps {\n hasCourseHistory: boolean,\n}\n\nexport const DashboardContent = ({ hasCourseHistory }: IDashboardContentProps) => (\n <Row>\n <Col xs={12} lg={8}>\n <DashboardTabs hasCourseHistory={hasCourseHistory} />\n </Col>\n <Col xs={12} lg={4} className=\"mt-4\" data-testid=\"dashboard-sidebar\">\n <div className=\"dashboard-sidebar\">\n {/* Temporary Content added, will be replaced with actual sidebar content */}\n <h2>Sidebar</h2>\n <p>This is the sidebar content.</p>\n </div>\n </Col>\n </Row>\n);\n"]}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
interface IDashboardTabsProps {
|
|
2
|
+
hasCourseHistory: boolean;
|
|
3
|
+
}
|
|
4
|
+
declare const DashboardTabs: ({ hasCourseHistory }: IDashboardTabsProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
5
|
export default DashboardTabs;
|
|
@@ -4,26 +4,31 @@ import { Tabs, Tab } from '@openedx/paragon';
|
|
|
4
4
|
import CoursesPanel from '../CoursesPanel';
|
|
5
5
|
import ProgramsPanel from '../ProgramsPanel';
|
|
6
6
|
import HistoryPanel from '../HistoryPanel';
|
|
7
|
-
const DashboardTabs = () => {
|
|
7
|
+
const DashboardTabs = ({ hasCourseHistory }) => {
|
|
8
8
|
var _a;
|
|
9
9
|
// Defining the tabs here
|
|
10
|
-
const dashboardTabs = useMemo(() =>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
10
|
+
const dashboardTabs = useMemo(() => {
|
|
11
|
+
const tabs = [
|
|
12
|
+
{
|
|
13
|
+
key: 'courses',
|
|
14
|
+
title: 'Courses',
|
|
15
|
+
panel: _jsx(CoursesPanel, {}),
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: 'programs',
|
|
19
|
+
title: 'Programs',
|
|
20
|
+
panel: _jsx(ProgramsPanel, {}),
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
if (hasCourseHistory) {
|
|
24
|
+
tabs.push({
|
|
25
|
+
key: 'history',
|
|
26
|
+
title: 'Course history',
|
|
27
|
+
panel: _jsx(HistoryPanel, {}),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return tabs;
|
|
31
|
+
}, [hasCourseHistory]);
|
|
27
32
|
const [activeTab, setActiveTab] = useState(dashboardTabs[0].key);
|
|
28
33
|
const handleTabSelect = useCallback((tabKey) => {
|
|
29
34
|
if (tabKey) {
|
|
@@ -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;
|
|
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;AAM3C,MAAM,aAAa,GAAG,CAAC,EAAE,gBAAgB,EAAuB,EAAE,EAAE;;IAClE,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,KAAG;aACxB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,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';\n\ninterface IDashboardTabsProps {\n hasCourseHistory: boolean,\n}\n\nconst DashboardTabs = ({ hasCourseHistory }: IDashboardTabsProps) => {\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 />,\n });\n }\n\n return tabs;\n }, [hasCourseHistory]);\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"]}
|
|
@@ -13,14 +13,16 @@ import './index.scss';
|
|
|
13
13
|
import { SubscriptionBanner } from '../SubscriptionBanner';
|
|
14
14
|
import { DashboardTitle } from './DashboardTitle';
|
|
15
15
|
export const Dashboard = () => {
|
|
16
|
+
var _a, _b;
|
|
16
17
|
const { data, isPending } = useInitializeSubsCourseDashboard();
|
|
17
18
|
const { pageTitle } = hooks.useDashboardMessages();
|
|
18
19
|
const { selectSessionModal } = useSelectSessionModal();
|
|
19
20
|
const showSelectSessionModal = selectSessionModal.cardId !== null;
|
|
20
21
|
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]);
|
|
22
|
+
const hasCourseHistory = ((_b = (_a = data === null || data === void 0 ? void 0 : data.nonUpgradeableCourses) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
21
23
|
return (_jsx("div", { id: "learnerdashboardroot", children: _jsx("main", { children: _jsxs("div", { id: "dashboard-container", className: "d-flex flex-column p-2 pt-0", children: [_jsx("h1", { className: "sr-only", children: pageTitle }), !isPending && (_jsxs(_Fragment, { children: [_jsx(DashboardModalSlot, {}), (hasCourses && showSelectSessionModal) && _jsx(SelectSessionModal, {})] })), _jsx("div", { id: "dashboard-content", "data-testid": "dashboard-content", children: isPending
|
|
22
24
|
? (_jsx(LoadingView, {}))
|
|
23
|
-
: (_jsxs(DashboardLayout, { children: [_jsx(SubscriptionBanner, {}), _jsx(DashboardTitle, {}), _jsx(DashboardContent, {}), _jsx(RecentlyViewedPanel, {})] })) })] }) }) }));
|
|
25
|
+
: (_jsxs(DashboardLayout, { children: [_jsx(SubscriptionBanner, {}), _jsx(DashboardTitle, {}), _jsx(DashboardContent, { hasCourseHistory: hasCourseHistory }), _jsx(RecentlyViewedPanel, {})] })) })] }) }) }));
|
|
24
26
|
};
|
|
25
27
|
export default Dashboard;
|
|
26
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,mBAAmB,MAAM,wBAAwB,CAAC;AAEzD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/containers/Dashboard/index.jsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,mBAAmB,MAAM,wBAAwB,CAAC;AAEzD,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;;IAC5B,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,gCAAgC,EAAE,CAAC;IAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;IACnD,MAAM,EAAE,kBAAkB,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACvD,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,MAAM,KAAK,IAAI,CAAC;IAElE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,0CAAE,MAAM,IAAG,CAAC,CAAA,EAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,gBAAgB,GAAG,CAAC,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,qBAAqB,0CAAE,MAAM,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAExE,OAAO,CACL,cAAK,EAAE,EAAC,sBAAsB,YAC5B,yBACE,eAAK,EAAE,EAAC,qBAAqB,EAAC,SAAS,EAAC,6BAA6B,aACnE,aAAI,SAAS,EAAC,SAAS,YAAE,SAAS,GAAM,EACvC,CAAC,SAAS,IAAI,CACb,8BACE,KAAC,kBAAkB,KAAG,EACrB,CAAC,UAAU,IAAI,sBAAsB,CAAC,IAAI,KAAC,kBAAkB,KAAG,IAChE,CACJ,EACD,cAAK,EAAE,EAAC,mBAAmB,iBAAa,mBAAmB,YACxD,SAAS;4BACR,CAAC,CAAC,CAAC,KAAC,WAAW,KAAG,CAAC;4BACnB,CAAC,CAAC,CACA,MAAC,eAAe,eACd,KAAC,kBAAkB,KAAG,EACtB,KAAC,cAAc,KAAG,EAClB,KAAC,gBAAgB,IAAC,gBAAgB,EAAE,gBAAgB,GAAI,EACxD,KAAC,mBAAmB,KAAG,IACP,CACnB,GACC,IACF,GACD,GACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC","sourcesContent":["import { useMemo } from 'react';\n\nimport { useSelectSessionModal } from '@src/data/context';\nimport { useInitializeSubsCourseDashboard } from '@src/data/hooks';\nimport SelectSessionModal from '../../containers/SelectSessionModal';\nimport { DashboardContent } from './DashboardContent';\nimport DashboardModalSlot from '../../slots/DashboardModalSlot';\nimport RecentlyViewedPanel from '../RecentlyViewedPanel';\n\nimport LoadingView from './LoadingView';\nimport DashboardLayout from './DashboardLayout';\n\nimport hooks from './hooks';\nimport './index.scss';\nimport { SubscriptionBanner } from '../SubscriptionBanner';\nimport { DashboardTitle } from './DashboardTitle';\n\nexport const Dashboard = () => {\n const { data, isPending } = useInitializeSubsCourseDashboard();\n const { pageTitle } = hooks.useDashboardMessages();\n const { selectSessionModal } = useSelectSessionModal();\n const showSelectSessionModal = selectSessionModal.cardId !== null;\n\n const hasCourses = useMemo(() => data?.subscriptionCourses?.length > 0, [data]);\n const hasCourseHistory = (data?.nonUpgradeableCourses?.length ?? 0) > 0;\n\n return (\n <div id=\"learnerdashboardroot\">\n <main>\n <div id=\"dashboard-container\" className=\"d-flex flex-column p-2 pt-0\">\n <h1 className=\"sr-only\">{pageTitle}</h1>\n {!isPending && (\n <>\n <DashboardModalSlot />\n {(hasCourses && showSelectSessionModal) && <SelectSessionModal />}\n </>\n )}\n <div id=\"dashboard-content\" data-testid=\"dashboard-content\">\n {isPending\n ? (<LoadingView />)\n : (\n <DashboardLayout>\n <SubscriptionBanner />\n <DashboardTitle />\n <DashboardContent hasCourseHistory={hasCourseHistory} />\n <RecentlyViewedPanel />\n </DashboardLayout>\n )}\n </div>\n </div>\n </main>\n </div>\n );\n};\n\nexport default Dashboard;\n"]}
|
|
@@ -3,6 +3,7 @@ import { useEffect, useState, useMemo } from 'react';
|
|
|
3
3
|
import { Alert, Icon, Button } from '@openedx/paragon';
|
|
4
4
|
import { CheckCircle, Info, OpenInNew } from '@openedx/paragon/icons';
|
|
5
5
|
import { useIntl } from '@openedx/frontend-base';
|
|
6
|
+
import moment from 'moment';
|
|
6
7
|
import { utilHooks } from '../../../hooks';
|
|
7
8
|
import messages from '../messages';
|
|
8
9
|
import { subscriptionRenewalURL } from '../../../data/constants/app';
|
|
@@ -13,12 +14,14 @@ import { subscriptionRenewalURL } from '../../../data/constants/app';
|
|
|
13
14
|
const subscriptionBannerData = {
|
|
14
15
|
isSubscribed: true,
|
|
15
16
|
subscriptionStatus: 'trial', // can be 'active', 'cancelled', 'expired'
|
|
16
|
-
subscriptionStartDate: '05
|
|
17
|
-
subscriptionEndDate: '
|
|
18
|
-
subscriptionRenewalDate: '
|
|
17
|
+
subscriptionStartDate: '2026-05-22',
|
|
18
|
+
subscriptionEndDate: '2026-07-22',
|
|
19
|
+
subscriptionRenewalDate: '2026-07-22',
|
|
19
20
|
subscriptionRenewalPrice: '$36',
|
|
20
21
|
};
|
|
22
|
+
// TODO: Also update as per new designs once we have the designs ready for the other subscription types than 'trial'.
|
|
21
23
|
export const SubscriptionBanner = () => {
|
|
24
|
+
var _a;
|
|
22
25
|
const { formatMessage } = useIntl();
|
|
23
26
|
const [showPageBanner, setShowPageBanner] = useState(true);
|
|
24
27
|
const [bannerBody, setBannerBody] = useState('');
|
|
@@ -26,6 +29,11 @@ export const SubscriptionBanner = () => {
|
|
|
26
29
|
const [bannerVariant, setBannerVariant] = useState(undefined);
|
|
27
30
|
const formatDate = utilHooks.useFormatDate();
|
|
28
31
|
useEffect(() => {
|
|
32
|
+
const trialEndDate = moment(subscriptionBannerData.subscriptionEndDate).startOf('day');
|
|
33
|
+
const today = moment().startOf('day');
|
|
34
|
+
const trialDaysLeft = trialEndDate.isValid()
|
|
35
|
+
? Math.max(0, trialEndDate.diff(today, 'days'))
|
|
36
|
+
: 0;
|
|
29
37
|
switch (subscriptionBannerData.subscriptionStatus) {
|
|
30
38
|
case 'active':
|
|
31
39
|
setBannerVariant('success');
|
|
@@ -38,11 +46,19 @@ export const SubscriptionBanner = () => {
|
|
|
38
46
|
break;
|
|
39
47
|
case 'trial':
|
|
40
48
|
setBannerVariant('success');
|
|
41
|
-
|
|
49
|
+
if (trialDaysLeft === 0) {
|
|
50
|
+
setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitleToday));
|
|
51
|
+
}
|
|
52
|
+
else if (trialDaysLeft === 1) {
|
|
53
|
+
setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitleTomorrow));
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitle, {
|
|
57
|
+
daysLeft: trialDaysLeft,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
42
60
|
setBannerBody(formatMessage(messages.activeTrialSubscriptionBody, {
|
|
43
|
-
|
|
44
|
-
subscriptionRenewalDate: formatDate(subscriptionBannerData.subscriptionRenewalDate),
|
|
45
|
-
subscriptionRenewalPrice: subscriptionBannerData.subscriptionRenewalPrice,
|
|
61
|
+
subscriptionEndDate: formatDate(subscriptionBannerData.subscriptionEndDate),
|
|
46
62
|
}));
|
|
47
63
|
break;
|
|
48
64
|
case 'cancelled':
|
|
@@ -67,6 +83,12 @@ export const SubscriptionBanner = () => {
|
|
|
67
83
|
return [];
|
|
68
84
|
}
|
|
69
85
|
}, [formatMessage]);
|
|
70
|
-
|
|
86
|
+
const subscriptionStatusIcons = {
|
|
87
|
+
trial: undefined,
|
|
88
|
+
cancelled: Info,
|
|
89
|
+
active: CheckCircle,
|
|
90
|
+
};
|
|
91
|
+
const bannerIcon = (_a = subscriptionStatusIcons[subscriptionBannerData.subscriptionStatus]) !== null && _a !== void 0 ? _a : undefined;
|
|
92
|
+
return (_jsx("div", { className: "mt-4.5 mb-4.5", children: _jsxs(Alert, { variant: bannerVariant, icon: bannerIcon, dismissible: true, closeLabel: "Dismiss", show: showPageBanner, onClose: () => setShowPageBanner(false), actions: getSubscriptionAction, children: [_jsx(Alert.Heading, { children: bannerTitle }), _jsx("p", { children: bannerBody })] }) }));
|
|
71
93
|
};
|
|
72
94
|
//# sourceMappingURL=SubscriptionBanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionBanner.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionBanner/components/SubscriptionBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,gIAAgI;AAChI,oFAAoF;AACpF,sGAAsG;AACtG,8JAA8J;AAC9J,MAAM,sBAAsB,GAAG;IAC7B,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,OAAO,EAAE,0CAA0C;IACvE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"SubscriptionBanner.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionBanner/components/SubscriptionBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAW,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,gIAAgI;AAChI,oFAAoF;AACpF,sGAAsG;AACtG,8JAA8J;AAC9J,MAAM,sBAAsB,GAAG;IAC7B,YAAY,EAAE,IAAI;IAClB,kBAAkB,EAAE,OAAO,EAAE,0CAA0C;IACvE,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,YAAY;IACjC,uBAAuB,EAAE,YAAY;IACrC,wBAAwB,EAAE,KAAK;CAChC,CAAC;AAEF,qHAAqH;AACrH,MAAM,CAAC,MAAM,kBAAkB,GAAO,GAAG,EAAE;;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAsB,SAAS,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,EAAE;YAC1C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC,CAAC;QAEN,QAAQ,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;YAClD,KAAK,QAAQ;gBACX,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAChE,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE;oBAC3D,qBAAqB,EAAE,UAAU,CAAC,sBAAsB,CAAC,qBAAqB,CAAC;oBAC/E,uBAAuB,EAAE,UAAU,CAAC,sBAAsB,CAAC,uBAAuB,CAAC;oBACnF,wBAAwB,EAAE,sBAAsB,CAAC,wBAAwB;iBAC1E,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,OAAO;gBACV,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;oBAC/B,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,4BAA4B,EAAE;wBAClE,QAAQ,EAAE,aAAa;qBACxB,CAAC,CAAC,CAAC;gBACN,CAAC;gBACD,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,2BAA2B,EAAE;oBAChE,mBAAmB,EAAE,UAAU,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;iBAC5E,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR,KAAK,WAAW;gBACd,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACnE,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EAAE;oBAC9D,mBAAmB,EAAE,UAAU,CAAC,sBAAsB,CAAC,qBAAqB,CAAC;iBAC9E,CAAC,CAAC,CAAC;gBACJ,MAAM;YACR;gBACE,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;QACV,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAEhC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE;QACzC,IAAI,sBAAsB,CAAC,kBAAkB,KAAK,WAAW,EAAE,CAAC;YAC9D,OAAO,CACL;gBACE,MAAC,MAAM,mBAEO,cAAc,EAC1B,SAAS,EAAC,cAAc,EACxB,OAAO,EAAC,SAAS,EACjB,IAAI,EAAE,sBAAsB,EAC5B,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,IAAI,EAAC,MAAM,aAEV,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAChD,KAAC,IAAI,IACH,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,kBAAkB,GAC5B,KAbE,oBAAoB,CAcjB;aACV,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,uBAAuB,GAA4C;QACvE,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,WAAW;KACpB,CAAC;IAEF,MAAM,UAAU,GAAG,MAAA,uBAAuB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,mCAAI,SAAS,CAAC;IAEnG,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC5B,MAAC,KAAK,IACJ,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,UAAU,EAChB,WAAW,QACX,UAAU,EAAC,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACvC,OAAO,EAAE,qBAAqB,aAE9B,KAAC,KAAK,CAAC,OAAO,cAAE,WAAW,GAAiB,EAC5C,sBACG,UAAU,GACT,IACE,GACJ,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { FC, useEffect, useState, useMemo } from 'react';\nimport { Alert, Icon, Button, Variant } from '@openedx/paragon';\nimport { CheckCircle, Info, OpenInNew } from '@openedx/paragon/icons';\nimport { useIntl } from '@openedx/frontend-base';\nimport moment from 'moment';\nimport { utilHooks } from '@src/hooks';\nimport messages from '../messages';\nimport { subscriptionRenewalURL } from '@src/data/constants/app';\n\n// TODO: We can replace the below hardcoded subscriptionBannerData with the actual data from the API once we have the API ready.\n// For now, we can use this hardcoded data to test the SubscriptionBanner component.\n// Refer to https://2u-internal.atlassian.net/browse/SUBS-442 for more details on the API integration.\n// And https://github.com/edx/frontend-app-subscription-learner-dashboard/pull/2#discussion_r3139442324 for the implementation details of the API integration.\nconst subscriptionBannerData = {\n isSubscribed: true,\n subscriptionStatus: 'trial', // can be 'active', 'cancelled', 'expired'\n subscriptionStartDate: '2026-05-22',\n subscriptionEndDate: '2026-07-22',\n subscriptionRenewalDate: '2026-07-22',\n subscriptionRenewalPrice: '$36',\n};\n\n// TODO: Also update as per new designs once we have the designs ready for the other subscription types than 'trial'.\nexport const SubscriptionBanner: FC = () => {\n const { formatMessage } = useIntl();\n const [showPageBanner, setShowPageBanner] = useState<boolean>(true);\n const [bannerBody, setBannerBody] = useState('');\n const [bannerTitle, setBannerTitle] = useState('');\n const [bannerVariant, setBannerVariant] = useState<Variant | undefined>(undefined);\n const formatDate = utilHooks.useFormatDate();\n\n useEffect(() => {\n const trialEndDate = moment(subscriptionBannerData.subscriptionEndDate).startOf('day');\n const today = moment().startOf('day');\n const trialDaysLeft = trialEndDate.isValid()\n ? Math.max(0, trialEndDate.diff(today, 'days'))\n : 0;\n\n switch (subscriptionBannerData.subscriptionStatus) {\n case 'active':\n setBannerVariant('success');\n setBannerTitle(formatMessage(messages.activeSubscriptionTitle));\n setBannerBody(formatMessage(messages.activeSubscriptionBody, {\n subscriptionStartDate: formatDate(subscriptionBannerData.subscriptionStartDate),\n subscriptionRenewalDate: formatDate(subscriptionBannerData.subscriptionRenewalDate),\n subscriptionRenewalPrice: subscriptionBannerData.subscriptionRenewalPrice,\n }));\n break;\n case 'trial':\n setBannerVariant('success');\n if (trialDaysLeft === 0) {\n setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitleToday));\n } else if (trialDaysLeft === 1) {\n setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitleTomorrow));\n } else {\n setBannerTitle(formatMessage(messages.activeTrialSubscriptionTitle, {\n daysLeft: trialDaysLeft,\n }));\n }\n setBannerBody(formatMessage(messages.activeTrialSubscriptionBody, {\n subscriptionEndDate: formatDate(subscriptionBannerData.subscriptionEndDate),\n }));\n break;\n case 'cancelled':\n setBannerVariant('warning');\n setBannerTitle(formatMessage(messages.cancelledSubscriptionTitle));\n setBannerBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionEndDate: formatDate(subscriptionBannerData.subscriptionStartDate),\n }));\n break;\n default:\n setShowPageBanner(false);\n break;\n }\n }, [formatDate, formatMessage]);\n\n const getSubscriptionAction = useMemo(() => {\n if (subscriptionBannerData.subscriptionStatus === 'cancelled') {\n return (\n [\n <Button\n key=\"renew-subscription\"\n data-testid=\"renew-button\"\n className=\"renew-button\"\n variant=\"primary\"\n href={subscriptionRenewalURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.renewSubscriptionButton)}\n <Icon\n src={OpenInNew}\n className=\"mr-2 in-new-icon\"\n />\n </Button>,\n ]\n );\n } else {\n return [];\n }\n }, [formatMessage]);\n\n const subscriptionStatusIcons: Record<string, typeof Info | undefined> = {\n trial: undefined,\n cancelled: Info,\n active: CheckCircle,\n };\n\n const bannerIcon = subscriptionStatusIcons[subscriptionBannerData.subscriptionStatus] ?? undefined;\n\n return (\n <div className=\"mt-4.5 mb-4.5\">\n <Alert\n variant={bannerVariant}\n icon={bannerIcon}\n dismissible\n closeLabel=\"Dismiss\"\n show={showPageBanner}\n onClose={() => setShowPageBanner(false)}\n actions={getSubscriptionAction}\n >\n <Alert.Heading>{bannerTitle}</Alert.Heading>\n <p>\n {bannerBody}\n </p>\n </Alert>\n </div>\n );\n};\n"]}
|
|
@@ -14,6 +14,16 @@ declare const messages: {
|
|
|
14
14
|
description: string;
|
|
15
15
|
defaultMessage: string;
|
|
16
16
|
};
|
|
17
|
+
activeTrialSubscriptionTitleToday: {
|
|
18
|
+
id: string;
|
|
19
|
+
description: string;
|
|
20
|
+
defaultMessage: string;
|
|
21
|
+
};
|
|
22
|
+
activeTrialSubscriptionTitleTomorrow: {
|
|
23
|
+
id: string;
|
|
24
|
+
description: string;
|
|
25
|
+
defaultMessage: string;
|
|
26
|
+
};
|
|
17
27
|
activeTrialSubscriptionBody: {
|
|
18
28
|
id: string;
|
|
19
29
|
description: string;
|
|
@@ -1,37 +1,48 @@
|
|
|
1
1
|
import { defineMessages } from '@openedx/frontend-base';
|
|
2
|
+
// TODO: Update the messages as per new designs once we have the designs ready for subscription types other than 'trial'.
|
|
2
3
|
const messages = defineMessages({
|
|
3
4
|
activeSubscriptionTitle: {
|
|
4
|
-
id: 'learner-dash.
|
|
5
|
+
id: 'learner-dash.subscriptionBanner.banners.activeSubscriptionTitle',
|
|
5
6
|
description: 'Message to learners with an active subscription',
|
|
6
7
|
defaultMessage: 'Your subscription is now active',
|
|
7
8
|
},
|
|
8
9
|
activeSubscriptionBody: {
|
|
9
|
-
id: 'learner-dash.
|
|
10
|
+
id: 'learner-dash.subscriptionBanner.banners.activeSubscriptionBody',
|
|
10
11
|
description: 'Message to learners with an active subscription',
|
|
11
12
|
defaultMessage: 'On {subscriptionStartDate} you subscribed to edX subscription product. Your subscription will renew on {subscriptionRenewalDate}.',
|
|
12
13
|
},
|
|
13
14
|
activeTrialSubscriptionTitle: {
|
|
14
|
-
id: 'learner-dash.
|
|
15
|
+
id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitle',
|
|
15
16
|
description: 'Message to learners with an active trial subscription',
|
|
16
|
-
defaultMessage: 'Your subscription
|
|
17
|
+
defaultMessage: 'Your edX subscription trial expires in {daysLeft} days.',
|
|
18
|
+
},
|
|
19
|
+
activeTrialSubscriptionTitleToday: {
|
|
20
|
+
id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitleToday',
|
|
21
|
+
description: 'Message to learners with a trial subscription expiring today',
|
|
22
|
+
defaultMessage: 'Your edX subscription trial expires today.',
|
|
23
|
+
},
|
|
24
|
+
activeTrialSubscriptionTitleTomorrow: {
|
|
25
|
+
id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitleTomorrow',
|
|
26
|
+
description: 'Message to learners with a trial subscription expiring tomorrow',
|
|
27
|
+
defaultMessage: 'Your edX subscription trial expires tomorrow.',
|
|
17
28
|
},
|
|
18
29
|
activeTrialSubscriptionBody: {
|
|
19
|
-
id: 'learner-dash.
|
|
30
|
+
id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionBody',
|
|
20
31
|
description: 'Message to learners with an active trial subscription',
|
|
21
|
-
defaultMessage: 'Your subscription will renew on {
|
|
32
|
+
defaultMessage: 'Your subscription will renew on {subscriptionEndDate}.',
|
|
22
33
|
},
|
|
23
34
|
cancelledSubscriptionTitle: {
|
|
24
|
-
id: 'learner-dash.
|
|
25
|
-
description: 'Message to learners with
|
|
35
|
+
id: 'learner-dash.subscriptionBanner.banners.cancelledSubscriptionTitle',
|
|
36
|
+
description: 'Message to learners with a cancelled subscription',
|
|
26
37
|
defaultMessage: 'Your subscription is cancelled',
|
|
27
38
|
},
|
|
28
39
|
cancelledSubscriptionBody: {
|
|
29
|
-
id: 'learner-dash.
|
|
30
|
-
description: 'Message to learners with
|
|
40
|
+
id: 'learner-dash.subscriptionBanner.banners.cancelledSubscriptionBody',
|
|
41
|
+
description: 'Message to learners with a cancelled subscription',
|
|
31
42
|
defaultMessage: 'Your subscription expired on {subscriptionEndDate}. Renew now to continue enjoying your courses without interruption.',
|
|
32
43
|
},
|
|
33
44
|
renewSubscriptionButton: {
|
|
34
|
-
id: 'learner-dash.
|
|
45
|
+
id: 'learner-dash.subscriptionBanner.banners.renewSubscriptionButton',
|
|
35
46
|
description: 'Renew Subscription',
|
|
36
47
|
defaultMessage: 'Renew Subscription',
|
|
37
48
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/SubscriptionBanner/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,uBAAuB,EAAE;QACvB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/SubscriptionBanner/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,yHAAyH;AACzH,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,uBAAuB,EAAE;QACvB,EAAE,EAAE,iEAAiE;QACrE,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE,iCAAiC;KAClD;IACD,sBAAsB,EAAE;QACtB,EAAE,EAAE,gEAAgE;QACpE,WAAW,EAAE,iDAAiD;QAC9D,cAAc,EAAE,mIAAmI;KACpJ;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,sEAAsE;QAC1E,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,yDAAyD;KAC1E;IACD,iCAAiC,EAAE;QACjC,EAAE,EAAE,2EAA2E;QAC/E,WAAW,EAAE,8DAA8D;QAC3E,cAAc,EAAE,4CAA4C;KAC7D;IACD,oCAAoC,EAAE;QACpC,EAAE,EAAE,8EAA8E;QAClF,WAAW,EAAE,iEAAiE;QAC9E,cAAc,EAAE,+CAA+C;KAChE;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,wDAAwD;KACzE;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,oEAAoE;QACxE,WAAW,EAAE,mDAAmD;QAChE,cAAc,EAAE,gCAAgC;KACjD;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,mEAAmE;QACvE,WAAW,EAAE,mDAAmD;QAChE,cAAc,EAAE,uHAAuH;KACxI;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,iEAAiE;QACrE,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,oBAAoB;KACrC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\n// TODO: Update the messages as per new designs once we have the designs ready for subscription types other than 'trial'.\nconst messages = defineMessages({\n activeSubscriptionTitle: {\n id: 'learner-dash.subscriptionBanner.banners.activeSubscriptionTitle',\n description: 'Message to learners with an active subscription',\n defaultMessage: 'Your subscription is now active',\n },\n activeSubscriptionBody: {\n id: 'learner-dash.subscriptionBanner.banners.activeSubscriptionBody',\n description: 'Message to learners with an active subscription',\n defaultMessage: 'On {subscriptionStartDate} you subscribed to edX subscription product. Your subscription will renew on {subscriptionRenewalDate}.',\n },\n activeTrialSubscriptionTitle: {\n id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitle',\n description: 'Message to learners with an active trial subscription',\n defaultMessage: 'Your edX subscription trial expires in {daysLeft} days.',\n },\n activeTrialSubscriptionTitleToday: {\n id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitleToday',\n description: 'Message to learners with a trial subscription expiring today',\n defaultMessage: 'Your edX subscription trial expires today.',\n },\n activeTrialSubscriptionTitleTomorrow: {\n id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionTitleTomorrow',\n description: 'Message to learners with a trial subscription expiring tomorrow',\n defaultMessage: 'Your edX subscription trial expires tomorrow.',\n },\n activeTrialSubscriptionBody: {\n id: 'learner-dash.subscriptionBanner.banners.activeTrialSubscriptionBody',\n description: 'Message to learners with an active trial subscription',\n defaultMessage: 'Your subscription will renew on {subscriptionEndDate}.',\n },\n cancelledSubscriptionTitle: {\n id: 'learner-dash.subscriptionBanner.banners.cancelledSubscriptionTitle',\n description: 'Message to learners with a cancelled subscription',\n defaultMessage: 'Your subscription is cancelled',\n },\n cancelledSubscriptionBody: {\n id: 'learner-dash.subscriptionBanner.banners.cancelledSubscriptionBody',\n description: 'Message to learners with a cancelled subscription',\n defaultMessage: 'Your subscription expired on {subscriptionEndDate}. Renew now to continue enjoying your courses without interruption.',\n },\n renewSubscriptionButton: {\n id: 'learner-dash.subscriptionBanner.banners.renewSubscriptionButton',\n description: 'Renew Subscription',\n defaultMessage: 'Renew Subscription',\n },\n});\n\nexport default messages;\n"]}
|