@edx/frontend-plugin-advertisements 2.27.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generic/upsell-bullets/UpsellTable.js +16 -7
- package/dist/generic/upsell-bullets/UpsellTable.js.map +1 -1
- package/dist/generic/upsell-bullets/UpsellTable.scss +17 -0
- package/dist/upgrade-modal/BaseModal.js +2 -5
- package/dist/upgrade-modal/BaseModal.js.map +1 -1
- package/dist/upgrade-notification/UpgradeNotification.js +53 -36
- package/dist/upgrade-notification/UpgradeNotification.js.map +1 -1
- package/dist/upgrade-notification/UpgradeNotification.scss +65 -0
- package/dist/upgrade-notification/certificate-preview/CertificatePreview.js +6 -1
- package/dist/upgrade-notification/certificate-preview/CertificatePreview.js.map +1 -1
- package/dist/upgrade-notification/messages.js +14 -4
- package/dist/upgrade-notification/messages.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,24 +13,31 @@ require("./UpsellTable.scss");
|
|
|
13
13
|
var _messages = _interopRequireDefault(require("./messages"));
|
|
14
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
// inlineHeader puts the section header in the table's first header cell, as the sidebar card does;
|
|
17
|
+
// the upgrade modal keeps it as a heading above the table.
|
|
16
18
|
const UpsellTable = _ref => {
|
|
17
19
|
let {
|
|
18
20
|
isFBE,
|
|
19
|
-
learningAssistantEnabled
|
|
21
|
+
learningAssistantEnabled,
|
|
22
|
+
inlineHeader
|
|
20
23
|
} = _ref;
|
|
21
24
|
const intl = (0, _i18n.useIntl)();
|
|
22
25
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Col, {
|
|
23
26
|
className: "px-4 pb-4 small",
|
|
24
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
|
|
27
|
+
children: [!inlineHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
|
|
25
28
|
className: "mb-4 primary-500",
|
|
26
29
|
children: intl.formatMessage(_messages.default.tableSectionHeader)
|
|
27
30
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Row, {
|
|
28
31
|
className: "m-0 text-center",
|
|
29
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
30
|
-
|
|
32
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Col, {
|
|
33
|
+
className: inlineHeader ? 'table-header-cell text-left' : undefined,
|
|
34
|
+
children: [inlineHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
|
|
35
|
+
className: "table-header-title",
|
|
36
|
+
children: intl.formatMessage(_messages.default.tableSectionHeader)
|
|
37
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
31
38
|
className: "sr-only",
|
|
32
39
|
children: intl.formatMessage(_messages.default.featureHeader)
|
|
33
|
-
})
|
|
40
|
+
})]
|
|
34
41
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Col, {
|
|
35
42
|
className: "audit-cell top-audit-border col-2 ",
|
|
36
43
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
@@ -134,11 +141,13 @@ const UpsellTable = _ref => {
|
|
|
134
141
|
};
|
|
135
142
|
UpsellTable.defaultProps = {
|
|
136
143
|
isFBE: false,
|
|
137
|
-
learningAssistantEnabled: false
|
|
144
|
+
learningAssistantEnabled: false,
|
|
145
|
+
inlineHeader: false
|
|
138
146
|
};
|
|
139
147
|
UpsellTable.propTypes = {
|
|
140
148
|
isFBE: _propTypes.default.bool,
|
|
141
|
-
learningAssistantEnabled: _propTypes.default.bool
|
|
149
|
+
learningAssistantEnabled: _propTypes.default.bool,
|
|
150
|
+
inlineHeader: _propTypes.default.bool
|
|
142
151
|
};
|
|
143
152
|
var _default = exports.default = UpsellTable;
|
|
144
153
|
//# sourceMappingURL=UpsellTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpsellTable.js","names":["_propTypes","_interopRequireDefault","require","_i18n","_paragon","_icons","_frontendPlatform","_messages","_jsxRuntime","e","__esModule","default","UpsellTable","_ref","isFBE","learningAssistantEnabled","intl","useIntl","jsxs","Col","className","children","jsx","formatMessage","messages","tableSectionHeader","Row","featureHeader","auditHeader","verifiedHeader","certificate","certificateLink","Hyperlink","destination","getConfig","MARKETING_SITE_BASE_URL","certificateLinkText","Icon","src","CloseSmall","alt","notIncludedAltMessage","CheckCircle","includedAltMessage","grades","learningAssistant","access","defaultProps","propTypes","PropTypes","bool","_default","exports"],"sources":["../../../src/generic/upsell-bullets/UpsellTable.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Col,\n Hyperlink,\n Icon,\n Row,\n} from '@openedx/paragon';\nimport { CheckCircle, CloseSmall } from '@openedx/paragon/icons';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport './UpsellTable.scss';\nimport messages from './messages';\n\nconst UpsellTable = ({ isFBE, learningAssistantEnabled }) => {\n const intl = useIntl();\n return (\n <Col className=\"px-4 pb-4 small\">\n <h3 className=\"mb-4 primary-500\">\n {intl.formatMessage(messages.tableSectionHeader)}\n </h3>\n <Row className=\"m-0 text-center\">\n <Col>\n <span className=\"sr-only\">\n {intl.formatMessage(messages.featureHeader)}\n </span>\n </Col>\n <Col className=\"audit-cell top-audit-border col-2 \">\n <div className=\"center-items\">\n {intl.formatMessage(messages.auditHeader)}\n </div>\n </Col>\n <Col className=\"verified-cell top-verified-border font-weight-bold col-2\">\n <div className=\"center-items\">\n {intl.formatMessage(messages.verifiedHeader)}\n </div>\n </Col>\n </Row>\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n {intl.formatMessage(\n messages.certificate,\n {\n certificateLink: (\n <Hyperlink destination={`${getConfig().MARKETING_SITE_BASE_URL}/verified-certificate`}>\n {intl.formatMessage(messages.certificateLinkText)}\n </Hyperlink>\n ),\n },\n )}\n </Col>\n <Col className=\"audit-cell col-2\">\n <div className=\"center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </div>\n </Col>\n <Col className=\"verified-cell col-2\">\n <div className=\"center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </div>\n </Col>\n </Row>\n {isFBE && (\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n {intl.formatMessage(messages.grades)}\n </Col>\n <Col className=\"audit-cell col-2 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell col-2 center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n )}\n {learningAssistantEnabled && (\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n <span>\n {intl.formatMessage(messages.learningAssistant)}\n </span>\n </Col>\n <Col className=\"audit-cell col-2 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell col-2 center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n )}\n <Row className=\"m-0\">\n <Col className=\"feature-cell bottom-no-border flex align-items-center pb-3\">\n {intl.formatMessage(messages.access)}\n </Col>\n <Col className=\"audit-cell bottom-audit-border col-2 pb-3 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell bottom-verified-border col-2 center-items pb-3\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n </Col>\n );\n};\n\nUpsellTable.defaultProps = {\n isFBE: false,\n learningAssistantEnabled: false,\n};\n\nUpsellTable.propTypes = {\n isFBE: PropTypes.bool,\n learningAssistantEnabled: PropTypes.bool,\n};\n\nexport default UpsellTable;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UpsellTable.js","names":["_propTypes","_interopRequireDefault","require","_i18n","_paragon","_icons","_frontendPlatform","_messages","_jsxRuntime","e","__esModule","default","UpsellTable","_ref","isFBE","learningAssistantEnabled","inlineHeader","intl","useIntl","jsxs","Col","className","children","jsx","formatMessage","messages","tableSectionHeader","Row","undefined","featureHeader","auditHeader","verifiedHeader","certificate","certificateLink","Hyperlink","destination","getConfig","MARKETING_SITE_BASE_URL","certificateLinkText","Icon","src","CloseSmall","alt","notIncludedAltMessage","CheckCircle","includedAltMessage","grades","learningAssistant","access","defaultProps","propTypes","PropTypes","bool","_default","exports"],"sources":["../../../src/generic/upsell-bullets/UpsellTable.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Col,\n Hyperlink,\n Icon,\n Row,\n} from '@openedx/paragon';\nimport { CheckCircle, CloseSmall } from '@openedx/paragon/icons';\nimport { getConfig } from '@edx/frontend-platform';\n\nimport './UpsellTable.scss';\nimport messages from './messages';\n\n// inlineHeader puts the section header in the table's first header cell, as the sidebar card does;\n// the upgrade modal keeps it as a heading above the table.\nconst UpsellTable = ({ isFBE, learningAssistantEnabled, inlineHeader }) => {\n const intl = useIntl();\n return (\n <Col className=\"px-4 pb-4 small\">\n {!inlineHeader && (\n <h3 className=\"mb-4 primary-500\">\n {intl.formatMessage(messages.tableSectionHeader)}\n </h3>\n )}\n <Row className=\"m-0 text-center\">\n <Col className={inlineHeader ? 'table-header-cell text-left' : undefined}>\n {inlineHeader && (\n <h3 className=\"table-header-title\">\n {intl.formatMessage(messages.tableSectionHeader)}\n </h3>\n )}\n <span className=\"sr-only\">\n {intl.formatMessage(messages.featureHeader)}\n </span>\n </Col>\n <Col className=\"audit-cell top-audit-border col-2 \">\n <div className=\"center-items\">\n {intl.formatMessage(messages.auditHeader)}\n </div>\n </Col>\n <Col className=\"verified-cell top-verified-border font-weight-bold col-2\">\n <div className=\"center-items\">\n {intl.formatMessage(messages.verifiedHeader)}\n </div>\n </Col>\n </Row>\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n {intl.formatMessage(\n messages.certificate,\n {\n certificateLink: (\n <Hyperlink destination={`${getConfig().MARKETING_SITE_BASE_URL}/verified-certificate`}>\n {intl.formatMessage(messages.certificateLinkText)}\n </Hyperlink>\n ),\n },\n )}\n </Col>\n <Col className=\"audit-cell col-2\">\n <div className=\"center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </div>\n </Col>\n <Col className=\"verified-cell col-2\">\n <div className=\"center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </div>\n </Col>\n </Row>\n {isFBE && (\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n {intl.formatMessage(messages.grades)}\n </Col>\n <Col className=\"audit-cell col-2 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell col-2 center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n )}\n {learningAssistantEnabled && (\n <Row className=\"m-0\">\n <Col className=\"feature-cell\">\n <span>\n {intl.formatMessage(messages.learningAssistant)}\n </span>\n </Col>\n <Col className=\"audit-cell col-2 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell col-2 center-items\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n )}\n <Row className=\"m-0\">\n <Col className=\"feature-cell bottom-no-border flex align-items-center pb-3\">\n {intl.formatMessage(messages.access)}\n </Col>\n <Col className=\"audit-cell bottom-audit-border col-2 pb-3 center-items\">\n <Icon src={CloseSmall} alt={intl.formatMessage(messages.notIncludedAltMessage)} />\n </Col>\n <Col className=\"verified-cell bottom-verified-border col-2 center-items pb-3\">\n <Icon src={CheckCircle} alt={intl.formatMessage(messages.includedAltMessage)} />\n </Col>\n </Row>\n </Col>\n );\n};\n\nUpsellTable.defaultProps = {\n isFBE: false,\n learningAssistantEnabled: false,\n inlineHeader: false,\n};\n\nUpsellTable.propTypes = {\n isFBE: PropTypes.bool,\n learningAssistantEnabled: PropTypes.bool,\n inlineHeader: PropTypes.bool,\n};\n\nexport default UpsellTable;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAMA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,iBAAA,GAAAJ,OAAA;AAEAA,OAAA;AACA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AAAkC,IAAAM,WAAA,GAAAN,OAAA;AAAA,SAAAD,uBAAAQ,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC;AACA;AACA,MAAMG,WAAW,GAAGC,IAAA,IAAuD;EAAA,IAAtD;IAAEC,KAAK;IAAEC,wBAAwB;IAAEC;EAAa,CAAC,GAAAH,IAAA;EACpE,MAAMI,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,oBACE,IAAAV,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAgB,GAAG;IAACC,SAAS,EAAC,iBAAiB;IAAAC,QAAA,GAC7B,CAACN,YAAY,iBACZ,IAAAR,WAAA,CAAAe,GAAA;MAAIF,SAAS,EAAC,kBAAkB;MAAAC,QAAA,EAC7BL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACC,kBAAkB;IAAC,CAC9C,CACL,eACD,IAAAlB,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAuB,GAAG;MAACN,SAAS,EAAC,iBAAiB;MAAAC,QAAA,gBAC9B,IAAAd,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAEL,YAAY,GAAG,6BAA6B,GAAGY,SAAU;QAAAN,QAAA,GACtEN,YAAY,iBACX,IAAAR,WAAA,CAAAe,GAAA;UAAIF,SAAS,EAAC,oBAAoB;UAAAC,QAAA,EAC/BL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACC,kBAAkB;QAAC,CAC9C,CACL,eACD,IAAAlB,WAAA,CAAAe,GAAA;UAAMF,SAAS,EAAC,SAAS;UAAAC,QAAA,EACtBL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACI,aAAa;QAAC,CACvC,CAAC;MAAA,CACJ,CAAC,eACN,IAAArB,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,oCAAoC;QAAAC,QAAA,eACjD,IAAAd,WAAA,CAAAe,GAAA;UAAKF,SAAS,EAAC,cAAc;UAAAC,QAAA,EAC1BL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACK,WAAW;QAAC,CACtC;MAAC,CACH,CAAC,eACN,IAAAtB,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,0DAA0D;QAAAC,QAAA,eACvE,IAAAd,WAAA,CAAAe,GAAA;UAAKF,SAAS,EAAC,cAAc;UAAAC,QAAA,EAC1BL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACM,cAAc;QAAC,CACzC;MAAC,CACH,CAAC;IAAA,CACH,CAAC,eACN,IAAAvB,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAuB,GAAG;MAACN,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,cAAc;QAAAC,QAAA,EAC1BL,IAAI,CAACO,aAAa,CACjBC,iBAAQ,CAACO,WAAW,EACpB;UACEC,eAAe,eACb,IAAAzB,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAA8B,SAAS;YAACC,WAAW,EAAE,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,uBAAuB,uBAAwB;YAAAf,QAAA,EACnFL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACa,mBAAmB;UAAC,CACxC;QAEf,CACF;MAAC,CACE,CAAC,eACN,IAAA9B,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,kBAAkB;QAAAC,QAAA,eAC/B,IAAAd,WAAA,CAAAe,GAAA;UAAKF,SAAS,EAAC,cAAc;UAAAC,QAAA,eAC3B,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;YAACC,GAAG,EAAEC,iBAAW;YAACC,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACkB,qBAAqB;UAAE,CAAE;QAAC,CAC/E;MAAC,CACH,CAAC,eACN,IAAAnC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,qBAAqB;QAAAC,QAAA,eAClC,IAAAd,WAAA,CAAAe,GAAA;UAAKF,SAAS,EAAC,cAAc;UAAAC,QAAA,eAC3B,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;YAACC,GAAG,EAAEI,kBAAY;YAACF,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACoB,kBAAkB;UAAE,CAAE;QAAC,CAC7E;MAAC,CACH,CAAC;IAAA,CACH,CAAC,EACL/B,KAAK,iBACJ,IAAAN,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAuB,GAAG;MAACN,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,cAAc;QAAAC,QAAA,EAC1BL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACqB,MAAM;MAAC,CACjC,CAAC,eACN,IAAAtC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,+BAA+B;QAAAC,QAAA,eAC5C,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEC,iBAAW;UAACC,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACkB,qBAAqB;QAAE,CAAE;MAAC,CAC/E,CAAC,eACN,IAAAnC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,kCAAkC;QAAAC,QAAA,eAC/C,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEI,kBAAY;UAACF,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACoB,kBAAkB;QAAE,CAAE;MAAC,CAC7E,CAAC;IAAA,CACH,CACN,EACA9B,wBAAwB,iBACvB,IAAAP,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAuB,GAAG;MAACN,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,cAAc;QAAAC,QAAA,eAC3B,IAAAd,WAAA,CAAAe,GAAA;UAAAD,QAAA,EACGL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACsB,iBAAiB;QAAC,CAC3C;MAAC,CACJ,CAAC,eACN,IAAAvC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,+BAA+B;QAAAC,QAAA,eAC5C,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEC,iBAAW;UAACC,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACkB,qBAAqB;QAAE,CAAE;MAAC,CAC/E,CAAC,eACN,IAAAnC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,kCAAkC;QAAAC,QAAA,eAC/C,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEI,kBAAY;UAACF,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACoB,kBAAkB;QAAE,CAAE;MAAC,CAC7E,CAAC;IAAA,CACH,CACN,eACD,IAAArC,WAAA,CAAAW,IAAA,EAACf,QAAA,CAAAuB,GAAG;MAACN,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,4DAA4D;QAAAC,QAAA,EACxEL,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACuB,MAAM;MAAC,CACjC,CAAC,eACN,IAAAxC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,wDAAwD;QAAAC,QAAA,eACrE,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEC,iBAAW;UAACC,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACkB,qBAAqB;QAAE,CAAE;MAAC,CAC/E,CAAC,eACN,IAAAnC,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAgB,GAAG;QAACC,SAAS,EAAC,8DAA8D;QAAAC,QAAA,eAC3E,IAAAd,WAAA,CAAAe,GAAA,EAACnB,QAAA,CAAAmC,IAAI;UAACC,GAAG,EAAEI,kBAAY;UAACF,GAAG,EAAEzB,IAAI,CAACO,aAAa,CAACC,iBAAQ,CAACoB,kBAAkB;QAAE,CAAE;MAAC,CAC7E,CAAC;IAAA,CACH,CAAC;EAAA,CACH,CAAC;AAEV,CAAC;AAEDjC,WAAW,CAACqC,YAAY,GAAG;EACzBnC,KAAK,EAAE,KAAK;EACZC,wBAAwB,EAAE,KAAK;EAC/BC,YAAY,EAAE;AAChB,CAAC;AAEDJ,WAAW,CAACsC,SAAS,GAAG;EACtBpC,KAAK,EAAEqC,kBAAS,CAACC,IAAI;EACrBrC,wBAAwB,EAAEoC,kBAAS,CAACC,IAAI;EACxCpC,YAAY,EAAEmC,kBAAS,CAACC;AAC1B,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA3C,OAAA,GAEaC,WAAW","ignoreList":[]}
|
|
@@ -39,6 +39,23 @@
|
|
|
39
39
|
padding: 8px;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
// The section header when it sits in the first header cell (inlineHeader), aligned with the feature cells.
|
|
43
|
+
// It stays a heading for screen readers, sized as the cell text.
|
|
44
|
+
.table-header-cell {
|
|
45
|
+
display: flex;
|
|
46
|
+
align-items: center;
|
|
47
|
+
padding: 8px 8px 8px 0;
|
|
48
|
+
|
|
49
|
+
.table-header-title {
|
|
50
|
+
margin: 0;
|
|
51
|
+
font-family: inherit;
|
|
52
|
+
font-size: inherit;
|
|
53
|
+
font-weight: var(--pgn-typography-font-weight-bold);
|
|
54
|
+
line-height: inherit;
|
|
55
|
+
color: inherit;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
42
59
|
.feature-cell {
|
|
43
60
|
border-bottom: 1px solid var(--pgn-color-light-500);
|
|
44
61
|
color: var(--pgn-color-gray-700);
|
|
@@ -9,6 +9,7 @@ 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 _certificatePreview = _interopRequireDefault(require("../upgrade-notification/certificate-preview"));
|
|
12
|
+
var _messages = _interopRequireDefault(require("../upgrade-notification/messages"));
|
|
12
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
15
|
const BaseModal = _ref => {
|
|
@@ -53,11 +54,7 @@ const BaseModal = _ref => {
|
|
|
53
54
|
className: "mb-2",
|
|
54
55
|
children: [offer && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
55
56
|
className: "text-center",
|
|
56
|
-
children: intl.formatMessage({
|
|
57
|
-
id: 'learning.generic.upgradeNotification.code',
|
|
58
|
-
defaultMessage: 'Use code {code} at checkout',
|
|
59
|
-
description: 'Message to user with code for discounted course price'
|
|
60
|
-
}, {
|
|
57
|
+
children: intl.formatMessage(_messages.default.discountCodeMessage, {
|
|
61
58
|
code: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
62
59
|
className: "font-weight-bold",
|
|
63
60
|
children: offer.code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseModal.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_certificatePreview","_jsxRuntime","e","__esModule","default","BaseModal","_ref","isOpen","close","courseId","offer","callToActionButton","children","intl","useIntl","title","formatMessage","id","defaultMessage","description","jsx","MarketingModal","onClose","isBlocking","size","heroIsDark","heroNode","ModalDialog","Hero","className","style","background","borderTopLeftRadius","borderTopRightRadius","Content","bgColor","footerNode","jsxs","ActionRow","isStacked","code","defaultProps","propTypes","PropTypes","shape","string","variationKey","isRequired","func","bool","node","_default","exports"],"sources":["../../src/upgrade-modal/BaseModal.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { ActionRow, MarketingModal, ModalDialog } from '@openedx/paragon';\nimport CertificatePreview from '../upgrade-notification/certificate-preview';\n\nconst BaseModal = ({\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n children,\n}) => {\n const intl = useIntl();\n const title = intl.formatMessage({\n id: 'learning.upgrade-modal.title',\n defaultMessage: 'Pursue a verified certificate',\n description: 'Upgrade modal title',\n });\n\n return (\n <MarketingModal\n title={title}\n isOpen={isOpen}\n onClose={close}\n isBlocking\n size=\"md\"\n heroIsDark\n heroNode={(\n <ModalDialog.Hero\n className=\"justify-content-center\"\n style={{\n background: 'linear-gradient(#001B1E, #0E3639)',\n borderTopLeftRadius: '6.8px',\n borderTopRightRadius: '6.8px',\n }}\n >\n <ModalDialog.Hero.Content className=\"m-0 text-primary-500 pt-4\">\n <CertificatePreview {...{ courseId, bgColor: 'bg-light-100' }} />\n </ModalDialog.Hero.Content>\n </ModalDialog.Hero>\n )}\n footerNode={(\n <ActionRow isStacked className=\"mb-2\">\n {offer && (\n <div className=\"text-center\">\n {intl.formatMessage(\n
|
|
1
|
+
{"version":3,"file":"BaseModal.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_certificatePreview","_messages","_jsxRuntime","e","__esModule","default","BaseModal","_ref","isOpen","close","courseId","offer","callToActionButton","children","intl","useIntl","title","formatMessage","id","defaultMessage","description","jsx","MarketingModal","onClose","isBlocking","size","heroIsDark","heroNode","ModalDialog","Hero","className","style","background","borderTopLeftRadius","borderTopRightRadius","Content","bgColor","footerNode","jsxs","ActionRow","isStacked","upgradeNotificationMessages","discountCodeMessage","code","defaultProps","propTypes","PropTypes","shape","string","variationKey","isRequired","func","bool","node","_default","exports"],"sources":["../../src/upgrade-modal/BaseModal.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { ActionRow, MarketingModal, ModalDialog } from '@openedx/paragon';\nimport CertificatePreview from '../upgrade-notification/certificate-preview';\nimport upgradeNotificationMessages from '../upgrade-notification/messages';\n\nconst BaseModal = ({\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n children,\n}) => {\n const intl = useIntl();\n const title = intl.formatMessage({\n id: 'learning.upgrade-modal.title',\n defaultMessage: 'Pursue a verified certificate',\n description: 'Upgrade modal title',\n });\n\n return (\n <MarketingModal\n title={title}\n isOpen={isOpen}\n onClose={close}\n isBlocking\n size=\"md\"\n heroIsDark\n heroNode={(\n <ModalDialog.Hero\n className=\"justify-content-center\"\n style={{\n background: 'linear-gradient(#001B1E, #0E3639)',\n borderTopLeftRadius: '6.8px',\n borderTopRightRadius: '6.8px',\n }}\n >\n <ModalDialog.Hero.Content className=\"m-0 text-primary-500 pt-4\">\n <CertificatePreview {...{ courseId, bgColor: 'bg-light-100' }} />\n </ModalDialog.Hero.Content>\n </ModalDialog.Hero>\n )}\n footerNode={(\n <ActionRow isStacked className=\"mb-2\">\n {offer && (\n <div className=\"text-center\">\n {intl.formatMessage(\n upgradeNotificationMessages.discountCodeMessage,\n {\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n },\n )}\n </div>\n )}\n {callToActionButton}\n </ActionRow>\n )}\n >\n <div className=\"mx-n4\">\n {children}\n </div>\n </MarketingModal>\n );\n};\n\nBaseModal.defaultProps = {\n offer: null,\n};\n\nBaseModal.propTypes = {\n offer: PropTypes.shape({\n code: PropTypes.string,\n }),\n // eslint-disable-next-line react/no-unused-prop-types\n variationKey: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n callToActionButton: PropTypes.node.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default BaseModal;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,7 +11,6 @@ var _i18n = require("@edx/frontend-platform/i18n");
|
|
|
11
11
|
var _analytics = require("@edx/frontend-platform/analytics");
|
|
12
12
|
var _paragon = require("@openedx/paragon");
|
|
13
13
|
var _icons = require("@openedx/paragon/icons");
|
|
14
|
-
var _upgradeButton = require("@src/generic/upgrade-button");
|
|
15
14
|
var _modelStore = require("@src/generic/model-store");
|
|
16
15
|
var _data = require("../data");
|
|
17
16
|
var _subscriptionUpsell = require("../subscription-upsell");
|
|
@@ -20,6 +19,7 @@ var _generic = require("../generic");
|
|
|
20
19
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
21
20
|
var _messages = _interopRequireDefault(require("./messages"));
|
|
22
21
|
var _cohesion = require("../cohesion");
|
|
22
|
+
require("./UpgradeNotification.scss");
|
|
23
23
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
25
|
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); }
|
|
@@ -160,31 +160,26 @@ const UpgradeNotification = _ref => {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/*
|
|
163
|
-
There are 5 parts that change
|
|
163
|
+
The card follows the Red Ventures sidebar card it replaces (LP-1471). There are 5 parts that change:
|
|
164
|
+
offerMessage, with offerCountdown in it
|
|
164
165
|
upgradeNotificationHeaderText
|
|
165
166
|
expirationBanner
|
|
166
|
-
upsellMessage
|
|
167
|
+
upsellMessage, which replaces the comparison table in the states that explain the deadline instead
|
|
167
168
|
callToActionButton
|
|
168
|
-
offerCode
|
|
169
169
|
*/
|
|
170
170
|
let upgradeNotificationHeaderText;
|
|
171
171
|
let expirationBanner;
|
|
172
172
|
let callToActionButton;
|
|
173
|
-
let
|
|
174
|
-
let
|
|
175
|
-
|
|
176
|
-
learningAssistantEnabled
|
|
177
|
-
});
|
|
173
|
+
let offerMessage;
|
|
174
|
+
let offerCountdown;
|
|
175
|
+
let upsellMessage;
|
|
178
176
|
if (isFBE) {
|
|
179
177
|
const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
|
|
180
178
|
if (hoursToAccessExpiration >= 7 * 24) {
|
|
181
179
|
if (offer) {
|
|
182
|
-
// countdown to the first purchase discount
|
|
180
|
+
// countdown to the first purchase discount, shown with the discount in offerMessage
|
|
183
181
|
const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);
|
|
184
|
-
|
|
185
|
-
percentage: offer.percentage
|
|
186
|
-
});
|
|
187
|
-
expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.ExpirationCountdown, {
|
|
182
|
+
offerCountdown = /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.ExpirationCountdown, {
|
|
188
183
|
courseId: courseId,
|
|
189
184
|
hoursToExpiration: hoursToDiscountExpiration,
|
|
190
185
|
setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
|
|
@@ -228,35 +223,50 @@ const UpgradeNotification = _ref => {
|
|
|
228
223
|
}
|
|
229
224
|
if (pastExpirationDeadline) {
|
|
230
225
|
callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
231
|
-
variant: "
|
|
226
|
+
variant: "brand",
|
|
232
227
|
onClick: logClickPastExpiration,
|
|
233
228
|
href: marketingUrl,
|
|
234
229
|
block: true,
|
|
235
230
|
children: formatMessage(_messages.default.pastExpirationCallToActionLabel)
|
|
236
231
|
});
|
|
237
232
|
} else {
|
|
238
|
-
|
|
239
|
-
|
|
233
|
+
// Prefer the offer's url, as the host app's UpgradeButton does, in case it ever differs.
|
|
234
|
+
callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
235
|
+
variant: "brand",
|
|
236
|
+
href: offer ? offer.upgradeUrl : verifiedMode.upgradeUrl,
|
|
240
237
|
onClick: logUpgradeClick,
|
|
241
|
-
|
|
242
|
-
|
|
238
|
+
block: true,
|
|
239
|
+
"data-testid": "upgrade-button",
|
|
240
|
+
children: formatMessage(_messages.default.upgradeNowButton, {
|
|
241
|
+
price: offer ? offer.discountedPrice : `${verifiedMode.currencySymbol}${verifiedMode.price}`
|
|
242
|
+
})
|
|
243
243
|
});
|
|
244
244
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
245
|
+
|
|
246
|
+
// The first purchase discount and its code, above the comparison table. Past the upgrade deadline the
|
|
247
|
+
// button goes to the course details instead, where the code can't be used.
|
|
248
|
+
if (offer && !pastExpirationDeadline) {
|
|
249
|
+
offerMessage = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
250
|
+
className: "mb-4",
|
|
251
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
|
|
252
|
+
className: "upgrade-notification-subheader mx-4 mb-2",
|
|
253
|
+
children: formatMessage(_messages.default.firstTimeLearnerOffer, {
|
|
254
|
+
percentage: offer.percentage
|
|
253
255
|
})
|
|
254
|
-
})
|
|
256
|
+
}), offerCountdown && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
257
|
+
className: "mb-2",
|
|
258
|
+
children: offerCountdown
|
|
259
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
260
|
+
className: "font-weight-bold mx-4 mb-0",
|
|
261
|
+
children: formatMessage(_messages.default.promoCodeMessage, {
|
|
262
|
+
code: offer.code
|
|
263
|
+
})
|
|
264
|
+
})]
|
|
255
265
|
});
|
|
256
266
|
}
|
|
257
267
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("section", {
|
|
258
|
-
className: (0, _classnames.default)('upgrade-notification small', {
|
|
259
|
-
'
|
|
268
|
+
className: (0, _classnames.default)('upgrade-notification verified-upgrade-card small', {
|
|
269
|
+
'mb-4': shouldDisplayBorder
|
|
260
270
|
}),
|
|
261
271
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
262
272
|
id: "courseHome-upgradeNotification",
|
|
@@ -278,17 +288,24 @@ const UpgradeNotification = _ref => {
|
|
|
278
288
|
})
|
|
279
289
|
})]
|
|
280
290
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_certificatePreview.default, {
|
|
281
|
-
courseId: courseId
|
|
282
|
-
|
|
283
|
-
|
|
291
|
+
courseId: courseId,
|
|
292
|
+
bgColor: "bg-white"
|
|
293
|
+
}), offerMessage, upgradeNotificationHeaderText && /*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
|
|
294
|
+
className: "upgrade-notification-subheader ml-4",
|
|
284
295
|
children: upgradeNotificationHeaderText
|
|
285
296
|
}), expirationBanner, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
286
297
|
className: "upgrade-notification-message",
|
|
287
|
-
children: upsellMessage
|
|
298
|
+
children: upsellMessage || /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.UpsellTable, {
|
|
299
|
+
isFBE,
|
|
300
|
+
learningAssistantEnabled,
|
|
301
|
+
inlineHeader: true
|
|
302
|
+
})
|
|
288
303
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
289
|
-
className:
|
|
304
|
+
className: (0, _classnames.default)('upgrade-notification-button mx-4 mb-4', {
|
|
305
|
+
'mt-4': !!upsellMessage
|
|
306
|
+
}),
|
|
290
307
|
children: callToActionButton
|
|
291
|
-
})
|
|
308
|
+
})]
|
|
292
309
|
})
|
|
293
310
|
});
|
|
294
311
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_upgradeButton","_modelStore","_data","_subscriptionUpsell","_certificatePreview","_generic","_utils","_messages","_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","SUBSCRIPTION_CARD_PLACEMENTS","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","isSubscriptionCardPlacement","some","placement","showSubscriptionCard","hasUpsell","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","variant","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","logSubscribeClick","banner","hoursToAccessExpiration","Math","floor","jsx","ExpirationCountdown","hoursToExpiration","type","AccessExpirationDateBanner","SubscriptionUpgradeCard","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","stage","onClose","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerCode","upsellMessage","UpsellTable","hoursToDiscountExpiration","expirationDate","messages","firstTimeLearnerDiscountHeader","percentage","accessExpirationHeader","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","onClick","href","block","children","pastExpirationCallToActionLabel","UpgradeButton","className","discountCodeMessage","code","classNames","jsxs","pursueCertificateMessage","IconButton","src","Close","size","iconAs","Icon","alt","closeAlt","propTypes","PropTypes","string","isRequired","func","defaultProps","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { useModel } from '@src/generic/model-store';\n\nimport { PAGE_NAMES } from '../data';\nimport { SubscriptionUpgradeCard, useSubscriptionOffer } from '../subscription-upsell';\nimport CertificatePreview from './certificate-preview';\nimport {\n ExpirationCountdown,\n AccessExpirationDateBanner,\n PastExpirationDateBanner,\n PastExpirationCardContent,\n UpsellFBESoonCardContent,\n UpsellTable,\n} from '../generic';\nimport getUpsellPageName from './utils';\nimport messages from './messages';\nimport { useCohesion } from '../cohesion';\n\n// Placements that show the subscription card: course home and the courseware sidebar\n// (tray and widget). The Progress page keeps the current card.\nconst SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];\n\nconst UpgradeNotification = ({\n id,\n courseId,\n model,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n const { formatMessage } = useIntl();\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n marketingUrl,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n datesBannerInfo,\n offer,\n timeOffsetMillis,\n } = useModel(model, courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n // Server time, so this agrees with the countdown and the FBE branches below.\n const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\n const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(\n (placement) => pluginLocationId.includes(placement),\n );\n // Without an offer or anything in it to show, past the upgrade deadline, and on the Progress page,\n // today's card renders.\n const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer?.hasUpsell;\n const upsellPageName = getUpsellPageName({ id: pluginLocationId });\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n // Tags the placements that switched to the subscription card, so reports can split them from today's card.\n ...(showSubscriptionCard && { variant: 'subscription' }),\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logUpgradeClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-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\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\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\n if (showSubscriptionCard) { // the card handles every offer state itself\n let banner;\n if (isFBE) { // content-gated learners keep the access expiration warning and its sidebar dot stages\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n banner = hoursToAccessExpiration < (7 * 24) ? (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n ) : (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n return (\n <SubscriptionUpgradeCard\n courseId={courseId}\n withBorder={shouldDisplayBorder}\n banner={banner}\n onSubscribeClick={logSubscribeClick}\n onPurchaseClick={logUpgradeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && logUpgradeClick()}\n onClose={toggleSidebar}\n />\n );\n }\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let callToActionButton;\n let offerCode;\n\n let upsellMessage = <UpsellTable {...{ isFBE, learningAssistantEnabled }} />;\n\n if (isFBE) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = formatMessage(\n messages.firstTimeLearnerDiscountHeader,\n { percentage: (offer.percentage) },\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationHeader);\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationUrgentHeader);\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n if (upsellPageName !== PAGE_NAMES.PROGRESS) {\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n }\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationPastHeader);\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n {formatMessage(messages.pastExpirationCallToActionLabel)}\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logUpgradeClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n {formatMessage(\n messages.discountCodeMessage,\n {\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n },\n )}\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification small', { 'pgn__card pgn__card-light card mb-4 rounded': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n 'm-4': !toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {formatMessage(messages.pursueCertificateMessage)}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={formatMessage(messages.closeAlt)}\n />\n </div>\n )}\n </h2>\n <CertificatePreview courseId={courseId} />\n <h3 className=\"ml-4\">\n {upgradeNotificationHeaderText}\n </h3>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button m-4\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n model: PropTypes.string,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n model: 'outline',\n};\n\nexport default UpgradeNotification;\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AAEA,IAAAQ,cAAA,GAAAR,OAAA;AACA,IAAAS,WAAA,GAAAT,OAAA;AAEA,IAAAU,KAAA,GAAAV,OAAA;AACA,IAAAW,mBAAA,GAAAX,OAAA;AACA,IAAAY,mBAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,QAAA,GAAAb,OAAA;AAQA,IAAAc,MAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,SAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,SAAA,GAAAhB,OAAA;AAA0C,IAAAiB,WAAA,GAAAjB,OAAA;AAAA,SAAAE,uBAAAgB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAnB,wBAAAmB,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAvB,uBAAA,YAAAA,CAAAmB,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,KAzB1C,qCA2BA;AACA;AACA,MAAMwC,4BAA4B,GAAG,CAAC,SAAS,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;AAE5F,MAAMC,mBAAmB,GAAGC,IAAA,IAMtB;EAAA,IANuB;IAC3BC,EAAE;IACFC,QAAQ;IACRC,KAAK;IACLC,2BAA2B;IAC3BC;EACF,CAAC,GAAAL,IAAA;EACC,MAAMM,gBAAgB,GAAGL,EAAE;EAC3B,MAAM;IAAEM;EAAc,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;EAEnC,MAAM;IACJC,GAAG;IACHC,YAAY;IACZC;EACF,CAAC,GAAG,IAAAC,oBAAQ,EAAC,gBAAgB,EAAEV,QAAQ,CAAC;EAExC,MAAM;IACJW,YAAY;IACZC;EACF,CAAC,GAAG,IAAAF,oBAAQ,EAAC,gBAAgB,EAAEV,QAAQ,CAAC;EAExC,MAAM;IACJa,gBAAgB;IAChBC,eAAe;IACfC,KAAK;IACLC;EACF,CAAC,GAAG,IAAAN,oBAAQ,EAACT,KAAK,EAAED,QAAQ,CAAC;EAE7B,MAAM;IAAEiB;EAAW,CAAC,GAAG,IAAAC,qBAAW,EAAClB,QAAQ,CAAC;EAC5C,MAAMmB,iBAAiB,GAAG,IAAAC,wCAAoB,EAACpB,QAAQ,CAAC;EAExD,MAAMqB,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC1B,MAAMC,kBAAkB,GAAGhB,YAAY,GAAG;IAAEiB,QAAQ,EAAEjB;EAAa,CAAC,GAAG,CAAC,CAAC;EACzE,MAAMkB,aAAa,GAAG,IAAIJ,IAAI,CAACD,OAAO,GAAGL,gBAAgB,CAAC;EAC1D,MAAMW,oBAAoB,GAAGd,gBAAgB,GAAG,IAAIS,IAAI,CAACT,gBAAgB,CAACe,eAAe,CAAC,GAAG,IAAI;EACjG;EACA,MAAMC,sBAAsB,GAAGhB,gBAAgB,GAAGa,aAAa,GAAGC,oBAAoB,GAAG,KAAK;EAC9F,MAAMG,mBAAmB,GAAG1B,gBAAgB,CAAC2B,QAAQ,CAAC,SAAS,CAAC;EAChE,MAAMC,2BAA2B,GAAGpC,4BAA4B,CAACqC,IAAI,CAClEC,SAAS,IAAK9B,gBAAgB,CAAC2B,QAAQ,CAACG,SAAS,CACpD,CAAC;EACD;EACA;EACA,MAAMC,oBAAoB,GAAGH,2BAA2B,IAAI,CAACH,sBAAsB,IAAI,CAAC,CAACV,iBAAiB,EAAEiB,SAAS;EACrH,MAAMC,cAAc,GAAG,IAAAC,cAAiB,EAAC;IAAEvC,EAAE,EAAEK;EAAiB,CAAC,CAAC;EAClE,MAAMmC,kCAAkC,GAAGrC,2BAA2B;EACtE,MAAMsC,KAAK,GAAG,CAAC,CAAC3B,gBAAgB,IAAI,CAAC,CAACC,eAAe,EAAE2B,wBAAwB;EAE/E,MAAMC,eAAe,GAAA/D,aAAA;IACnBgE,OAAO,EAAEpC,GAAG;IACZqC,aAAa,EAAE5C;EAAQ,GAEnBmC,oBAAoB,IAAI;IAAEU,OAAO,EAAE;EAAe,CAAC,CACxD;EAED,MAAMC,wBAAwB,GAAAnE,aAAA;IAC5BoE,QAAQ,EAAE,eAAe;IACzBC,IAAI,EAAE,+BAA+B;IACrCC,QAAQ,EAAE,iBAAiB;IAC3BC,YAAY,EAAE;EAAwC,GACnDR,eAAe,CACnB;EAED,IAAAS,gBAAS,EAAC,MAAM;IACd,IAAAC,+BAAoB,EAAC,+CAA+C,EAAEV,eAAe,CAAC;IACtF,IAAAW,yBAAc,EAAC,kBAAkB,EAAEP,wBAAwB,CAAC;IAC5D;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAACrC,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAM6C,eAAe,GAAGA,CAAA,KAAM;IAC5B,IAAAF,+BAAoB,EAAC,6CAA6C,EAAEV,eAAe,CAAC;IACpF,IAAAU,+BAAoB,EAAC,uCAAuC,EAAAzE,aAAA,CAAAA,aAAA,KACvD+D,eAAe;MAClBa,QAAQ,EAAE;IAAiB,EAC5B,CAAC;IACF,IAAAF,yBAAc,EAAC,mBAAmB,EAAEP,wBAAwB,CAAC;IAC7D,IAAAO,yBAAc,EAAC,uCAAuC,EAAA1E,aAAA,CAAAA,aAAA,KACjD+D,eAAe;MAClBc,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAE,GAAGpB,cAAc,QAAQ;MACnCqB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAEtB;IAAc,EACzB,CAAC;IAEFpB,UAAU,CAAC,UAAU,CAAC;EACxB,CAAC;EAED,MAAM2C,sBAAsB,GAAGA,CAAA,KAAM;IACnC,IAAAP,yBAAc,EAAC,sEAAsE,EAAA1E,aAAA,CAAAA,aAAA,KAChF+D,eAAe;MAClBc,YAAY,EAAE,sBAAsB;MACpCC,QAAQ,EAAE,GAAGpB,cAAc,iBAAiB;MAC5CqB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAEtB;IAAc,EACzB,CAAC;EACJ,CAAC;EAED,MAAMwB,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,IAAAR,yBAAc,EAAC,uCAAuC,EAAA1E,aAAA,CAAAA,aAAA,KACjD+D,eAAe;MAClBc,YAAY,EAAE,cAAc;MAC5BC,QAAQ,EAAE,GAAGpB,cAAc,YAAY;MACvCqB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAEtB;IAAc,EACzB,CAAC;IACFpB,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;EACnC,CAAC;EAED,IAAIkB,oBAAoB,EAAE;IAAE;IAC1B,IAAI2B,MAAM;IACV,IAAItB,KAAK,EAAE;MAAE;MACX,MAAMuB,uBAAuB,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACtC,oBAAoB,GAAGD,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;MACnGoC,MAAM,GAAGC,uBAAuB,GAAI,CAAC,GAAG,EAAG,gBACzC,IAAA/G,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAuH,mBAAmB;QAClBnE,QAAQ,EAAEA,QAAS;QACnBoE,iBAAiB,EAAEL,uBAAwB;QAC3CxB,kCAAkC,EAAEA,kCAAmC;QACvE8B,IAAI,EAAC;MAAQ,CACd,CAAC,gBAEF,IAAArH,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAA0H,0BAA0B;QACzBtE,QAAQ,EAAEA,QAAS;QACnB2B,oBAAoB,EAAEA,oBAAqB;QAC3CH,kBAAkB,EAAEA,kBAAmB;QACvCe,kCAAkC,EAAEA;MAAmC,CACxE,CACF;IACH;IACA,oBACE,IAAAvF,WAAA,CAAAkH,GAAA,EAACxH,mBAAA,CAAA6H,uBAAuB;MACtBvE,QAAQ,EAAEA,QAAS;MACnBwE,UAAU,EAAE1C,mBAAoB;MAChCgC,MAAM,EAAEA,MAAO;MACfW,gBAAgB,EAAEZ,iBAAkB;MACpCa,eAAe,EAAEpB,eAAgB;MACjCqB,cAAc,EAAGC,KAAK,IAAKA,KAAK,KAAK,WAAW,IAAItB,eAAe,CAAC,CAAE;MACtEuB,OAAO,EAAE1E;IAAc,CACxB,CAAC;EAEN;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI2E,6BAA6B;EACjC,IAAIC,gBAAgB;EACpB,IAAIC,kBAAkB;EACtB,IAAIC,SAAS;EAEb,IAAIC,aAAa,gBAAG,IAAAlI,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAuI,WAAW;IAAO3C,KAAK;IAAE5B;EAAwB,CAAK,CAAC;EAE5E,IAAI4B,KAAK,EAAE;IACT,MAAMuB,uBAAuB,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACtC,oBAAoB,GAAGD,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnG,IAAIqC,uBAAuB,IAAK,CAAC,GAAG,EAAG,EAAE;MACvC,IAAIhD,KAAK,EAAE;QAAE;QACX,MAAMqE,yBAAyB,GAAGpB,IAAI,CAACC,KAAK,CAAC,CAAC,IAAI3C,IAAI,CAACP,KAAK,CAACsE,cAAc,CAAC,GAAG3D,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QAC/GoD,6BAA6B,GAAGzE,aAAa,CAC3CiF,iBAAQ,CAACC,8BAA8B,EACvC;UAAEC,UAAU,EAAGzE,KAAK,CAACyE;QAAY,CACnC,CAAC;QACDT,gBAAgB,gBACd,IAAA/H,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAuH,mBAAmB;UAClBnE,QAAQ,EAAEA,QAAS;UACnBoE,iBAAiB,EAAEgB,yBAA0B;UAC7C7C,kCAAkC,EAAEA,kCAAmC;UACvE8B,IAAI,EAAC;QAAO,CACb,CACF;MACH,CAAC,MAAM;QACLS,6BAA6B,GAAGzE,aAAa,CAACiF,iBAAQ,CAACG,sBAAsB,CAAC;QAC9EV,gBAAgB,gBACd,IAAA/H,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAA0H,0BAA0B;UACzBtE,QAAQ,EAAEA,QAAS;UACnB2B,oBAAoB,EAAEA,oBAAqB;UAC3CH,kBAAkB,EAAEA,kBAAmB;UACvCe,kCAAkC,EAAEA;QAAmC,CACxE,CACF;MACH;IACF,CAAC,MAAM,IAAIwB,uBAAuB,GAAI,CAAC,GAAG,EAAG,IAAIA,uBAAuB,IAAI,CAAC,EAAE;MAC7E;MACAe,6BAA6B,GAAGzE,aAAa,CAACiF,iBAAQ,CAACI,4BAA4B,CAAC;MACpFX,gBAAgB,gBACd,IAAA/H,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAuH,mBAAmB;QAClBnE,QAAQ,EAAEA,QAAS;QACnBoE,iBAAiB,EAAEL,uBAAwB;QAC3CxB,kCAAkC,EAAEA,kCAAmC;QACvE8B,IAAI,EAAC;MAAQ,CACd,CACF;MACD,IAAIhC,cAAc,KAAKsD,gBAAU,CAACC,QAAQ,EAAE;QAC1CV,aAAa,gBACX,IAAAlI,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAiJ,wBAAwB;UACvBlE,oBAAoB,EAAEA,oBAAqB;UAC3CH,kBAAkB,EAAEA;QAAmB,CACxC,CACF;MACH;IACF,CAAC,MAAM;MAAE;MACPsD,6BAA6B,GAAGzE,aAAa,CAACiF,iBAAQ,CAACQ,0BAA0B,CAAC;MAClFf,gBAAgB,gBACd,IAAA/H,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAmJ,wBAAwB;QACvB/F,QAAQ,EAAEA,QAAS;QACnB2B,oBAAoB,EAAEA,oBAAqB;QAC3CH,kBAAkB,EAAEA,kBAAmB;QACvCe,kCAAkC,EAAEA;MAAmC,CACxE,CACF;MACD2C,aAAa,gBACX,IAAAlI,WAAA,CAAAkH,GAAA,EAACtH,QAAA,CAAAoJ,yBAAyB,IAAE,CAC7B;IACH;EACF;EAEA,IAAInE,sBAAsB,EAAE;IAC1BmD,kBAAkB,gBAChB,IAAAhI,WAAA,CAAAkH,GAAA,EAAC7H,QAAA,CAAA4J,MAAM;MACLpD,OAAO,EAAC,SAAS;MACjBqD,OAAO,EAAEtC,sBAAuB;MAChCuC,IAAI,EAAExF,YAAa;MACnByF,KAAK;MAAAC,QAAA,EAEJhG,aAAa,CAACiF,iBAAQ,CAACgB,+BAA+B;IAAC,CAClD,CACT;EACH,CAAC,MAAM;IACLtB,kBAAkB,gBAChB,IAAAhI,WAAA,CAAAkH,GAAA,EAAC3H,cAAA,CAAAgK,aAAa;MACZxF,KAAK,EAAEA,KAAM;MACbmF,OAAO,EAAE5C,eAAgB;MACzB7C,YAAY,EAAEA,YAAa;MAC3B2F,KAAK;IAAA,CACN,CACF;EACH;EAEA,IAAIrF,KAAK,EAAE;IAAE;IACXkE,SAAS,gBACP,IAAAjI,WAAA,CAAAkH,GAAA;MAAKsC,SAAS,EAAC,2BAA2B;MAAAH,QAAA,EACvChG,aAAa,CACZiF,iBAAQ,CAACmB,mBAAmB,EAC5B;QACEC,IAAI,eAAG,IAAA1J,WAAA,CAAAkH,GAAA;UAAMsC,SAAS,EAAC,kBAAkB;UAAAH,QAAA,EAAEtF,KAAK,CAAC2F;QAAI,CAAO;MAC9D,CACF;IAAC,CACE,CACN;EACH;EAEA,oBACE,IAAA1J,WAAA,CAAAkH,GAAA;IAASsC,SAAS,EAAE,IAAAG,mBAAU,EAAC,4BAA4B,EAAE;MAAE,6CAA6C,EAAE7E;IAAoB,CAAC,CAAE;IAAAuE,QAAA,eACnI,IAAArJ,WAAA,CAAA4J,IAAA;MAAK7G,EAAE,EAAC,gCAAgC;MAAAsG,QAAA,gBACtC,IAAArJ,WAAA,CAAA4J,IAAA;QACEJ,SAAS,EAAE,IAAAG,mBAAU,EAAC,6BAA6B,EAAE;UACnD,yDAAyD,EAAE,CAAC,CAACxG,aAAa;UAC1E,KAAK,EAAE,CAACA;QACV,CAAC,CAAE;QACHJ,EAAE,EAAC,gCAAgC;QAAAsG,QAAA,GAElChG,aAAa,CAACiF,iBAAQ,CAACuB,wBAAwB,CAAC,EAChD,CAAC,CAAC1G,aAAa,iBACd,IAAAnD,WAAA,CAAAkH,GAAA;UAAKsC,SAAS,EAAC,uBAAuB;UAAAH,QAAA,eACpC,IAAArJ,WAAA,CAAAkH,GAAA,EAAC7H,QAAA,CAAAyK,UAAU;YACTC,GAAG,EAAEC,YAAM;YACXC,IAAI,EAAC,IAAI;YACTC,MAAM,EAAEC,aAAK;YACbjB,OAAO,EAAE/F,aAAc;YACvBqG,SAAS,EAAC,YAAY;YACtBY,GAAG,EAAE/G,aAAa,CAACiF,iBAAQ,CAAC+B,QAAQ;UAAE,CACvC;QAAC,CACC,CACN;MAAA,CACC,CAAC,eACL,IAAArK,WAAA,CAAAkH,GAAA,EAACvH,mBAAA,CAAAQ,OAAkB;QAAC6C,QAAQ,EAAEA;MAAS,CAAE,CAAC,eAC1C,IAAAhD,WAAA,CAAAkH,GAAA;QAAIsC,SAAS,EAAC,MAAM;QAAAH,QAAA,EACjBvB;MAA6B,CAC5B,CAAC,EACJC,gBAAgB,eACjB,IAAA/H,WAAA,CAAAkH,GAAA;QAAKsC,SAAS,EAAC,8BAA8B;QAAAH,QAAA,EAC1CnB;MAAa,CACX,CAAC,eACN,IAAAlI,WAAA,CAAAkH,GAAA;QAAKsC,SAAS,EAAC,iCAAiC;QAAAH,QAAA,EAC7CrB;MAAkB,CAChB,CAAC,EACLC,SAAS;IAAA,CACP;EAAC,CACC,CAAC;AAEd,CAAC;AAEDpF,mBAAmB,CAACyH,SAAS,GAAG;EAC9BvH,EAAE,EAAEwH,kBAAS,CAACC,MAAM,CAACC,UAAU;EAC/BzH,QAAQ,EAAEuH,kBAAS,CAACC,MAAM,CAACC,UAAU;EACrCxH,KAAK,EAAEsH,kBAAS,CAACC,MAAM;EACvBtH,2BAA2B,EAAEqH,kBAAS,CAACG,IAAI;EAC3CvH,aAAa,EAAEoH,kBAAS,CAACG;AAC3B,CAAC;AAED7H,mBAAmB,CAAC8H,YAAY,GAAG;EACjCzH,2BAA2B,EAAE,IAAI;EACjCC,aAAa,EAAE,IAAI;EACnBF,KAAK,EAAE;AACT,CAAC;AAAC,IAAA2H,QAAA,GAAAC,OAAA,CAAA1K,OAAA,GAEa0C,mBAAmB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_modelStore","_data","_subscriptionUpsell","_certificatePreview","_generic","_utils","_messages","_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","SUBSCRIPTION_CARD_PLACEMENTS","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","isSubscriptionCardPlacement","some","placement","showSubscriptionCard","hasUpsell","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","variant","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","logSubscribeClick","banner","hoursToAccessExpiration","Math","floor","jsx","ExpirationCountdown","hoursToExpiration","type","AccessExpirationDateBanner","SubscriptionUpgradeCard","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","stage","onClose","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerMessage","offerCountdown","upsellMessage","hoursToDiscountExpiration","expirationDate","messages","accessExpirationHeader","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","onClick","href","block","children","pastExpirationCallToActionLabel","upgradeUrl","upgradeNowButton","price","discountedPrice","currencySymbol","jsxs","className","firstTimeLearnerOffer","percentage","promoCodeMessage","code","classNames","pursueCertificateMessage","IconButton","src","Close","size","iconAs","Icon","alt","closeAlt","bgColor","UpsellTable","inlineHeader","propTypes","PropTypes","string","isRequired","func","defaultProps","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { useModel } from '@src/generic/model-store';\n\nimport { PAGE_NAMES } from '../data';\nimport { SubscriptionUpgradeCard, useSubscriptionOffer } from '../subscription-upsell';\nimport CertificatePreview from './certificate-preview';\nimport {\n ExpirationCountdown,\n AccessExpirationDateBanner,\n PastExpirationDateBanner,\n PastExpirationCardContent,\n UpsellFBESoonCardContent,\n UpsellTable,\n} from '../generic';\nimport getUpsellPageName from './utils';\nimport messages from './messages';\nimport { useCohesion } from '../cohesion';\nimport './UpgradeNotification.scss';\n\n// Placements that show the subscription card: course home and the courseware sidebar\n// (tray and widget). The Progress page keeps the current card.\nconst SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];\n\nconst UpgradeNotification = ({\n id,\n courseId,\n model,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n const { formatMessage } = useIntl();\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n marketingUrl,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n datesBannerInfo,\n offer,\n timeOffsetMillis,\n } = useModel(model, courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n // Server time, so this agrees with the countdown and the FBE branches below.\n const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\n const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(\n (placement) => pluginLocationId.includes(placement),\n );\n // Without an offer or anything in it to show, past the upgrade deadline, and on the Progress page,\n // today's card renders.\n const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer?.hasUpsell;\n const upsellPageName = getUpsellPageName({ id: pluginLocationId });\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n // Tags the placements that switched to the subscription card, so reports can split them from today's card.\n ...(showSubscriptionCard && { variant: 'subscription' }),\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logUpgradeClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-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\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\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\n if (showSubscriptionCard) { // the card handles every offer state itself\n let banner;\n if (isFBE) { // content-gated learners keep the access expiration warning and its sidebar dot stages\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n banner = hoursToAccessExpiration < (7 * 24) ? (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n ) : (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n return (\n <SubscriptionUpgradeCard\n courseId={courseId}\n withBorder={shouldDisplayBorder}\n banner={banner}\n onSubscribeClick={logSubscribeClick}\n onPurchaseClick={logUpgradeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && logUpgradeClick()}\n onClose={toggleSidebar}\n />\n );\n }\n\n /*\n The card follows the Red Ventures sidebar card it replaces (LP-1471). There are 5 parts that change:\n offerMessage, with offerCountdown in it\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage, which replaces the comparison table in the states that explain the deadline instead\n callToActionButton\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let callToActionButton;\n let offerMessage;\n let offerCountdown;\n let upsellMessage;\n\n if (isFBE) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount, shown with the discount in offerMessage\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n offerCountdown = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationHeader);\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationUrgentHeader);\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n if (upsellPageName !== PAGE_NAMES.PROGRESS) {\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n }\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationPastHeader);\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"brand\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n {formatMessage(messages.pastExpirationCallToActionLabel)}\n </Button>\n );\n } else {\n // Prefer the offer's url, as the host app's UpgradeButton does, in case it ever differs.\n callToActionButton = (\n <Button\n variant=\"brand\"\n href={offer ? offer.upgradeUrl : verifiedMode.upgradeUrl}\n onClick={logUpgradeClick}\n block\n data-testid=\"upgrade-button\"\n >\n {formatMessage(messages.upgradeNowButton, {\n price: offer ? offer.discountedPrice : `${verifiedMode.currencySymbol}${verifiedMode.price}`,\n })}\n </Button>\n );\n }\n\n // The first purchase discount and its code, above the comparison table. Past the upgrade deadline the\n // button goes to the course details instead, where the code can't be used.\n if (offer && !pastExpirationDeadline) {\n offerMessage = (\n <div className=\"mb-4\">\n <h3 className=\"upgrade-notification-subheader mx-4 mb-2\">\n {formatMessage(messages.firstTimeLearnerOffer, { percentage: offer.percentage })}\n </h3>\n {offerCountdown && <div className=\"mb-2\">{offerCountdown}</div>}\n <p className=\"font-weight-bold mx-4 mb-0\">\n {formatMessage(messages.promoCodeMessage, { code: offer.code })}\n </p>\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification verified-upgrade-card small', { 'mb-4': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n 'm-4': !toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {formatMessage(messages.pursueCertificateMessage)}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={formatMessage(messages.closeAlt)}\n />\n </div>\n )}\n </h2>\n <CertificatePreview courseId={courseId} bgColor=\"bg-white\" />\n {offerMessage}\n {upgradeNotificationHeaderText && (\n <h3 className=\"upgrade-notification-subheader ml-4\">\n {upgradeNotificationHeaderText}\n </h3>\n )}\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage || <UpsellTable {...{ isFBE, learningAssistantEnabled }} inlineHeader />}\n </div>\n {/* The table's bottom padding spaces the button; the messages that replace it don't. */}\n <div className={classNames('upgrade-notification-button mx-4 mb-4', { 'mt-4': !!upsellMessage })}>\n {callToActionButton}\n </div>\n </div>\n </section>\n );\n};\n\nUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n model: PropTypes.string,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n model: 'outline',\n};\n\nexport default UpgradeNotification;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// The verified upgrade card in the course home and courseware sidebars, styled after the Red Ventures
|
|
2
|
+
// card it replaces (LP-1471): warm grey card, white certificate, and a Verified column on the card colour.
|
|
3
|
+
.verified-upgrade-card {
|
|
4
|
+
// Keeps the header's and button's margins inside the card instead of collapsing through it.
|
|
5
|
+
display: flow-root;
|
|
6
|
+
background-color: var(--pgn-color-light-100);
|
|
7
|
+
border-radius: 1.5rem;
|
|
8
|
+
color: var(--pgn-color-black);
|
|
9
|
+
|
|
10
|
+
h2,
|
|
11
|
+
h3 {
|
|
12
|
+
color: inherit;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.upgrade-notification-header {
|
|
16
|
+
font-size: var(--pgn-typography-font-size-h4-base);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// The discount line and the access expiration headers, under the card title.
|
|
20
|
+
.upgrade-notification-subheader {
|
|
21
|
+
font-size: 1.125rem;
|
|
22
|
+
font-weight: var(--pgn-typography-font-weight-normal);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.certificate-preview {
|
|
26
|
+
border-radius: 1rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// The messages that replace the comparison table, inset like the rest of the card.
|
|
30
|
+
.upgrade-notification-text {
|
|
31
|
+
margin: 0 1.5rem;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.table-header-cell,
|
|
35
|
+
.feature-cell {
|
|
36
|
+
color: inherit;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The Audit column is a plain grey block, without the table's outline on any side.
|
|
40
|
+
.audit-cell {
|
|
41
|
+
color: var(--pgn-color-gray-700);
|
|
42
|
+
background-color: var(--pgn-color-light-200);
|
|
43
|
+
border: 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.top-audit-border {
|
|
47
|
+
color: inherit;
|
|
48
|
+
font-weight: var(--pgn-typography-font-weight-bold);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.verified-cell {
|
|
52
|
+
color: var(--pgn-color-success-500);
|
|
53
|
+
background-color: transparent;
|
|
54
|
+
border-left-width: 2px;
|
|
55
|
+
border-right-width: 2px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.top-verified-border {
|
|
59
|
+
border-top-width: 2px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.bottom-verified-border {
|
|
63
|
+
border-bottom-width: 2px;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -169,7 +169,12 @@ const CertificatePreview = _ref => {
|
|
|
169
169
|
return component;
|
|
170
170
|
};
|
|
171
171
|
CertificatePreview.propTypes = {
|
|
172
|
-
courseId: _propTypes.default.string.isRequired
|
|
172
|
+
courseId: _propTypes.default.string.isRequired,
|
|
173
|
+
// A background utility class, such as bg-white.
|
|
174
|
+
bgColor: _propTypes.default.string
|
|
175
|
+
};
|
|
176
|
+
CertificatePreview.defaultProps = {
|
|
177
|
+
bgColor: ''
|
|
173
178
|
};
|
|
174
179
|
var _default = exports.default = CertificatePreview;
|
|
175
180
|
//# sourceMappingURL=CertificatePreview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CertificatePreview.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_frontendPlatform","_auth","_paragon","_modelStore","_lms_api","_Signatory","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CertificatePreview","_ref","courseId","bgColor","username","name","getAuthenticatedUser","number","org","title","useModel","platformLogoUrl","getConfig","LOGO_URL","isLoading","setIsLoading","useState","orgMetadata","setOrgMetadata","certificateName","setCertificateName","useEffect","fetchOrg","then","data","fetchVerifiedName","certName","useVerifiedNameForCerts","verifiedName","profileName","CertificatePreviewComponent","jsxs","className","children","jsx","alt","src","logo","shortName","component","Skeleton","count","height","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../../src/upgrade-notification/certificate-preview/CertificatePreview.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { Skeleton } from '@openedx/paragon';\nimport { useModel } from '@src/generic/model-store';\n\nimport { fetchOrg, fetchVerifiedName } from '../../data/lms_api';\nimport Signatory from './Signatory';\nimport './CertificatePreview.scss';\n\nconst CertificatePreview = ({ courseId, bgColor }) => {\n const { username, name } = getAuthenticatedUser();\n\n const {\n number,\n org,\n title,\n } = useModel('courseHomeMeta', courseId);\n\n const platformLogoUrl = getConfig().LOGO_URL;\n\n const [isLoading, setIsLoading] = useState(true);\n const [orgMetadata, setOrgMetadata] = useState({});\n const [certificateName, setCertificateName] = useState(name);\n\n useEffect(() => {\n fetchOrg(org).then((data) => {\n setOrgMetadata(data);\n });\n\n fetchVerifiedName(username).then((data) => {\n if (data) {\n const certName = data.useVerifiedNameForCerts ? data.verifiedName : data.profileName;\n setCertificateName(certName);\n }\n });\n\n setIsLoading(false);\n }, [org, username, name]);\n\n const CertificatePreviewComponent = () => (\n <div className={`certificate-preview border m-4 p-3 ${bgColor}`}>\n <div className=\"d-flex justify-content-between\" data-testid=\"certificate-preview-header\">\n <img\n alt=\"Verified Certificate logo\"\n className=\"verified-certificate-logo\"\n src=\"https://edxuploads.s3.amazonaws.com/certificate_template_assets/122/verified-certificate-logo.svg\"\n />\n <span className=\"sr-only\">Verified Certificate</span>\n <div className=\"mb-4\">\n <div className=\"sr-only\">Supported by the following organizations</div>\n {orgMetadata?.logo\n ? (\n <img\n alt={`${orgMetadata.shortName} logo`}\n className=\"organization-logo\"\n data-testid=\"organization-logo\"\n src={orgMetadata.logo}\n />\n )\n : (<div data-testid=\"organization-short-name\">{orgMetadata.shortName}</div>)}\n </div>\n </div>\n <div className=\"d-flex justify-content-between\">\n <div className=\"certificate-statement\">\n <div className=\"certificate-statement-container d-flex flex-column\">\n <span\n className=\"certificate-statement-detail\"\n >\n This is to certify that\n </span>\n <strong\n className=\"certificate-statement-detail certificate-recipient font-weight-bold\"\n >\n {certificateName}\n </strong>\n <span\n className=\"certificate-statement-detail\"\n >\n successfully completed and received a passing grade in\n </span>\n <span\n className=\"certificate-course font-weight-bold\"\n >\n <span>{number}</span>:\n <span>{title}</span>\n </span>\n <span\n className=\"certificate-statement-detail\"\n >\n a course of study offered by {orgMetadata.shortName},\n an online learning initiative of {orgMetadata.name}.\n </span>\n </div>\n </div>\n <div className=\"signatories\">\n <div className=\"sr-only\">Noted by</div>\n <Signatory name=\"Maurilio Pugliesi\" />\n <Signatory name=\"Justine Doe, Ph.D.\" />\n </div>\n </div>\n <div className=\"certificate-identifiers\">\n <ul className=\"d-flex no-bullets stamps pt-3\">\n <li className=\"stamp\">\n <img className=\"platform-logo\" src={platformLogoUrl} alt=\"edX\" />\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Verified Certificate</span>\n <span className=\"emphasized\">Issued Month / Year</span>\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Valid Certificate ID</span>\n <span className=\"emphasized\">12345678901234567890</span>\n </li>\n </ul>\n </div>\n <div className=\"preview-watermark\">\n <span>PREVIEW</span>\n </div>\n </div>\n );\n\n // We can render if the call to the verified name endpoint returns a null, because we fall back to their LMS\n // profile name, but if the call to the organization endpoint fails, we cannot render the certificate because\n // we require data from this endpoint.\n let component;\n\n if (!orgMetadata) {\n component = false;\n } else if (isLoading) {\n component = (\n <Skeleton\n count={1}\n height=\"5rem\"\n />\n );\n } else {\n component = (\n <CertificatePreviewComponent />\n );\n }\n\n return (\n component\n );\n};\n\nCertificatePreview.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default CertificatePreview;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"CertificatePreview.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_frontendPlatform","_auth","_paragon","_modelStore","_lms_api","_Signatory","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CertificatePreview","_ref","courseId","bgColor","username","name","getAuthenticatedUser","number","org","title","useModel","platformLogoUrl","getConfig","LOGO_URL","isLoading","setIsLoading","useState","orgMetadata","setOrgMetadata","certificateName","setCertificateName","useEffect","fetchOrg","then","data","fetchVerifiedName","certName","useVerifiedNameForCerts","verifiedName","profileName","CertificatePreviewComponent","jsxs","className","children","jsx","alt","src","logo","shortName","component","Skeleton","count","height","propTypes","PropTypes","string","isRequired","defaultProps","_default","exports"],"sources":["../../../src/upgrade-notification/certificate-preview/CertificatePreview.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { Skeleton } from '@openedx/paragon';\nimport { useModel } from '@src/generic/model-store';\n\nimport { fetchOrg, fetchVerifiedName } from '../../data/lms_api';\nimport Signatory from './Signatory';\nimport './CertificatePreview.scss';\n\nconst CertificatePreview = ({ courseId, bgColor }) => {\n const { username, name } = getAuthenticatedUser();\n\n const {\n number,\n org,\n title,\n } = useModel('courseHomeMeta', courseId);\n\n const platformLogoUrl = getConfig().LOGO_URL;\n\n const [isLoading, setIsLoading] = useState(true);\n const [orgMetadata, setOrgMetadata] = useState({});\n const [certificateName, setCertificateName] = useState(name);\n\n useEffect(() => {\n fetchOrg(org).then((data) => {\n setOrgMetadata(data);\n });\n\n fetchVerifiedName(username).then((data) => {\n if (data) {\n const certName = data.useVerifiedNameForCerts ? data.verifiedName : data.profileName;\n setCertificateName(certName);\n }\n });\n\n setIsLoading(false);\n }, [org, username, name]);\n\n const CertificatePreviewComponent = () => (\n <div className={`certificate-preview border m-4 p-3 ${bgColor}`}>\n <div className=\"d-flex justify-content-between\" data-testid=\"certificate-preview-header\">\n <img\n alt=\"Verified Certificate logo\"\n className=\"verified-certificate-logo\"\n src=\"https://edxuploads.s3.amazonaws.com/certificate_template_assets/122/verified-certificate-logo.svg\"\n />\n <span className=\"sr-only\">Verified Certificate</span>\n <div className=\"mb-4\">\n <div className=\"sr-only\">Supported by the following organizations</div>\n {orgMetadata?.logo\n ? (\n <img\n alt={`${orgMetadata.shortName} logo`}\n className=\"organization-logo\"\n data-testid=\"organization-logo\"\n src={orgMetadata.logo}\n />\n )\n : (<div data-testid=\"organization-short-name\">{orgMetadata.shortName}</div>)}\n </div>\n </div>\n <div className=\"d-flex justify-content-between\">\n <div className=\"certificate-statement\">\n <div className=\"certificate-statement-container d-flex flex-column\">\n <span\n className=\"certificate-statement-detail\"\n >\n This is to certify that\n </span>\n <strong\n className=\"certificate-statement-detail certificate-recipient font-weight-bold\"\n >\n {certificateName}\n </strong>\n <span\n className=\"certificate-statement-detail\"\n >\n successfully completed and received a passing grade in\n </span>\n <span\n className=\"certificate-course font-weight-bold\"\n >\n <span>{number}</span>:\n <span>{title}</span>\n </span>\n <span\n className=\"certificate-statement-detail\"\n >\n a course of study offered by {orgMetadata.shortName},\n an online learning initiative of {orgMetadata.name}.\n </span>\n </div>\n </div>\n <div className=\"signatories\">\n <div className=\"sr-only\">Noted by</div>\n <Signatory name=\"Maurilio Pugliesi\" />\n <Signatory name=\"Justine Doe, Ph.D.\" />\n </div>\n </div>\n <div className=\"certificate-identifiers\">\n <ul className=\"d-flex no-bullets stamps pt-3\">\n <li className=\"stamp\">\n <img className=\"platform-logo\" src={platformLogoUrl} alt=\"edX\" />\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Verified Certificate</span>\n <span className=\"emphasized\">Issued Month / Year</span>\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Valid Certificate ID</span>\n <span className=\"emphasized\">12345678901234567890</span>\n </li>\n </ul>\n </div>\n <div className=\"preview-watermark\">\n <span>PREVIEW</span>\n </div>\n </div>\n );\n\n // We can render if the call to the verified name endpoint returns a null, because we fall back to their LMS\n // profile name, but if the call to the organization endpoint fails, we cannot render the certificate because\n // we require data from this endpoint.\n let component;\n\n if (!orgMetadata) {\n component = false;\n } else if (isLoading) {\n component = (\n <Skeleton\n count={1}\n height=\"5rem\"\n />\n );\n } else {\n component = (\n <CertificatePreviewComponent />\n );\n }\n\n return (\n component\n );\n};\n\nCertificatePreview.propTypes = {\n courseId: PropTypes.string.isRequired,\n // A background utility class, such as bg-white.\n bgColor: PropTypes.string,\n};\n\nCertificatePreview.defaultProps = {\n bgColor: '',\n};\n\nexport default CertificatePreview;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,10 +16,20 @@ const messages = (0, _i18n.defineMessages)({
|
|
|
16
16
|
defaultMessage: 'Close',
|
|
17
17
|
description: 'Alternative text for close icon'
|
|
18
18
|
},
|
|
19
|
-
|
|
20
|
-
id: '
|
|
21
|
-
defaultMessage: '{percentage}%
|
|
22
|
-
description: 'Header for first
|
|
19
|
+
firstTimeLearnerOffer: {
|
|
20
|
+
id: 'advertisements.upgrade-notification.first-time-learner-offer',
|
|
21
|
+
defaultMessage: '{percentage}% off for first-time learners!',
|
|
22
|
+
description: 'Header for the first-time learner discount in the upgrade card'
|
|
23
|
+
},
|
|
24
|
+
promoCodeMessage: {
|
|
25
|
+
id: 'advertisements.upgrade-notification.promo-code',
|
|
26
|
+
defaultMessage: 'Use promo code: {code}',
|
|
27
|
+
description: 'Gives the learner the discount code to use at checkout'
|
|
28
|
+
},
|
|
29
|
+
upgradeNowButton: {
|
|
30
|
+
id: 'advertisements.upgrade-notification.upgrade-now',
|
|
31
|
+
defaultMessage: 'Upgrade now for {price}',
|
|
32
|
+
description: 'Upgrade button label with the price the learner pays, discounted when there is an offer'
|
|
23
33
|
},
|
|
24
34
|
accessExpirationHeader: {
|
|
25
35
|
id: 'learning.generic.upgradeNotification.accessExpiration',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","names":["_i18n","require","messages","defineMessages","pursueCertificateMessage","id","defaultMessage","description","closeAlt","
|
|
1
|
+
{"version":3,"file":"messages.js","names":["_i18n","require","messages","defineMessages","pursueCertificateMessage","id","defaultMessage","description","closeAlt","firstTimeLearnerOffer","promoCodeMessage","upgradeNowButton","accessExpirationHeader","accessExpirationUrgentHeader","accessExpirationPastHeader","pastExpirationCallToActionLabel","discountCodeMessage","_default","exports","default"],"sources":["../../src/upgrade-notification/messages.js"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n pursueCertificateMessage: {\n id: 'advertisements.header.pursue-certificate',\n defaultMessage: 'Pursue a verified certificate',\n description: 'Text used as header for certificate advertisement',\n },\n closeAlt: {\n id: 'advertisements.close',\n defaultMessage: 'Close',\n description: 'Alternative text for close icon',\n },\n firstTimeLearnerOffer: {\n id: 'advertisements.upgrade-notification.first-time-learner-offer',\n defaultMessage: '{percentage}% off for first-time learners!',\n description: 'Header for the first-time learner discount in the upgrade card',\n },\n promoCodeMessage: {\n id: 'advertisements.upgrade-notification.promo-code',\n defaultMessage: 'Use promo code: {code}',\n description: 'Gives the learner the discount code to use at checkout',\n },\n upgradeNowButton: {\n id: 'advertisements.upgrade-notification.upgrade-now',\n defaultMessage: 'Upgrade now for {price}',\n description: 'Upgrade button label with the price the learner pays, discounted when there is an offer',\n },\n accessExpirationHeader: {\n id: 'learning.generic.upgradeNotification.accessExpiration',\n defaultMessage: 'Upgrade your course today',\n description: 'Header for access expiration countdown',\n },\n accessExpirationUrgentHeader: {\n id: 'learning.generic.upgradeNotification.accessExpirationUrgent',\n defaultMessage: 'Course Access Expiration',\n description: 'Header for access expiration countdown banner',\n },\n accessExpirationPastHeader: {\n id: 'learning.generic.upgradeNotification.accessExpirationPast',\n defaultMessage: 'Course Access Expiration',\n description: 'Header for past expiration countdown banner',\n },\n pastExpirationCallToActionLabel: {\n id: 'learning.generic.upgradeNotification.past-expiration.call-to-action-button.label',\n defaultMessage: 'View course details',\n description: 'Button label to navigate to course details for expired upgrades',\n },\n discountCodeMessage: {\n id: 'learning.generic.upgradeNotification.code',\n defaultMessage: 'Use code {code} at checkout',\n description: 'Message that provides user with a code to use at checkout',\n },\n});\n\nexport default messages;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,MAAMC,QAAQ,GAAG,IAAAC,oBAAc,EAAC;EAC9BC,wBAAwB,EAAE;IACxBC,EAAE,EAAE,0CAA0C;IAC9CC,cAAc,EAAE,+BAA+B;IAC/CC,WAAW,EAAE;EACf,CAAC;EACDC,QAAQ,EAAE;IACRH,EAAE,EAAE,sBAAsB;IAC1BC,cAAc,EAAE,OAAO;IACvBC,WAAW,EAAE;EACf,CAAC;EACDE,qBAAqB,EAAE;IACrBJ,EAAE,EAAE,8DAA8D;IAClEC,cAAc,EAAE,4CAA4C;IAC5DC,WAAW,EAAE;EACf,CAAC;EACDG,gBAAgB,EAAE;IAChBL,EAAE,EAAE,gDAAgD;IACpDC,cAAc,EAAE,wBAAwB;IACxCC,WAAW,EAAE;EACf,CAAC;EACDI,gBAAgB,EAAE;IAChBN,EAAE,EAAE,iDAAiD;IACrDC,cAAc,EAAE,yBAAyB;IACzCC,WAAW,EAAE;EACf,CAAC;EACDK,sBAAsB,EAAE;IACtBP,EAAE,EAAE,uDAAuD;IAC3DC,cAAc,EAAE,2BAA2B;IAC3CC,WAAW,EAAE;EACf,CAAC;EACDM,4BAA4B,EAAE;IAC5BR,EAAE,EAAE,6DAA6D;IACjEC,cAAc,EAAE,0BAA0B;IAC1CC,WAAW,EAAE;EACf,CAAC;EACDO,0BAA0B,EAAE;IAC1BT,EAAE,EAAE,2DAA2D;IAC/DC,cAAc,EAAE,0BAA0B;IAC1CC,WAAW,EAAE;EACf,CAAC;EACDQ,+BAA+B,EAAE;IAC/BV,EAAE,EAAE,kFAAkF;IACtFC,cAAc,EAAE,qBAAqB;IACrCC,WAAW,EAAE;EACf,CAAC;EACDS,mBAAmB,EAAE;IACnBX,EAAE,EAAE,2CAA2C;IAC/CC,cAAc,EAAE,6BAA6B;IAC7CC,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAAC,IAAAU,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYjB,QAAQ","ignoreList":[]}
|