@edx/frontend-plugin-advertisements 2.24.3 → 2.26.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/data/__factories__/extraOffer.factory.js +15 -0
- package/dist/data/__factories__/extraOffer.factory.js.map +1 -0
- package/dist/data/__factories__/index.js +1 -0
- package/dist/data/__factories__/index.js.map +1 -1
- package/dist/data/lms_api.js +40 -0
- package/dist/data/lms_api.js.map +1 -1
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/paywall/LockPaywall.js +26 -3
- package/dist/paywall/LockPaywall.js.map +1 -1
- package/dist/paywall/SubscriptionPaywall.js +99 -0
- package/dist/paywall/SubscriptionPaywall.js.map +1 -0
- package/dist/subscription-upsell/SubscriptionBenefitsModal.js +145 -0
- package/dist/subscription-upsell/SubscriptionBenefitsModal.js.map +1 -0
- package/dist/subscription-upsell/SubscriptionComparisonModal.js +248 -0
- package/dist/subscription-upsell/SubscriptionComparisonModal.js.map +1 -0
- package/dist/subscription-upsell/SubscriptionComparisonModal.scss +66 -0
- package/dist/subscription-upsell/SubscriptionUpgradeCard.js +214 -0
- package/dist/subscription-upsell/SubscriptionUpgradeCard.js.map +1 -0
- package/dist/subscription-upsell/SubscriptionUpsell.js +196 -0
- package/dist/subscription-upsell/SubscriptionUpsell.js.map +1 -0
- package/dist/subscription-upsell/index.js +61 -0
- package/dist/subscription-upsell/index.js.map +1 -0
- package/dist/subscription-upsell/messages.js +261 -0
- package/dist/subscription-upsell/messages.js.map +1 -0
- package/dist/subscription-upsell/useSubscriptionOffer.js +96 -0
- package/dist/subscription-upsell/useSubscriptionOffer.js.map +1 -0
- package/dist/upgrade-notification/UpgradeNotification.js +51 -4
- package/dist/upgrade-notification/UpgradeNotification.js.map +1 -1
- package/dist/upgrade-to-complete-alert/UpgradeToCompleteAlert.js +28 -3
- package/dist/upgrade-to-complete-alert/UpgradeToCompleteAlert.js.map +1 -1
- package/dist/upgrade-to-complete-alert/track.js +4 -2
- package/dist/upgrade-to-complete-alert/track.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _rosie = require("rosie");
|
|
4
|
+
// eslint-disable-line import/no-extraneous-dependencies
|
|
5
|
+
|
|
6
|
+
// The `extra_offer` block of the course home metadata API, as the MFE stores it (camel-cased).
|
|
7
|
+
// Shape from edx-subscription's devstack mock, branch abhalsod/LP-1415-devstack-offer-mock.
|
|
8
|
+
// status is the Viax status; isSubscriber and freeTrialEligible are null when it is UNKNOWN;
|
|
9
|
+
// subscribeUrl is null when Subscribe should not be offered.
|
|
10
|
+
_rosie.Factory.define('extraOffer').option('checkoutHost', 'https://checkout.example.com').attr('inCatalog', true).attr('status', 'NOT_SUBSCRIBED').attr('isSubscriber', false).attr('freeTrialEligible', true).attr('subscribeUrl', ['checkoutHost'], host => `${host}/subscribe?course_run_key=course-v1:edX+DemoX+Demo_Course`).attr('price', () => ({
|
|
11
|
+
amount: '39.00',
|
|
12
|
+
currency: 'USD',
|
|
13
|
+
billingPeriod: 'month'
|
|
14
|
+
}));
|
|
15
|
+
//# sourceMappingURL=extraOffer.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extraOffer.factory.js","names":["_rosie","require","Factory","define","option","attr","host","amount","currency","billingPeriod"],"sources":["../../../src/data/__factories__/extraOffer.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\n// The `extra_offer` block of the course home metadata API, as the MFE stores it (camel-cased).\n// Shape from edx-subscription's devstack mock, branch abhalsod/LP-1415-devstack-offer-mock.\n// status is the Viax status; isSubscriber and freeTrialEligible are null when it is UNKNOWN;\n// subscribeUrl is null when Subscribe should not be offered.\nFactory.define('extraOffer')\n .option('checkoutHost', 'https://checkout.example.com')\n .attr('inCatalog', true)\n .attr('status', 'NOT_SUBSCRIBED')\n .attr('isSubscriber', false)\n .attr('freeTrialEligible', true)\n .attr('subscribeUrl', ['checkoutHost'], (host) => `${host}/subscribe?course_run_key=course-v1:edX+DemoX+Demo_Course`)\n .attr('price', () => ({ amount: '39.00', currency: 'USD', billingPeriod: 'month' }));\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjC;AACA;AACA;AACA;AACAC,cAAO,CAACC,MAAM,CAAC,YAAY,CAAC,CACzBC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC,CACtDC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CACvBA,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAChCA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAC3BA,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAC/BA,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,EAAGC,IAAI,IAAK,GAAGA,IAAI,2DAA2D,CAAC,CACpHD,IAAI,CAAC,OAAO,EAAE,OAAO;EAAEE,MAAM,EAAE,OAAO;EAAEC,QAAQ,EAAE,KAAK;EAAEC,aAAa,EAAE;AAAQ,CAAC,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["require"],"sources":["../../../src/data/__factories__/index.js"],"sourcesContent":["import './defaultUpgradeNotificationData.factory';\nimport './experimentalUpgradeNotificationData.factory';\nimport './courseHomeMeta.factory';\nimport './coursewareMeta.factory';\nimport './outline.factory';\n"],"mappings":";;AAAAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["require"],"sources":["../../../src/data/__factories__/index.js"],"sourcesContent":["import './defaultUpgradeNotificationData.factory';\nimport './experimentalUpgradeNotificationData.factory';\nimport './courseHomeMeta.factory';\nimport './coursewareMeta.factory';\nimport './outline.factory';\nimport './extraOffer.factory';\n"],"mappings":";;AAAAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA;AACAA,OAAA","ignoreList":[]}
|
package/dist/data/lms_api.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.SubscriptionUpgradeError = void 0;
|
|
6
7
|
exports.fetchOrg = fetchOrg;
|
|
7
8
|
exports.fetchVerifiedName = fetchVerifiedName;
|
|
9
|
+
exports.upgradeEnrollmentWithSubscription = upgradeEnrollmentWithSubscription;
|
|
8
10
|
var _frontendPlatform = require("@edx/frontend-platform");
|
|
9
11
|
var _auth = require("@edx/frontend-platform/auth");
|
|
10
12
|
async function fetchOrg(org) {
|
|
@@ -33,4 +35,42 @@ async function fetchVerifiedName() {
|
|
|
33
35
|
}
|
|
34
36
|
return (0, _frontendPlatform.camelCaseObject)(data);
|
|
35
37
|
}
|
|
38
|
+
class SubscriptionUpgradeError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
let {
|
|
41
|
+
code,
|
|
42
|
+
status
|
|
43
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
44
|
+
super(message);
|
|
45
|
+
this.name = 'SubscriptionUpgradeError';
|
|
46
|
+
this.code = code;
|
|
47
|
+
this.status = status;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Upgrade a subscriber's enrollment in place. Resolves with the LMS response, e.g. { success, status: 'PENDING' }.
|
|
53
|
+
* Unlike the fetches above, errors are not swallowed: rejects with SubscriptionUpgradeError (code, status).
|
|
54
|
+
*/
|
|
55
|
+
exports.SubscriptionUpgradeError = SubscriptionUpgradeError;
|
|
56
|
+
async function upgradeEnrollmentWithSubscription(courseRunKey) {
|
|
57
|
+
const url = `${(0, _frontendPlatform.getConfig)().LMS_BASE_URL}/api/subscription/enrollment/upgrade/`;
|
|
58
|
+
try {
|
|
59
|
+
const {
|
|
60
|
+
data
|
|
61
|
+
} = await (0, _auth.getAuthenticatedHttpClient)().post(url, {
|
|
62
|
+
courseRunKey
|
|
63
|
+
});
|
|
64
|
+
return (0, _frontendPlatform.camelCaseObject)(data);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
const {
|
|
67
|
+
status,
|
|
68
|
+
data
|
|
69
|
+
} = error.response || {};
|
|
70
|
+
throw new SubscriptionUpgradeError(data?.error || error.message, {
|
|
71
|
+
code: data?.code,
|
|
72
|
+
status
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
36
76
|
//# sourceMappingURL=lms_api.js.map
|
package/dist/data/lms_api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lms_api.js","names":["_frontendPlatform","require","_auth","fetchOrg","org","LmsApiUrl","getConfig","LMS_BASE_URL","orgUrl","URL","data","getAuthenticatedHttpClient","get","href","error","camelCaseObject","fetchVerifiedName","verifiedNameUrl"],"sources":["../../src/data/lms_api.js"],"sourcesContent":["import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchOrg(org) {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);\n\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(orgUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport async function fetchVerifiedName() {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(verifiedNameUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"lms_api.js","names":["_frontendPlatform","require","_auth","fetchOrg","org","LmsApiUrl","getConfig","LMS_BASE_URL","orgUrl","URL","data","getAuthenticatedHttpClient","get","href","error","camelCaseObject","fetchVerifiedName","verifiedNameUrl","SubscriptionUpgradeError","Error","constructor","message","code","status","arguments","length","undefined","name","exports","upgradeEnrollmentWithSubscription","courseRunKey","url","post","response"],"sources":["../../src/data/lms_api.js"],"sourcesContent":["import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchOrg(org) {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);\n\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(orgUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport async function fetchVerifiedName() {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(verifiedNameUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport class SubscriptionUpgradeError extends Error {\n constructor(message, { code, status } = {}) {\n super(message);\n this.name = 'SubscriptionUpgradeError';\n this.code = code;\n this.status = status;\n }\n}\n\n/**\n * Upgrade a subscriber's enrollment in place. Resolves with the LMS response, e.g. { success, status: 'PENDING' }.\n * Unlike the fetches above, errors are not swallowed: rejects with SubscriptionUpgradeError (code, status).\n */\nexport async function upgradeEnrollmentWithSubscription(courseRunKey) {\n const url = `${getConfig().LMS_BASE_URL}/api/subscription/enrollment/upgrade/`;\n try {\n const { data } = await getAuthenticatedHttpClient().post(url, { courseRunKey });\n return camelCaseObject(data);\n } catch (error) {\n const { status, data } = error.response || {};\n throw new SubscriptionUpgradeError(data?.error || error.message, { code: data?.code, status });\n }\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEO,eAAeE,QAAQA,CAACC,GAAG,EAAE;EAClC,MAAMC,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAC,GAAGJ,SAAS,uCAAuCD,GAAG,GAAG,CAAC;EAEjF,IAAIM,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACJ,MAAM,CAACK,IAAI,CAAC;EACjE,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B;AAEO,eAAeM,iBAAiBA,CAAA,EAAG;EACxC,MAAMX,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMU,eAAe,GAAG,IAAIR,GAAG,CAAC,GAAGJ,SAAS,4CAA4C,CAAC;EACzF,IAAIK,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACK,eAAe,CAACJ,IAAI,CAAC;EAC1E,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B;AAEO,MAAMQ,wBAAwB,SAASC,KAAK,CAAC;EAClDC,WAAWA,CAACC,OAAO,EAAyB;IAAA,IAAvB;MAAEC,IAAI;MAAEC;IAAO,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACxC,KAAK,CAACH,OAAO,CAAC;IACd,IAAI,CAACM,IAAI,GAAG,0BAA0B;IACtC,IAAI,CAACL,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,MAAM,GAAGA,MAAM;EACtB;AACF;;AAEA;AACA;AACA;AACA;AAHAK,OAAA,CAAAV,wBAAA,GAAAA,wBAAA;AAIO,eAAeW,iCAAiCA,CAACC,YAAY,EAAE;EACpE,MAAMC,GAAG,GAAG,GAAG,IAAAzB,2BAAS,EAAC,CAAC,CAACC,YAAY,uCAAuC;EAC9E,IAAI;IACF,MAAM;MAAEG;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACqB,IAAI,CAACD,GAAG,EAAE;MAAED;IAAa,CAAC,CAAC;IAC/E,OAAO,IAAAf,iCAAe,EAACL,IAAI,CAAC;EAC9B,CAAC,CAAC,OAAOI,KAAK,EAAE;IACd,MAAM;MAAES,MAAM;MAAEb;IAAK,CAAC,GAAGI,KAAK,CAACmB,QAAQ,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAIf,wBAAwB,CAACR,IAAI,EAAEI,KAAK,IAAIA,KAAK,CAACO,OAAO,EAAE;MAAEC,IAAI,EAAEZ,IAAI,EAAEY,IAAI;MAAEC;IAAO,CAAC,CAAC;EAChG;AACF","ignoreList":[]}
|
package/dist/index.js
CHANGED
|
@@ -39,6 +39,30 @@ Object.defineProperty(exports, "SectionList", {
|
|
|
39
39
|
return _sectionOutline.default;
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
+
Object.defineProperty(exports, "SubscriptionBenefitsModal", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _subscriptionUpsell.SubscriptionBenefitsModal;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "SubscriptionComparisonModal", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function () {
|
|
51
|
+
return _subscriptionUpsell.SubscriptionComparisonModal;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
Object.defineProperty(exports, "SubscriptionUpgradeCard", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _subscriptionUpsell.SubscriptionUpgradeCard;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
Object.defineProperty(exports, "SubscriptionUpsell", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
get: function () {
|
|
63
|
+
return _subscriptionUpsell.SubscriptionUpsell;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
42
66
|
Object.defineProperty(exports, "UclWrapper", {
|
|
43
67
|
enumerable: true,
|
|
44
68
|
get: function () {
|
|
@@ -63,6 +87,12 @@ Object.defineProperty(exports, "UpsellBullets", {
|
|
|
63
87
|
return _generic.UpsellBullets;
|
|
64
88
|
}
|
|
65
89
|
});
|
|
90
|
+
Object.defineProperty(exports, "useSubscriptionOffer", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _subscriptionUpsell.useSubscriptionOffer;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
66
96
|
var _upgradeNotification = _interopRequireDefault(require("./upgrade-notification"));
|
|
67
97
|
var _paywall = _interopRequireDefault(require("./paywall"));
|
|
68
98
|
var _upgradeModal = _interopRequireDefault(require("./upgrade-modal"));
|
|
@@ -73,6 +103,7 @@ var _generic = require("./generic");
|
|
|
73
103
|
var _sectionOutline = _interopRequireDefault(require("./section-outline"));
|
|
74
104
|
var _dynamicExperienceSlot = _interopRequireDefault(require("./dynamic-experience-slot"));
|
|
75
105
|
var _uclWrapper = _interopRequireDefault(require("./ucl-wrapper"));
|
|
106
|
+
var _subscriptionUpsell = require("./subscription-upsell");
|
|
76
107
|
require("./index.scss");
|
|
77
108
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
78
109
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_upgradeNotification","_interopRequireDefault","require","_paywall","_upgradeModal","_accessExpirationAlert","_upgradeToCompleteAlert","_courseExitUpsell","_generic","_sectionOutline","_dynamicExperienceSlot","_uclWrapper","e","__esModule","default"],"sources":["../src/index.jsx"],"sourcesContent":["import UpgradeNotification from './upgrade-notification';\nimport LockPaywall from './paywall';\nimport NextUnitButton from './upgrade-modal';\nimport AccessExpirationAlert from './access-expiration-alert';\nimport UpgradeToCompleteAlert from './upgrade-to-complete-alert';\nimport CourseExitUpsell from './course-exit-upsell';\nimport { UpsellBullets } from './generic';\nimport SectionList from './section-outline';\nimport DynamicExperienceSlot from './dynamic-experience-slot';\nimport UclWrapper from './ucl-wrapper';\nimport './index.scss';\n\nexport {\n UpgradeNotification,\n LockPaywall,\n NextUnitButton,\n AccessExpirationAlert,\n UpgradeToCompleteAlert,\n CourseExitUpsell,\n UpsellBullets,\n SectionList,\n DynamicExperienceSlot,\n UclWrapper,\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_upgradeNotification","_interopRequireDefault","require","_paywall","_upgradeModal","_accessExpirationAlert","_upgradeToCompleteAlert","_courseExitUpsell","_generic","_sectionOutline","_dynamicExperienceSlot","_uclWrapper","_subscriptionUpsell","e","__esModule","default"],"sources":["../src/index.jsx"],"sourcesContent":["import UpgradeNotification from './upgrade-notification';\nimport LockPaywall from './paywall';\nimport NextUnitButton from './upgrade-modal';\nimport AccessExpirationAlert from './access-expiration-alert';\nimport UpgradeToCompleteAlert from './upgrade-to-complete-alert';\nimport CourseExitUpsell from './course-exit-upsell';\nimport { UpsellBullets } from './generic';\nimport SectionList from './section-outline';\nimport DynamicExperienceSlot from './dynamic-experience-slot';\nimport UclWrapper from './ucl-wrapper';\nimport {\n useSubscriptionOffer,\n SubscriptionUpsell,\n SubscriptionUpgradeCard,\n SubscriptionBenefitsModal,\n SubscriptionComparisonModal,\n} from './subscription-upsell';\nimport './index.scss';\n\nexport {\n UpgradeNotification,\n LockPaywall,\n NextUnitButton,\n AccessExpirationAlert,\n UpgradeToCompleteAlert,\n CourseExitUpsell,\n UpsellBullets,\n SectionList,\n DynamicExperienceSlot,\n UclWrapper,\n useSubscriptionOffer,\n SubscriptionUpsell,\n SubscriptionUpgradeCard,\n SubscriptionBenefitsModal,\n SubscriptionComparisonModal,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,sBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,uBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,iBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,sBAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,WAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,mBAAA,GAAAV,OAAA;AAOAA,OAAA;AAAsB,SAAAD,uBAAAY,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
|
|
@@ -18,6 +18,8 @@ var _auth = require("@edx/frontend-platform/auth");
|
|
|
18
18
|
var _analytics = require("@edx/frontend-platform/analytics");
|
|
19
19
|
var _upsellBullets = require("../generic/upsell-bullets");
|
|
20
20
|
var _cohesion = require("../cohesion");
|
|
21
|
+
var _subscriptionUpsell = require("../subscription-upsell");
|
|
22
|
+
var _SubscriptionPaywall = _interopRequireDefault(require("./SubscriptionPaywall"));
|
|
21
23
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
22
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
25
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -43,6 +45,7 @@ const LockPaywall = _ref => {
|
|
|
43
45
|
const {
|
|
44
46
|
conversion
|
|
45
47
|
} = (0, _cohesion.useCohesion)(courseId);
|
|
48
|
+
const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
|
|
46
49
|
|
|
47
50
|
// the following variables are set and used for responsive layout to work with
|
|
48
51
|
// whether the NotificationTray is open or not and if there's an offer with longer text
|
|
@@ -57,9 +60,6 @@ const LockPaywall = _ref => {
|
|
|
57
60
|
org_key: org,
|
|
58
61
|
courserun_key: courseId
|
|
59
62
|
};
|
|
60
|
-
const {
|
|
61
|
-
userId
|
|
62
|
-
} = (0, _auth.getAuthenticatedUser)();
|
|
63
63
|
const handleUpgradeClick = () => {
|
|
64
64
|
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
65
65
|
linkCategory: '(none)',
|
|
@@ -69,6 +69,29 @@ const LockPaywall = _ref => {
|
|
|
69
69
|
}));
|
|
70
70
|
conversion('Upgraded');
|
|
71
71
|
};
|
|
72
|
+
const handleSubscribeClick = () => {
|
|
73
|
+
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
74
|
+
linkCategory: '(none)',
|
|
75
|
+
linkName: 'in_course_subscribe',
|
|
76
|
+
linkType: 'link',
|
|
77
|
+
pageName: 'in_course'
|
|
78
|
+
}));
|
|
79
|
+
conversion('Subscribed');
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Learners who can subscribe get the Subscribe banner (Figma shows Subscribe only) and subscribers
|
|
83
|
+
// get the same banner with Upgrade now. Unknown status keeps the paywall below.
|
|
84
|
+
if (!pastExpirationDeadline && (subscriptionOffer?.canSubscribe || subscriptionOffer?.canUpgradeInPlace)) {
|
|
85
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SubscriptionPaywall.default, {
|
|
86
|
+
courseId: courseId,
|
|
87
|
+
offer: subscriptionOffer,
|
|
88
|
+
onSubscribeClick: handleSubscribeClick,
|
|
89
|
+
onUpgradeEvent: stage => stage === 'succeeded' && handleUpgradeClick()
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const {
|
|
93
|
+
userId
|
|
94
|
+
} = (0, _auth.getAuthenticatedUser)();
|
|
72
95
|
const handleUpgradeClickPastExpiration = () => {
|
|
73
96
|
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
74
97
|
linkCategory: 'gated_content',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_auth","_analytics","_upsellBullets","_cohesion","_jsxRuntime","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","LockPaywall","_ref","courseId","intl","useIntl","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","conversion","useCohesion","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","userId","getAuthenticatedUser","handleUpgradeClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","handleUpgradeClickPastExpiration","jsx","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","id","defaultMessage","description","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/paywall/LockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../generic/upsell-bullets';\nimport { useCohesion } from '../cohesion';\n\nconst LockPaywall = ({\n courseId,\n}) => {\n const intl = useIntl();\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const { conversion } = useCohesion(courseId);\n\n // the following variables are set and used for responsive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const { userId } = getAuthenticatedUser();\n\n const handleUpgradeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n\n conversion('Upgraded');\n };\n\n const handleUpgradeClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testid=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testid=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink\n destination={marketingUrl}\n onClick={handleUpgradeClickPastExpiration(eventProperties)}\n target=\"_blank\"\n data-testid=\"lock-paywall-past-expiration-link\"\n >\n {intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}\n <span>\n {intl.formatMessage({\n id: 'learn.lockPaywall.content.link.new-tab.screenreader-only.message',\n defaultMessage: 'in a new tab',\n description: 'Screenreader only text for new tab link',\n })}\n </span>\n </Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={() => handleUpgradeClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testid=\"upgrade-button\"\n />\n </div>\n )}\n </div>\n </Alert>\n );\n};\nLockPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default LockPaywall;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_auth","_analytics","_upsellBullets","_cohesion","_subscriptionUpsell","_SubscriptionPaywall","_jsxRuntime","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","LockPaywall","_ref","courseId","intl","useIntl","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","handleUpgradeClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","handleSubscribeClick","canSubscribe","canUpgradeInPlace","jsx","onSubscribeClick","onUpgradeEvent","stage","userId","getAuthenticatedUser","handleUpgradeClickPastExpiration","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","id","defaultMessage","description","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/paywall/LockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../generic/upsell-bullets';\nimport { useCohesion } from '../cohesion';\nimport { useSubscriptionOffer } from '../subscription-upsell';\nimport SubscriptionPaywall from './SubscriptionPaywall';\n\nconst LockPaywall = ({\n courseId,\n}) => {\n const intl = useIntl();\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n // the following variables are set and used for responsive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const handleUpgradeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n\n conversion('Upgraded');\n };\n\n const handleSubscribeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_subscribe',\n linkType: 'link',\n pageName: 'in_course',\n });\n conversion('Subscribed');\n };\n\n // Learners who can subscribe get the Subscribe banner (Figma shows Subscribe only) and subscribers\n // get the same banner with Upgrade now. Unknown status keeps the paywall below.\n if (!pastExpirationDeadline && (subscriptionOffer?.canSubscribe || subscriptionOffer?.canUpgradeInPlace)) {\n return (\n <SubscriptionPaywall\n courseId={courseId}\n offer={subscriptionOffer}\n onSubscribeClick={handleSubscribeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && handleUpgradeClick()}\n />\n );\n }\n\n const { userId } = getAuthenticatedUser();\n\n const handleUpgradeClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testid=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testid=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink\n destination={marketingUrl}\n onClick={handleUpgradeClickPastExpiration(eventProperties)}\n target=\"_blank\"\n data-testid=\"lock-paywall-past-expiration-link\"\n >\n {intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}\n <span>\n {intl.formatMessage({\n id: 'learn.lockPaywall.content.link.new-tab.screenreader-only.message',\n defaultMessage: 'in a new tab',\n description: 'Screenreader only text for new tab link',\n })}\n </span>\n </Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={() => handleUpgradeClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testid=\"upgrade-button\"\n />\n </div>\n )}\n </div>\n </Alert>\n );\n};\nLockPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default LockPaywall;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _i18n = require("@edx/frontend-platform/i18n");
|
|
10
|
+
var _paragon = require("@openedx/paragon");
|
|
11
|
+
var _icons = require("@openedx/paragon/icons");
|
|
12
|
+
var _messages = _interopRequireDefault(require("@src/courseware/course/sequence/lock-paywall/messages"));
|
|
13
|
+
var _edX_locked_certificate = _interopRequireDefault(require("@src/generic/assets/edX_locked_certificate.png"));
|
|
14
|
+
var _upsellBullets = require("../generic/upsell-bullets");
|
|
15
|
+
var _subscriptionUpsell = require("../subscription-upsell");
|
|
16
|
+
var _messages2 = _interopRequireDefault(require("../subscription-upsell/messages"));
|
|
17
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
+
/* eslint import/no-unresolved: 0 */
|
|
20
|
+
|
|
21
|
+
/** The locked graded content banner (Figma 3484-70965): Subscribe, or Upgrade now for a subscriber. */const SubscriptionPaywall = _ref => {
|
|
22
|
+
let {
|
|
23
|
+
courseId,
|
|
24
|
+
offer,
|
|
25
|
+
onSubscribeClick,
|
|
26
|
+
onUpgradeEvent
|
|
27
|
+
} = _ref;
|
|
28
|
+
const {
|
|
29
|
+
formatMessage
|
|
30
|
+
} = (0, _i18n.useIntl)();
|
|
31
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert, {
|
|
32
|
+
variant: "light",
|
|
33
|
+
"aria-live": "off",
|
|
34
|
+
icon: _icons.Locked,
|
|
35
|
+
className: "bg-light-200 border-0 shadow-sm p-4",
|
|
36
|
+
"data-testid": "subscription-paywall",
|
|
37
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
|
|
38
|
+
direction: "horizontal",
|
|
39
|
+
gap: 4,
|
|
40
|
+
className: "flex-column flex-md-row align-items-start align-items-md-center",
|
|
41
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
|
|
42
|
+
gap: 2,
|
|
43
|
+
className: "flex-grow-1",
|
|
44
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert.Heading, {
|
|
45
|
+
as: "h3",
|
|
46
|
+
className: "h6 font-weight-bold text-primary-500 mb-0",
|
|
47
|
+
children: formatMessage(_messages.default['learn.lockPaywall.title'])
|
|
48
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
49
|
+
className: "mb-0",
|
|
50
|
+
children: formatMessage(_messages.default['learn.lockPaywall.content'])
|
|
51
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
|
|
52
|
+
direction: "horizontal",
|
|
53
|
+
gap: 3,
|
|
54
|
+
className: "flex-wrap",
|
|
55
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Image, {
|
|
56
|
+
src: _edX_locked_certificate.default,
|
|
57
|
+
alt: formatMessage(_messages.default['learn.lockPaywall.example.alt']),
|
|
58
|
+
width: 175,
|
|
59
|
+
height: 128
|
|
60
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
|
|
61
|
+
gap: 2,
|
|
62
|
+
role: "list",
|
|
63
|
+
className: "align-self-center upsell-bullets",
|
|
64
|
+
style: {
|
|
65
|
+
flex: '1 1 16rem'
|
|
66
|
+
},
|
|
67
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.UnlockGradedBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.FullAccessBullet, {})]
|
|
68
|
+
})]
|
|
69
|
+
})]
|
|
70
|
+
}), offer.canUpgradeInPlace ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpsell, {
|
|
71
|
+
courseId: courseId,
|
|
72
|
+
className: "flex-shrink-0",
|
|
73
|
+
onUpgradeEvent: onUpgradeEvent
|
|
74
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
75
|
+
variant: "primary",
|
|
76
|
+
size: "sm",
|
|
77
|
+
className: "rounded-pill",
|
|
78
|
+
href: offer.subscribeUrl,
|
|
79
|
+
onClick: onSubscribeClick,
|
|
80
|
+
children: formatMessage(_messages2.default.subscribe)
|
|
81
|
+
})]
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
SubscriptionPaywall.propTypes = {
|
|
86
|
+
courseId: _propTypes.default.string.isRequired,
|
|
87
|
+
offer: _propTypes.default.shape({
|
|
88
|
+
canUpgradeInPlace: _propTypes.default.bool,
|
|
89
|
+
subscribeUrl: _propTypes.default.string
|
|
90
|
+
}).isRequired,
|
|
91
|
+
onSubscribeClick: _propTypes.default.func,
|
|
92
|
+
onUpgradeEvent: _propTypes.default.func
|
|
93
|
+
};
|
|
94
|
+
SubscriptionPaywall.defaultProps = {
|
|
95
|
+
onSubscribeClick: undefined,
|
|
96
|
+
onUpgradeEvent: undefined
|
|
97
|
+
};
|
|
98
|
+
var _default = exports.default = SubscriptionPaywall;
|
|
99
|
+
//# sourceMappingURL=SubscriptionPaywall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_upsellBullets","_subscriptionUpsell","_messages2","_jsxRuntime","e","__esModule","default","SubscriptionPaywall","_ref","courseId","offer","onSubscribeClick","onUpgradeEvent","formatMessage","useIntl","jsx","Alert","variant","icon","Locked","className","children","jsxs","Stack","direction","gap","Heading","as","lockPaywallMessages","Image","src","certificateLocked","alt","width","height","role","style","flex","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","canUpgradeInPlace","SubscriptionUpsell","Button","size","href","subscribeUrl","onClick","subscriptionMessages","subscribe","propTypes","PropTypes","string","isRequired","shape","bool","func","defaultProps","undefined","_default","exports"],"sources":["../../src/paywall/SubscriptionPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, Button, Image, Stack,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport lockPaywallMessages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\n\nimport { VerifiedCertBullet, UnlockGradedBullet, FullAccessBullet } from '../generic/upsell-bullets';\nimport { SubscriptionUpsell } from '../subscription-upsell';\nimport subscriptionMessages from '../subscription-upsell/messages';\n\n/** The locked graded content banner (Figma 3484-70965): Subscribe, or Upgrade now for a subscriber. */\nconst SubscriptionPaywall = ({\n courseId, offer, onSubscribeClick, onUpgradeEvent,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Alert\n variant=\"light\"\n aria-live=\"off\"\n icon={Locked}\n className=\"bg-light-200 border-0 shadow-sm p-4\"\n data-testid=\"subscription-paywall\"\n >\n {/* The button is not in Alert's actions: elm-theme turns primary buttons there into brand (orange) buttons. */}\n <Stack\n direction=\"horizontal\"\n gap={4}\n className=\"flex-column flex-md-row align-items-start align-items-md-center\"\n >\n <Stack gap={2} className=\"flex-grow-1\">\n <Alert.Heading as=\"h3\" className=\"h6 font-weight-bold text-primary-500 mb-0\">\n {formatMessage(lockPaywallMessages['learn.lockPaywall.title'])}\n </Alert.Heading>\n <p className=\"mb-0\">{formatMessage(lockPaywallMessages['learn.lockPaywall.content'])}</p>\n <Stack direction=\"horizontal\" gap={3} className=\"flex-wrap\">\n <Image\n src={certificateLocked}\n alt={formatMessage(lockPaywallMessages['learn.lockPaywall.example.alt'])}\n width={175}\n height={128}\n />\n {/* Let the bullet text wrap before the whole list drops under the image. */}\n <Stack gap={2} role=\"list\" className=\"align-self-center upsell-bullets\" style={{ flex: '1 1 16rem' }}>\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n </Stack>\n </Stack>\n </Stack>\n {offer.canUpgradeInPlace ? (\n <SubscriptionUpsell courseId={courseId} className=\"flex-shrink-0\" onUpgradeEvent={onUpgradeEvent} />\n ) : (\n <Button variant=\"primary\" size=\"sm\" className=\"rounded-pill\" href={offer.subscribeUrl} onClick={onSubscribeClick}>\n {formatMessage(subscriptionMessages.subscribe)}\n </Button>\n )}\n </Stack>\n </Alert>\n );\n};\n\nSubscriptionPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n offer: PropTypes.shape({\n canUpgradeInPlace: PropTypes.bool,\n subscribeUrl: PropTypes.string,\n }).isRequired,\n onSubscribeClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n};\n\nSubscriptionPaywall.defaultProps = {\n onSubscribeClick: undefined,\n onUpgradeEvent: undefined,\n};\n\nexport default SubscriptionPaywall;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.BENEFITS_MODAL_VARIANT = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _i18n = require("@edx/frontend-platform/i18n");
|
|
10
|
+
var _paragon = require("@openedx/paragon");
|
|
11
|
+
var _icons = require("@openedx/paragon/icons");
|
|
12
|
+
var _useSubscriptionOffer = _interopRequireDefault(require("./useSubscriptionOffer"));
|
|
13
|
+
var _messages = _interopRequireDefault(require("./messages"));
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
/* eslint import/no-unresolved: 0 */
|
|
17
|
+
|
|
18
|
+
const BENEFITS_MODAL_VARIANT = exports.BENEFITS_MODAL_VARIANT = {
|
|
19
|
+
FREE_TRIAL: 'freeTrial',
|
|
20
|
+
LAUNCH: 'launch'
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** The benefits pop-up (Figma 3339-7937 free trial, 3482-70647 launch). Nothing opens it yet. */
|
|
24
|
+
const SubscriptionBenefitsModal = _ref => {
|
|
25
|
+
let {
|
|
26
|
+
courseId,
|
|
27
|
+
isOpen,
|
|
28
|
+
onClose,
|
|
29
|
+
variant,
|
|
30
|
+
onSubscribeClick,
|
|
31
|
+
onPurchaseClick
|
|
32
|
+
} = _ref;
|
|
33
|
+
const {
|
|
34
|
+
formatMessage
|
|
35
|
+
} = (0, _i18n.useIntl)();
|
|
36
|
+
const offer = (0, _useSubscriptionOffer.default)(courseId);
|
|
37
|
+
if (!offer || !offer.canSubscribe) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const {
|
|
41
|
+
hasTrial,
|
|
42
|
+
purchaseUrl,
|
|
43
|
+
canPurchase,
|
|
44
|
+
coursePrice
|
|
45
|
+
} = offer;
|
|
46
|
+
const isFreeTrial = variant === BENEFITS_MODAL_VARIANT.FREE_TRIAL && hasTrial;
|
|
47
|
+
const title = formatMessage(isFreeTrial ? _messages.default.modalTitleFreeTrial : _messages.default.modalTitleLaunch);
|
|
48
|
+
const ctaVariant = isFreeTrial ? 'primary' : 'brand'; // Figma: dark on free trial, brand on launch
|
|
49
|
+
|
|
50
|
+
const benefits = [{
|
|
51
|
+
key: 'certificates',
|
|
52
|
+
title: formatMessage(_messages.default.benefitCertificatesTitle),
|
|
53
|
+
body: formatMessage(_messages.default.benefitCertificatesBody)
|
|
54
|
+
}, {
|
|
55
|
+
key: 'change-course',
|
|
56
|
+
title: formatMessage(_messages.default.benefitChangeCourseTitle),
|
|
57
|
+
body: formatMessage(_messages.default.benefitChangeCourseBody)
|
|
58
|
+
}, hasTrial && {
|
|
59
|
+
key: 'trial',
|
|
60
|
+
title: formatMessage(_messages.default.benefitTrialTitle),
|
|
61
|
+
body: formatMessage(_messages.default.benefitTrialBody)
|
|
62
|
+
}].filter(Boolean);
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog, {
|
|
64
|
+
title: title,
|
|
65
|
+
isOpen: isOpen,
|
|
66
|
+
onClose: onClose,
|
|
67
|
+
size: "lg",
|
|
68
|
+
hasCloseButton: true,
|
|
69
|
+
isFullscreenOnMobile: true,
|
|
70
|
+
isOverflowVisible: false,
|
|
71
|
+
className: "subscription-benefits-modal",
|
|
72
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog.Header, {
|
|
73
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
74
|
+
className: "font-weight-bold mb-2",
|
|
75
|
+
"data-testid": "subscription-modal-brand",
|
|
76
|
+
children: formatMessage(_messages.default.brand)
|
|
77
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Title, {
|
|
78
|
+
as: "h2",
|
|
79
|
+
children: title
|
|
80
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
81
|
+
className: "mt-2 mb-0",
|
|
82
|
+
children: formatMessage(_messages.default.modalSubtitle)
|
|
83
|
+
})]
|
|
84
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Body, {
|
|
85
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
|
|
86
|
+
className: "list-unstyled bg-white rounded p-4 mb-0",
|
|
87
|
+
children: benefits.map(benefit => /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
|
|
88
|
+
className: "d-flex mb-3",
|
|
89
|
+
"data-testid": `subscription-modal-benefit-${benefit.key}`,
|
|
90
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Icon, {
|
|
91
|
+
src: _icons.CheckCircleOutline,
|
|
92
|
+
className: "mr-2 flex-shrink-0"
|
|
93
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
94
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
95
|
+
className: "font-weight-bold",
|
|
96
|
+
children: benefit.title
|
|
97
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
98
|
+
children: benefit.body
|
|
99
|
+
})]
|
|
100
|
+
})]
|
|
101
|
+
}, benefit.key))
|
|
102
|
+
})
|
|
103
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog.Footer, {
|
|
104
|
+
className: "flex-column align-items-end",
|
|
105
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ActionRow, {
|
|
106
|
+
children: [canPurchase && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
107
|
+
as: "a",
|
|
108
|
+
href: purchaseUrl,
|
|
109
|
+
variant: `outline-${ctaVariant}`,
|
|
110
|
+
onClick: onPurchaseClick,
|
|
111
|
+
"data-testid": "subscription-modal-purchase-button",
|
|
112
|
+
children: coursePrice ? formatMessage(_messages.default.earnCertificateFor, {
|
|
113
|
+
price: coursePrice
|
|
114
|
+
}) : formatMessage(_messages.default.purchaseNoPrice)
|
|
115
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
116
|
+
as: "a",
|
|
117
|
+
href: offer.subscribeUrl,
|
|
118
|
+
variant: ctaVariant,
|
|
119
|
+
onClick: onSubscribeClick,
|
|
120
|
+
"data-testid": "subscription-modal-subscribe-button",
|
|
121
|
+
children: formatMessage(_messages.default.continueToCheckout)
|
|
122
|
+
})]
|
|
123
|
+
}), isFreeTrial && /*#__PURE__*/(0, _jsxRuntime.jsx)("small", {
|
|
124
|
+
className: "mt-1",
|
|
125
|
+
"data-testid": "subscription-modal-cancel-anytime",
|
|
126
|
+
children: formatMessage(_messages.default.cancelAnytime)
|
|
127
|
+
})]
|
|
128
|
+
})]
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
SubscriptionBenefitsModal.propTypes = {
|
|
132
|
+
courseId: _propTypes.default.string.isRequired,
|
|
133
|
+
isOpen: _propTypes.default.bool.isRequired,
|
|
134
|
+
onClose: _propTypes.default.func.isRequired,
|
|
135
|
+
variant: _propTypes.default.oneOf(Object.values(BENEFITS_MODAL_VARIANT)),
|
|
136
|
+
onSubscribeClick: _propTypes.default.func,
|
|
137
|
+
onPurchaseClick: _propTypes.default.func
|
|
138
|
+
};
|
|
139
|
+
SubscriptionBenefitsModal.defaultProps = {
|
|
140
|
+
variant: BENEFITS_MODAL_VARIANT.LAUNCH,
|
|
141
|
+
onSubscribeClick: undefined,
|
|
142
|
+
onPurchaseClick: undefined
|
|
143
|
+
};
|
|
144
|
+
var _default = exports.default = SubscriptionBenefitsModal;
|
|
145
|
+
//# sourceMappingURL=SubscriptionBenefitsModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionBenefitsModal.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_icons","_useSubscriptionOffer","_messages","_jsxRuntime","e","__esModule","default","BENEFITS_MODAL_VARIANT","exports","FREE_TRIAL","LAUNCH","SubscriptionBenefitsModal","_ref","courseId","isOpen","onClose","variant","onSubscribeClick","onPurchaseClick","formatMessage","useIntl","offer","useSubscriptionOffer","canSubscribe","hasTrial","purchaseUrl","canPurchase","coursePrice","isFreeTrial","title","messages","modalTitleFreeTrial","modalTitleLaunch","ctaVariant","benefits","key","benefitCertificatesTitle","body","benefitCertificatesBody","benefitChangeCourseTitle","benefitChangeCourseBody","benefitTrialTitle","benefitTrialBody","filter","Boolean","jsxs","ModalDialog","size","hasCloseButton","isFullscreenOnMobile","isOverflowVisible","className","children","Header","jsx","brand","Title","as","modalSubtitle","Body","map","benefit","Icon","src","CheckCircleOutline","Footer","ActionRow","Button","href","onClick","earnCertificateFor","price","purchaseNoPrice","subscribeUrl","continueToCheckout","cancelAnytime","propTypes","PropTypes","string","isRequired","bool","func","oneOf","Object","values","defaultProps","undefined","_default"],"sources":["../../src/subscription-upsell/SubscriptionBenefitsModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, Button, Icon, ModalDialog,\n} from '@openedx/paragon';\nimport { CheckCircleOutline } from '@openedx/paragon/icons';\n\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\nexport const BENEFITS_MODAL_VARIANT = {\n FREE_TRIAL: 'freeTrial',\n LAUNCH: 'launch',\n};\n\n/** The benefits pop-up (Figma 3339-7937 free trial, 3482-70647 launch). Nothing opens it yet. */\nconst SubscriptionBenefitsModal = ({\n courseId,\n isOpen,\n onClose,\n variant,\n onSubscribeClick,\n onPurchaseClick,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n\n if (!offer || !offer.canSubscribe) {\n return null;\n }\n\n const {\n hasTrial, purchaseUrl, canPurchase, coursePrice,\n } = offer;\n const isFreeTrial = variant === BENEFITS_MODAL_VARIANT.FREE_TRIAL && hasTrial;\n const title = formatMessage(isFreeTrial ? messages.modalTitleFreeTrial : messages.modalTitleLaunch);\n const ctaVariant = isFreeTrial ? 'primary' : 'brand'; // Figma: dark on free trial, brand on launch\n\n const benefits = [\n {\n key: 'certificates',\n title: formatMessage(messages.benefitCertificatesTitle),\n body: formatMessage(messages.benefitCertificatesBody),\n },\n {\n key: 'change-course',\n title: formatMessage(messages.benefitChangeCourseTitle),\n body: formatMessage(messages.benefitChangeCourseBody),\n },\n hasTrial && {\n key: 'trial',\n title: formatMessage(messages.benefitTrialTitle),\n body: formatMessage(messages.benefitTrialBody),\n },\n ].filter(Boolean);\n\n return (\n <ModalDialog\n title={title}\n isOpen={isOpen}\n onClose={onClose}\n size=\"lg\"\n hasCloseButton\n isFullscreenOnMobile\n isOverflowVisible={false}\n className=\"subscription-benefits-modal\"\n >\n <ModalDialog.Header>\n <p className=\"font-weight-bold mb-2\" data-testid=\"subscription-modal-brand\">{formatMessage(messages.brand)}</p>\n <ModalDialog.Title as=\"h2\">{title}</ModalDialog.Title>\n <p className=\"mt-2 mb-0\">{formatMessage(messages.modalSubtitle)}</p>\n </ModalDialog.Header>\n <ModalDialog.Body>\n <ul className=\"list-unstyled bg-white rounded p-4 mb-0\">\n {benefits.map((benefit) => (\n <li key={benefit.key} className=\"d-flex mb-3\" data-testid={`subscription-modal-benefit-${benefit.key}`}>\n <Icon src={CheckCircleOutline} className=\"mr-2 flex-shrink-0\" />\n <div>\n <div className=\"font-weight-bold\">{benefit.title}</div>\n <div>{benefit.body}</div>\n </div>\n </li>\n ))}\n </ul>\n </ModalDialog.Body>\n <ModalDialog.Footer className=\"flex-column align-items-end\">\n <ActionRow>\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant={`outline-${ctaVariant}`}\n onClick={onPurchaseClick}\n data-testid=\"subscription-modal-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.earnCertificateFor, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant={ctaVariant}\n onClick={onSubscribeClick}\n data-testid=\"subscription-modal-subscribe-button\"\n >\n {formatMessage(messages.continueToCheckout)}\n </Button>\n </ActionRow>\n {isFreeTrial && (\n <small className=\"mt-1\" data-testid=\"subscription-modal-cancel-anytime\">{formatMessage(messages.cancelAnytime)}</small>\n )}\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nSubscriptionBenefitsModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n variant: PropTypes.oneOf(Object.values(BENEFITS_MODAL_VARIANT)),\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n};\n\nSubscriptionBenefitsModal.defaultProps = {\n variant: BENEFITS_MODAL_VARIANT.LAUNCH,\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n};\n\nexport default SubscriptionBenefitsModal;\n"],"mappings":"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","ignoreList":[]}
|