@edx/frontend-app-subscription-learner-dashboard 1.22.0 → 1.23.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/SubscriptionInformation/components/SubscriptionInformation.js +56 -9
- package/dist/containers/SubscriptionInformation/components/SubscriptionInformation.js.map +1 -1
- package/dist/containers/SubscriptionInformation/index.scss +24 -3
- package/dist/containers/SubscriptionInformation/messages.d.ts +30 -0
- package/dist/containers/SubscriptionInformation/messages.js +30 -0
- package/dist/containers/SubscriptionInformation/messages.js.map +1 -1
- package/dist/widgets/LearnerDashboardHeader/app.js +0 -14
- package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,32 +1,79 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
2
3
|
import { Alert, Button, Icon } from '@openedx/paragon';
|
|
3
4
|
import { useIntl } from '@openedx/frontend-base';
|
|
4
5
|
import { utilHooks } from '../../../hooks';
|
|
5
6
|
import messages from '../messages';
|
|
6
7
|
import { manageSubscriptionURL } from '../../../data/constants/app';
|
|
7
8
|
import '../index.scss';
|
|
8
|
-
import { Cached } from '@openedx/paragon/icons';
|
|
9
|
+
import { Cached, WarningFilled, Cancel } from '@openedx/paragon/icons';
|
|
10
|
+
import { subscriptionRenewalURL } from '../../../data/constants/app';
|
|
9
11
|
// TODO: We can replace the below hardcoded subscriptionInformationData with the actual data from the API once we have the API ready.
|
|
10
12
|
// For now, we can use this hardcoded data to test the SubscriptionInformation component.
|
|
11
13
|
const subscriptionInformationData = {
|
|
12
14
|
isSubscribed: true,
|
|
13
|
-
|
|
15
|
+
status: 'Active', // can be 'active', 'cancelled', 'renewalFailed'
|
|
14
16
|
subscriptionStartDate: '05/22/25',
|
|
15
17
|
subscriptionEndDate: '05/22/26',
|
|
16
18
|
subscriptionRenewalDate: '05/22/26',
|
|
17
19
|
subscriptionRenewalPrice: '$36',
|
|
18
20
|
numberOfCoursesEnrolled: 5,
|
|
19
21
|
totalSavings: '$120',
|
|
20
|
-
planName: 'Monthly
|
|
22
|
+
planName: 'Monthly plan',
|
|
21
23
|
};
|
|
22
24
|
export const SubscriptionInformation = () => {
|
|
25
|
+
var _a;
|
|
23
26
|
const { formatMessage } = useIntl();
|
|
24
27
|
const formatDate = utilHooks.useFormatDate();
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
const [infoBody, setInfoBody] = useState('');
|
|
29
|
+
const [infoTitle, setInfoTitle] = useState('');
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
switch (subscriptionInformationData.status.toLowerCase()) {
|
|
32
|
+
case 'active':
|
|
33
|
+
case 'trialactive':
|
|
34
|
+
setInfoTitle(formatMessage(messages.activeSubscriptionTitle, {
|
|
35
|
+
subscriptionStatus: subscriptionInformationData.status.charAt(0).toUpperCase() + subscriptionInformationData.status.slice(1),
|
|
36
|
+
planName: subscriptionInformationData.planName,
|
|
37
|
+
}));
|
|
38
|
+
setInfoBody(formatMessage(messages.renewalMessage, {
|
|
39
|
+
subscriptionRenewalDate: formatDate(subscriptionInformationData.subscriptionRenewalDate),
|
|
40
|
+
}));
|
|
41
|
+
break;
|
|
42
|
+
case 'cancelled':
|
|
43
|
+
setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {
|
|
44
|
+
subscriptionStatus: subscriptionInformationData.status.charAt(0).toUpperCase() + subscriptionInformationData.status.slice(1),
|
|
45
|
+
planName: subscriptionInformationData.planName,
|
|
46
|
+
}));
|
|
47
|
+
setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {
|
|
48
|
+
subscriptionEndDate: formatDate(subscriptionInformationData.subscriptionEndDate),
|
|
49
|
+
}));
|
|
50
|
+
break;
|
|
51
|
+
case 'renewalfailed': // also known as 'Payment Error' in figma designs
|
|
52
|
+
setInfoTitle(formatMessage(messages.renewalFailedTitle));
|
|
53
|
+
setInfoBody(formatMessage(messages.renewalFailedBody, {
|
|
54
|
+
subscriptionRenewalDate: formatDate(subscriptionInformationData.subscriptionRenewalDate),
|
|
55
|
+
}));
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}, [formatDate, formatMessage]);
|
|
59
|
+
const getSubscriptionAction = useMemo(() => {
|
|
60
|
+
if (subscriptionInformationData.status.toLowerCase() === 'cancelled') {
|
|
61
|
+
return ([
|
|
62
|
+
_jsx(Button, { "data-testid": "renew-button", className: "renew-button", variant: "tertiary", href: subscriptionRenewalURL, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.renewSubscriptionButton) }, "renew-subscription"),
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
else
|
|
66
|
+
return ([
|
|
67
|
+
_jsx(Button, { variant: "tertiary", "data-testid": "manage-button", href: manageSubscriptionURL, target: "_blank", rel: "noopener noreferrer", role: "link", children: formatMessage(messages.manageSubscriptionMessage) }, "manage-subscription"),
|
|
68
|
+
]);
|
|
69
|
+
}, [formatMessage]);
|
|
70
|
+
const subscriptionStatusIcons = {
|
|
71
|
+
active: Cached,
|
|
72
|
+
trialactive: Cached,
|
|
73
|
+
cancelled: Cancel,
|
|
74
|
+
renewalfailed: WarningFilled,
|
|
75
|
+
};
|
|
76
|
+
const bannerIcon = (_a = subscriptionStatusIcons[subscriptionInformationData.status.toLowerCase()]) !== null && _a !== void 0 ? _a : undefined;
|
|
77
|
+
return (_jsxs("div", { className: "container subscription-information py-5 px-4", children: [_jsx("h2", { className: "mb-4 my-subscription-heading", children: formatMessage(messages.mySubscriptionHeading) }), _jsxs(Alert, { dismissible: false, show: true, actions: getSubscriptionAction, className: "subscription-status-alert bg-white", children: [_jsxs(Alert.Heading, { as: "h6", children: [_jsx(Icon, { src: bannerIcon, className: `icon mr-1 ${bannerIcon === WarningFilled ? 'warning-icon text-warning-500' : ''}`, "data-testid": "subscription-status-icon" }), infoTitle] }), _jsx("p", { children: infoBody })] })] }));
|
|
31
78
|
};
|
|
32
79
|
//# sourceMappingURL=SubscriptionInformation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionInformation.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionInformation/components/SubscriptionInformation.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"SubscriptionInformation.js","sourceRoot":"","sources":["../../../../src/containers/SubscriptionInformation/components/SubscriptionInformation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport { Alert, Button, Icon } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\nimport { utilHooks } from '@src/hooks';\nimport messages from '../messages';\nimport { manageSubscriptionURL } from '@src/data/constants/app';\nimport '../index.scss';\nimport { Cached, WarningFilled, Cancel, Info } from '@openedx/paragon/icons';\nimport { subscriptionRenewalURL } from '@src/data/constants/app';\n\n// TODO: We can replace the below hardcoded subscriptionInformationData 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 SubscriptionInformation component.\nconst subscriptionInformationData = {\n isSubscribed: true,\n status: 'Active', // can be 'active', 'cancelled', 'renewalFailed'\n subscriptionStartDate: '05/22/25',\n subscriptionEndDate: '05/22/26',\n subscriptionRenewalDate: '05/22/26',\n subscriptionRenewalPrice: '$36',\n numberOfCoursesEnrolled: 5,\n totalSavings: '$120',\n planName: 'Monthly plan',\n};\n\nexport const SubscriptionInformation: FC = () => {\n const { formatMessage } = useIntl();\n const formatDate = utilHooks.useFormatDate();\n const [infoBody, setInfoBody] = useState('');\n const [infoTitle, setInfoTitle] = useState('');\n\n useEffect(() => {\n switch (subscriptionInformationData.status.toLowerCase()) {\n case 'active':\n case 'trialactive':\n setInfoTitle(formatMessage(messages.activeSubscriptionTitle, {\n subscriptionStatus: subscriptionInformationData.status.charAt(0).toUpperCase() + subscriptionInformationData.status.slice(1),\n planName: subscriptionInformationData.planName,\n }));\n setInfoBody(formatMessage(messages.renewalMessage, {\n subscriptionRenewalDate: formatDate(subscriptionInformationData.subscriptionRenewalDate),\n }));\n break;\n case 'cancelled':\n setInfoTitle(formatMessage(messages.cancelledSubscriptionTitle, {\n subscriptionStatus: subscriptionInformationData.status.charAt(0).toUpperCase() + subscriptionInformationData.status.slice(1),\n planName: subscriptionInformationData.planName,\n }));\n setInfoBody(formatMessage(messages.cancelledSubscriptionBody, {\n subscriptionEndDate: formatDate(subscriptionInformationData.subscriptionEndDate),\n }));\n break;\n case 'renewalfailed': // also known as 'Payment Error' in figma designs\n setInfoTitle(formatMessage(messages.renewalFailedTitle));\n setInfoBody(formatMessage(messages.renewalFailedBody, {\n subscriptionRenewalDate: formatDate(subscriptionInformationData.subscriptionRenewalDate),\n }));\n break;\n }\n }, [formatDate, formatMessage]);\n\n const getSubscriptionAction = useMemo(() => {\n if (subscriptionInformationData.status.toLowerCase() === 'cancelled') {\n return (\n [\n <Button\n key=\"renew-subscription\"\n data-testid=\"renew-button\"\n className=\"renew-button\"\n variant=\"tertiary\"\n href={subscriptionRenewalURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.renewSubscriptionButton)}\n </Button>,\n ]\n );\n } else\n return (\n [\n <Button\n key=\"manage-subscription\"\n variant=\"tertiary\"\n data-testid=\"manage-button\"\n href={manageSubscriptionURL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n role=\"link\"\n >\n {formatMessage(messages.manageSubscriptionMessage)}\n </Button>,\n ]\n );\n }, [formatMessage]);\n\n const subscriptionStatusIcons: Record<string, typeof Info | undefined> = {\n active: Cached,\n trialactive: Cached,\n cancelled: Cancel,\n renewalfailed: WarningFilled,\n };\n\n const bannerIcon = subscriptionStatusIcons[subscriptionInformationData.status.toLowerCase()] ?? undefined;\n\n return (\n <div className=\"container subscription-information py-5 px-4\">\n <h2 className=\"mb-4 my-subscription-heading\">{formatMessage(messages.mySubscriptionHeading)}</h2>\n <Alert\n dismissible={false}\n show={true}\n actions={getSubscriptionAction}\n className=\"subscription-status-alert bg-white\"\n >\n <Alert.Heading as=\"h6\">\n <Icon src={bannerIcon} className={`icon mr-1 ${bannerIcon === WarningFilled ? 'warning-icon text-warning-500' : ''}`} data-testid=\"subscription-status-icon\" />\n {infoTitle}\n </Alert.Heading>\n <p>\n {infoBody}\n </p>\n </Alert>\n </div>\n );\n};\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
$text-color: #002B2B !default;
|
|
2
|
+
$link-color: #00262B !default;
|
|
2
3
|
|
|
3
|
-
.subscription-information
|
|
4
|
+
.subscription-information{
|
|
4
5
|
background: var(--pgn-color-light-200);
|
|
5
6
|
|
|
6
|
-
.my-subscription-heading
|
|
7
|
+
.my-subscription-heading{
|
|
7
8
|
color: $text-color;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
.subscription-status-alert
|
|
11
|
+
.subscription-status-alert{
|
|
11
12
|
h6 {
|
|
12
13
|
margin-bottom: 0;
|
|
13
14
|
}
|
|
@@ -16,4 +17,24 @@ $text-color: #002B2B !default;
|
|
|
16
17
|
color: var(--pgn-color-black);
|
|
17
18
|
}
|
|
18
19
|
}
|
|
20
|
+
|
|
21
|
+
.alert-heading{
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
color: $text-color;
|
|
25
|
+
|
|
26
|
+
.warning-icon {
|
|
27
|
+
color: var(--pgn-color-warning-500);
|
|
28
|
+
|
|
29
|
+
svg {
|
|
30
|
+
background-color: black;
|
|
31
|
+
clip-path: polygon(50% 8%, 4% 88%, 92% 88%);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.renew-button, .manage-button {
|
|
37
|
+
text-decoration: underline;
|
|
38
|
+
color: $link-color;
|
|
39
|
+
}
|
|
19
40
|
}
|
|
@@ -29,5 +29,35 @@ declare const messages: {
|
|
|
29
29
|
description: string;
|
|
30
30
|
defaultMessage: string;
|
|
31
31
|
};
|
|
32
|
+
activeSubscriptionTitle: {
|
|
33
|
+
id: string;
|
|
34
|
+
description: string;
|
|
35
|
+
defaultMessage: string;
|
|
36
|
+
};
|
|
37
|
+
renewalFailedTitle: {
|
|
38
|
+
id: string;
|
|
39
|
+
description: string;
|
|
40
|
+
defaultMessage: string;
|
|
41
|
+
};
|
|
42
|
+
renewalFailedBody: {
|
|
43
|
+
id: string;
|
|
44
|
+
description: string;
|
|
45
|
+
defaultMessage: string;
|
|
46
|
+
};
|
|
47
|
+
cancelledSubscriptionTitle: {
|
|
48
|
+
id: string;
|
|
49
|
+
description: string;
|
|
50
|
+
defaultMessage: string;
|
|
51
|
+
};
|
|
52
|
+
cancelledSubscriptionBody: {
|
|
53
|
+
id: string;
|
|
54
|
+
description: string;
|
|
55
|
+
defaultMessage: string;
|
|
56
|
+
};
|
|
57
|
+
renewSubscriptionButton: {
|
|
58
|
+
id: string;
|
|
59
|
+
description: string;
|
|
60
|
+
defaultMessage: string;
|
|
61
|
+
};
|
|
32
62
|
};
|
|
33
63
|
export default messages;
|
|
@@ -30,6 +30,36 @@ const messages = defineMessages({
|
|
|
30
30
|
description: 'My Subscription Heading',
|
|
31
31
|
defaultMessage: 'My subscription',
|
|
32
32
|
},
|
|
33
|
+
activeSubscriptionTitle: {
|
|
34
|
+
id: 'learner-dash.subscriptionInformation.information.activeSubscriptionTitle',
|
|
35
|
+
description: 'Message title to learners with an active subscription',
|
|
36
|
+
defaultMessage: '{subscriptionStatus}, {planName}',
|
|
37
|
+
},
|
|
38
|
+
renewalFailedTitle: {
|
|
39
|
+
id: 'learner-dash.subscriptionInformation.information.renewalFailedTitle',
|
|
40
|
+
description: 'Message title to learners when renewal fails',
|
|
41
|
+
defaultMessage: 'Subscription may expire',
|
|
42
|
+
},
|
|
43
|
+
renewalFailedBody: {
|
|
44
|
+
id: 'learner-dash.subscriptionInformation.information.renewalFailedBody',
|
|
45
|
+
description: 'Message body to learners when renewal fails',
|
|
46
|
+
defaultMessage: 'Update your payment method by {subscriptionRenewalDate} to keep your subscription active.',
|
|
47
|
+
},
|
|
48
|
+
cancelledSubscriptionTitle: {
|
|
49
|
+
id: 'learner-dash.subscriptionInformation.information.cancelledSubscriptionTitle',
|
|
50
|
+
description: 'Message to learners when subscription is cancelled',
|
|
51
|
+
defaultMessage: '{subscriptionStatus}, {planName}',
|
|
52
|
+
},
|
|
53
|
+
cancelledSubscriptionBody: {
|
|
54
|
+
id: 'learner-dash.subscriptionInformation.information.cancelledSubscriptionBody',
|
|
55
|
+
description: 'Message to learners when subscription is cancelled',
|
|
56
|
+
defaultMessage: 'You have no upcoming payments. You canceled your subscription on {subscriptionEndDate}.',
|
|
57
|
+
},
|
|
58
|
+
renewSubscriptionButton: {
|
|
59
|
+
id: 'learner-dash.subscriptionInformation.information.renewSubscriptionButton',
|
|
60
|
+
description: 'Renew Subscription',
|
|
61
|
+
defaultMessage: 'Renew Subscription',
|
|
62
|
+
},
|
|
33
63
|
});
|
|
34
64
|
export default messages;
|
|
35
65
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/SubscriptionInformation/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,aAAa,EAAE;QACb,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,gBAAgB;QAC7B,cAAc,EAAE,qBAAqB;KACtC;IACD,gBAAgB,EAAE;QAChB,EAAE,EAAE,oEAAoE;QACxE,WAAW,EAAE,6CAA6C;QAC1D,cAAc,EAAE,8DAA8D;KAC/E;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wEAAwE;QAC5E,WAAW,EAAE,6CAA6C;QAC1D,cAAc,EAAE,iGAAiG;KAClH;IACD,cAAc,EAAE;QACd,EAAE,EAAE,uEAAuE;QAC3E,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,iDAAiD;KAClE;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,qBAAqB;QAClC,cAAc,EAAE,wBAAwB;KACzC;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,wEAAwE;QAC5E,WAAW,EAAE,yBAAyB;QACtC,cAAc,EAAE,iBAAiB;KAClC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n statusMessage: {\n id: 'learner-dash.subscriptionInformation.information.subscriptionStatus',\n description: 'Status Message',\n defaultMessage: 'Subscription Status',\n },\n cancelledMessage: {\n id: 'learner-dash.subscriptionInformation.information.courseInformation',\n description: 'Information of courses enrolled and savings',\n defaultMessage: `You have saved {totalSavings} with your subscription so far!`,\n },\n coursesEnrollmentMessage: {\n id: 'learner-dash.subscriptionInformation.information.enrollmentInformation',\n description: 'Information of courses enrolled and savings',\n defaultMessage: `As a subscriber, you've enrolled in {numberOfCoursesEnrolled} courses and saved {totalSavings}.`,\n },\n renewalMessage: {\n id: 'learner-dash.subscriptionInformation.information.subscriptionSchedule',\n description: 'Subscription Schedule',\n defaultMessage: 'Your next payment is {subscriptionRenewalDate}.',\n },\n manageSubscriptionMessage: {\n id: 'learner-dash.subscriptionInformation.information.manageSubscription',\n description: 'Manage Subscription',\n defaultMessage: 'Manage my subscription',\n },\n mySubscriptionHeading: {\n id: 'learner-dash.subscriptionInformation.information.mySubscriptionHeading',\n description: 'My Subscription Heading',\n defaultMessage: 'My subscription',\n },\n});\n\nexport default messages;\n"]}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/containers/SubscriptionInformation/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,aAAa,EAAE;QACb,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,gBAAgB;QAC7B,cAAc,EAAE,qBAAqB;KACtC;IACD,gBAAgB,EAAE;QAChB,EAAE,EAAE,oEAAoE;QACxE,WAAW,EAAE,6CAA6C;QAC1D,cAAc,EAAE,8DAA8D;KAC/E;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wEAAwE;QAC5E,WAAW,EAAE,6CAA6C;QAC1D,cAAc,EAAE,iGAAiG;KAClH;IACD,cAAc,EAAE;QACd,EAAE,EAAE,uEAAuE;QAC3E,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,iDAAiD;KAClE;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,qBAAqB;QAClC,cAAc,EAAE,wBAAwB;KACzC;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,wEAAwE;QAC5E,WAAW,EAAE,yBAAyB;QACtC,cAAc,EAAE,iBAAiB;KAClC;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,0EAA0E;QAC9E,WAAW,EAAE,uDAAuD;QACpE,cAAc,EAAE,kCAAkC;KACnD;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,qEAAqE;QACzE,WAAW,EAAE,8CAA8C;QAC3D,cAAc,EAAE,yBAAyB;KAC1C;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,oEAAoE;QACxE,WAAW,EAAE,6CAA6C;QAC1D,cAAc,EAAE,2FAA2F;KAC5G;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,6EAA6E;QACjF,WAAW,EAAE,oDAAoD;QACjE,cAAc,EAAE,kCAAkC;KACnD;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,4EAA4E;QAChF,WAAW,EAAE,oDAAoD;QACjE,cAAc,EAAE,yFAAyF;KAC1G;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,0EAA0E;QAC9E,WAAW,EAAE,oBAAoB;QACjC,cAAc,EAAE,oBAAoB;KACrC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n statusMessage: {\n id: 'learner-dash.subscriptionInformation.information.subscriptionStatus',\n description: 'Status Message',\n defaultMessage: 'Subscription Status',\n },\n cancelledMessage: {\n id: 'learner-dash.subscriptionInformation.information.courseInformation',\n description: 'Information of courses enrolled and savings',\n defaultMessage: `You have saved {totalSavings} with your subscription so far!`,\n },\n coursesEnrollmentMessage: {\n id: 'learner-dash.subscriptionInformation.information.enrollmentInformation',\n description: 'Information of courses enrolled and savings',\n defaultMessage: `As a subscriber, you've enrolled in {numberOfCoursesEnrolled} courses and saved {totalSavings}.`,\n },\n renewalMessage: {\n id: 'learner-dash.subscriptionInformation.information.subscriptionSchedule',\n description: 'Subscription Schedule',\n defaultMessage: 'Your next payment is {subscriptionRenewalDate}.',\n },\n manageSubscriptionMessage: {\n id: 'learner-dash.subscriptionInformation.information.manageSubscription',\n description: 'Manage Subscription',\n defaultMessage: 'Manage my subscription',\n },\n mySubscriptionHeading: {\n id: 'learner-dash.subscriptionInformation.information.mySubscriptionHeading',\n description: 'My Subscription Heading',\n defaultMessage: 'My subscription',\n },\n activeSubscriptionTitle: {\n id: 'learner-dash.subscriptionInformation.information.activeSubscriptionTitle',\n description: 'Message title to learners with an active subscription',\n defaultMessage: '{subscriptionStatus}, {planName}',\n },\n renewalFailedTitle: {\n id: 'learner-dash.subscriptionInformation.information.renewalFailedTitle',\n description: 'Message title to learners when renewal fails',\n defaultMessage: 'Subscription may expire',\n },\n renewalFailedBody: {\n id: 'learner-dash.subscriptionInformation.information.renewalFailedBody',\n description: 'Message body to learners when renewal fails',\n defaultMessage: 'Update your payment method by {subscriptionRenewalDate} to keep your subscription active.',\n },\n cancelledSubscriptionTitle: {\n id: 'learner-dash.subscriptionInformation.information.cancelledSubscriptionTitle',\n description: 'Message to learners when subscription is cancelled',\n defaultMessage: '{subscriptionStatus}, {planName}',\n },\n cancelledSubscriptionBody: {\n id: 'learner-dash.subscriptionInformation.information.cancelledSubscriptionBody',\n description: 'Message to learners when subscription is cancelled',\n defaultMessage: 'You have no upcoming payments. You canceled your subscription on {subscriptionEndDate}.',\n },\n renewSubscriptionButton: {\n id: 'learner-dash.subscriptionInformation.information.renewSubscriptionButton',\n description: 'Renew Subscription',\n defaultMessage: 'Renew Subscription',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -2,8 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { LinkMenuItem, WidgetOperationTypes, getAppConfig } from '@openedx/frontend-base';
|
|
3
3
|
import { appId, subscriptionDashboardUrlPath, subscriptionSignoutRole } from '../../constants';
|
|
4
4
|
import ConfirmEmailBanner from './ConfirmEmailBanner';
|
|
5
|
-
import CoursesLink from './CoursesLink';
|
|
6
|
-
import DiscoverLinkMenuItem from './DiscoverLinkMenuItem';
|
|
7
5
|
import ProgramsLinkMenuItem from './ProgramsLinkMenuItem';
|
|
8
6
|
import SupportLinkMenuItem from './SupportLinkMenuItem';
|
|
9
7
|
import OrderHistoryLinkMenuItem from './OrderHistoryLinkMenuItem';
|
|
@@ -17,12 +15,6 @@ const app = {
|
|
|
17
15
|
op: WidgetOperationTypes.PREPEND,
|
|
18
16
|
component: ConfirmEmailBanner,
|
|
19
17
|
},
|
|
20
|
-
{
|
|
21
|
-
slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',
|
|
22
|
-
id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkCourses.v1',
|
|
23
|
-
op: WidgetOperationTypes.APPEND,
|
|
24
|
-
element: (_jsx(LinkMenuItem, { label: _jsx(CoursesLink, {}), url: "/", variant: "navLink" }))
|
|
25
|
-
},
|
|
26
18
|
{
|
|
27
19
|
slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',
|
|
28
20
|
id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkPrograms.v1',
|
|
@@ -32,12 +24,6 @@ const app = {
|
|
|
32
24
|
callback: () => getAppConfig(appId).ENABLE_PROGRAMS === true,
|
|
33
25
|
}
|
|
34
26
|
},
|
|
35
|
-
{
|
|
36
|
-
slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',
|
|
37
|
-
id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkDiscover.v1',
|
|
38
|
-
op: WidgetOperationTypes.APPEND,
|
|
39
|
-
element: (_jsx(DiscoverLinkMenuItem, { variant: "navLink" })),
|
|
40
|
-
},
|
|
41
27
|
{
|
|
42
28
|
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
43
29
|
id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkSupport.v1',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAO,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE/F,OAAO,EAAE,KAAK,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/F,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardHeader/app.tsx"],"names":[],"mappings":"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","sourcesContent":["import { App, LinkMenuItem, WidgetOperationTypes, getAppConfig } from '@openedx/frontend-base';\n\nimport { appId, subscriptionDashboardUrlPath, subscriptionSignoutRole } from '../../constants';\n\nimport ConfirmEmailBanner from './ConfirmEmailBanner';\nimport ProgramsLinkMenuItem from './ProgramsLinkMenuItem';\nimport SupportLinkMenuItem from './SupportLinkMenuItem';\nimport OrderHistoryLinkMenuItem from './OrderHistoryLinkMenuItem';\nimport messages from '@src/messages';\n\nconst app: App = {\n appId: 'org.openedx.frontend.app.learnerDashboard.header',\n slots: [\n {\n slotId: 'org.openedx.frontend.slot.header.main.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerConfirmEmail.v1',\n op: WidgetOperationTypes.PREPEND,\n component: ConfirmEmailBanner,\n },\n {\n slotId: 'org.openedx.frontend.slot.header.primaryLinks.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkPrograms.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <ProgramsLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ENABLE_PROGRAMS === true,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkSupport.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <SupportLinkMenuItem\n variant=\"dropdownItem\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).SUPPORT_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkOrderHistory.v1',\n op: WidgetOperationTypes.INSERT_BEFORE,\n relatedId: 'org.openedx.frontend.widget.header.desktopAuthenticatedMenuLogout.v1',\n element: (\n <OrderHistoryLinkMenuItem\n variant=\"navLink\"\n />\n ),\n condition: {\n callback: () => getAppConfig(appId).ORDER_HISTORY_URL ? true : false,\n }\n },\n {\n slotId: 'org.openedx.frontend.slot.header.desktopRight.v1',\n id: 'org.edx.frontend.widget.learnerHome.headerLinkDashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"navLink\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.header.user.menu.manageSubscription.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.manageSubscription'].defaultMessage}\n url=\"/subscription-manage\"\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.headerAuthenticatedMenuSignOut.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.signOut'].defaultMessage}\n role={subscriptionSignoutRole}\n variant=\"dropdownItem\"\n />\n )\n },\n {\n slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n id: 'org.edx.frontend.widget.learnerDashboard.dashboard.v1',\n op: WidgetOperationTypes.PREPEND,\n element: (\n <LinkMenuItem\n label={messages['header.user.menu.dashboard'].defaultMessage}\n url={subscriptionDashboardUrlPath}\n variant=\"dropdownItem\"\n />\n )\n },\n // {\n // // TO-DO : Resume your last course will be implemented seprately in a different ticket.(Ticket: SUBS-818)\n // // https://2u-internal.atlassian.net/browse/SUBS-818\n // slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',\n // id: 'org.openedx.frontend.widget.learnerDashboard.headerAuthenticatedMenuLastCourse.v1',\n // op: WidgetOperationTypes.PREPEND,\n // element: (\n // <LinkMenuItem\n // label={messages['header.user.menu.lastCourse'].defaultMessage}\n // url=\"/last-course\"\n // variant=\"dropdownItem\"\n // />\n // )\n // },\n ]\n};\n\nexport default app;\n"]}
|