@edx/frontend-plugin-advertisements 2.29.0 → 2.30.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/subscription-upsell/SubscriptionBenefitsModal.js +56 -41
- package/dist/subscription-upsell/SubscriptionBenefitsModal.js.map +1 -1
- package/dist/subscription-upsell/SubscriptionBenefitsModal.scss +37 -0
- package/dist/subscription-upsell/SubscriptionComparisonModal.js +2 -0
- package/dist/subscription-upsell/SubscriptionComparisonModal.js.map +1 -1
- package/dist/subscription-upsell/SubscriptionComparisonModal.scss +7 -0
- package/dist/subscription-upsell/SubscriptionUpsell.js +14 -4
- package/dist/subscription-upsell/SubscriptionUpsell.js.map +1 -1
- package/dist/subscription-upsell/_modal-chrome.scss +44 -0
- package/dist/subscription-upsell/messages.js +5 -0
- package/dist/subscription-upsell/messages.js.map +1 -1
- package/dist/upgrade-modal/NextUnitButton.js +7 -1
- package/dist/upgrade-modal/NextUnitButton.js.map +1 -1
- package/dist/upgrade-modal/UpgradeModal.js +24 -0
- package/dist/upgrade-modal/UpgradeModal.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,8 +9,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
9
9
|
var _i18n = require("@edx/frontend-platform/i18n");
|
|
10
10
|
var _paragon = require("@openedx/paragon");
|
|
11
11
|
var _icons = require("@openedx/paragon/icons");
|
|
12
|
+
var _certificatePreview = _interopRequireDefault(require("../upgrade-notification/certificate-preview"));
|
|
12
13
|
var _useSubscriptionOffer = _interopRequireDefault(require("./useSubscriptionOffer"));
|
|
13
14
|
var _messages = _interopRequireDefault(require("./messages"));
|
|
15
|
+
require("./SubscriptionBenefitsModal.scss");
|
|
14
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
18
|
/* eslint import/no-unresolved: 0 */
|
|
@@ -20,7 +22,7 @@ const BENEFITS_MODAL_VARIANT = exports.BENEFITS_MODAL_VARIANT = {
|
|
|
20
22
|
LAUNCH: 'launch'
|
|
21
23
|
};
|
|
22
24
|
|
|
23
|
-
/** The benefits pop-up (Figma 3339-7937 free trial, 3482-70647 launch).
|
|
25
|
+
/** The benefits pop-up (Figma 3339-7937 free trial, 3482-70647 launch). UpgradeModal opens the free trial one. */
|
|
24
26
|
const SubscriptionBenefitsModal = _ref => {
|
|
25
27
|
let {
|
|
26
28
|
courseId,
|
|
@@ -45,32 +47,63 @@ const SubscriptionBenefitsModal = _ref => {
|
|
|
45
47
|
} = offer;
|
|
46
48
|
const isFreeTrial = variant === BENEFITS_MODAL_VARIANT.FREE_TRIAL && hasTrial;
|
|
47
49
|
const title = formatMessage(isFreeTrial ? _messages.default.modalTitleFreeTrial : _messages.default.modalTitleLaunch);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
const trialBenefit = hasTrial && {
|
|
51
|
+
key: 'trial',
|
|
52
|
+
title: formatMessage(_messages.default.benefitTrialTitle),
|
|
53
|
+
body: formatMessage(_messages.default.benefitTrialBody)
|
|
54
|
+
};
|
|
55
|
+
// Figma: the free trial pop-up leads with the trial; the launch pop-up ends with it.
|
|
56
|
+
const benefits = [isFreeTrial && trialBenefit, {
|
|
51
57
|
key: 'certificates',
|
|
52
58
|
title: formatMessage(_messages.default.benefitCertificatesTitle),
|
|
53
59
|
body: formatMessage(_messages.default.benefitCertificatesBody)
|
|
54
60
|
}, {
|
|
55
61
|
key: 'change-course',
|
|
56
62
|
title: formatMessage(_messages.default.benefitChangeCourseTitle),
|
|
57
|
-
body: formatMessage(_messages.default.benefitChangeCourseBody)
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
body: formatMessage(isFreeTrial ? _messages.default.benefitChangeCourseBodyFreeTrial : _messages.default.benefitChangeCourseBody)
|
|
64
|
+
}, !isFreeTrial && trialBenefit].filter(Boolean);
|
|
65
|
+
const purchaseButton = canPurchase && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
66
|
+
as: "a",
|
|
67
|
+
href: purchaseUrl,
|
|
68
|
+
variant: "outline-brand",
|
|
69
|
+
className: isFreeTrial ? 'rounded-pill w-100 mt-2' : 'rounded-pill',
|
|
70
|
+
onClick: onPurchaseClick,
|
|
71
|
+
"data-testid": "subscription-modal-purchase-button",
|
|
72
|
+
children: coursePrice ? formatMessage(_messages.default.earnCertificateFor, {
|
|
73
|
+
price: coursePrice
|
|
74
|
+
}) : formatMessage(_messages.default.purchaseNoPrice)
|
|
75
|
+
});
|
|
76
|
+
const subscribeButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
77
|
+
as: "a",
|
|
78
|
+
href: offer.subscribeUrl,
|
|
79
|
+
variant: "brand",
|
|
80
|
+
className: isFreeTrial ? 'rounded-pill w-100' : 'rounded-pill',
|
|
81
|
+
onClick: onSubscribeClick,
|
|
82
|
+
"data-testid": "subscription-modal-subscribe-button",
|
|
83
|
+
children: formatMessage(_messages.default.continueToCheckout)
|
|
84
|
+
});
|
|
63
85
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog, {
|
|
64
86
|
title: title,
|
|
65
87
|
isOpen: isOpen,
|
|
66
88
|
onClose: onClose,
|
|
67
|
-
size:
|
|
89
|
+
size: isFreeTrial ? 'md' : 'lg',
|
|
90
|
+
variant: isFreeTrial ? 'dark' : 'default' // dark inverts the close button over the certificate hero
|
|
91
|
+
,
|
|
68
92
|
hasCloseButton: true,
|
|
69
93
|
isFullscreenOnMobile: true,
|
|
70
94
|
isOverflowVisible: false,
|
|
71
|
-
className:
|
|
72
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
73
|
-
|
|
95
|
+
className: `subscription-benefits-modal subscription-benefits-modal--${isFreeTrial ? 'free-trial' : 'launch'}`,
|
|
96
|
+
children: [isFreeTrial && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Hero, {
|
|
97
|
+
"data-testid": "subscription-modal-certificate",
|
|
98
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Hero.Content, {
|
|
99
|
+
className: "m-0 text-primary-500",
|
|
100
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_certificatePreview.default, {
|
|
101
|
+
courseId: courseId,
|
|
102
|
+
bgColor: "bg-white"
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog.Header, {
|
|
106
|
+
children: [!isFreeTrial && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
74
107
|
className: "font-weight-bold mb-2",
|
|
75
108
|
"data-testid": "subscription-modal-brand",
|
|
76
109
|
children: formatMessage(_messages.default.brand)
|
|
@@ -83,12 +116,12 @@ const SubscriptionBenefitsModal = _ref => {
|
|
|
83
116
|
})]
|
|
84
117
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Body, {
|
|
85
118
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
|
|
86
|
-
className:
|
|
119
|
+
className: isFreeTrial ? 'list-unstyled mb-0' : 'list-unstyled bg-white rounded p-4 mb-0',
|
|
87
120
|
children: benefits.map(benefit => /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
|
|
88
121
|
className: "d-flex mb-3",
|
|
89
122
|
"data-testid": `subscription-modal-benefit-${benefit.key}`,
|
|
90
123
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Icon, {
|
|
91
|
-
src: _icons.CheckCircleOutline,
|
|
124
|
+
src: isFreeTrial ? _icons.Check : _icons.CheckCircleOutline,
|
|
92
125
|
className: "mr-2 flex-shrink-0"
|
|
93
126
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
94
127
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
@@ -100,31 +133,13 @@ const SubscriptionBenefitsModal = _ref => {
|
|
|
100
133
|
})]
|
|
101
134
|
}, benefit.key))
|
|
102
135
|
})
|
|
103
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog.Footer, {
|
|
104
|
-
className: "flex-column
|
|
105
|
-
children: [
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
})]
|
|
136
|
+
}), isFreeTrial ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ModalDialog.Footer, {
|
|
137
|
+
className: "flex-column",
|
|
138
|
+
children: [subscribeButton, purchaseButton]
|
|
139
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.ModalDialog.Footer, {
|
|
140
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.ActionRow, {
|
|
141
|
+
children: [purchaseButton, subscribeButton]
|
|
142
|
+
})
|
|
128
143
|
})]
|
|
129
144
|
});
|
|
130
145
|
};
|
|
@@ -1 +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":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAGA,IAAAI,MAAA,GAAAJ,OAAA;AAEA,IAAAK,qBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAkC,IAAAO,WAAA,GAAAP,OAAA;AAAA,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAVlC;;AAYO,MAAMG,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAG;EACpCE,UAAU,EAAE,WAAW;EACvBC,MAAM,EAAE;AACV,CAAC;;AAED;AACA,MAAMC,yBAAyB,GAAGC,IAAA,IAO5B;EAAA,IAP6B;IACjCC,QAAQ;IACRC,MAAM;IACNC,OAAO;IACPC,OAAO;IACPC,gBAAgB;IAChBC;EACF,CAAC,GAAAN,IAAA;EACC,MAAM;IAAEO;EAAc,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;EACnC,MAAMC,KAAK,GAAG,IAAAC,6BAAoB,EAACT,QAAQ,CAAC;EAE5C,IAAI,CAACQ,KAAK,IAAI,CAACA,KAAK,CAACE,YAAY,EAAE;IACjC,OAAO,IAAI;EACb;EAEA,MAAM;IACJC,QAAQ;IAAEC,WAAW;IAAEC,WAAW;IAAEC;EACtC,CAAC,GAAGN,KAAK;EACT,MAAMO,WAAW,GAAGZ,OAAO,KAAKT,sBAAsB,CAACE,UAAU,IAAIe,QAAQ;EAC7E,MAAMK,KAAK,GAAGV,aAAa,CAACS,WAAW,GAAGE,iBAAQ,CAACC,mBAAmB,GAAGD,iBAAQ,CAACE,gBAAgB,CAAC;EACnG,MAAMC,UAAU,GAAGL,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;;EAEtD,MAAMM,QAAQ,GAAG,CACf;IACEC,GAAG,EAAE,cAAc;IACnBN,KAAK,EAAEV,aAAa,CAACW,iBAAQ,CAACM,wBAAwB,CAAC;IACvDC,IAAI,EAAElB,aAAa,CAACW,iBAAQ,CAACQ,uBAAuB;EACtD,CAAC,EACD;IACEH,GAAG,EAAE,eAAe;IACpBN,KAAK,EAAEV,aAAa,CAACW,iBAAQ,CAACS,wBAAwB,CAAC;IACvDF,IAAI,EAAElB,aAAa,CAACW,iBAAQ,CAACU,uBAAuB;EACtD,CAAC,EACDhB,QAAQ,IAAI;IACVW,GAAG,EAAE,OAAO;IACZN,KAAK,EAAEV,aAAa,CAACW,iBAAQ,CAACW,iBAAiB,CAAC;IAChDJ,IAAI,EAAElB,aAAa,CAACW,iBAAQ,CAACY,gBAAgB;EAC/C,CAAC,CACF,CAACC,MAAM,CAACC,OAAO,CAAC;EAEjB,oBACE,IAAAzC,WAAA,CAAA0C,IAAA,EAAC9C,QAAA,CAAA+C,WAAW;IACVjB,KAAK,EAAEA,KAAM;IACbf,MAAM,EAAEA,MAAO;IACfC,OAAO,EAAEA,OAAQ;IACjBgC,IAAI,EAAC,IAAI;IACTC,cAAc;IACdC,oBAAoB;IACpBC,iBAAiB,EAAE,KAAM;IACzBC,SAAS,EAAC,6BAA6B;IAAAC,QAAA,gBAEvC,IAAAjD,WAAA,CAAA0C,IAAA,EAAC9C,QAAA,CAAA+C,WAAW,CAACO,MAAM;MAAAD,QAAA,gBACjB,IAAAjD,WAAA,CAAAmD,GAAA;QAAGH,SAAS,EAAC,uBAAuB;QAAC,eAAY,0BAA0B;QAAAC,QAAA,EAAEjC,aAAa,CAACW,iBAAQ,CAACyB,KAAK;MAAC,CAAI,CAAC,eAC/G,IAAApD,WAAA,CAAAmD,GAAA,EAACvD,QAAA,CAAA+C,WAAW,CAACU,KAAK;QAACC,EAAE,EAAC,IAAI;QAAAL,QAAA,EAAEvB;MAAK,CAAoB,CAAC,eACtD,IAAA1B,WAAA,CAAAmD,GAAA;QAAGH,SAAS,EAAC,WAAW;QAAAC,QAAA,EAAEjC,aAAa,CAACW,iBAAQ,CAAC4B,aAAa;MAAC,CAAI,CAAC;IAAA,CAClD,CAAC,eACrB,IAAAvD,WAAA,CAAAmD,GAAA,EAACvD,QAAA,CAAA+C,WAAW,CAACa,IAAI;MAAAP,QAAA,eACf,IAAAjD,WAAA,CAAAmD,GAAA;QAAIH,SAAS,EAAC,yCAAyC;QAAAC,QAAA,EACpDlB,QAAQ,CAAC0B,GAAG,CAAEC,OAAO,iBACpB,IAAA1D,WAAA,CAAA0C,IAAA;UAAsBM,SAAS,EAAC,aAAa;UAAC,eAAa,8BAA8BU,OAAO,CAAC1B,GAAG,EAAG;UAAAiB,QAAA,gBACrG,IAAAjD,WAAA,CAAAmD,GAAA,EAACvD,QAAA,CAAA+D,IAAI;YAACC,GAAG,EAAEC,yBAAmB;YAACb,SAAS,EAAC;UAAoB,CAAE,CAAC,eAChE,IAAAhD,WAAA,CAAA0C,IAAA;YAAAO,QAAA,gBACE,IAAAjD,WAAA,CAAAmD,GAAA;cAAKH,SAAS,EAAC,kBAAkB;cAAAC,QAAA,EAAES,OAAO,CAAChC;YAAK,CAAM,CAAC,eACvD,IAAA1B,WAAA,CAAAmD,GAAA;cAAAF,QAAA,EAAMS,OAAO,CAACxB;YAAI,CAAM,CAAC;UAAA,CACtB,CAAC;QAAA,GALCwB,OAAO,CAAC1B,GAMb,CACL;MAAC,CACA;IAAC,CACW,CAAC,eACnB,IAAAhC,WAAA,CAAA0C,IAAA,EAAC9C,QAAA,CAAA+C,WAAW,CAACmB,MAAM;MAACd,SAAS,EAAC,6BAA6B;MAAAC,QAAA,gBACzD,IAAAjD,WAAA,CAAA0C,IAAA,EAAC9C,QAAA,CAAAmE,SAAS;QAAAd,QAAA,GACP1B,WAAW,iBACV,IAAAvB,WAAA,CAAAmD,GAAA,EAACvD,QAAA,CAAAoE,MAAM;UACLV,EAAE,EAAC,GAAG;UACNW,IAAI,EAAE3C,WAAY;UAClBT,OAAO,EAAE,WAAWiB,UAAU,EAAG;UACjCoC,OAAO,EAAEnD,eAAgB;UACzB,eAAY,oCAAoC;UAAAkC,QAAA,EAE/CzB,WAAW,GACRR,aAAa,CAACW,iBAAQ,CAACwC,kBAAkB,EAAE;YAAEC,KAAK,EAAE5C;UAAY,CAAC,CAAC,GAClER,aAAa,CAACW,iBAAQ,CAAC0C,eAAe;QAAC,CACrC,CACT,eACD,IAAArE,WAAA,CAAAmD,GAAA,EAACvD,QAAA,CAAAoE,MAAM;UACLV,EAAE,EAAC,GAAG;UACNW,IAAI,EAAE/C,KAAK,CAACoD,YAAa;UACzBzD,OAAO,EAAEiB,UAAW;UACpBoC,OAAO,EAAEpD,gBAAiB;UAC1B,eAAY,qCAAqC;UAAAmC,QAAA,EAEhDjC,aAAa,CAACW,iBAAQ,CAAC4C,kBAAkB;QAAC,CACrC,CAAC;MAAA,CACA,CAAC,EACX9C,WAAW,iBACV,IAAAzB,WAAA,CAAAmD,GAAA;QAAOH,SAAS,EAAC,MAAM;QAAC,eAAY,mCAAmC;QAAAC,QAAA,EAAEjC,aAAa,CAACW,iBAAQ,CAAC6C,aAAa;MAAC,CAAQ,CACvH;IAAA,CACiB,CAAC;EAAA,CACV,CAAC;AAElB,CAAC;AAEDhE,yBAAyB,CAACiE,SAAS,GAAG;EACpC/D,QAAQ,EAAEgE,kBAAS,CAACC,MAAM,CAACC,UAAU;EACrCjE,MAAM,EAAE+D,kBAAS,CAACG,IAAI,CAACD,UAAU;EACjChE,OAAO,EAAE8D,kBAAS,CAACI,IAAI,CAACF,UAAU;EAClC/D,OAAO,EAAE6D,kBAAS,CAACK,KAAK,CAACC,MAAM,CAACC,MAAM,CAAC7E,sBAAsB,CAAC,CAAC;EAC/DU,gBAAgB,EAAE4D,kBAAS,CAACI,IAAI;EAChC/D,eAAe,EAAE2D,kBAAS,CAACI;AAC7B,CAAC;AAEDtE,yBAAyB,CAAC0E,YAAY,GAAG;EACvCrE,OAAO,EAAET,sBAAsB,CAACG,MAAM;EACtCO,gBAAgB,EAAEqE,SAAS;EAC3BpE,eAAe,EAAEoE;AACnB,CAAC;AAAC,IAAAC,QAAA,GAAA/E,OAAA,CAAAF,OAAA,GAEaK,yBAAyB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SubscriptionBenefitsModal.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_icons","_certificatePreview","_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","trialBenefit","key","benefitTrialTitle","body","benefitTrialBody","benefits","benefitCertificatesTitle","benefitCertificatesBody","benefitChangeCourseTitle","benefitChangeCourseBodyFreeTrial","benefitChangeCourseBody","filter","Boolean","purchaseButton","jsx","Button","as","href","className","onClick","children","earnCertificateFor","price","purchaseNoPrice","subscribeButton","subscribeUrl","continueToCheckout","jsxs","ModalDialog","size","hasCloseButton","isFullscreenOnMobile","isOverflowVisible","Hero","Content","bgColor","Header","brand","Title","modalSubtitle","Body","map","benefit","Icon","src","Check","CheckCircleOutline","Footer","ActionRow","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 { Check, CheckCircleOutline } from '@openedx/paragon/icons';\n\nimport CertificatePreview from '../upgrade-notification/certificate-preview';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\nimport './SubscriptionBenefitsModal.scss';\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). UpgradeModal opens the free trial one. */\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\n const trialBenefit = hasTrial && {\n key: 'trial',\n title: formatMessage(messages.benefitTrialTitle),\n body: formatMessage(messages.benefitTrialBody),\n };\n // Figma: the free trial pop-up leads with the trial; the launch pop-up ends with it.\n const benefits = [\n isFreeTrial && trialBenefit,\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(isFreeTrial ? messages.benefitChangeCourseBodyFreeTrial : messages.benefitChangeCourseBody),\n },\n !isFreeTrial && trialBenefit,\n ].filter(Boolean);\n\n const purchaseButton = canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant=\"outline-brand\"\n className={isFreeTrial ? 'rounded-pill w-100 mt-2' : 'rounded-pill'}\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 const subscribeButton = (\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"brand\"\n className={isFreeTrial ? 'rounded-pill w-100' : 'rounded-pill'}\n onClick={onSubscribeClick}\n data-testid=\"subscription-modal-subscribe-button\"\n >\n {formatMessage(messages.continueToCheckout)}\n </Button>\n );\n\n return (\n <ModalDialog\n title={title}\n isOpen={isOpen}\n onClose={onClose}\n size={isFreeTrial ? 'md' : 'lg'}\n variant={isFreeTrial ? 'dark' : 'default'} // dark inverts the close button over the certificate hero\n hasCloseButton\n isFullscreenOnMobile\n isOverflowVisible={false}\n className={`subscription-benefits-modal subscription-benefits-modal--${isFreeTrial ? 'free-trial' : 'launch'}`}\n >\n {isFreeTrial && (\n <ModalDialog.Hero data-testid=\"subscription-modal-certificate\">\n {/* As BaseModal does: the dark variant paints hero text white, so pin the certificate text dark. */}\n <ModalDialog.Hero.Content className=\"m-0 text-primary-500\">\n <CertificatePreview courseId={courseId} bgColor=\"bg-white\" />\n </ModalDialog.Hero.Content>\n </ModalDialog.Hero>\n )}\n <ModalDialog.Header>\n {!isFreeTrial && (\n <p className=\"font-weight-bold mb-2\" data-testid=\"subscription-modal-brand\">{formatMessage(messages.brand)}</p>\n )}\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={isFreeTrial ? 'list-unstyled mb-0' : '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={isFreeTrial ? Check : 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 {isFreeTrial ? (\n <ModalDialog.Footer className=\"flex-column\">\n {subscribeButton}\n {purchaseButton}\n </ModalDialog.Footer>\n ) : (\n <ModalDialog.Footer>\n <ActionRow>\n {purchaseButton}\n {subscribeButton}\n </ActionRow>\n </ModalDialog.Footer>\n )}\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":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@use "modal-chrome";
|
|
2
|
+
|
|
3
|
+
// Launch pop-up: Light/200 background with the shared chrome.
|
|
4
|
+
.subscription-benefits-modal--launch.pgn__modal {
|
|
5
|
+
@include modal-chrome.modal-chrome(var(--pgn-color-light-300));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// Free trial pop-up (Figma 3339-7937): certificate on Primary/900, white body, 24px padding,
|
|
9
|
+
// upright title. The dark variant is only there to invert the close button; it also darkens the
|
|
10
|
+
// hero and header, so the hero gets the Figma colour and the header goes back to the content colours.
|
|
11
|
+
.subscription-benefits-modal--free-trial.pgn__modal {
|
|
12
|
+
--pgn-size-modal-content-border-radius: 12px;
|
|
13
|
+
max-width: 521px;
|
|
14
|
+
|
|
15
|
+
&.pgn__modal-dark .pgn__modal-hero {
|
|
16
|
+
background-color: var(--pgn-color-primary-900);
|
|
17
|
+
padding: 24px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.pgn__modal-dark .pgn__modal-header {
|
|
21
|
+
background-color: var(--pgn-color-modal-content-bg);
|
|
22
|
+
color: var(--pgn-color-body-base);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.pgn__modal-title {
|
|
26
|
+
font-size: 1.5rem;
|
|
27
|
+
line-height: 1.25;
|
|
28
|
+
font-weight: 800;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.pgn__modal-header,
|
|
32
|
+
.pgn__modal-body,
|
|
33
|
+
.pgn__modal-footer {
|
|
34
|
+
padding-left: 24px;
|
|
35
|
+
padding-right: 24px;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -216,6 +216,7 @@ const SubscriptionComparisonModal = _ref => {
|
|
|
216
216
|
as: "a",
|
|
217
217
|
href: offer.subscribeUrl,
|
|
218
218
|
variant: "primary",
|
|
219
|
+
className: "rounded-pill",
|
|
219
220
|
onClick: onSubscribeClick,
|
|
220
221
|
"data-testid": "subscription-comparison-subscribe-button",
|
|
221
222
|
children: formatMessage(hasTrial ? _messages.default.startFreeTrial : _messages.default.subscribe)
|
|
@@ -223,6 +224,7 @@ const SubscriptionComparisonModal = _ref => {
|
|
|
223
224
|
as: "a",
|
|
224
225
|
href: purchaseUrl,
|
|
225
226
|
variant: "outline-primary",
|
|
227
|
+
className: "rounded-pill",
|
|
226
228
|
onClick: onPurchaseClick,
|
|
227
229
|
"data-testid": "subscription-comparison-purchase-button",
|
|
228
230
|
children: coursePrice ? formatMessage(_messages.default.buyFor, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionComparisonModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_paragon","_icons","_useSubscriptionOffer","_messages","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SUBSCRIBE","BUY","SubscriptionComparisonModal","_ref","courseId","isOpen","onClose","onSubscribeClick","onPurchaseClick","formatMessage","useIntl","offer","useSubscriptionOffer","isSmallScreen","useWindowSize","width","breakpoints","medium","minWidth","activePlan","setActivePlan","useState","canSubscribe","hasTrial","purchaseUrl","canPurchase","coursePrice","subscribePrice","included","jsx","Icon","src","CheckCircle","screenReaderText","messages","includedAlt","notIncluded","className","children","notIncludedAlt","cell","value","subscribePriceCell","buyPriceCell","jsxs","Fragment","oneTimePurchase","rows","key","label","rowPrice","featureUnlimitedAccess","rowEarnCertificates","certificatesUnlimited","certificatesOne","featureGradedAssignments","featureChangeCourses","cancelAnytime","featureFreeTrial","filter","Boolean","plans","name","subscribeColumn","buyCourseColumn","activeKey","some","plan","visiblePlans","activeIndex","findIndex","showPlanAt","index","length","title","comparisonTitle","ModalDialog","size","hasCloseButton","isFullscreenOnMobile","isOverflowVisible","Header","Title","as","comparisonSubtitle","Body","scope","featureColumn","map","row","IconButton","ChevronLeft","iconAs","alt","previousPlan","onClick","type","classNames","showPlan","ChevronRight","nextPlan","Footer","ActionRow","Button","href","subscribeUrl","variant","startFreeTrial","subscribe","buyFor","price","purchaseNoPrice","propTypes","PropTypes","string","isRequired","bool","func","defaultProps","undefined","_default","exports"],"sources":["../../src/subscription-upsell/SubscriptionComparisonModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, breakpoints, Button, Icon, IconButton, ModalDialog, useWindowSize,\n} from '@openedx/paragon';\nimport { ChevronLeft, ChevronRight, CheckCircle } from '@openedx/paragon/icons';\n\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\nimport './SubscriptionComparisonModal.scss';\n\nconst SUBSCRIBE = 'subscribe';\nconst BUY = 'buy';\n\n/** Subscribe vs Buy course pop-up (Figma 3339-8172); one column at a time on small screens. */\nconst SubscriptionComparisonModal = ({\n courseId,\n isOpen,\n onClose,\n onSubscribeClick,\n onPurchaseClick,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n const isSmallScreen = useWindowSize().width < breakpoints.medium.minWidth;\n const [activePlan, setActivePlan] = useState(SUBSCRIBE);\n\n if (!offer || !offer.canSubscribe) {\n return null;\n }\n\n const {\n hasTrial, purchaseUrl, canPurchase, coursePrice, subscribePrice,\n } = offer;\n\n const included = <Icon src={CheckCircle} screenReaderText={formatMessage(messages.includedAlt)} />;\n const notIncluded = <span className=\"sr-only\">{formatMessage(messages.notIncludedAlt)}</span>;\n const cell = (value) => {\n if (value === true) { return included; }\n if (value === false) { return notIncluded; }\n return value || null;\n };\n\n const subscribePriceCell = subscribePrice && <div className=\"font-weight-bold\">{subscribePrice}</div>;\n const buyPriceCell = coursePrice && (\n <>\n <div className=\"font-weight-bold\">{coursePrice}</div>\n <small>{formatMessage(messages.oneTimePurchase)}</small>\n </>\n );\n\n const rows = [\n {\n key: 'price', label: formatMessage(messages.rowPrice), [SUBSCRIBE]: subscribePriceCell, [BUY]: buyPriceCell,\n },\n {\n key: 'unlimited-access', label: formatMessage(messages.featureUnlimitedAccess), [SUBSCRIBE]: true, [BUY]: true,\n },\n {\n key: 'certificates',\n label: formatMessage(messages.rowEarnCertificates),\n [SUBSCRIBE]: formatMessage(messages.certificatesUnlimited),\n [BUY]: formatMessage(messages.certificatesOne),\n },\n {\n key: 'graded-assignments', label: formatMessage(messages.featureGradedAssignments), [SUBSCRIBE]: true, [BUY]: true,\n },\n {\n key: 'change-courses', label: formatMessage(messages.featureChangeCourses), [SUBSCRIBE]: true, [BUY]: false,\n },\n {\n key: 'cancel-anytime', label: formatMessage(messages.cancelAnytime), [SUBSCRIBE]: true, [BUY]: false,\n },\n hasTrial && {\n key: 'free-trial', label: formatMessage(messages.featureFreeTrial), [SUBSCRIBE]: true, [BUY]: false,\n },\n ].filter(Boolean);\n\n const plans = [\n { key: SUBSCRIBE, name: formatMessage(messages.subscribeColumn), className: 'plan-subscribe' },\n canPurchase && { key: BUY, name: formatMessage(messages.buyCourseColumn), className: 'plan-buy' },\n ].filter(Boolean);\n // The selected plan can vanish, e.g. Buy was selected and the course lost its purchase link.\n const activeKey = plans.some((plan) => plan.key === activePlan) ? activePlan : plans[0].key;\n const visiblePlans = isSmallScreen ? plans.filter((plan) => plan.key === activeKey) : plans;\n const activeIndex = plans.findIndex((plan) => plan.key === activeKey);\n const showPlanAt = (index) => setActivePlan(plans[(index + plans.length) % plans.length].key);\n\n const title = formatMessage(messages.comparisonTitle);\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-comparison-modal\"\n >\n <ModalDialog.Header>\n <ModalDialog.Title as=\"h2\">{title}</ModalDialog.Title>\n <p className=\"mt-2 mb-0\">{formatMessage(messages.comparisonSubtitle)}</p>\n </ModalDialog.Header>\n <ModalDialog.Body>\n <table className=\"w-100 text-center subscription-comparison-table\" data-testid=\"subscription-comparison-table\">\n <thead>\n <tr>\n <th scope=\"col\" className=\"feature-header\"><span className=\"sr-only\">{formatMessage(messages.featureColumn)}</span></th>\n {visiblePlans.map((plan) => (\n <th scope=\"col\" key={plan.key} className={plan.className} data-testid={`subscription-comparison-header-${plan.key}`}>\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.key} data-testid={`subscription-comparison-row-${row.key}`}>\n <th scope=\"row\" className=\"feature-cell\">{row.label}</th>\n {visiblePlans.map((plan) => (\n <td key={plan.key} className={plan.className} data-testid={`subscription-comparison-cell-${row.key}-${plan.key}`}>\n <div className=\"center-items flex-column\">{cell(row[plan.key])}</div>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {isSmallScreen && plans.length > 1 && (\n <div className=\"d-flex align-items-center justify-content-center mt-3\" data-testid=\"subscription-comparison-controls\">\n <IconButton\n src={ChevronLeft}\n iconAs={Icon}\n alt={formatMessage(messages.previousPlan)}\n onClick={() => showPlanAt(activeIndex - 1)}\n />\n {plans.map((plan) => (\n <button\n type=\"button\"\n key={plan.key}\n className={classNames('btn btn-link p-1', { 'font-weight-bold': plan.key === activeKey })}\n aria-pressed={plan.key === activeKey}\n aria-label={formatMessage(messages.showPlan, { plan: plan.name })}\n onClick={() => setActivePlan(plan.key)}\n >\n {plan.key === activeKey ? '●' : '○'}\n </button>\n ))}\n <IconButton\n src={ChevronRight}\n iconAs={Icon}\n alt={formatMessage(messages.nextPlan)}\n onClick={() => showPlanAt(activeIndex + 1)}\n />\n </div>\n )}\n </ModalDialog.Body>\n <ModalDialog.Footer>\n <ActionRow\n className={classNames({ 'subscription-comparison-actions-stacked': isSmallScreen })}\n data-testid=\"subscription-comparison-actions\"\n >\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"primary\"\n onClick={onSubscribeClick}\n data-testid=\"subscription-comparison-subscribe-button\"\n >\n {formatMessage(hasTrial ? messages.startFreeTrial : messages.subscribe)}\n </Button>\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant=\"outline-primary\"\n onClick={onPurchaseClick}\n data-testid=\"subscription-comparison-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.buyFor, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nSubscriptionComparisonModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n};\n\nSubscriptionComparisonModal.defaultProps = {\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n};\n\nexport default SubscriptionComparisonModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SubscriptionComparisonModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_paragon","_icons","_useSubscriptionOffer","_messages","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SUBSCRIBE","BUY","SubscriptionComparisonModal","_ref","courseId","isOpen","onClose","onSubscribeClick","onPurchaseClick","formatMessage","useIntl","offer","useSubscriptionOffer","isSmallScreen","useWindowSize","width","breakpoints","medium","minWidth","activePlan","setActivePlan","useState","canSubscribe","hasTrial","purchaseUrl","canPurchase","coursePrice","subscribePrice","included","jsx","Icon","src","CheckCircle","screenReaderText","messages","includedAlt","notIncluded","className","children","notIncludedAlt","cell","value","subscribePriceCell","buyPriceCell","jsxs","Fragment","oneTimePurchase","rows","key","label","rowPrice","featureUnlimitedAccess","rowEarnCertificates","certificatesUnlimited","certificatesOne","featureGradedAssignments","featureChangeCourses","cancelAnytime","featureFreeTrial","filter","Boolean","plans","name","subscribeColumn","buyCourseColumn","activeKey","some","plan","visiblePlans","activeIndex","findIndex","showPlanAt","index","length","title","comparisonTitle","ModalDialog","size","hasCloseButton","isFullscreenOnMobile","isOverflowVisible","Header","Title","as","comparisonSubtitle","Body","scope","featureColumn","map","row","IconButton","ChevronLeft","iconAs","alt","previousPlan","onClick","type","classNames","showPlan","ChevronRight","nextPlan","Footer","ActionRow","Button","href","subscribeUrl","variant","startFreeTrial","subscribe","buyFor","price","purchaseNoPrice","propTypes","PropTypes","string","isRequired","bool","func","defaultProps","undefined","_default","exports"],"sources":["../../src/subscription-upsell/SubscriptionComparisonModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n ActionRow, breakpoints, Button, Icon, IconButton, ModalDialog, useWindowSize,\n} from '@openedx/paragon';\nimport { ChevronLeft, ChevronRight, CheckCircle } from '@openedx/paragon/icons';\n\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\nimport './SubscriptionComparisonModal.scss';\n\nconst SUBSCRIBE = 'subscribe';\nconst BUY = 'buy';\n\n/** Subscribe vs Buy course pop-up (Figma 3339-8172); one column at a time on small screens. */\nconst SubscriptionComparisonModal = ({\n courseId,\n isOpen,\n onClose,\n onSubscribeClick,\n onPurchaseClick,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n const isSmallScreen = useWindowSize().width < breakpoints.medium.minWidth;\n const [activePlan, setActivePlan] = useState(SUBSCRIBE);\n\n if (!offer || !offer.canSubscribe) {\n return null;\n }\n\n const {\n hasTrial, purchaseUrl, canPurchase, coursePrice, subscribePrice,\n } = offer;\n\n const included = <Icon src={CheckCircle} screenReaderText={formatMessage(messages.includedAlt)} />;\n const notIncluded = <span className=\"sr-only\">{formatMessage(messages.notIncludedAlt)}</span>;\n const cell = (value) => {\n if (value === true) { return included; }\n if (value === false) { return notIncluded; }\n return value || null;\n };\n\n const subscribePriceCell = subscribePrice && <div className=\"font-weight-bold\">{subscribePrice}</div>;\n const buyPriceCell = coursePrice && (\n <>\n <div className=\"font-weight-bold\">{coursePrice}</div>\n <small>{formatMessage(messages.oneTimePurchase)}</small>\n </>\n );\n\n const rows = [\n {\n key: 'price', label: formatMessage(messages.rowPrice), [SUBSCRIBE]: subscribePriceCell, [BUY]: buyPriceCell,\n },\n {\n key: 'unlimited-access', label: formatMessage(messages.featureUnlimitedAccess), [SUBSCRIBE]: true, [BUY]: true,\n },\n {\n key: 'certificates',\n label: formatMessage(messages.rowEarnCertificates),\n [SUBSCRIBE]: formatMessage(messages.certificatesUnlimited),\n [BUY]: formatMessage(messages.certificatesOne),\n },\n {\n key: 'graded-assignments', label: formatMessage(messages.featureGradedAssignments), [SUBSCRIBE]: true, [BUY]: true,\n },\n {\n key: 'change-courses', label: formatMessage(messages.featureChangeCourses), [SUBSCRIBE]: true, [BUY]: false,\n },\n {\n key: 'cancel-anytime', label: formatMessage(messages.cancelAnytime), [SUBSCRIBE]: true, [BUY]: false,\n },\n hasTrial && {\n key: 'free-trial', label: formatMessage(messages.featureFreeTrial), [SUBSCRIBE]: true, [BUY]: false,\n },\n ].filter(Boolean);\n\n const plans = [\n { key: SUBSCRIBE, name: formatMessage(messages.subscribeColumn), className: 'plan-subscribe' },\n canPurchase && { key: BUY, name: formatMessage(messages.buyCourseColumn), className: 'plan-buy' },\n ].filter(Boolean);\n // The selected plan can vanish, e.g. Buy was selected and the course lost its purchase link.\n const activeKey = plans.some((plan) => plan.key === activePlan) ? activePlan : plans[0].key;\n const visiblePlans = isSmallScreen ? plans.filter((plan) => plan.key === activeKey) : plans;\n const activeIndex = plans.findIndex((plan) => plan.key === activeKey);\n const showPlanAt = (index) => setActivePlan(plans[(index + plans.length) % plans.length].key);\n\n const title = formatMessage(messages.comparisonTitle);\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-comparison-modal\"\n >\n <ModalDialog.Header>\n <ModalDialog.Title as=\"h2\">{title}</ModalDialog.Title>\n <p className=\"mt-2 mb-0\">{formatMessage(messages.comparisonSubtitle)}</p>\n </ModalDialog.Header>\n <ModalDialog.Body>\n <table className=\"w-100 text-center subscription-comparison-table\" data-testid=\"subscription-comparison-table\">\n <thead>\n <tr>\n <th scope=\"col\" className=\"feature-header\"><span className=\"sr-only\">{formatMessage(messages.featureColumn)}</span></th>\n {visiblePlans.map((plan) => (\n <th scope=\"col\" key={plan.key} className={plan.className} data-testid={`subscription-comparison-header-${plan.key}`}>\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.key} data-testid={`subscription-comparison-row-${row.key}`}>\n <th scope=\"row\" className=\"feature-cell\">{row.label}</th>\n {visiblePlans.map((plan) => (\n <td key={plan.key} className={plan.className} data-testid={`subscription-comparison-cell-${row.key}-${plan.key}`}>\n <div className=\"center-items flex-column\">{cell(row[plan.key])}</div>\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {isSmallScreen && plans.length > 1 && (\n <div className=\"d-flex align-items-center justify-content-center mt-3\" data-testid=\"subscription-comparison-controls\">\n <IconButton\n src={ChevronLeft}\n iconAs={Icon}\n alt={formatMessage(messages.previousPlan)}\n onClick={() => showPlanAt(activeIndex - 1)}\n />\n {plans.map((plan) => (\n <button\n type=\"button\"\n key={plan.key}\n className={classNames('btn btn-link p-1', { 'font-weight-bold': plan.key === activeKey })}\n aria-pressed={plan.key === activeKey}\n aria-label={formatMessage(messages.showPlan, { plan: plan.name })}\n onClick={() => setActivePlan(plan.key)}\n >\n {plan.key === activeKey ? '●' : '○'}\n </button>\n ))}\n <IconButton\n src={ChevronRight}\n iconAs={Icon}\n alt={formatMessage(messages.nextPlan)}\n onClick={() => showPlanAt(activeIndex + 1)}\n />\n </div>\n )}\n </ModalDialog.Body>\n <ModalDialog.Footer>\n <ActionRow\n className={classNames({ 'subscription-comparison-actions-stacked': isSmallScreen })}\n data-testid=\"subscription-comparison-actions\"\n >\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"primary\"\n className=\"rounded-pill\"\n onClick={onSubscribeClick}\n data-testid=\"subscription-comparison-subscribe-button\"\n >\n {formatMessage(hasTrial ? messages.startFreeTrial : messages.subscribe)}\n </Button>\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant=\"outline-primary\"\n className=\"rounded-pill\"\n onClick={onPurchaseClick}\n data-testid=\"subscription-comparison-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.buyFor, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n </ActionRow>\n </ModalDialog.Footer>\n </ModalDialog>\n );\n};\n\nSubscriptionComparisonModal.propTypes = {\n courseId: PropTypes.string.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n};\n\nSubscriptionComparisonModal.defaultProps = {\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n};\n\nexport default SubscriptionComparisonModal;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
@use "modal-chrome";
|
|
2
|
+
|
|
3
|
+
// Brand/Putty/100 background with the shared chrome.
|
|
4
|
+
.subscription-comparison-modal.pgn__modal {
|
|
5
|
+
@include modal-chrome.modal-chrome(var(--pgn-color-light-200));
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
// Scoped to the modal so the sidebar card's UpsellTable styles stay untouched.
|
|
2
9
|
.subscription-comparison-modal {
|
|
3
10
|
.subscription-comparison-table {
|
|
@@ -31,6 +31,12 @@ const UPGRADE_STATE = exports.UPGRADE_STATE = {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
// Host callbacks (analytics, refresh) must never change the outcome of the upgrade request.
|
|
34
|
+
// Buy and Subscribe split the card evenly (zero basis), but stay content-sized where the host
|
|
35
|
+
// shrink-wraps the upsell (paywall, Dates banner). flex-fill would size them by label length.
|
|
36
|
+
const equalWidth = {
|
|
37
|
+
flex: '1 1 0',
|
|
38
|
+
minWidth: 'max-content'
|
|
39
|
+
};
|
|
34
40
|
const safeCall = function (fn) {
|
|
35
41
|
try {
|
|
36
42
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
@@ -142,7 +148,8 @@ const SubscriptionUpsell = _ref => {
|
|
|
142
148
|
"data-testid": "subscription-upgrade-failed",
|
|
143
149
|
children: formatMessage(_messages2.default.upgradeFailed)
|
|
144
150
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
145
|
-
variant: "
|
|
151
|
+
variant: "primary",
|
|
152
|
+
className: "rounded-pill",
|
|
146
153
|
block: true,
|
|
147
154
|
onClick: handleUpgrade,
|
|
148
155
|
disabled: upgradeState === UPGRADE_STATE.LOADING,
|
|
@@ -164,7 +171,9 @@ const SubscriptionUpsell = _ref => {
|
|
|
164
171
|
children: [canPurchase && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
165
172
|
as: "a",
|
|
166
173
|
href: purchaseUrl,
|
|
167
|
-
variant: offer.canSubscribe ? 'outline-primary' : '
|
|
174
|
+
variant: offer.canSubscribe ? 'outline-primary' : 'primary',
|
|
175
|
+
className: "rounded-pill",
|
|
176
|
+
style: equalWidth,
|
|
168
177
|
onClick: onPurchaseClick,
|
|
169
178
|
"data-testid": "subscription-purchase-button",
|
|
170
179
|
children: coursePrice ? formatMessage(_messages2.default.purchase, {
|
|
@@ -173,8 +182,9 @@ const SubscriptionUpsell = _ref => {
|
|
|
173
182
|
}), offer.canSubscribe && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
174
183
|
as: "a",
|
|
175
184
|
href: offer.subscribeUrl,
|
|
176
|
-
variant: "
|
|
177
|
-
className: "ml-2",
|
|
185
|
+
variant: "primary",
|
|
186
|
+
className: "ml-2 rounded-pill",
|
|
187
|
+
style: equalWidth,
|
|
178
188
|
onClick: onSubscribeClick,
|
|
179
189
|
"data-testid": "subscription-subscribe-button",
|
|
180
190
|
children: formatMessage(_messages2.default.subscribe)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionUpsell.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_i18n","_logging","_paragon","_lms_api","_messages","_reloadWhenUpgraded","_useSubscriptionOffer","_messages2","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UPGRADE_STATE","exports","IDLE","LOADING","PENDING","NOT_ACTIVE","FAILED","safeCall","fn","_len","args","Array","_key","Promise","resolve","catch","logError","error","SubscriptionUpsell","_ref","courseId","onSubscribeClick","onPurchaseClick","onUpgradeEvent","onUpgraded","className","formatMessage","useIntl","offer","useSubscriptionOffer","upgrades","setUpgrades","useState","inFlight","useRef","Set","upgradeState","setUpgradeFor","id","state","prev","pollSignal","useEffect","controller","AbortController","current","signal","abort","purchaseUrl","canPurchase","coursePrice","handleUpgrade","requestedCourseId","startPath","global","location","pathname","add","nextState","result","upgradeEnrollmentWithSubscription","success","SubscriptionUpgradeError","code","status","delete","reloadWhenUpgraded","canUpgradeInPlace","jsx","role","children","messages","upgradePending","jsxs","upgradeNotActive","subscribeUrl","Fragment","Hyperlink","destination","reactivateSubscription","upgradeFailed","Button","variant","block","onClick","disabled","upgrading","upgradeNow","hasUpsell","showNotIncluded","notIncluded","as","href","canSubscribe","purchase","price","purchaseNoPrice","subscribe","purchaseCode","upgradeNotificationMessages","discountCodeMessage","propTypes","PropTypes","string","isRequired","func","defaultProps","undefined","_default"],"sources":["../../src/subscription-upsell/SubscriptionUpsell.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { logError } from '@edx/frontend-platform/logging';\nimport { Button, Hyperlink } from '@openedx/paragon';\n\nimport { SubscriptionUpgradeError, upgradeEnrollmentWithSubscription } from '../data/lms_api';\nimport upgradeNotificationMessages from '../upgrade-notification/messages';\nimport reloadWhenUpgraded from './reloadWhenUpgraded';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\nexport const UPGRADE_STATE = {\n IDLE: 'idle',\n LOADING: 'loading',\n PENDING: 'pending',\n NOT_ACTIVE: 'not_active',\n FAILED: 'failed',\n};\n\n// Host callbacks (analytics, refresh) must never change the outcome of the upgrade request.\nconst safeCall = (fn, ...args) => {\n try {\n Promise.resolve(fn?.(...args)).catch(logError);\n } catch (error) {\n logError(error);\n }\n};\n\n/** Subscribe and Purchase, Purchase only, Upgrade now for subscribers, or the \"not included\" note. */\nconst SubscriptionUpsell = ({\n courseId,\n onSubscribeClick,\n onPurchaseClick,\n onUpgradeEvent,\n onUpgraded,\n className,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n // Per course, so a course change reads as idle and a late response cannot touch another course.\n const [upgrades, setUpgrades] = useState({});\n const inFlight = useRef(new Set());\n const upgradeState = upgrades[courseId] || UPGRADE_STATE.IDLE;\n const setUpgradeFor = (id, state) => setUpgrades((prev) => ({ ...prev, [id]: state }));\n // Cancels the reload poll when this component unmounts or shows another course.\n const pollSignal = useRef(null);\n useEffect(() => {\n const controller = new AbortController();\n pollSignal.current = controller.signal;\n return () => controller.abort();\n }, [courseId]);\n\n if (!offer) {\n return null;\n }\n\n const { purchaseUrl, canPurchase, coursePrice } = offer;\n\n const handleUpgrade = async () => {\n const requestedCourseId = courseId;\n const signal = pollSignal.current;\n // Read before the request, so moving to another unit while it is pending also rules out the reload.\n const startPath = global.location.pathname;\n if (inFlight.current.has(requestedCourseId)) {\n return;\n }\n inFlight.current.add(requestedCourseId);\n setUpgradeFor(requestedCourseId, UPGRADE_STATE.LOADING);\n safeCall(onUpgradeEvent, 'started');\n let nextState;\n let result;\n let error;\n try {\n result = await upgradeEnrollmentWithSubscription(requestedCourseId);\n if (result?.success !== true) {\n throw new SubscriptionUpgradeError('Upgrade was not accepted', { code: result?.code, status: result?.status });\n }\n nextState = UPGRADE_STATE.PENDING;\n } catch (e) {\n error = e;\n nextState = e.code === 'SUBSCRIPTION_NOT_ACTIVE' ? UPGRADE_STATE.NOT_ACTIVE : UPGRADE_STATE.FAILED;\n }\n inFlight.current.delete(requestedCourseId);\n setUpgradeFor(requestedCourseId, nextState);\n if (error) {\n safeCall(onUpgradeEvent, 'failed', error);\n } else {\n safeCall(onUpgradeEvent, 'succeeded', result);\n safeCall(onUpgraded || (() => reloadWhenUpgraded(requestedCourseId, { signal, startPath })), result);\n }\n };\n\n if (offer.canUpgradeInPlace) {\n if (upgradeState === UPGRADE_STATE.PENDING) {\n return <p className={className} role=\"status\" data-testid=\"subscription-upgrade-pending\">{formatMessage(messages.upgradePending)}</p>;\n }\n return (\n <div className={className}>\n {upgradeState === UPGRADE_STATE.NOT_ACTIVE && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-not-active\">\n {formatMessage(messages.upgradeNotActive)}\n {offer.subscribeUrl && (\n <>\n {' '}\n <Hyperlink destination={offer.subscribeUrl}>{formatMessage(messages.reactivateSubscription)}</Hyperlink>\n </>\n )}\n </p>\n )}\n {upgradeState === UPGRADE_STATE.FAILED && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-failed\">{formatMessage(messages.upgradeFailed)}</p>\n )}\n <Button\n variant=\"brand\"\n block\n onClick={handleUpgrade}\n disabled={upgradeState === UPGRADE_STATE.LOADING}\n data-testid=\"subscription-upgrade-now-button\"\n >\n {formatMessage(upgradeState === UPGRADE_STATE.LOADING ? messages.upgrading : messages.upgradeNow)}\n </Button>\n </div>\n );\n }\n\n if (!offer.hasUpsell) {\n return null;\n }\n\n return (\n <div className={className}>\n {offer.showNotIncluded && (\n <p data-testid=\"subscription-not-included\">{formatMessage(messages.notIncluded)}</p>\n )}\n <div className=\"d-flex\">\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant={offer.canSubscribe ? 'outline-primary' : 'brand'}\n onClick={onPurchaseClick}\n data-testid=\"subscription-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.purchase, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n {offer.canSubscribe && (\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"brand\"\n className=\"ml-2\"\n onClick={onSubscribeClick}\n data-testid=\"subscription-subscribe-button\"\n >\n {formatMessage(messages.subscribe)}\n </Button>\n )}\n </div>\n {canPurchase && offer.purchaseCode && (\n <p className=\"mt-2 mb-0\" data-testid=\"subscription-purchase-code\">\n {formatMessage(upgradeNotificationMessages.discountCodeMessage, {\n code: <span className=\"font-weight-bold\">{offer.purchaseCode}</span>,\n })}\n </p>\n )}\n </div>\n );\n};\n\nSubscriptionUpsell.propTypes = {\n courseId: PropTypes.string.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n // Called after an accepted upgrade. Without it, the page reloads once the LMS has upgraded the enrollment.\n onUpgraded: PropTypes.func,\n className: PropTypes.string,\n};\n\nSubscriptionUpsell.defaultProps = {\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n onUpgradeEvent: undefined,\n onUpgraded: undefined,\n className: undefined,\n};\n\nexport default SubscriptionUpsell;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SubscriptionUpsell.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_i18n","_logging","_paragon","_lms_api","_messages","_reloadWhenUpgraded","_useSubscriptionOffer","_messages2","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UPGRADE_STATE","exports","IDLE","LOADING","PENDING","NOT_ACTIVE","FAILED","equalWidth","flex","minWidth","safeCall","fn","_len","args","Array","_key","Promise","resolve","catch","logError","error","SubscriptionUpsell","_ref","courseId","onSubscribeClick","onPurchaseClick","onUpgradeEvent","onUpgraded","className","formatMessage","useIntl","offer","useSubscriptionOffer","upgrades","setUpgrades","useState","inFlight","useRef","Set","upgradeState","setUpgradeFor","id","state","prev","pollSignal","useEffect","controller","AbortController","current","signal","abort","purchaseUrl","canPurchase","coursePrice","handleUpgrade","requestedCourseId","startPath","global","location","pathname","add","nextState","result","upgradeEnrollmentWithSubscription","success","SubscriptionUpgradeError","code","status","delete","reloadWhenUpgraded","canUpgradeInPlace","jsx","role","children","messages","upgradePending","jsxs","upgradeNotActive","subscribeUrl","Fragment","Hyperlink","destination","reactivateSubscription","upgradeFailed","Button","variant","block","onClick","disabled","upgrading","upgradeNow","hasUpsell","showNotIncluded","notIncluded","as","href","canSubscribe","style","purchase","price","purchaseNoPrice","subscribe","purchaseCode","upgradeNotificationMessages","discountCodeMessage","propTypes","PropTypes","string","isRequired","func","defaultProps","undefined","_default"],"sources":["../../src/subscription-upsell/SubscriptionUpsell.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { logError } from '@edx/frontend-platform/logging';\nimport { Button, Hyperlink } from '@openedx/paragon';\n\nimport { SubscriptionUpgradeError, upgradeEnrollmentWithSubscription } from '../data/lms_api';\nimport upgradeNotificationMessages from '../upgrade-notification/messages';\nimport reloadWhenUpgraded from './reloadWhenUpgraded';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\nexport const UPGRADE_STATE = {\n IDLE: 'idle',\n LOADING: 'loading',\n PENDING: 'pending',\n NOT_ACTIVE: 'not_active',\n FAILED: 'failed',\n};\n\n// Host callbacks (analytics, refresh) must never change the outcome of the upgrade request.\n// Buy and Subscribe split the card evenly (zero basis), but stay content-sized where the host\n// shrink-wraps the upsell (paywall, Dates banner). flex-fill would size them by label length.\nconst equalWidth = { flex: '1 1 0', minWidth: 'max-content' };\n\nconst safeCall = (fn, ...args) => {\n try {\n Promise.resolve(fn?.(...args)).catch(logError);\n } catch (error) {\n logError(error);\n }\n};\n\n/** Subscribe and Purchase, Purchase only, Upgrade now for subscribers, or the \"not included\" note. */\nconst SubscriptionUpsell = ({\n courseId,\n onSubscribeClick,\n onPurchaseClick,\n onUpgradeEvent,\n onUpgraded,\n className,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n // Per course, so a course change reads as idle and a late response cannot touch another course.\n const [upgrades, setUpgrades] = useState({});\n const inFlight = useRef(new Set());\n const upgradeState = upgrades[courseId] || UPGRADE_STATE.IDLE;\n const setUpgradeFor = (id, state) => setUpgrades((prev) => ({ ...prev, [id]: state }));\n // Cancels the reload poll when this component unmounts or shows another course.\n const pollSignal = useRef(null);\n useEffect(() => {\n const controller = new AbortController();\n pollSignal.current = controller.signal;\n return () => controller.abort();\n }, [courseId]);\n\n if (!offer) {\n return null;\n }\n\n const { purchaseUrl, canPurchase, coursePrice } = offer;\n\n const handleUpgrade = async () => {\n const requestedCourseId = courseId;\n const signal = pollSignal.current;\n // Read before the request, so moving to another unit while it is pending also rules out the reload.\n const startPath = global.location.pathname;\n if (inFlight.current.has(requestedCourseId)) {\n return;\n }\n inFlight.current.add(requestedCourseId);\n setUpgradeFor(requestedCourseId, UPGRADE_STATE.LOADING);\n safeCall(onUpgradeEvent, 'started');\n let nextState;\n let result;\n let error;\n try {\n result = await upgradeEnrollmentWithSubscription(requestedCourseId);\n if (result?.success !== true) {\n throw new SubscriptionUpgradeError('Upgrade was not accepted', { code: result?.code, status: result?.status });\n }\n nextState = UPGRADE_STATE.PENDING;\n } catch (e) {\n error = e;\n nextState = e.code === 'SUBSCRIPTION_NOT_ACTIVE' ? UPGRADE_STATE.NOT_ACTIVE : UPGRADE_STATE.FAILED;\n }\n inFlight.current.delete(requestedCourseId);\n setUpgradeFor(requestedCourseId, nextState);\n if (error) {\n safeCall(onUpgradeEvent, 'failed', error);\n } else {\n safeCall(onUpgradeEvent, 'succeeded', result);\n safeCall(onUpgraded || (() => reloadWhenUpgraded(requestedCourseId, { signal, startPath })), result);\n }\n };\n\n if (offer.canUpgradeInPlace) {\n if (upgradeState === UPGRADE_STATE.PENDING) {\n return <p className={className} role=\"status\" data-testid=\"subscription-upgrade-pending\">{formatMessage(messages.upgradePending)}</p>;\n }\n return (\n <div className={className}>\n {upgradeState === UPGRADE_STATE.NOT_ACTIVE && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-not-active\">\n {formatMessage(messages.upgradeNotActive)}\n {offer.subscribeUrl && (\n <>\n {' '}\n <Hyperlink destination={offer.subscribeUrl}>{formatMessage(messages.reactivateSubscription)}</Hyperlink>\n </>\n )}\n </p>\n )}\n {upgradeState === UPGRADE_STATE.FAILED && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-failed\">{formatMessage(messages.upgradeFailed)}</p>\n )}\n <Button\n variant=\"primary\"\n className=\"rounded-pill\"\n block\n onClick={handleUpgrade}\n disabled={upgradeState === UPGRADE_STATE.LOADING}\n data-testid=\"subscription-upgrade-now-button\"\n >\n {formatMessage(upgradeState === UPGRADE_STATE.LOADING ? messages.upgrading : messages.upgradeNow)}\n </Button>\n </div>\n );\n }\n\n if (!offer.hasUpsell) {\n return null;\n }\n\n return (\n <div className={className}>\n {offer.showNotIncluded && (\n <p data-testid=\"subscription-not-included\">{formatMessage(messages.notIncluded)}</p>\n )}\n <div className=\"d-flex\">\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant={offer.canSubscribe ? 'outline-primary' : 'primary'}\n className=\"rounded-pill\"\n style={equalWidth}\n onClick={onPurchaseClick}\n data-testid=\"subscription-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.purchase, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n {offer.canSubscribe && (\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"primary\"\n className=\"ml-2 rounded-pill\"\n style={equalWidth}\n onClick={onSubscribeClick}\n data-testid=\"subscription-subscribe-button\"\n >\n {formatMessage(messages.subscribe)}\n </Button>\n )}\n </div>\n {canPurchase && offer.purchaseCode && (\n <p className=\"mt-2 mb-0\" data-testid=\"subscription-purchase-code\">\n {formatMessage(upgradeNotificationMessages.discountCodeMessage, {\n code: <span className=\"font-weight-bold\">{offer.purchaseCode}</span>,\n })}\n </p>\n )}\n </div>\n );\n};\n\nSubscriptionUpsell.propTypes = {\n courseId: PropTypes.string.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n // Called after an accepted upgrade. Without it, the page reloads once the LMS has upgraded the enrollment.\n onUpgraded: PropTypes.func,\n className: PropTypes.string,\n};\n\nSubscriptionUpsell.defaultProps = {\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n onUpgradeEvent: undefined,\n onUpgraded: undefined,\n className: undefined,\n};\n\nexport default SubscriptionUpsell;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Shared pop-up chrome from the Figma (launch 3482-70647, comparison 3339-8172): 900px wide,
|
|
2
|
+
// 12px radius, 56px padding with 40px gaps, heavy italic title. Include it under a selector that
|
|
3
|
+
// also carries .pgn__modal, so the rules outweigh Paragon's instead of relying on load order.
|
|
4
|
+
// $bg is the content colour token; the header and footer paint it themselves, so it is set as the
|
|
5
|
+
// token rather than as background-color.
|
|
6
|
+
@mixin modal-chrome($bg) {
|
|
7
|
+
--pgn-color-modal-content-bg: #{$bg};
|
|
8
|
+
--pgn-size-modal-content-border-radius: 12px; // Paragon reads it, and still zeroes it when fullscreen
|
|
9
|
+
max-width: 900px;
|
|
10
|
+
|
|
11
|
+
// Explicit padding on all three replaces Paragon's, so the gaps are exactly 40px.
|
|
12
|
+
.pgn__modal-header {
|
|
13
|
+
padding: 56px 56px 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.pgn__modal-body {
|
|
17
|
+
padding: 40px 56px 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.pgn__modal-footer {
|
|
21
|
+
padding: 40px 56px 56px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.pgn__modal-title {
|
|
25
|
+
font-size: 2rem;
|
|
26
|
+
line-height: 1.25; // Paragon's is fixed from the h3 token, so it would crowd 2rem text
|
|
27
|
+
font-weight: 800;
|
|
28
|
+
font-style: italic; // display font TBD (LP-1465 question 7)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@media (max-width: 576px) {
|
|
32
|
+
.pgn__modal-header {
|
|
33
|
+
padding: 24px 24px 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.pgn__modal-body {
|
|
37
|
+
padding: 24px 24px 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.pgn__modal-footer {
|
|
41
|
+
padding: 24px;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -161,6 +161,11 @@ const messages = (0, _i18n.defineMessages)({
|
|
|
161
161
|
defaultMessage: 'This subscription offers unlimited flexibility. Change topics or courses anytime.',
|
|
162
162
|
description: 'Benefit body: switch courses'
|
|
163
163
|
},
|
|
164
|
+
benefitChangeCourseBodyFreeTrial: {
|
|
165
|
+
id: 'advertisements.subscription.modal.benefit.change-course.body.free-trial',
|
|
166
|
+
defaultMessage: 'Subscribers get verified access to hundreds of courses and programs',
|
|
167
|
+
description: 'Benefit body: change course, free trial pop-up wording'
|
|
168
|
+
},
|
|
164
169
|
benefitTrialTitle: {
|
|
165
170
|
id: 'advertisements.subscription.modal.benefit.trial.title',
|
|
166
171
|
defaultMessage: 'Get your free trial',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","names":["_i18n","require","messages","defineMessages","subscribe","id","defaultMessage","description","purchase","purchaseNoPrice","upgradeNow","upgrading","upgradePending","upgradeNotActive","reactivateSubscription","upgradeFailed","cardHeader","benefitsHeader","featureColumn","buyColumn","subscribeColumn","pricePerInterval","featureFreeTrial","featureChangeCourses","featureCertificates","featureCertificatesLink","featureGradedAssignments","featureUnlimitedAccess","includedAlt","notIncludedAlt","brand","modalTitleFreeTrial","modalTitleLaunch","modalSubtitle","benefitCertificatesTitle","benefitCertificatesBody","benefitChangeCourseTitle","benefitChangeCourseBody","benefitTrialTitle","benefitTrialBody","earnCertificateFor","continueToCheckout","cancelAnytime","comparisonTitle","comparisonSubtitle","buyCourseColumn","rowPrice","oneTimePurchase","rowEarnCertificates","certificatesUnlimited","certificatesOne","startFreeTrial","buyFor","previousPlan","nextPlan","showPlan","notIncluded","_default","exports","default"],"sources":["../../src/subscription-upsell/messages.js"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n subscribe: {\n id: 'advertisements.subscription.subscribe',\n defaultMessage: 'Subscribe',\n description: 'Button that sends the learner to subscription checkout',\n },\n purchase: {\n id: 'advertisements.subscription.purchase',\n defaultMessage: 'Buy {price}',\n description: 'Button that sends the learner to one-time purchase checkout for this course. {price} is the formatted course price, for example $49.',\n },\n purchaseNoPrice: {\n id: 'advertisements.subscription.purchase-no-price',\n defaultMessage: 'Buy',\n description: 'Purchase button label when the course price is not known',\n },\n upgradeNow: {\n id: 'advertisements.subscription.upgrade-now',\n defaultMessage: 'Upgrade now',\n description: 'Button for a subscriber to unlock this course under their subscription',\n },\n upgrading: {\n id: 'advertisements.subscription.upgrading',\n defaultMessage: 'Upgrading…',\n description: 'Button label while the upgrade request is in progress',\n },\n upgradePending: {\n id: 'advertisements.subscription.upgrade-pending',\n defaultMessage: 'Your upgrade is being processed. This can take a moment.',\n description: 'Shown after the server accepted the upgrade but has not finished applying it',\n },\n upgradeNotActive: {\n id: 'advertisements.subscription.upgrade-not-active',\n defaultMessage: 'Your subscription is not active, so this course could not be upgraded.',\n description: 'Shown when the upgrade failed because the subscription is not active',\n },\n reactivateSubscription: {\n id: 'advertisements.subscription.reactivate',\n defaultMessage: 'Reactivate your subscription',\n description: 'Link to subscription checkout shown when the subscription is not active',\n },\n upgradeFailed: {\n id: 'advertisements.subscription.upgrade-failed',\n defaultMessage: 'We could not upgrade this course. Please try again.',\n description: 'Shown when the upgrade request failed for an unexpected reason',\n },\n cardHeader: {\n id: 'advertisements.subscription.card.header',\n defaultMessage: 'Make the most out of your learning',\n description: 'Header of the subscription upgrade card in the course sidebar',\n },\n benefitsHeader: {\n id: 'advertisements.subscription.card.benefits-header',\n defaultMessage: 'Upgrading can have huge benefits',\n description: 'Header above the Buy vs Subscribe comparison table',\n },\n featureColumn: {\n id: 'advertisements.subscription.card.feature-column',\n defaultMessage: 'Feature',\n description: 'Screen-reader-only header for the feature column of the comparison table',\n },\n buyColumn: {\n id: 'advertisements.subscription.card.buy-column',\n defaultMessage: 'Buy',\n description: 'Column header for the one-time purchase option',\n },\n subscribeColumn: {\n id: 'advertisements.subscription.card.subscribe-column',\n defaultMessage: 'Subscribe',\n description: 'Column header for the subscription option',\n },\n pricePerInterval: {\n id: 'advertisements.subscription.card.price-per-interval',\n defaultMessage: '{price}/{interval, select, month {month} year {year} other {{interval}}}',\n description: 'Subscription price with its billing interval, for example $59/month. interval is month or year.',\n },\n featureFreeTrial: {\n id: 'advertisements.subscription.card.feature.free-trial',\n defaultMessage: 'Free trial',\n description: 'Comparison row: a free trial is available',\n },\n featureChangeCourses: {\n id: 'advertisements.subscription.card.feature.change-courses',\n defaultMessage: 'Change courses for free',\n description: 'Comparison row: switch to other courses at no extra cost',\n },\n featureCertificates: {\n id: 'advertisements.subscription.card.feature.certificates',\n defaultMessage: 'Earn {certificateLink}',\n description: 'Comparison row: earn verified certificates. {certificateLink} is a link reading \"verified certificates\".',\n },\n featureCertificatesLink: {\n id: 'advertisements.subscription.card.feature.certificates-link',\n defaultMessage: 'verified certificates',\n description: 'Link text inside the earn certificates row',\n },\n featureGradedAssignments: {\n id: 'advertisements.subscription.card.feature.graded-assignments',\n defaultMessage: 'Complete graded assignments',\n description: 'Comparison row: access to graded assignments',\n },\n featureUnlimitedAccess: {\n id: 'advertisements.subscription.card.feature.unlimited-access',\n defaultMessage: 'Unlimited access to course materials',\n description: 'Comparison row: no access expiration',\n },\n includedAlt: {\n id: 'advertisements.subscription.card.included',\n defaultMessage: 'Included',\n description: 'Alt text for the check icon in the comparison table',\n },\n notIncludedAlt: {\n id: 'advertisements.subscription.card.not-included',\n defaultMessage: 'Not included',\n description: 'Alt text for the cross icon in the comparison table',\n },\n brand: {\n id: 'advertisements.subscription.brand',\n defaultMessage: 'edX Plus',\n description: 'Subscription product name shown above the pop-up title',\n },\n modalTitleFreeTrial: {\n id: 'advertisements.subscription.modal.title.free-trial',\n defaultMessage: 'Subscribe to start your free trial',\n description: 'Pop-up title when the learner is eligible for a free trial',\n },\n modalTitleLaunch: {\n id: 'advertisements.subscription.modal.title.launch',\n defaultMessage: 'Subscribe and upgrade this course',\n description: 'Pop-up title when there is no free trial to offer',\n },\n modalSubtitle: {\n id: 'advertisements.subscription.modal.subtitle',\n defaultMessage: 'Give your career a boost with flexible courses and new skills in your field.',\n description: 'Pop-up subtitle under the title',\n },\n benefitCertificatesTitle: {\n id: 'advertisements.subscription.modal.benefit.certificates.title',\n defaultMessage: 'Earn multiple certificates',\n description: 'Benefit title: unlimited certificates',\n },\n benefitCertificatesBody: {\n id: 'advertisements.subscription.modal.benefit.certificates.body',\n defaultMessage: 'There’s no limit to the certificates you can earn and add to your resume.',\n description: 'Benefit body: unlimited certificates',\n },\n benefitChangeCourseTitle: {\n id: 'advertisements.subscription.modal.benefit.change-course.title',\n defaultMessage: 'Change your course at any time',\n description: 'Benefit title: switch courses',\n },\n benefitChangeCourseBody: {\n id: 'advertisements.subscription.modal.benefit.change-course.body',\n defaultMessage: 'This subscription offers unlimited flexibility. Change topics or courses anytime.',\n description: 'Benefit body: switch courses',\n },\n benefitTrialTitle: {\n id: 'advertisements.subscription.modal.benefit.trial.title',\n defaultMessage: 'Get your free trial',\n description: 'Benefit title: free trial',\n },\n benefitTrialBody: {\n id: 'advertisements.subscription.modal.benefit.trial.body',\n defaultMessage: 'Try it for free to see if a subscription is right for you.',\n description: 'Benefit body: free trial',\n },\n earnCertificateFor: {\n id: 'advertisements.subscription.modal.earn-certificate-for',\n defaultMessage: 'Earn certificate for {price}',\n description: 'Pop-up button for one-time purchase. {price} is the course price.',\n },\n continueToCheckout: {\n id: 'advertisements.subscription.modal.continue-to-checkout',\n defaultMessage: 'Continue to checkout',\n description: 'Pop-up button that goes to subscription checkout',\n },\n cancelAnytime: {\n id: 'advertisements.subscription.modal.cancel-anytime',\n defaultMessage: 'Cancel anytime',\n description: 'Small note under the checkout button in the free trial pop-up',\n },\n comparisonTitle: {\n id: 'advertisements.subscription.comparison.title',\n defaultMessage: 'Try our new subscription or upgrade to a certificate',\n description: 'Title of the Subscribe vs Buy comparison pop-up',\n },\n comparisonSubtitle: {\n id: 'advertisements.subscription.comparison.subtitle',\n defaultMessage: 'See what other learning paths have to offer to learn if upgrading is right for you.',\n description: 'Subtitle of the comparison pop-up',\n },\n buyCourseColumn: {\n id: 'advertisements.subscription.comparison.buy-course-column',\n defaultMessage: 'Buy course',\n description: 'Column header for the one-time purchase option in the comparison pop-up',\n },\n rowPrice: {\n id: 'advertisements.subscription.comparison.row.price',\n defaultMessage: 'Price',\n description: 'Comparison row header: price',\n },\n oneTimePurchase: {\n id: 'advertisements.subscription.comparison.one-time-purchase',\n defaultMessage: 'One-time purchase',\n description: 'Small print under the course price',\n },\n rowEarnCertificates: {\n id: 'advertisements.subscription.comparison.row.earn-certificates',\n defaultMessage: 'Earn certificates',\n description: 'Comparison row header: certificates',\n },\n certificatesUnlimited: {\n id: 'advertisements.subscription.comparison.certificates-unlimited',\n defaultMessage: 'Unlimited',\n description: 'Certificates cell for the subscription column',\n },\n certificatesOne: {\n id: 'advertisements.subscription.comparison.certificates-one',\n defaultMessage: '1 certificate',\n description: 'Certificates cell for the one-time purchase column',\n },\n startFreeTrial: {\n id: 'advertisements.subscription.comparison.start-free-trial',\n defaultMessage: 'Start free trial',\n description: 'Subscribe button when a free trial is available',\n },\n buyFor: {\n id: 'advertisements.subscription.comparison.buy-for',\n defaultMessage: 'Buy for {price}',\n description: 'Purchase button in the comparison pop-up. {price} is the course price.',\n },\n previousPlan: {\n id: 'advertisements.subscription.comparison.previous-plan',\n defaultMessage: 'Previous option',\n description: 'Screen reader label for the arrow that shows the previous column on small screens',\n },\n nextPlan: {\n id: 'advertisements.subscription.comparison.next-plan',\n defaultMessage: 'Next option',\n description: 'Screen reader label for the arrow that shows the next column on small screens',\n },\n showPlan: {\n id: 'advertisements.subscription.comparison.show-plan',\n defaultMessage: 'Show {plan}',\n description: 'Screen reader label for the dot that shows one column on small screens. {plan} is the column name.',\n },\n notIncluded: {\n id: 'advertisements.subscription.not-included',\n defaultMessage: 'This course is not included in your subscription.',\n description: 'Note shown to subscribers on a course that is outside the subscription catalog',\n },\n});\n\nexport default messages;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"messages.js","names":["_i18n","require","messages","defineMessages","subscribe","id","defaultMessage","description","purchase","purchaseNoPrice","upgradeNow","upgrading","upgradePending","upgradeNotActive","reactivateSubscription","upgradeFailed","cardHeader","benefitsHeader","featureColumn","buyColumn","subscribeColumn","pricePerInterval","featureFreeTrial","featureChangeCourses","featureCertificates","featureCertificatesLink","featureGradedAssignments","featureUnlimitedAccess","includedAlt","notIncludedAlt","brand","modalTitleFreeTrial","modalTitleLaunch","modalSubtitle","benefitCertificatesTitle","benefitCertificatesBody","benefitChangeCourseTitle","benefitChangeCourseBody","benefitChangeCourseBodyFreeTrial","benefitTrialTitle","benefitTrialBody","earnCertificateFor","continueToCheckout","cancelAnytime","comparisonTitle","comparisonSubtitle","buyCourseColumn","rowPrice","oneTimePurchase","rowEarnCertificates","certificatesUnlimited","certificatesOne","startFreeTrial","buyFor","previousPlan","nextPlan","showPlan","notIncluded","_default","exports","default"],"sources":["../../src/subscription-upsell/messages.js"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n subscribe: {\n id: 'advertisements.subscription.subscribe',\n defaultMessage: 'Subscribe',\n description: 'Button that sends the learner to subscription checkout',\n },\n purchase: {\n id: 'advertisements.subscription.purchase',\n defaultMessage: 'Buy {price}',\n description: 'Button that sends the learner to one-time purchase checkout for this course. {price} is the formatted course price, for example $49.',\n },\n purchaseNoPrice: {\n id: 'advertisements.subscription.purchase-no-price',\n defaultMessage: 'Buy',\n description: 'Purchase button label when the course price is not known',\n },\n upgradeNow: {\n id: 'advertisements.subscription.upgrade-now',\n defaultMessage: 'Upgrade now',\n description: 'Button for a subscriber to unlock this course under their subscription',\n },\n upgrading: {\n id: 'advertisements.subscription.upgrading',\n defaultMessage: 'Upgrading…',\n description: 'Button label while the upgrade request is in progress',\n },\n upgradePending: {\n id: 'advertisements.subscription.upgrade-pending',\n defaultMessage: 'Your upgrade is being processed. This can take a moment.',\n description: 'Shown after the server accepted the upgrade but has not finished applying it',\n },\n upgradeNotActive: {\n id: 'advertisements.subscription.upgrade-not-active',\n defaultMessage: 'Your subscription is not active, so this course could not be upgraded.',\n description: 'Shown when the upgrade failed because the subscription is not active',\n },\n reactivateSubscription: {\n id: 'advertisements.subscription.reactivate',\n defaultMessage: 'Reactivate your subscription',\n description: 'Link to subscription checkout shown when the subscription is not active',\n },\n upgradeFailed: {\n id: 'advertisements.subscription.upgrade-failed',\n defaultMessage: 'We could not upgrade this course. Please try again.',\n description: 'Shown when the upgrade request failed for an unexpected reason',\n },\n cardHeader: {\n id: 'advertisements.subscription.card.header',\n defaultMessage: 'Make the most out of your learning',\n description: 'Header of the subscription upgrade card in the course sidebar',\n },\n benefitsHeader: {\n id: 'advertisements.subscription.card.benefits-header',\n defaultMessage: 'Upgrading can have huge benefits',\n description: 'Header above the Buy vs Subscribe comparison table',\n },\n featureColumn: {\n id: 'advertisements.subscription.card.feature-column',\n defaultMessage: 'Feature',\n description: 'Screen-reader-only header for the feature column of the comparison table',\n },\n buyColumn: {\n id: 'advertisements.subscription.card.buy-column',\n defaultMessage: 'Buy',\n description: 'Column header for the one-time purchase option',\n },\n subscribeColumn: {\n id: 'advertisements.subscription.card.subscribe-column',\n defaultMessage: 'Subscribe',\n description: 'Column header for the subscription option',\n },\n pricePerInterval: {\n id: 'advertisements.subscription.card.price-per-interval',\n defaultMessage: '{price}/{interval, select, month {month} year {year} other {{interval}}}',\n description: 'Subscription price with its billing interval, for example $59/month. interval is month or year.',\n },\n featureFreeTrial: {\n id: 'advertisements.subscription.card.feature.free-trial',\n defaultMessage: 'Free trial',\n description: 'Comparison row: a free trial is available',\n },\n featureChangeCourses: {\n id: 'advertisements.subscription.card.feature.change-courses',\n defaultMessage: 'Change courses for free',\n description: 'Comparison row: switch to other courses at no extra cost',\n },\n featureCertificates: {\n id: 'advertisements.subscription.card.feature.certificates',\n defaultMessage: 'Earn {certificateLink}',\n description: 'Comparison row: earn verified certificates. {certificateLink} is a link reading \"verified certificates\".',\n },\n featureCertificatesLink: {\n id: 'advertisements.subscription.card.feature.certificates-link',\n defaultMessage: 'verified certificates',\n description: 'Link text inside the earn certificates row',\n },\n featureGradedAssignments: {\n id: 'advertisements.subscription.card.feature.graded-assignments',\n defaultMessage: 'Complete graded assignments',\n description: 'Comparison row: access to graded assignments',\n },\n featureUnlimitedAccess: {\n id: 'advertisements.subscription.card.feature.unlimited-access',\n defaultMessage: 'Unlimited access to course materials',\n description: 'Comparison row: no access expiration',\n },\n includedAlt: {\n id: 'advertisements.subscription.card.included',\n defaultMessage: 'Included',\n description: 'Alt text for the check icon in the comparison table',\n },\n notIncludedAlt: {\n id: 'advertisements.subscription.card.not-included',\n defaultMessage: 'Not included',\n description: 'Alt text for the cross icon in the comparison table',\n },\n brand: {\n id: 'advertisements.subscription.brand',\n defaultMessage: 'edX Plus',\n description: 'Subscription product name shown above the pop-up title',\n },\n modalTitleFreeTrial: {\n id: 'advertisements.subscription.modal.title.free-trial',\n defaultMessage: 'Subscribe to start your free trial',\n description: 'Pop-up title when the learner is eligible for a free trial',\n },\n modalTitleLaunch: {\n id: 'advertisements.subscription.modal.title.launch',\n defaultMessage: 'Subscribe and upgrade this course',\n description: 'Pop-up title when there is no free trial to offer',\n },\n modalSubtitle: {\n id: 'advertisements.subscription.modal.subtitle',\n defaultMessage: 'Give your career a boost with flexible courses and new skills in your field.',\n description: 'Pop-up subtitle under the title',\n },\n benefitCertificatesTitle: {\n id: 'advertisements.subscription.modal.benefit.certificates.title',\n defaultMessage: 'Earn multiple certificates',\n description: 'Benefit title: unlimited certificates',\n },\n benefitCertificatesBody: {\n id: 'advertisements.subscription.modal.benefit.certificates.body',\n defaultMessage: 'There’s no limit to the certificates you can earn and add to your resume.',\n description: 'Benefit body: unlimited certificates',\n },\n benefitChangeCourseTitle: {\n id: 'advertisements.subscription.modal.benefit.change-course.title',\n defaultMessage: 'Change your course at any time',\n description: 'Benefit title: switch courses',\n },\n benefitChangeCourseBody: {\n id: 'advertisements.subscription.modal.benefit.change-course.body',\n defaultMessage: 'This subscription offers unlimited flexibility. Change topics or courses anytime.',\n description: 'Benefit body: switch courses',\n },\n benefitChangeCourseBodyFreeTrial: {\n id: 'advertisements.subscription.modal.benefit.change-course.body.free-trial',\n defaultMessage: 'Subscribers get verified access to hundreds of courses and programs',\n description: 'Benefit body: change course, free trial pop-up wording',\n },\n benefitTrialTitle: {\n id: 'advertisements.subscription.modal.benefit.trial.title',\n defaultMessage: 'Get your free trial',\n description: 'Benefit title: free trial',\n },\n benefitTrialBody: {\n id: 'advertisements.subscription.modal.benefit.trial.body',\n defaultMessage: 'Try it for free to see if a subscription is right for you.',\n description: 'Benefit body: free trial',\n },\n earnCertificateFor: {\n id: 'advertisements.subscription.modal.earn-certificate-for',\n defaultMessage: 'Earn certificate for {price}',\n description: 'Pop-up button for one-time purchase. {price} is the course price.',\n },\n continueToCheckout: {\n id: 'advertisements.subscription.modal.continue-to-checkout',\n defaultMessage: 'Continue to checkout',\n description: 'Pop-up button that goes to subscription checkout',\n },\n cancelAnytime: {\n id: 'advertisements.subscription.modal.cancel-anytime',\n defaultMessage: 'Cancel anytime',\n description: 'Small note under the checkout button in the free trial pop-up',\n },\n comparisonTitle: {\n id: 'advertisements.subscription.comparison.title',\n defaultMessage: 'Try our new subscription or upgrade to a certificate',\n description: 'Title of the Subscribe vs Buy comparison pop-up',\n },\n comparisonSubtitle: {\n id: 'advertisements.subscription.comparison.subtitle',\n defaultMessage: 'See what other learning paths have to offer to learn if upgrading is right for you.',\n description: 'Subtitle of the comparison pop-up',\n },\n buyCourseColumn: {\n id: 'advertisements.subscription.comparison.buy-course-column',\n defaultMessage: 'Buy course',\n description: 'Column header for the one-time purchase option in the comparison pop-up',\n },\n rowPrice: {\n id: 'advertisements.subscription.comparison.row.price',\n defaultMessage: 'Price',\n description: 'Comparison row header: price',\n },\n oneTimePurchase: {\n id: 'advertisements.subscription.comparison.one-time-purchase',\n defaultMessage: 'One-time purchase',\n description: 'Small print under the course price',\n },\n rowEarnCertificates: {\n id: 'advertisements.subscription.comparison.row.earn-certificates',\n defaultMessage: 'Earn certificates',\n description: 'Comparison row header: certificates',\n },\n certificatesUnlimited: {\n id: 'advertisements.subscription.comparison.certificates-unlimited',\n defaultMessage: 'Unlimited',\n description: 'Certificates cell for the subscription column',\n },\n certificatesOne: {\n id: 'advertisements.subscription.comparison.certificates-one',\n defaultMessage: '1 certificate',\n description: 'Certificates cell for the one-time purchase column',\n },\n startFreeTrial: {\n id: 'advertisements.subscription.comparison.start-free-trial',\n defaultMessage: 'Start free trial',\n description: 'Subscribe button when a free trial is available',\n },\n buyFor: {\n id: 'advertisements.subscription.comparison.buy-for',\n defaultMessage: 'Buy for {price}',\n description: 'Purchase button in the comparison pop-up. {price} is the course price.',\n },\n previousPlan: {\n id: 'advertisements.subscription.comparison.previous-plan',\n defaultMessage: 'Previous option',\n description: 'Screen reader label for the arrow that shows the previous column on small screens',\n },\n nextPlan: {\n id: 'advertisements.subscription.comparison.next-plan',\n defaultMessage: 'Next option',\n description: 'Screen reader label for the arrow that shows the next column on small screens',\n },\n showPlan: {\n id: 'advertisements.subscription.comparison.show-plan',\n defaultMessage: 'Show {plan}',\n description: 'Screen reader label for the dot that shows one column on small screens. {plan} is the column name.',\n },\n notIncluded: {\n id: 'advertisements.subscription.not-included',\n defaultMessage: 'This course is not included in your subscription.',\n description: 'Note shown to subscribers on a course that is outside the subscription catalog',\n },\n});\n\nexport default messages;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,6 +15,7 @@ var _NextButton = _interopRequireDefault(require("@src/courseware/course/sequenc
|
|
|
15
15
|
var _hooks2 = require("./hooks");
|
|
16
16
|
var _UpgradeModal = _interopRequireDefault(require("./UpgradeModal"));
|
|
17
17
|
var _dynamicExperienceSlot = _interopRequireDefault(require("../dynamic-experience-slot"));
|
|
18
|
+
var _subscriptionUpsell = require("../subscription-upsell");
|
|
18
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -49,6 +50,11 @@ const NextUnitButton = _ref => {
|
|
|
49
50
|
learningAssistantEnabled
|
|
50
51
|
} = (0, _modelStore.useModel)('coursewareMeta', courseId);
|
|
51
52
|
const isEnabled = (0, _hooks2.useIsModalEnabled)(courseId);
|
|
53
|
+
// UpgradeModal shows the subscription pop-up to a learner who can subscribe (same check as the card
|
|
54
|
+
// and banners, same deadline test as UpgradeModal). The Red Ventures slot would replace it, so skip it.
|
|
55
|
+
const pastDeadline = !!accessExpiration && new Date() > new Date(accessExpiration.upgradeDeadline);
|
|
56
|
+
const showsSubscription = !!(0, _subscriptionUpsell.useSubscriptionOffer)(courseId)?.canSubscribe && !pastDeadline;
|
|
57
|
+
const useInHouseModal = disableRedVentures || showsSubscription;
|
|
52
58
|
const [shouldShowModalOnClick, countNextClick] = (0, _hooks2.useInCourseUpgradeModal)();
|
|
53
59
|
const handleModal = () => {
|
|
54
60
|
if (isEnabled) {
|
|
@@ -83,7 +89,7 @@ const NextUnitButton = _ref => {
|
|
|
83
89
|
buttonText: buttonText,
|
|
84
90
|
disabled: disabled,
|
|
85
91
|
isAtTop: isAtTop
|
|
86
|
-
}), isOpen &&
|
|
92
|
+
}), isOpen && useInHouseModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeModal.default, _objectSpread({}, modalProps)), isOpen && !useInHouseModal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.ErrorBoundary, {
|
|
87
93
|
fallbackComponent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeModal.default, _objectSpread({}, modalProps)),
|
|
88
94
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_dynamicExperienceSlot.default, {
|
|
89
95
|
widgetName: "MonarchResolvedDynamicExperience",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NextUnitButton.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_frontendPlatform","_react2","_modelStore","_hooks","_NextButton","_hooks2","_UpgradeModal","_dynamicExperienceSlot","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NextUnitButton","_ref","disabled","buttonText","sequenceId","onClickHandler","nextLink","variant","buttonStyle","isAtTop","disableRedVentures","getConfig","DISABLE_RED_VENTURES_WIDGETS","toLowerCase","courseId","useContextId","isOpen","open","close","useToggle","verifiedMode","org","useModel","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","isEnabled","useIsModalEnabled","shouldShowModalOnClick","countNextClick","useInCourseUpgradeModal","handleModal","useEffect","modalProps","useMemo","jsxs","Fragment","children","jsx","ErrorBoundary","fallbackComponent","widgetName","placement","tenantId","pluginProps","defaultProps","propTypes","PropTypes","bool","isRequired","string","unitId","func","_default","exports"],"sources":["../../src/upgrade-modal/NextUnitButton.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useToggle } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\nimport { ErrorBoundary } from '@edx/frontend-platform/react';\n\nimport { useModel } from '@src/generic/model-store';\nimport { useContextId } from '@src/data/hooks';\nimport NextButton from '@src/courseware/course/sequence/sequence-navigation/generic/NextButton';\nimport { useInCourseUpgradeModal, useIsModalEnabled } from './hooks';\nimport UpgradeModal from './UpgradeModal';\nimport DynamicExperienceSlot from '../dynamic-experience-slot';\n\nconst NextUnitButton = ({\n disabled,\n buttonText,\n sequenceId,\n onClickHandler,\n nextLink,\n variant,\n buttonStyle,\n isAtTop,\n}) => {\n const disableRedVentures = String(getConfig().DISABLE_RED_VENTURES_WIDGETS).toLowerCase() === 'true';\n const courseId = useContextId();\n const [isOpen, open, close] = useToggle(false);\n const {\n verifiedMode,\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const isEnabled = useIsModalEnabled(courseId);\n const [shouldShowModalOnClick, countNextClick] = useInCourseUpgradeModal();\n\n const handleModal = () => {\n if (isEnabled) {\n countNextClick();\n if (shouldShowModalOnClick) {\n open();\n }\n }\n };\n\n useEffect(() => {\n handleModal();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sequenceId]);\n\n const modalProps = useMemo(() => ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n }), [\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n ]);\n\n return (\n <>\n <NextButton\n onClickHandler={onClickHandler}\n nextLink={nextLink}\n variant={variant}\n buttonStyle={buttonStyle}\n buttonText={buttonText}\n disabled={disabled}\n isAtTop={isAtTop}\n />\n\n {isOpen && disableRedVentures && <UpgradeModal {...modalProps} />}\n {isOpen && !disableRedVentures && (\n <ErrorBoundary fallbackComponent={<UpgradeModal {...modalProps} />}>\n <DynamicExperienceSlot\n widgetName=\"MonarchResolvedDynamicExperience\"\n placement=\"org.2u.edx.frontend.learning.upgrade.modal.v1\"\n tenantId=\"2u-edx-learning\"\n pluginProps={modalProps}\n />\n </ErrorBoundary>\n )}\n </>\n );\n};\n\nNextUnitButton.defaultProps = {\n isAtTop: false,\n};\n\nNextUnitButton.propTypes = {\n disabled: PropTypes.bool.isRequired,\n buttonText: PropTypes.string.isRequired,\n nextLink: PropTypes.string.isRequired,\n sequenceId: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n unitId: PropTypes.string.isRequired,\n onClickHandler: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n courseId: PropTypes.string.isRequired,\n variant: PropTypes.string.isRequired,\n buttonStyle: PropTypes.string.isRequired,\n isAtTop: PropTypes.bool,\n};\n\nexport default NextUnitButton;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"NextUnitButton.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_frontendPlatform","_react2","_modelStore","_hooks","_NextButton","_hooks2","_UpgradeModal","_dynamicExperienceSlot","_subscriptionUpsell","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NextUnitButton","_ref","disabled","buttonText","sequenceId","onClickHandler","nextLink","variant","buttonStyle","isAtTop","disableRedVentures","getConfig","DISABLE_RED_VENTURES_WIDGETS","toLowerCase","courseId","useContextId","isOpen","open","close","useToggle","verifiedMode","org","useModel","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","isEnabled","useIsModalEnabled","pastDeadline","Date","upgradeDeadline","showsSubscription","useSubscriptionOffer","canSubscribe","useInHouseModal","shouldShowModalOnClick","countNextClick","useInCourseUpgradeModal","handleModal","useEffect","modalProps","useMemo","jsxs","Fragment","children","jsx","ErrorBoundary","fallbackComponent","widgetName","placement","tenantId","pluginProps","defaultProps","propTypes","PropTypes","bool","isRequired","string","unitId","func","_default","exports"],"sources":["../../src/upgrade-modal/NextUnitButton.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useToggle } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\nimport { ErrorBoundary } from '@edx/frontend-platform/react';\n\nimport { useModel } from '@src/generic/model-store';\nimport { useContextId } from '@src/data/hooks';\nimport NextButton from '@src/courseware/course/sequence/sequence-navigation/generic/NextButton';\nimport { useInCourseUpgradeModal, useIsModalEnabled } from './hooks';\nimport UpgradeModal from './UpgradeModal';\nimport DynamicExperienceSlot from '../dynamic-experience-slot';\nimport { useSubscriptionOffer } from '../subscription-upsell';\n\nconst NextUnitButton = ({\n disabled,\n buttonText,\n sequenceId,\n onClickHandler,\n nextLink,\n variant,\n buttonStyle,\n isAtTop,\n}) => {\n const disableRedVentures = String(getConfig().DISABLE_RED_VENTURES_WIDGETS).toLowerCase() === 'true';\n const courseId = useContextId();\n const [isOpen, open, close] = useToggle(false);\n const {\n verifiedMode,\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const isEnabled = useIsModalEnabled(courseId);\n // UpgradeModal shows the subscription pop-up to a learner who can subscribe (same check as the card\n // and banners, same deadline test as UpgradeModal). The Red Ventures slot would replace it, so skip it.\n const pastDeadline = !!accessExpiration && new Date() > new Date(accessExpiration.upgradeDeadline);\n const showsSubscription = !!useSubscriptionOffer(courseId)?.canSubscribe && !pastDeadline;\n const useInHouseModal = disableRedVentures || showsSubscription;\n const [shouldShowModalOnClick, countNextClick] = useInCourseUpgradeModal();\n\n const handleModal = () => {\n if (isEnabled) {\n countNextClick();\n if (shouldShowModalOnClick) {\n open();\n }\n }\n };\n\n useEffect(() => {\n handleModal();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sequenceId]);\n\n const modalProps = useMemo(() => ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n }), [\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n ]);\n\n return (\n <>\n <NextButton\n onClickHandler={onClickHandler}\n nextLink={nextLink}\n variant={variant}\n buttonStyle={buttonStyle}\n buttonText={buttonText}\n disabled={disabled}\n isAtTop={isAtTop}\n />\n\n {isOpen && useInHouseModal && <UpgradeModal {...modalProps} />}\n {isOpen && !useInHouseModal && (\n <ErrorBoundary fallbackComponent={<UpgradeModal {...modalProps} />}>\n <DynamicExperienceSlot\n widgetName=\"MonarchResolvedDynamicExperience\"\n placement=\"org.2u.edx.frontend.learning.upgrade.modal.v1\"\n tenantId=\"2u-edx-learning\"\n pluginProps={modalProps}\n />\n </ErrorBoundary>\n )}\n </>\n );\n};\n\nNextUnitButton.defaultProps = {\n isAtTop: false,\n};\n\nNextUnitButton.propTypes = {\n disabled: PropTypes.bool.isRequired,\n buttonText: PropTypes.string.isRequired,\n nextLink: PropTypes.string.isRequired,\n sequenceId: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n unitId: PropTypes.string.isRequired,\n onClickHandler: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n courseId: PropTypes.string.isRequired,\n variant: PropTypes.string.isRequired,\n buttonStyle: PropTypes.string.isRequired,\n isAtTop: PropTypes.bool,\n};\n\nexport default NextUnitButton;\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AAEA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,WAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,OAAA,GAAAT,OAAA;AACA,IAAAU,aAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,sBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,mBAAA,GAAAZ,OAAA;AAA8D,IAAAa,WAAA,GAAAb,OAAA;AAAA,SAAAE,uBAAAY,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAf,wBAAAe,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAnB,uBAAA,YAAAA,CAAAe,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAAA,SAAAgB,QAAAnB,CAAA,EAAAK,CAAA,QAAAF,CAAA,GAAAa,MAAA,CAAAI,IAAA,CAAApB,CAAA,OAAAgB,MAAA,CAAAK,qBAAA,QAAAd,CAAA,GAAAS,MAAA,CAAAK,qBAAA,CAAArB,CAAA,GAAAK,CAAA,KAAAE,CAAA,GAAAA,CAAA,CAAAe,MAAA,WAAAjB,CAAA,WAAAW,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAK,CAAA,EAAAkB,UAAA,OAAApB,CAAA,CAAAqB,IAAA,CAAAC,KAAA,CAAAtB,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAuB,cAAA1B,CAAA,aAAAK,CAAA,MAAAA,CAAA,GAAAsB,SAAA,CAAAC,MAAA,EAAAvB,CAAA,UAAAF,CAAA,WAAAwB,SAAA,CAAAtB,CAAA,IAAAsB,SAAA,CAAAtB,CAAA,QAAAA,CAAA,OAAAc,OAAA,CAAAH,MAAA,CAAAb,CAAA,OAAA0B,OAAA,WAAAxB,CAAA,IAAAyB,eAAA,CAAA9B,CAAA,EAAAK,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAW,MAAA,CAAAe,yBAAA,GAAAf,MAAA,CAAAgB,gBAAA,CAAAhC,CAAA,EAAAgB,MAAA,CAAAe,yBAAA,CAAA5B,CAAA,KAAAgB,OAAA,CAAAH,MAAA,CAAAb,CAAA,GAAA0B,OAAA,WAAAxB,CAAA,IAAAW,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAK,CAAA,EAAAW,MAAA,CAAAE,wBAAA,CAAAf,CAAA,EAAAE,CAAA,iBAAAL,CAAA;AAAA,SAAA8B,gBAAA9B,CAAA,EAAAK,CAAA,EAAAF,CAAA,YAAAE,CAAA,GAAA4B,cAAA,CAAA5B,CAAA,MAAAL,CAAA,GAAAgB,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAK,CAAA,IAAA6B,KAAA,EAAA/B,CAAA,EAAAoB,UAAA,MAAAY,YAAA,MAAAC,QAAA,UAAApC,CAAA,CAAAK,CAAA,IAAAF,CAAA,EAAAH,CAAA;AAAA,SAAAiC,eAAA9B,CAAA,QAAAK,CAAA,GAAA6B,YAAA,CAAAlC,CAAA,uCAAAK,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAA6B,aAAAlC,CAAA,EAAAE,CAAA,2BAAAF,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAH,CAAA,GAAAG,CAAA,CAAAmC,MAAA,CAAAC,WAAA,kBAAAvC,CAAA,QAAAQ,CAAA,GAAAR,CAAA,CAAAe,IAAA,CAAAZ,CAAA,EAAAE,CAAA,uCAAAG,CAAA,SAAAA,CAAA,YAAAgC,SAAA,yEAAAnC,CAAA,GAAAoC,MAAA,GAAAC,MAAA,EAAAvC,CAAA,KAb9D;AAeA,MAAMwC,cAAc,GAAGC,IAAA,IASjB;EAAA,IATkB;IACtBC,QAAQ;IACRC,UAAU;IACVC,UAAU;IACVC,cAAc;IACdC,QAAQ;IACRC,OAAO;IACPC,WAAW;IACXC;EACF,CAAC,GAAAR,IAAA;EACC,MAAMS,kBAAkB,GAAGZ,MAAM,CAAC,IAAAa,2BAAS,EAAC,CAAC,CAACC,4BAA4B,CAAC,CAACC,WAAW,CAAC,CAAC,KAAK,MAAM;EACpG,MAAMC,QAAQ,GAAG,IAAAC,mBAAY,EAAC,CAAC;EAC/B,MAAM,CAACC,MAAM,EAAEC,IAAI,EAAEC,KAAK,CAAC,GAAG,IAAAC,kBAAS,EAAC,KAAK,CAAC;EAC9C,MAAM;IACJC,YAAY;IACZC;EACF,CAAC,GAAG,IAAAC,oBAAQ,EAAC,gBAAgB,EAAER,QAAQ,CAAC;EAExC,MAAM;IACJS,KAAK;IACLC,YAAY;IACZC,gBAAgB;IAChBC,eAAe;IACfC;EACF,CAAC,GAAG,IAAAL,oBAAQ,EAAC,gBAAgB,EAAER,QAAQ,CAAC;EAExC,MAAMc,SAAS,GAAG,IAAAC,yBAAiB,EAACf,QAAQ,CAAC;EAC7C;EACA;EACA,MAAMgB,YAAY,GAAG,CAAC,CAACL,gBAAgB,IAAI,IAAIM,IAAI,CAAC,CAAC,GAAG,IAAIA,IAAI,CAACN,gBAAgB,CAACO,eAAe,CAAC;EAClG,MAAMC,iBAAiB,GAAG,CAAC,CAAC,IAAAC,wCAAoB,EAACpB,QAAQ,CAAC,EAAEqB,YAAY,IAAI,CAACL,YAAY;EACzF,MAAMM,eAAe,GAAG1B,kBAAkB,IAAIuB,iBAAiB;EAC/D,MAAM,CAACI,sBAAsB,EAAEC,cAAc,CAAC,GAAG,IAAAC,+BAAuB,EAAC,CAAC;EAE1E,MAAMC,WAAW,GAAGA,CAAA,KAAM;IACxB,IAAIZ,SAAS,EAAE;MACbU,cAAc,CAAC,CAAC;MAChB,IAAID,sBAAsB,EAAE;QAC1BpB,IAAI,CAAC,CAAC;MACR;IACF;EACF,CAAC;EAED,IAAAwB,gBAAS,EAAC,MAAM;IACdD,WAAW,CAAC,CAAC;IACb;EACF,CAAC,EAAE,CAACpC,UAAU,CAAC,CAAC;EAEhB,MAAMsC,UAAU,GAAG,IAAAC,cAAO,EAAC,OAAO;IAChC3B,MAAM;IACNE,KAAK;IACLE,YAAY;IACZC,GAAG;IACHP,QAAQ;IACRS,KAAK;IACLC,YAAY;IACZC,gBAAgB;IAChBC,eAAe;IACfC;EACF,CAAC,CAAC,EAAE,CACFX,MAAM,EACNE,KAAK,EACLE,YAAY,EACZC,GAAG,EACHP,QAAQ,EACRS,KAAK,EACLC,YAAY,EACZC,gBAAgB,EAChBC,eAAe,EACfC,wBAAwB,CACzB,CAAC;EAEF,oBACE,IAAAvE,WAAA,CAAAwF,IAAA,EAAAxF,WAAA,CAAAyF,QAAA;IAAAC,QAAA,gBACE,IAAA1F,WAAA,CAAA2F,GAAA,EAAChG,WAAA,CAAAQ,OAAU;MACT8C,cAAc,EAAEA,cAAe;MAC/BC,QAAQ,EAAEA,QAAS;MACnBC,OAAO,EAAEA,OAAQ;MACjBC,WAAW,EAAEA,WAAY;MACzBL,UAAU,EAAEA,UAAW;MACvBD,QAAQ,EAAEA,QAAS;MACnBO,OAAO,EAAEA;IAAQ,CAClB,CAAC,EAEDO,MAAM,IAAIoB,eAAe,iBAAI,IAAAhF,WAAA,CAAA2F,GAAA,EAAC9F,aAAA,CAAAM,OAAY,EAAAwB,aAAA,KAAK2D,UAAU,CAAG,CAAC,EAC7D1B,MAAM,IAAI,CAACoB,eAAe,iBACzB,IAAAhF,WAAA,CAAA2F,GAAA,EAACnG,OAAA,CAAAoG,aAAa;MAACC,iBAAiB,eAAE,IAAA7F,WAAA,CAAA2F,GAAA,EAAC9F,aAAA,CAAAM,OAAY,EAAAwB,aAAA,KAAK2D,UAAU,CAAG,CAAE;MAAAI,QAAA,eACjE,IAAA1F,WAAA,CAAA2F,GAAA,EAAC7F,sBAAA,CAAAK,OAAqB;QACpB2F,UAAU,EAAC,kCAAkC;QAC7CC,SAAS,EAAC,+CAA+C;QACzDC,QAAQ,EAAC,iBAAiB;QAC1BC,WAAW,EAAEX;MAAW,CACzB;IAAC,CACW,CAChB;EAAA,CACD,CAAC;AAEP,CAAC;AAED1C,cAAc,CAACsD,YAAY,GAAG;EAC5B7C,OAAO,EAAE;AACX,CAAC;AAEDT,cAAc,CAACuD,SAAS,GAAG;EACzBrD,QAAQ,EAAEsD,kBAAS,CAACC,IAAI,CAACC,UAAU;EACnCvD,UAAU,EAAEqD,kBAAS,CAACG,MAAM,CAACD,UAAU;EACvCpD,QAAQ,EAAEkD,kBAAS,CAACG,MAAM,CAACD,UAAU;EACrCtD,UAAU,EAAEoD,kBAAS,CAACG,MAAM,CAACD,UAAU;EACvC;EACAE,MAAM,EAAEJ,kBAAS,CAACG,MAAM,CAACD,UAAU;EACnCrD,cAAc,EAAEmD,kBAAS,CAACK,IAAI,CAACH,UAAU;EACzC;EACA5C,QAAQ,EAAE0C,kBAAS,CAACG,MAAM,CAACD,UAAU;EACrCnD,OAAO,EAAEiD,kBAAS,CAACG,MAAM,CAACD,UAAU;EACpClD,WAAW,EAAEgD,kBAAS,CAACG,MAAM,CAACD,UAAU;EACxCjD,OAAO,EAAE+C,kBAAS,CAACC;AACrB,CAAC;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAAxG,OAAA,GAEayC,cAAc","ignoreList":[]}
|
|
@@ -13,6 +13,7 @@ var _upgradeButton = require("@src/generic/upgrade-button");
|
|
|
13
13
|
var _generic = require("../generic");
|
|
14
14
|
var _BaseModal = _interopRequireDefault(require("./BaseModal"));
|
|
15
15
|
var _cohesion = require("../cohesion");
|
|
16
|
+
var _subscriptionUpsell = require("../subscription-upsell");
|
|
16
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
19
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -67,6 +68,15 @@ const UpgradeModal = _ref => {
|
|
|
67
68
|
}));
|
|
68
69
|
conversion('Upgraded');
|
|
69
70
|
};
|
|
71
|
+
const logSubscribeClick = () => {
|
|
72
|
+
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
73
|
+
linkCategory: 'subscription',
|
|
74
|
+
linkName: `${upsellPageName}_subscribe`,
|
|
75
|
+
linkType: 'button',
|
|
76
|
+
pageName: upsellPageName
|
|
77
|
+
}));
|
|
78
|
+
conversion('Subscribe Clicked'); // on the click, before checkout
|
|
79
|
+
};
|
|
70
80
|
const logClickPastExpiration = () => {
|
|
71
81
|
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upgrade_modal.past_expiration.button_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
72
82
|
linkCategory: 'upgrade_modal',
|
|
@@ -75,11 +85,25 @@ const UpgradeModal = _ref => {
|
|
|
75
85
|
pageName: upsellPageName
|
|
76
86
|
}));
|
|
77
87
|
};
|
|
88
|
+
const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
|
|
78
89
|
const intl = (0, _i18n.useIntl)();
|
|
79
90
|
const dateNow = Date.now();
|
|
80
91
|
const upgradeDeadlineDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;
|
|
81
92
|
const pastDeadline = accessExpiration ? new Date(dateNow) > upgradeDeadlineDate : false;
|
|
82
93
|
const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;
|
|
94
|
+
|
|
95
|
+
// A learner who can subscribe gets the subscription pop-up (Figma 3339-7937) with the same
|
|
96
|
+
// displayed and purchase tracking as this modal. Past the deadline the purchase is closed.
|
|
97
|
+
if (!pastDeadline && subscriptionOffer?.canSubscribe) {
|
|
98
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionBenefitsModal, {
|
|
99
|
+
courseId: courseId,
|
|
100
|
+
isOpen: isOpen,
|
|
101
|
+
onClose: close,
|
|
102
|
+
variant: _subscriptionUpsell.BENEFITS_MODAL_VARIANT.FREE_TRIAL,
|
|
103
|
+
onSubscribeClick: logSubscribeClick,
|
|
104
|
+
onPurchaseClick: logClick
|
|
105
|
+
});
|
|
106
|
+
}
|
|
83
107
|
let callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_upgradeButton.UpgradeButton, {
|
|
84
108
|
"data-testid": "upgrade-button",
|
|
85
109
|
offer: offer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_i18n","_paragon","_upgradeButton","_generic","_BaseModal","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpgradeModal","_ref","isOpen","close","verifiedMode","org","courseId","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","upsellPageName","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","conversion","useCohesion","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","intl","useIntl","dateNow","Date","now","upgradeDeadlineDate","upgradeDeadline","pastDeadline","isFBE","contentTypeGatingEnabled","callToActionButton","jsx","UpgradeButton","onClick","block","Button","className","href","children","formatMessage","id","defaultMessage","description","UpsellTable","defaultProps","propTypes","PropTypes","shape","price","number","isRequired","currencySymbol","string","upgradeUrl","code","bool","func","_default","exports"],"sources":["../../src/upgrade-modal/UpgradeModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { UpsellTable } from '../generic';\nimport BaseModal from './BaseModal';\nimport { useCohesion } from '../cohesion';\n\nconst UpgradeModal = ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n}) => {\n const upsellPageName = 'course_sequence_modal';\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n const promotionEventProperties = {\n creative: 'marketmodalupsell',\n name: 'In-Course Verification Prompt',\n position: 'marketing-modal-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n const { conversion } = useCohesion(courseId);\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketmodalupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketingmodal.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'marketing-modal-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_modal.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_modal',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const intl = useIntl();\n const dateNow = Date.now();\n const upgradeDeadlineDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n const pastDeadline = accessExpiration ? new Date(dateNow) > upgradeDeadlineDate : false;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n let callToActionButton = (\n <UpgradeButton\n data-testid=\"upgrade-button\"\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n\n if (pastDeadline) {\n callToActionButton = (\n <Button\n className=\"w-100\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n >\n {intl.formatMessage(\n {\n id: 'learning.upgrade-modal.upgrade-button.label',\n defaultMessage: 'View course details',\n description: 'Label for upgrade button',\n },\n )}\n </Button>\n );\n }\n\n return (\n <BaseModal\n {...{\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n }}\n >\n <UpsellTable {...{ isFBE, learningAssistantEnabled }} />\n </BaseModal>\n );\n};\n\nUpgradeModal.defaultProps = {\n verifiedMode: {},\n offer: null,\n accessExpiration: null,\n datesBannerInfo: null,\n};\nUpgradeModal.propTypes = {\n verifiedMode: PropTypes.shape({\n price: PropTypes.number.isRequired,\n currencySymbol: PropTypes.string.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n offer: PropTypes.shape({\n code: PropTypes.string,\n }),\n accessExpiration: PropTypes.shape({\n upgradeDeadline: PropTypes.string,\n }),\n datesBannerInfo: PropTypes.shape({\n contentTypeGatingEnabled: PropTypes.bool,\n }),\n marketingUrl: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n learningAssistantEnabled: PropTypes.bool.isRequired,\n};\n\nexport default UpgradeModal;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UpgradeModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_i18n","_paragon","_upgradeButton","_generic","_BaseModal","_cohesion","_subscriptionUpsell","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpgradeModal","_ref","isOpen","close","verifiedMode","org","courseId","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","upsellPageName","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","conversion","useCohesion","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logSubscribeClick","logClickPastExpiration","subscriptionOffer","useSubscriptionOffer","intl","useIntl","dateNow","Date","now","upgradeDeadlineDate","upgradeDeadline","pastDeadline","isFBE","contentTypeGatingEnabled","canSubscribe","jsx","SubscriptionBenefitsModal","onClose","variant","BENEFITS_MODAL_VARIANT","FREE_TRIAL","onSubscribeClick","onPurchaseClick","callToActionButton","UpgradeButton","onClick","block","Button","className","href","children","formatMessage","id","defaultMessage","description","UpsellTable","defaultProps","propTypes","PropTypes","shape","price","number","isRequired","currencySymbol","string","upgradeUrl","code","bool","func","_default","exports"],"sources":["../../src/upgrade-modal/UpgradeModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { UpsellTable } from '../generic';\nimport BaseModal from './BaseModal';\nimport { useCohesion } from '../cohesion';\nimport { SubscriptionBenefitsModal, BENEFITS_MODAL_VARIANT, useSubscriptionOffer } from '../subscription-upsell';\n\nconst UpgradeModal = ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n}) => {\n const upsellPageName = 'course_sequence_modal';\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n const promotionEventProperties = {\n creative: 'marketmodalupsell',\n name: 'In-Course Verification Prompt',\n position: 'marketing-modal-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n const { conversion } = useCohesion(courseId);\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketmodalupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketingmodal.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'marketing-modal-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n const logSubscribeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'subscription',\n linkName: `${upsellPageName}_subscribe`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n conversion('Subscribe Clicked'); // on the click, before checkout\n };\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_modal.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_modal',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const subscriptionOffer = useSubscriptionOffer(courseId);\n const intl = useIntl();\n const dateNow = Date.now();\n const upgradeDeadlineDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n const pastDeadline = accessExpiration ? new Date(dateNow) > upgradeDeadlineDate : false;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n // A learner who can subscribe gets the subscription pop-up (Figma 3339-7937) with the same\n // displayed and purchase tracking as this modal. Past the deadline the purchase is closed.\n if (!pastDeadline && subscriptionOffer?.canSubscribe) {\n return (\n <SubscriptionBenefitsModal\n courseId={courseId}\n isOpen={isOpen}\n onClose={close}\n variant={BENEFITS_MODAL_VARIANT.FREE_TRIAL}\n onSubscribeClick={logSubscribeClick}\n onPurchaseClick={logClick}\n />\n );\n }\n\n let callToActionButton = (\n <UpgradeButton\n data-testid=\"upgrade-button\"\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n\n if (pastDeadline) {\n callToActionButton = (\n <Button\n className=\"w-100\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n >\n {intl.formatMessage(\n {\n id: 'learning.upgrade-modal.upgrade-button.label',\n defaultMessage: 'View course details',\n description: 'Label for upgrade button',\n },\n )}\n </Button>\n );\n }\n\n return (\n <BaseModal\n {...{\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n }}\n >\n <UpsellTable {...{ isFBE, learningAssistantEnabled }} />\n </BaseModal>\n );\n};\n\nUpgradeModal.defaultProps = {\n verifiedMode: {},\n offer: null,\n accessExpiration: null,\n datesBannerInfo: null,\n};\nUpgradeModal.propTypes = {\n verifiedMode: PropTypes.shape({\n price: PropTypes.number.isRequired,\n currencySymbol: PropTypes.string.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n offer: PropTypes.shape({\n code: PropTypes.string,\n }),\n accessExpiration: PropTypes.shape({\n upgradeDeadline: PropTypes.string,\n }),\n datesBannerInfo: PropTypes.shape({\n contentTypeGatingEnabled: PropTypes.bool,\n }),\n marketingUrl: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n learningAssistantEnabled: PropTypes.bool.isRequired,\n};\n\nexport default UpgradeModal;\n"],"mappings":"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","ignoreList":[]}
|