@edx/frontend-app-subscription-learner-dashboard 1.14.0 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +6 -0
- package/dist/constants.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/dist/messages.d.ts +3 -3
- package/dist/messages.js +10 -10
- package/dist/messages.js.map +1 -1
- package/dist/routes.js +4 -3
- package/dist/routes.js.map +1 -1
- package/dist/widgets/LearnerDashboardHeader/app.js +28 -20
- package/dist/widgets/LearnerDashboardHeader/app.js.map +1 -1
- package/package.json +1 -1
package/dist/app.js
CHANGED
|
@@ -12,7 +12,7 @@ const app = {
|
|
|
12
12
|
ENABLE_PROGRAMS: false,
|
|
13
13
|
ECOMMERCE_BASE_URL: '',
|
|
14
14
|
ORDER_HISTORY_URL: '',
|
|
15
|
-
SUPPORT_URL: '',
|
|
15
|
+
SUPPORT_URL: 'https://help.edx.org/edxlearner/s/?language=en_US',
|
|
16
16
|
SHOW_UNENROLL_SURVEY: false,
|
|
17
17
|
ALGOLIA_APP_ID: 'IGSYV1Z1XI',
|
|
18
18
|
ALGOLIA_SEARCH_API_KEY: '9b43cfe4f35ae59780d99ea70e3e239d',
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,MAAM,GAAG,GAAQ;IACf,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;IACL,MAAM,EAAE;QACN,iBAAiB,EAAE,mCAAmC;QACtD,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,EAAE;QACtB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,MAAM,GAAG,GAAQ;IACf,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;IACL,MAAM,EAAE;QACN,iBAAiB,EAAE,mCAAmC;QACtD,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,EAAE;QACtB,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,mDAAmD;QAChE,oBAAoB,EAAE,KAAK;QAC3B,cAAc,EAAE,YAAY;QAC5B,sBAAsB,EAAE,kCAAkC;QAC1D,0BAA0B,EAAE,SAAS;KACtC;CACF,CAAC;AAEF,eAAe,GAAG,CAAC","sourcesContent":["import { App } from '@openedx/frontend-base';\nimport { appId } from './constants';\nimport routes from './routes';\nimport providers from './providers';\nimport slots from './slots';\n\nconst app: App = {\n appId,\n routes,\n providers,\n slots,\n config: {\n LEARNING_BASE_URL: 'http://apps.local.openedx.io:2000',\n ENABLE_PROGRAMS: false,\n ECOMMERCE_BASE_URL: '',\n ORDER_HISTORY_URL: '',\n SUPPORT_URL: 'https://help.edx.org/edxlearner/s/?language=en_US',\n SHOW_UNENROLL_SURVEY: false,\n ALGOLIA_APP_ID: 'IGSYV1Z1XI',\n ALGOLIA_SEARCH_API_KEY: '9b43cfe4f35ae59780d99ea70e3e239d',\n ALGOLIA_PRODUCT_INDEX_NAME: 'product',\n },\n};\n\nexport default app;\n"]}
|
package/dist/constants.d.ts
CHANGED
|
@@ -7,3 +7,9 @@ export declare const FACET_PRODUCT_TYPE = "product";
|
|
|
7
7
|
export declare const FACET_SUBJECTS = "subjects";
|
|
8
8
|
export declare const PRODUCT_TYPE_PROGRAM: ProductType;
|
|
9
9
|
export declare const PRODUCT_TYPE_COURSE: ProductType;
|
|
10
|
+
export declare const subscriptionDashboardRole = "org.edx.frontend.subs.role.dashboard";
|
|
11
|
+
export declare const subscriptionSignoutRole = "org.openedx.frontend.role.signOut";
|
|
12
|
+
export declare const subscriptionAccountRole = "org.openedx.frontend.role.account";
|
|
13
|
+
export declare const subscriptionProfileRole = "org.openedx.frontend.role.profile";
|
|
14
|
+
export declare const subscriptionProgramProgressRole = "org.edx.frontend.subs.role.programProgress";
|
|
15
|
+
export declare const subscriptionDashboardUrlPath = "/subscription-learner-dashboard";
|
package/dist/constants.js
CHANGED
|
@@ -6,4 +6,10 @@ export const FACET_PRODUCT_TYPE = 'product';
|
|
|
6
6
|
export const FACET_SUBJECTS = 'subjects';
|
|
7
7
|
export const PRODUCT_TYPE_PROGRAM = 'program';
|
|
8
8
|
export const PRODUCT_TYPE_COURSE = 'course';
|
|
9
|
+
export const subscriptionDashboardRole = 'org.edx.frontend.subs.role.dashboard';
|
|
10
|
+
export const subscriptionSignoutRole = 'org.openedx.frontend.role.signOut';
|
|
11
|
+
export const subscriptionAccountRole = 'org.openedx.frontend.role.account';
|
|
12
|
+
export const subscriptionProfileRole = 'org.openedx.frontend.role.profile';
|
|
13
|
+
export const subscriptionProgramProgressRole = 'org.edx.frontend.subs.role.programProgress';
|
|
14
|
+
export const subscriptionDashboardUrlPath = '/subscription-learner-dashboard';
|
|
9
15
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,2CAA2C,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC,yFAAyF;AACzF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAgB,SAAS,CAAC;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAgB,QAAQ,CAAC","sourcesContent":["import { ProductType } from './types/types';\n\nexport const appId = 'org.openedx.frontend.app.learnerDashboard';\n\nexport const HITS_PER_PAGE_PROGRAMS = 4;\nexport const HITS_PER_PAGE_COURSES = 4;\n\n/** Facet attribute names in ALGOLIA_PRODUCT_INDEX_NAME — update if your index differs */\nexport const FACET_PRODUCT_TYPE = 'product';\nexport const FACET_SUBJECTS = 'subjects';\n\nexport const PRODUCT_TYPE_PROGRAM: ProductType = 'program';\nexport const PRODUCT_TYPE_COURSE: ProductType = 'course';\n"]}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAG,2CAA2C,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC,yFAAyF;AACzF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAgB,SAAS,CAAC;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAgB,QAAQ,CAAC;AAEzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,sCAAsC,CAAC;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAE3E,MAAM,CAAC,MAAM,+BAA+B,GAAG,4CAA4C,CAAC;AAE5F,MAAM,CAAC,MAAM,4BAA4B,GAAG,iCAAiC,CAAC","sourcesContent":["import { ProductType } from './types/types';\n\nexport const appId = 'org.openedx.frontend.app.learnerDashboard';\n\nexport const HITS_PER_PAGE_PROGRAMS = 4;\nexport const HITS_PER_PAGE_COURSES = 4;\n\n/** Facet attribute names in ALGOLIA_PRODUCT_INDEX_NAME — update if your index differs */\nexport const FACET_PRODUCT_TYPE = 'product';\nexport const FACET_SUBJECTS = 'subjects';\n\nexport const PRODUCT_TYPE_PROGRAM: ProductType = 'program';\nexport const PRODUCT_TYPE_COURSE: ProductType = 'course';\n\nexport const subscriptionDashboardRole = 'org.edx.frontend.subs.role.dashboard';\n\nexport const subscriptionSignoutRole = 'org.openedx.frontend.role.signOut';\n\nexport const subscriptionAccountRole = 'org.openedx.frontend.role.account';\n\nexport const subscriptionProfileRole = 'org.openedx.frontend.role.profile';\n\nexport const subscriptionProgramProgressRole = 'org.edx.frontend.subs.role.programProgress';\n\nexport const subscriptionDashboardUrlPath = '/subscription-learner-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":"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","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"]}
|
package/dist/messages.d.ts
CHANGED
|
@@ -20,17 +20,17 @@ declare const messages: {
|
|
|
20
20
|
defaultMessage: string;
|
|
21
21
|
description: string;
|
|
22
22
|
};
|
|
23
|
-
'header.user.menu.
|
|
23
|
+
'header.user.menu.help': {
|
|
24
24
|
id: string;
|
|
25
25
|
defaultMessage: string;
|
|
26
26
|
description: string;
|
|
27
27
|
};
|
|
28
|
-
'header.user.menu.
|
|
28
|
+
'header.user.menu.manageSubscription': {
|
|
29
29
|
id: string;
|
|
30
30
|
defaultMessage: string;
|
|
31
31
|
description: string;
|
|
32
32
|
};
|
|
33
|
-
'header.user.menu.
|
|
33
|
+
'header.user.menu.signOut': {
|
|
34
34
|
id: string;
|
|
35
35
|
defaultMessage: string;
|
|
36
36
|
description: string;
|
package/dist/messages.js
CHANGED
|
@@ -20,21 +20,21 @@ const messages = defineMessages({
|
|
|
20
20
|
defaultMessage: 'Dashboard',
|
|
21
21
|
description: 'Link to the Dashboard',
|
|
22
22
|
},
|
|
23
|
-
'header.user.menu.myCourses': {
|
|
24
|
-
id: 'header.user.menu.myCourses',
|
|
25
|
-
defaultMessage: 'My courses',
|
|
26
|
-
description: 'Link to the My Courses',
|
|
27
|
-
},
|
|
28
|
-
'header.user.menu.orderHistory': {
|
|
29
|
-
id: 'header.user.menu.orderHistory',
|
|
30
|
-
defaultMessage: 'Order History',
|
|
31
|
-
description: 'Link to the Order History',
|
|
32
|
-
},
|
|
33
23
|
'header.user.menu.help': {
|
|
34
24
|
id: 'header.user.menu.help',
|
|
35
25
|
defaultMessage: 'Help',
|
|
36
26
|
description: 'Link to the Help',
|
|
37
27
|
},
|
|
28
|
+
'header.user.menu.manageSubscription': {
|
|
29
|
+
id: 'header.user.menu.manageSubscription',
|
|
30
|
+
defaultMessage: 'Manage my subscription',
|
|
31
|
+
description: 'Link to manage subscription'
|
|
32
|
+
},
|
|
33
|
+
'header.user.menu.signOut': {
|
|
34
|
+
id: 'header.user.menu.signOut',
|
|
35
|
+
defaultMessage: 'Sign out',
|
|
36
|
+
description: 'Link to sign out',
|
|
37
|
+
},
|
|
38
38
|
});
|
|
39
39
|
export default messages;
|
|
40
40
|
//# sourceMappingURL=messages.js.map
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,qBAAqB,EAAE;QACrB,EAAE,EAAE,qBAAqB;QACzB,WAAW,EAAE,iCAAiC;QAC9C,cAAc,EAAE,YAAY;KAC7B;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,iBAAiB;QACrB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,wBAAwB;KACzC;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,4BAA4B;KAC1C;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,uBAAuB;KACrC;IACD,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,qBAAqB,EAAE;QACrB,EAAE,EAAE,qBAAqB;QACzB,WAAW,EAAE,iCAAiC;QAC9C,cAAc,EAAE,YAAY;KAC7B;IACD,iBAAiB,EAAE;QACjB,EAAE,EAAE,iBAAiB;QACrB,WAAW,EAAE,oCAAoC;QACjD,cAAc,EAAE,wBAAwB;KACzC;IACD,6BAA6B,EAAE;QAC7B,EAAE,EAAE,6BAA6B;QACjC,cAAc,EAAE,yBAAyB;QACzC,WAAW,EAAE,4BAA4B;KAC1C;IACD,4BAA4B,EAAE;QAC5B,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,uBAAuB;KACrC;IACD,uBAAuB,EAAE;QACvB,EAAE,EAAE,uBAAuB;QAC3B,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,kBAAkB;KAChC;IACD,qCAAqC,EAAE;QACrC,EAAE,EAAE,qCAAqC;QACzC,cAAc,EAAE,wBAAwB;QACxC,WAAW,EAAE,6BAA6B;KAC3C;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,kBAAkB;KAChC;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '@openedx/frontend-base';\n\nconst messages = defineMessages({\n 'subs-dash.loadingSR': {\n id: 'subs-dash.loadingSR',\n description: 'Page loading screen-reader text',\n defaultMessage: 'Loading...',\n },\n 'subs-dash.title': {\n id: 'subs-dash.title',\n description: 'Page title: Subscription Dashboard',\n defaultMessage: 'Subscription Dashboard',\n },\n 'header.user.menu.lastCourse': {\n id: 'header.user.menu.lastCourse',\n defaultMessage: 'Resume your last course',\n description: 'Link to resume last course',\n },\n 'header.user.menu.dashboard': {\n id: 'header.user.menu.dashboard',\n defaultMessage: 'Dashboard',\n description: 'Link to the Dashboard',\n },\n 'header.user.menu.help': {\n id: 'header.user.menu.help',\n defaultMessage: 'Help',\n description: 'Link to the Help',\n },\n 'header.user.menu.manageSubscription': {\n id: 'header.user.menu.manageSubscription',\n defaultMessage: 'Manage my subscription',\n description: 'Link to manage subscription'\n },\n 'header.user.menu.signOut': {\n id: 'header.user.menu.signOut',\n defaultMessage: 'Sign out',\n description: 'Link to sign out',\n },\n});\n\nexport default messages;\n"]}
|
package/dist/routes.js
CHANGED
|
@@ -8,13 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { authenticatedLoader } from '@openedx/frontend-base';
|
|
11
|
+
import { subscriptionDashboardRole, subscriptionDashboardUrlPath, subscriptionProgramProgressRole } from './constants';
|
|
11
12
|
const routes = [
|
|
12
13
|
{
|
|
13
14
|
id: 'org.edx.frontend.route.subsLearnerDashboard.main',
|
|
14
|
-
path:
|
|
15
|
+
path: subscriptionDashboardUrlPath,
|
|
15
16
|
loader: authenticatedLoader,
|
|
16
17
|
handle: {
|
|
17
|
-
role:
|
|
18
|
+
role: subscriptionDashboardRole
|
|
18
19
|
},
|
|
19
20
|
lazy() {
|
|
20
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -28,7 +29,7 @@ const routes = [
|
|
|
28
29
|
path: '/subscription-program-progress/:uuid',
|
|
29
30
|
loader: authenticatedLoader,
|
|
30
31
|
handle: {
|
|
31
|
-
role:
|
|
32
|
+
role: subscriptionProgramProgressRole
|
|
32
33
|
},
|
|
33
34
|
lazy() {
|
|
34
35
|
return __awaiter(this, void 0, void 0, function* () {
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.jsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.jsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAG,yBAAyB,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAExH,MAAM,MAAM,GAAG;IACb;QACE,EAAE,EAAE,kDAAkD;QACtD,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE;YACN,IAAI,EAAE,yBAAyB;SAChC;QACK,IAAI;;gBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;SAAA;KACF;IACD;QACE,EAAE,EAAE,6DAA6D;QACjE,IAAI,EAAE,sCAAsC;QAC5C,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE;YACN,IAAI,EAAE,+BAA+B;SACtC;QACK,IAAI;;gBACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qDAAqD,CAAC,CAAC;gBACnF,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC;SAAA;KACF;CACF,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["import { authenticatedLoader } from '@openedx/frontend-base';\nimport { subscriptionDashboardRole, subscriptionDashboardUrlPath, subscriptionProgramProgressRole } from './constants';\n\nconst routes = [\n {\n id: 'org.edx.frontend.route.subsLearnerDashboard.main',\n path: subscriptionDashboardUrlPath,\n loader: authenticatedLoader,\n handle: {\n role: subscriptionDashboardRole\n },\n async lazy () {\n const module = await import('./Main');\n return { Component: module.default };\n },\n },\n {\n id: 'org.edx.frontend.route.subsLearnerDashboard.programProgress',\n path: '/subscription-program-progress/:uuid',\n loader: authenticatedLoader,\n handle: {\n role: subscriptionProgramProgressRole\n },\n async lazy () {\n const module = await import('./containers/ProgramDashboard/ProgramProgress/index');\n return { Component: module.default };\n },\n }\n];\n\nexport default routes;\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { LinkMenuItem, WidgetOperationTypes, getAppConfig } from '@openedx/frontend-base';
|
|
3
|
-
import { appId } from '../../constants';
|
|
3
|
+
import { appId, subscriptionDashboardUrlPath, subscriptionSignoutRole } from '../../constants';
|
|
4
4
|
import ConfirmEmailBanner from './ConfirmEmailBanner';
|
|
5
5
|
import CoursesLink from './CoursesLink';
|
|
6
6
|
import DiscoverLinkMenuItem from './DiscoverLinkMenuItem';
|
|
@@ -39,10 +39,10 @@ const app = {
|
|
|
39
39
|
element: (_jsx(DiscoverLinkMenuItem, { variant: "navLink" })),
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
slotId: 'org.openedx.frontend.slot.header.
|
|
42
|
+
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
43
43
|
id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkSupport.v1',
|
|
44
44
|
op: WidgetOperationTypes.APPEND,
|
|
45
|
-
element: (_jsx(SupportLinkMenuItem, { variant: "
|
|
45
|
+
element: (_jsx(SupportLinkMenuItem, { variant: "dropdownItem" })),
|
|
46
46
|
condition: {
|
|
47
47
|
callback: () => getAppConfig(appId).SUPPORT_URL ? true : false,
|
|
48
48
|
}
|
|
@@ -58,35 +58,43 @@ const app = {
|
|
|
58
58
|
}
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
|
-
slotId: 'org.openedx.frontend.slot.header.
|
|
62
|
-
id: 'org.
|
|
63
|
-
op: WidgetOperationTypes.PREPEND,
|
|
64
|
-
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.orderHistory'].defaultMessage, role: "org.openedx.frontend.role.account", variant: "dropdownItem" }))
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
68
|
-
id: 'org.openedx.frontend.widget.learnerDashboard.headerAuthenticatedMenuHelp.v1',
|
|
61
|
+
slotId: 'org.openedx.frontend.slot.header.desktopRight.v1',
|
|
62
|
+
id: 'org.edx.frontend.widget.learnerHome.headerLinkDashboard.v1',
|
|
69
63
|
op: WidgetOperationTypes.PREPEND,
|
|
70
|
-
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.
|
|
64
|
+
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.dashboard'].defaultMessage, url: subscriptionDashboardUrlPath, variant: "navLink" }))
|
|
71
65
|
},
|
|
72
66
|
{
|
|
73
67
|
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
74
|
-
id: 'org.
|
|
75
|
-
op: WidgetOperationTypes.
|
|
76
|
-
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.
|
|
68
|
+
id: 'org.edx.frontend.widget.header.user.menu.manageSubscription.v1',
|
|
69
|
+
op: WidgetOperationTypes.APPEND,
|
|
70
|
+
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.manageSubscription'].defaultMessage, url: "/subscription-manage", variant: "dropdownItem" }))
|
|
77
71
|
},
|
|
78
72
|
{
|
|
79
73
|
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
80
|
-
id: 'org.
|
|
81
|
-
op: WidgetOperationTypes.
|
|
82
|
-
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.
|
|
74
|
+
id: 'org.edx.frontend.widget.learnerDashboard.headerAuthenticatedMenuSignOut.v1',
|
|
75
|
+
op: WidgetOperationTypes.APPEND,
|
|
76
|
+
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.signOut'].defaultMessage, role: subscriptionSignoutRole, variant: "dropdownItem" }))
|
|
83
77
|
},
|
|
84
78
|
{
|
|
85
79
|
slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
86
|
-
id: 'org.
|
|
80
|
+
id: 'org.edx.frontend.widget.learnerDashboard.dashboard.v1',
|
|
87
81
|
op: WidgetOperationTypes.PREPEND,
|
|
88
|
-
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.
|
|
82
|
+
element: (_jsx(LinkMenuItem, { label: messages['header.user.menu.dashboard'].defaultMessage, url: subscriptionDashboardUrlPath, variant: "dropdownItem" }))
|
|
89
83
|
},
|
|
84
|
+
// {
|
|
85
|
+
// // TO-DO : Resume your last course will be implemented seprately in a different ticket.(Ticket: SUBS-818)
|
|
86
|
+
// // https://2u-internal.atlassian.net/browse/SUBS-818
|
|
87
|
+
// slotId: 'org.openedx.frontend.slot.header.authenticatedMenu.v1',
|
|
88
|
+
// id: 'org.openedx.frontend.widget.learnerDashboard.headerAuthenticatedMenuLastCourse.v1',
|
|
89
|
+
// op: WidgetOperationTypes.PREPEND,
|
|
90
|
+
// element: (
|
|
91
|
+
// <LinkMenuItem
|
|
92
|
+
// label={messages['header.user.menu.lastCourse'].defaultMessage}
|
|
93
|
+
// url="/last-course"
|
|
94
|
+
// variant="dropdownItem"
|
|
95
|
+
// />
|
|
96
|
+
// )
|
|
97
|
+
// },
|
|
90
98
|
]
|
|
91
99
|
};
|
|
92
100
|
export default app;
|
|
@@ -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,MAAM,iBAAiB,CAAC;
|
|
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 CoursesLink from './CoursesLink';\nimport DiscoverLinkMenuItem from './DiscoverLinkMenuItem';\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.headerLinkCourses.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <LinkMenuItem\n label={<CoursesLink />}\n url=\"/\"\n variant=\"navLink\"\n />\n )\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.primaryLinks.v1',\n id: 'org.openedx.frontend.widget.learnerDashboard.headerLinkDiscover.v1',\n op: WidgetOperationTypes.APPEND,\n element: (\n <DiscoverLinkMenuItem\n variant=\"navLink\"\n />\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"]}
|