@edx/frontend-plugin-advertisements 2.25.0 → 2.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,8 @@ var _auth = require("@edx/frontend-platform/auth");
18
18
  var _analytics = require("@edx/frontend-platform/analytics");
19
19
  var _upsellBullets = require("../generic/upsell-bullets");
20
20
  var _cohesion = require("../cohesion");
21
+ var _subscriptionUpsell = require("../subscription-upsell");
22
+ var _SubscriptionPaywall = _interopRequireDefault(require("./SubscriptionPaywall"));
21
23
  var _jsxRuntime = require("react/jsx-runtime");
22
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
25
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -43,6 +45,7 @@ const LockPaywall = _ref => {
43
45
  const {
44
46
  conversion
45
47
  } = (0, _cohesion.useCohesion)(courseId);
48
+ const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
46
49
 
47
50
  // the following variables are set and used for responsive layout to work with
48
51
  // whether the NotificationTray is open or not and if there's an offer with longer text
@@ -57,9 +60,6 @@ const LockPaywall = _ref => {
57
60
  org_key: org,
58
61
  courserun_key: courseId
59
62
  };
60
- const {
61
- userId
62
- } = (0, _auth.getAuthenticatedUser)();
63
63
  const handleUpgradeClick = () => {
64
64
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
65
65
  linkCategory: '(none)',
@@ -69,6 +69,29 @@ const LockPaywall = _ref => {
69
69
  }));
70
70
  conversion('Upgraded');
71
71
  };
72
+ const handleSubscribeClick = () => {
73
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
74
+ linkCategory: '(none)',
75
+ linkName: 'in_course_subscribe',
76
+ linkType: 'link',
77
+ pageName: 'in_course'
78
+ }));
79
+ conversion('Subscribed');
80
+ };
81
+
82
+ // Learners who can subscribe get the Subscribe banner (Figma shows Subscribe only) and subscribers
83
+ // get the same banner with Upgrade now. Unknown status keeps the paywall below.
84
+ if (!pastExpirationDeadline && (subscriptionOffer?.canSubscribe || subscriptionOffer?.canUpgradeInPlace)) {
85
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SubscriptionPaywall.default, {
86
+ courseId: courseId,
87
+ offer: subscriptionOffer,
88
+ onSubscribeClick: handleSubscribeClick,
89
+ onUpgradeEvent: stage => stage === 'succeeded' && handleUpgradeClick()
90
+ });
91
+ }
92
+ const {
93
+ userId
94
+ } = (0, _auth.getAuthenticatedUser)();
72
95
  const handleUpgradeClickPastExpiration = () => {
73
96
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
74
97
  linkCategory: 'gated_content',
@@ -1 +1 @@
1
- {"version":3,"file":"LockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_auth","_analytics","_upsellBullets","_cohesion","_jsxRuntime","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","LockPaywall","_ref","courseId","intl","useIntl","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","conversion","useCohesion","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","userId","getAuthenticatedUser","handleUpgradeClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","handleUpgradeClickPastExpiration","jsx","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","id","defaultMessage","description","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/paywall/LockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../generic/upsell-bullets';\nimport { useCohesion } from '../cohesion';\n\nconst LockPaywall = ({\n courseId,\n}) => {\n const intl = useIntl();\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const { conversion } = useCohesion(courseId);\n\n // the following variables are set and used for responsive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const { userId } = getAuthenticatedUser();\n\n const handleUpgradeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n\n conversion('Upgraded');\n };\n\n const handleUpgradeClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testid=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testid=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink\n destination={marketingUrl}\n onClick={handleUpgradeClickPastExpiration(eventProperties)}\n target=\"_blank\"\n data-testid=\"lock-paywall-past-expiration-link\"\n >\n {intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}\n <span>\n {intl.formatMessage({\n id: 'learn.lockPaywall.content.link.new-tab.screenreader-only.message',\n defaultMessage: 'in a new tab',\n description: 'Screenreader only text for new tab link',\n })}\n </span>\n </Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={() => handleUpgradeClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testid=\"upgrade-button\"\n />\n </div>\n )}\n </div>\n </Alert>\n );\n};\nLockPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default LockPaywall;\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAGA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,uBAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,WAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,KAAA,GAAAV,OAAA;AACA,IAAAW,UAAA,GAAAX,OAAA;AAEA,IAAAY,cAAA,GAAAZ,OAAA;AAMA,IAAAa,SAAA,GAAAb,OAAA;AAA0C,IAAAc,WAAA,GAAAd,OAAA;AAAA,SAAAD,uBAAAgB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,QAAAH,CAAA,EAAAI,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAP,CAAA,OAAAM,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAR,CAAA,GAAAI,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAX,CAAA,EAAAI,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAf,CAAA,aAAAI,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAD,OAAA,CAAAG,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAnB,CAAA,EAAAI,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAArB,CAAA,EAAAM,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAF,OAAA,CAAAG,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAtB,CAAA,EAAAI,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAJ,CAAA;AAAA,SAAAmB,gBAAAnB,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAmB,cAAA,CAAAnB,CAAA,MAAAJ,CAAA,GAAAM,MAAA,CAAAgB,cAAA,CAAAtB,CAAA,EAAAI,CAAA,IAAAoB,KAAA,EAAAnB,CAAA,EAAAO,UAAA,MAAAa,YAAA,MAAAC,QAAA,UAAA1B,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAuB,eAAAlB,CAAA,QAAAsB,CAAA,GAAAC,YAAA,CAAAvB,CAAA,uCAAAsB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAvB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAwB,MAAA,CAAAC,WAAA,kBAAA9B,CAAA,QAAA2B,CAAA,GAAA3B,CAAA,CAAA+B,IAAA,CAAA1B,CAAA,EAAAD,CAAA,uCAAAuB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA5B,CAAA,GAAA6B,MAAA,GAAAC,MAAA,EAAA7B,CAAA,KAtB1C;AAwBA,MAAM8B,WAAW,GAAGC,IAAA,IAEd;EAAA,IAFe;IACnBC;EACF,CAAC,GAAAD,IAAA;EACC,MAAME,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,MAAMC,MAAM,GAAG,IAAAC,oBAAQ,EAAC,gBAAgB,EAAEJ,QAAQ,CAAC;EACnD,MAAM;IACJK,gBAAgB;IAChBC,YAAY;IACZC;EACF,CAAC,GAAGJ,MAAM;EAEV,MAAM;IACJK,GAAG;IAAEC;EACP,CAAC,GAAG,IAAAL,oBAAQ,EAAC,gBAAgB,EAAEJ,QAAQ,CAAC;EAExC,MAAM;IAAEU;EAAW,CAAC,GAAG,IAAAC,qBAAW,EAACX,QAAQ,CAAC;;EAE5C;EACA;EACA,MAAMY,uCAAuC,GAAG,IAAAC,sBAAa,EAAC,CAAC,CAACC,KAAK,IAAIC,oBAAW,CAACC,KAAK,CAACC,QAAQ;EACnG,MAAMC,sBAAsB,GAAG,IAAAL,sBAAa,EAAC,CAAC,CAACC,KAAK,GAAGC,oBAAW,CAACI,UAAU,CAACF,QAAQ;EAEtF,MAAMG,oBAAoB,GAAGf,gBAAgB,GAAG,IAAIgB,IAAI,CAAChB,gBAAgB,CAACiB,cAAc,CAAC,GAAG,IAAI;EAChG,MAAMC,sBAAsB,GAAGlB,gBAAgB,GAAG,IAAIgB,IAAI,CAACA,IAAI,CAACG,GAAG,CAAC,CAAC,CAAC,GAAGJ,oBAAoB,GAAG,KAAK;EAErG,IAAI,CAACX,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAMgB,eAAe,GAAG;IACtBC,OAAO,EAAElB,GAAG;IACZmB,aAAa,EAAE3B;EACjB,CAAC;EAED,MAAM;IAAE4B;EAAO,CAAC,GAAG,IAAAC,0BAAoB,EAAC,CAAC;EAEzC,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAAC,yBAAc,EAAC,uCAAuC,EAAArD,aAAA,CAAAA,aAAA,KACjD+C,eAAe;MAClBO,YAAY,EAAE,QAAQ;MACtBC,QAAQ,EAAE,mBAAmB;MAC7BC,QAAQ,EAAE,MAAM;MAChBC,QAAQ,EAAE;IAAW,EACtB,CAAC;IAEFzB,UAAU,CAAC,UAAU,CAAC;EACxB,CAAC;EAED,MAAM0B,gCAAgC,GAAGA,CAAA,KAAM;IAC7C,IAAAL,yBAAc,EAAC,6DAA6D,EAAArD,aAAA,CAAAA,aAAA,KACvE+C,eAAe;MAClBO,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAE,gBAAgB;MAC1BC,QAAQ,EAAE,MAAM;MAChBC,QAAQ,EAAE;IAAW,EACtB,CAAC;EACJ,CAAC;EAED,oBACE,IAAAzE,WAAA,CAAA2E,GAAA,EAACrF,QAAA,CAAAsF,KAAK;IAACC,OAAO,EAAC,OAAO;IAAC,aAAU,KAAK;IAACC,IAAI,EAAEC,aAAO;IAACC,SAAS,EAAC,wBAAwB;IAAC,eAAY,mCAAmC;IAAAC,QAAA,eACrI,IAAAjF,WAAA,CAAAkF,IAAA;MAAKF,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAjF,WAAA,CAAAkF,IAAA;QAAKF,SAAS,EAAC,KAAK;QAAAC,QAAA,gBAClB,IAAAjF,WAAA,CAAA2E,GAAA;UAAI,cAAW,GAAG;UAAAM,QAAA,eAChB,IAAAjF,WAAA,CAAA2E,GAAA;YAAAM,QAAA,EAAO1C,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,yBAAyB,CAAC;UAAC,CAAO;QAAC,CACpE,CAAC,EACJvB,sBAAsB,gBACrB,IAAA7D,WAAA,CAAAkF,IAAA;UAAKF,SAAS,EAAC,oBAAoB;UAAC,eAAY,8BAA8B;UAAAC,QAAA,GAC3E1C,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,0CAA0C,CAAC,CAAC,eACzE,IAAApF,WAAA,CAAAkF,IAAA,EAAC5F,QAAA,CAAA+F,SAAS;YACRC,WAAW,EAAE1C,YAAa;YAC1B2C,OAAO,EAAEb,gCAAgC,CAACX,eAAe,CAAE;YAC3DyB,MAAM,EAAC,QAAQ;YACf,eAAY,mCAAmC;YAAAP,QAAA,GAE9C1C,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,iCAAiC,CAAC,CAAC,eAChE,IAAApF,WAAA,CAAA2E,GAAA;cAAAM,QAAA,EACG1C,IAAI,CAAC4C,aAAa,CAAC;gBAClBM,EAAE,EAAE,kEAAkE;gBACtEC,cAAc,EAAE,cAAc;gBAC9BC,WAAW,EAAE;cACf,CAAC;YAAC,CACE,CAAC;UAAA,CACE,CAAC;QAAA,CACT,CAAC,gBAEN,IAAA3F,WAAA,CAAA2E,GAAA;UAAKK,SAAS,EAAC,oBAAoB;UAAAC,QAAA,EAChC1C,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,2BAA2B,CAAC;QAAC,CACvD,CACN,eAED,IAAApF,WAAA,CAAAkF,IAAA;UAAKF,SAAS,EAAE,IAAAY,mBAAU,EAAC,wBAAwB,EAAE;YAAE,WAAW,EAAE1C;UAAwC,CAAC,CAAE;UAAA+B,QAAA,gBAC7G,IAAAjF,WAAA,CAAA2E,GAAA;YAAKkB,KAAK,EAAE;cAAEC,KAAK,EAAE;YAAO,CAAE;YAACd,SAAS,EAAC,WAAW;YAAAC,QAAA,eAClD,IAAAjF,WAAA,CAAA2E,GAAA;cACEoB,GAAG,EAAExD,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,+BAA+B,CAAC,CAAE;cACnEY,GAAG,EAAEC,+BAAkB;cACvBjB,SAAS,EAAC,mCAAmC;cAC7Ca,KAAK,EAAE;gBAAEK,MAAM,EAAE,OAAO;gBAAE9C,KAAK,EAAE;cAAQ;YAAE,CAC5C;UAAC,CACC,CAAC,eAEN,IAAApD,WAAA,CAAAkF,IAAA;YAAKF,SAAS,EAAC,gBAAgB;YAAAC,QAAA,gBAC7B,IAAAjF,WAAA,CAAA2E,GAAA;cAAKK,SAAS,EAAC,MAAM;cAAAC,QAAA,EAClB1C,IAAI,CAAC4C,aAAa,CAACC,iBAAQ,CAAC,8BAA8B,CAAC;YAAC,CAC1D,CAAC,eACN,IAAApF,WAAA,CAAAkF,IAAA;cAAIF,SAAS,EAAC,iBAAiB;cAAAC,QAAA,gBAC7B,IAAAjF,WAAA,CAAA2E,GAAA,EAAC7E,cAAA,CAAAqG,kBAAkB,IAAE,CAAC,eACtB,IAAAnG,WAAA,CAAA2E,GAAA,EAAC7E,cAAA,CAAAsG,kBAAkB,IAAE,CAAC,eACtB,IAAApG,WAAA,CAAA2E,GAAA,EAAC7E,cAAA,CAAAuG,gBAAgB,IAAE,CAAC,eACpB,IAAArG,WAAA,CAAA2E,GAAA,EAAC7E,cAAA,CAAAwG,oBAAoB,IAAE,CAAC;YAAA,CACtB,CAAC;UAAA,CACF,CAAC;QAAA,CACH,CAAC;MAAA,CACH,CAAC,EAELzC,sBAAsB,GACnB,IAAI,gBAEJ,IAAA7D,WAAA,CAAA2E,GAAA;QACEK,SAAS,EACP,IAAAY,mBAAU,EAAC,4EAA4E,EAAE;UACvF,kBAAkB,EAAE,CAAC1C,uCAAuC;UAAE,UAAU,EAAEA;QAC5E,CAAC,CACF;QAAA+B,QAAA,eAED,IAAAjF,WAAA,CAAA2E,GAAA,EAAChF,cAAA,CAAA4G,aAAa;UACZ1D,KAAK,EAAEA,KAAM;UACb0C,OAAO,EAAEA,CAAA,KAAMnB,kBAAkB,CAACL,eAAe,EAAEG,MAAM,CAAE;UAC3DnB,YAAY,EAAEA,YAAa;UAC3B8C,KAAK,EAAE;YAAEW,UAAU,EAAEhD,sBAAsB,GAAG,QAAQ,GAAG;UAAK,CAAE;UAChE,eAAY;QAAgB,CAC7B;MAAC,CACC,CACN;IAAA,CACA;EAAC,CACD,CAAC;AAEZ,CAAC;AACDpB,WAAW,CAACqE,SAAS,GAAG;EACtBnE,QAAQ,EAAEoE,kBAAS,CAACC,MAAM,CAACC;AAC7B,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA3G,OAAA,GAEaiC,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"LockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_auth","_analytics","_upsellBullets","_cohesion","_subscriptionUpsell","_SubscriptionPaywall","_jsxRuntime","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","LockPaywall","_ref","courseId","intl","useIntl","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","handleUpgradeClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","handleSubscribeClick","canSubscribe","canUpgradeInPlace","jsx","onSubscribeClick","onUpgradeEvent","stage","userId","getAuthenticatedUser","handleUpgradeClickPastExpiration","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","id","defaultMessage","description","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/paywall/LockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../generic/upsell-bullets';\nimport { useCohesion } from '../cohesion';\nimport { useSubscriptionOffer } from '../subscription-upsell';\nimport SubscriptionPaywall from './SubscriptionPaywall';\n\nconst LockPaywall = ({\n courseId,\n}) => {\n const intl = useIntl();\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n // the following variables are set and used for responsive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const handleUpgradeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n\n conversion('Upgraded');\n };\n\n const handleSubscribeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_subscribe',\n linkType: 'link',\n pageName: 'in_course',\n });\n conversion('Subscribed');\n };\n\n // Learners who can subscribe get the Subscribe banner (Figma shows Subscribe only) and subscribers\n // get the same banner with Upgrade now. Unknown status keeps the paywall below.\n if (!pastExpirationDeadline && (subscriptionOffer?.canSubscribe || subscriptionOffer?.canUpgradeInPlace)) {\n return (\n <SubscriptionPaywall\n courseId={courseId}\n offer={subscriptionOffer}\n onSubscribeClick={handleSubscribeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && handleUpgradeClick()}\n />\n );\n }\n\n const { userId } = getAuthenticatedUser();\n\n const handleUpgradeClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testid=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testid=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink\n destination={marketingUrl}\n onClick={handleUpgradeClickPastExpiration(eventProperties)}\n target=\"_blank\"\n data-testid=\"lock-paywall-past-expiration-link\"\n >\n {intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}\n <span>\n {intl.formatMessage({\n id: 'learn.lockPaywall.content.link.new-tab.screenreader-only.message',\n defaultMessage: 'in a new tab',\n description: 'Screenreader only text for new tab link',\n })}\n </span>\n </Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={() => handleUpgradeClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testid=\"upgrade-button\"\n />\n </div>\n )}\n </div>\n </Alert>\n );\n};\nLockPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default LockPaywall;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _i18n = require("@edx/frontend-platform/i18n");
10
+ var _paragon = require("@openedx/paragon");
11
+ var _icons = require("@openedx/paragon/icons");
12
+ var _messages = _interopRequireDefault(require("@src/courseware/course/sequence/lock-paywall/messages"));
13
+ var _edX_locked_certificate = _interopRequireDefault(require("@src/generic/assets/edX_locked_certificate.png"));
14
+ var _upsellBullets = require("../generic/upsell-bullets");
15
+ var _subscriptionUpsell = require("../subscription-upsell");
16
+ var _messages2 = _interopRequireDefault(require("../subscription-upsell/messages"));
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ /* eslint import/no-unresolved: 0 */
20
+
21
+ /** The locked graded content banner (Figma 3484-70965): Subscribe, or Upgrade now for a subscriber. */const SubscriptionPaywall = _ref => {
22
+ let {
23
+ courseId,
24
+ offer,
25
+ onSubscribeClick,
26
+ onUpgradeEvent
27
+ } = _ref;
28
+ const {
29
+ formatMessage
30
+ } = (0, _i18n.useIntl)();
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert, {
32
+ variant: "light",
33
+ "aria-live": "off",
34
+ icon: _icons.Locked,
35
+ className: "bg-light-200 border-0 shadow-sm p-4",
36
+ "data-testid": "subscription-paywall",
37
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
38
+ direction: "horizontal",
39
+ gap: 4,
40
+ className: "flex-column flex-md-row align-items-start align-items-md-center",
41
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
42
+ gap: 2,
43
+ className: "flex-grow-1",
44
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert.Heading, {
45
+ as: "h3",
46
+ className: "h6 font-weight-bold text-primary-500 mb-0",
47
+ children: formatMessage(_messages.default['learn.lockPaywall.title'])
48
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
49
+ className: "mb-0",
50
+ children: formatMessage(_messages.default['learn.lockPaywall.content'])
51
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
52
+ direction: "horizontal",
53
+ gap: 3,
54
+ className: "flex-wrap",
55
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Image, {
56
+ src: _edX_locked_certificate.default,
57
+ alt: formatMessage(_messages.default['learn.lockPaywall.example.alt']),
58
+ width: 175,
59
+ height: 128
60
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
61
+ gap: 2,
62
+ role: "list",
63
+ className: "align-self-center upsell-bullets",
64
+ style: {
65
+ flex: '1 1 16rem'
66
+ },
67
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.UnlockGradedBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.FullAccessBullet, {})]
68
+ })]
69
+ })]
70
+ }), offer.canUpgradeInPlace ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpsell, {
71
+ courseId: courseId,
72
+ className: "flex-shrink-0",
73
+ onUpgradeEvent: onUpgradeEvent
74
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
75
+ variant: "primary",
76
+ size: "sm",
77
+ className: "rounded-pill",
78
+ href: offer.subscribeUrl,
79
+ onClick: onSubscribeClick,
80
+ children: formatMessage(_messages2.default.subscribe)
81
+ })]
82
+ })
83
+ });
84
+ };
85
+ SubscriptionPaywall.propTypes = {
86
+ courseId: _propTypes.default.string.isRequired,
87
+ offer: _propTypes.default.shape({
88
+ canUpgradeInPlace: _propTypes.default.bool,
89
+ subscribeUrl: _propTypes.default.string
90
+ }).isRequired,
91
+ onSubscribeClick: _propTypes.default.func,
92
+ onUpgradeEvent: _propTypes.default.func
93
+ };
94
+ SubscriptionPaywall.defaultProps = {
95
+ onSubscribeClick: undefined,
96
+ onUpgradeEvent: undefined
97
+ };
98
+ var _default = exports.default = SubscriptionPaywall;
99
+ //# sourceMappingURL=SubscriptionPaywall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_upsellBullets","_subscriptionUpsell","_messages2","_jsxRuntime","e","__esModule","default","SubscriptionPaywall","_ref","courseId","offer","onSubscribeClick","onUpgradeEvent","formatMessage","useIntl","jsx","Alert","variant","icon","Locked","className","children","jsxs","Stack","direction","gap","Heading","as","lockPaywallMessages","Image","src","certificateLocked","alt","width","height","role","style","flex","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","canUpgradeInPlace","SubscriptionUpsell","Button","size","href","subscribeUrl","onClick","subscriptionMessages","subscribe","propTypes","PropTypes","string","isRequired","shape","bool","func","defaultProps","undefined","_default","exports"],"sources":["../../src/paywall/SubscriptionPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert, Button, Image, Stack,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport lockPaywallMessages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\n\nimport { VerifiedCertBullet, UnlockGradedBullet, FullAccessBullet } from '../generic/upsell-bullets';\nimport { SubscriptionUpsell } from '../subscription-upsell';\nimport subscriptionMessages from '../subscription-upsell/messages';\n\n/** The locked graded content banner (Figma 3484-70965): Subscribe, or Upgrade now for a subscriber. */\nconst SubscriptionPaywall = ({\n courseId, offer, onSubscribeClick, onUpgradeEvent,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Alert\n variant=\"light\"\n aria-live=\"off\"\n icon={Locked}\n className=\"bg-light-200 border-0 shadow-sm p-4\"\n data-testid=\"subscription-paywall\"\n >\n {/* The button is not in Alert's actions: elm-theme turns primary buttons there into brand (orange) buttons. */}\n <Stack\n direction=\"horizontal\"\n gap={4}\n className=\"flex-column flex-md-row align-items-start align-items-md-center\"\n >\n <Stack gap={2} className=\"flex-grow-1\">\n <Alert.Heading as=\"h3\" className=\"h6 font-weight-bold text-primary-500 mb-0\">\n {formatMessage(lockPaywallMessages['learn.lockPaywall.title'])}\n </Alert.Heading>\n <p className=\"mb-0\">{formatMessage(lockPaywallMessages['learn.lockPaywall.content'])}</p>\n <Stack direction=\"horizontal\" gap={3} className=\"flex-wrap\">\n <Image\n src={certificateLocked}\n alt={formatMessage(lockPaywallMessages['learn.lockPaywall.example.alt'])}\n width={175}\n height={128}\n />\n {/* Let the bullet text wrap before the whole list drops under the image. */}\n <Stack gap={2} role=\"list\" className=\"align-self-center upsell-bullets\" style={{ flex: '1 1 16rem' }}>\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n </Stack>\n </Stack>\n </Stack>\n {offer.canUpgradeInPlace ? (\n <SubscriptionUpsell courseId={courseId} className=\"flex-shrink-0\" onUpgradeEvent={onUpgradeEvent} />\n ) : (\n <Button variant=\"primary\" size=\"sm\" className=\"rounded-pill\" href={offer.subscribeUrl} onClick={onSubscribeClick}>\n {formatMessage(subscriptionMessages.subscribe)}\n </Button>\n )}\n </Stack>\n </Alert>\n );\n};\n\nSubscriptionPaywall.propTypes = {\n courseId: PropTypes.string.isRequired,\n offer: PropTypes.shape({\n canUpgradeInPlace: PropTypes.bool,\n subscribeUrl: PropTypes.string,\n }).isRequired,\n onSubscribeClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n};\n\nSubscriptionPaywall.defaultProps = {\n onSubscribeClick: undefined,\n onUpgradeEvent: undefined,\n};\n\nexport default SubscriptionPaywall;\n"],"mappings":"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","ignoreList":[]}
@@ -12,10 +12,11 @@ var _i18n = require("@edx/frontend-platform/i18n");
12
12
  var _paragon = require("@openedx/paragon");
13
13
  var _icons = require("@openedx/paragon/icons");
14
14
  var _certificatePreview = _interopRequireDefault(require("../upgrade-notification/certificate-preview"));
15
+ var _messages = _interopRequireDefault(require("../upgrade-notification/messages"));
15
16
  require("../generic/upsell-bullets/UpsellTable.scss");
16
17
  var _SubscriptionUpsell = _interopRequireDefault(require("./SubscriptionUpsell"));
17
18
  var _useSubscriptionOffer = _interopRequireDefault(require("./useSubscriptionOffer"));
18
- var _messages = _interopRequireDefault(require("./messages"));
19
+ var _messages2 = _interopRequireDefault(require("./messages"));
19
20
  var _jsxRuntime = require("react/jsx-runtime");
20
21
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
22
  /* eslint import/no-unresolved: 0 */
@@ -27,7 +28,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
27
28
  onSubscribeClick,
28
29
  onPurchaseClick,
29
30
  onUpgradeEvent,
30
- onUpgraded
31
+ onUpgraded,
32
+ onClose,
33
+ banner
31
34
  } = _ref;
32
35
  const {
33
36
  formatMessage
@@ -42,11 +45,11 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
42
45
  } = offer;
43
46
  const included = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Icon, {
44
47
  src: _icons.CheckCircle,
45
- screenReaderText: formatMessage(_messages.default.includedAlt)
48
+ screenReaderText: formatMessage(_messages2.default.includedAlt)
46
49
  });
47
50
  const notIncluded = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Icon, {
48
51
  src: _icons.CloseSmall,
49
- screenReaderText: formatMessage(_messages.default.notIncludedAlt)
52
+ screenReaderText: formatMessage(_messages2.default.notIncludedAlt)
50
53
  });
51
54
 
52
55
  // Columns follow the buttons; a subscriber gets Upgrade now and nothing to compare.
@@ -55,45 +58,57 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
55
58
  const showTable = !offer.canUpgradeInPlace && (showSubscribeColumn || showBuyColumn);
56
59
  const rows = [showSubscribeColumn && offer.hasTrial && {
57
60
  key: 'free-trial',
58
- label: formatMessage(_messages.default.featureFreeTrial),
61
+ label: formatMessage(_messages2.default.featureFreeTrial),
59
62
  buy: false
60
63
  }, showSubscribeColumn && {
61
64
  key: 'change-courses',
62
- label: formatMessage(_messages.default.featureChangeCourses),
65
+ label: formatMessage(_messages2.default.featureChangeCourses),
63
66
  buy: false
64
67
  }, {
65
68
  key: 'certificates',
66
- label: formatMessage(_messages.default.featureCertificates, {
69
+ label: formatMessage(_messages2.default.featureCertificates, {
67
70
  certificateLink: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Hyperlink, {
68
71
  destination: `${(0, _frontendPlatform.getConfig)().MARKETING_SITE_BASE_URL}/verified-certificate`,
69
- children: formatMessage(_messages.default.featureCertificatesLink)
72
+ children: formatMessage(_messages2.default.featureCertificatesLink)
70
73
  })
71
74
  }),
72
75
  buy: true
73
76
  }, {
74
77
  key: 'graded-assignments',
75
- label: formatMessage(_messages.default.featureGradedAssignments),
78
+ label: formatMessage(_messages2.default.featureGradedAssignments),
76
79
  buy: true
77
80
  }, {
78
81
  key: 'unlimited-access',
79
- label: formatMessage(_messages.default.featureUnlimitedAccess),
82
+ label: formatMessage(_messages2.default.featureUnlimitedAccess),
80
83
  buy: true
81
84
  }].filter(Boolean);
82
85
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("section", {
83
86
  className: (0, _classnames.default)('upgrade-notification subscription-upgrade-card small', {
84
87
  'pgn__card pgn__card-light card mb-4 rounded': withBorder
85
88
  }),
89
+ id: "courseHome-upgradeNotification",
86
90
  "data-testid": "subscription-upgrade-card",
87
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h2", {
88
- className: "upgrade-notification-header h4 px-4 pt-4 mb-3",
89
- children: formatMessage(_messages.default.cardHeader)
91
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Stack, {
92
+ direction: "horizontal",
93
+ className: "align-items-start px-4 pt-4 mb-3",
94
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h2", {
95
+ className: "upgrade-notification-header h4 mb-0",
96
+ children: formatMessage(_messages2.default.cardHeader)
97
+ }), onClose && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.IconButton, {
98
+ className: "ml-auto",
99
+ src: _icons.Close,
100
+ iconAs: _paragon.Icon,
101
+ size: "sm",
102
+ alt: formatMessage(_messages.default.closeAlt),
103
+ onClick: onClose
104
+ })]
90
105
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_certificatePreview.default, {
91
106
  courseId: courseId
92
- }), showTable && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
107
+ }), banner, showTable && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
93
108
  className: "px-4 small",
94
109
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h3", {
95
110
  className: "mb-4 primary-500",
96
- children: formatMessage(_messages.default.benefitsHeader)
111
+ children: formatMessage(_messages2.default.benefitsHeader)
97
112
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("table", {
98
113
  className: "w-100 text-center subscription-comparison-table",
99
114
  "data-testid": "subscription-card-table",
@@ -103,7 +118,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
103
118
  scope: "col",
104
119
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
105
120
  className: "sr-only",
106
- children: formatMessage(_messages.default.featureColumn)
121
+ children: formatMessage(_messages2.default.featureColumn)
107
122
  })
108
123
  }), showBuyColumn && /*#__PURE__*/(0, _jsxRuntime.jsx)("th", {
109
124
  scope: "col",
@@ -112,7 +127,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
112
127
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
113
128
  className: "center-items flex-column",
114
129
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
115
- children: formatMessage(_messages.default.buyColumn)
130
+ children: formatMessage(_messages2.default.buyColumn)
116
131
  }), coursePrice && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
117
132
  children: coursePrice
118
133
  })]
@@ -124,7 +139,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
124
139
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
125
140
  className: "center-items flex-column",
126
141
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
127
- children: formatMessage(_messages.default.subscribeColumn)
142
+ children: formatMessage(_messages2.default.subscribeColumn)
128
143
  }), subscribePrice && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
129
144
  className: "font-weight-normal",
130
145
  children: subscribePrice
@@ -180,14 +195,20 @@ SubscriptionUpgradeCard.propTypes = {
180
195
  onSubscribeClick: _propTypes.default.func,
181
196
  onPurchaseClick: _propTypes.default.func,
182
197
  onUpgradeEvent: _propTypes.default.func,
183
- onUpgraded: _propTypes.default.func
198
+ onUpgraded: _propTypes.default.func,
199
+ // The courseware sidebar widget passes its toggle so the card can close it.
200
+ onClose: _propTypes.default.func,
201
+ // Host content shown under the certificate preview, such as the access expiration countdown.
202
+ banner: _propTypes.default.node
184
203
  };
185
204
  SubscriptionUpgradeCard.defaultProps = {
186
205
  withBorder: false,
187
206
  onSubscribeClick: undefined,
188
207
  onPurchaseClick: undefined,
189
208
  onUpgradeEvent: undefined,
190
- onUpgraded: undefined
209
+ onUpgraded: undefined,
210
+ onClose: undefined,
211
+ banner: undefined
191
212
  };
192
213
  var _default = exports.default = SubscriptionUpgradeCard;
193
214
  //# sourceMappingURL=SubscriptionUpgradeCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionUpgradeCard.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_frontendPlatform","_i18n","_paragon","_icons","_certificatePreview","_SubscriptionUpsell","_useSubscriptionOffer","_messages","_jsxRuntime","e","__esModule","default","SubscriptionUpgradeCard","_ref","courseId","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","onUpgraded","formatMessage","useIntl","offer","useSubscriptionOffer","canPurchase","canSubscribe","canUpgradeInPlace","coursePrice","subscribePrice","included","jsx","Icon","src","CheckCircle","screenReaderText","messages","includedAlt","notIncluded","CloseSmall","notIncludedAlt","showSubscribeColumn","showBuyColumn","showTable","rows","hasTrial","key","label","featureFreeTrial","buy","featureChangeCourses","featureCertificates","certificateLink","Hyperlink","destination","getConfig","MARKETING_SITE_BASE_URL","children","featureCertificatesLink","featureGradedAssignments","featureUnlimitedAccess","filter","Boolean","jsxs","className","classNames","cardHeader","benefitsHeader","scope","featureColumn","buyColumn","subscribeColumn","map","row","index","last","length","propTypes","PropTypes","string","isRequired","bool","func","defaultProps","undefined","_default","exports"],"sources":["../../src/subscription-upsell/SubscriptionUpgradeCard.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Hyperlink, Icon } from '@openedx/paragon';\nimport { CheckCircle, CloseSmall } from '@openedx/paragon/icons';\n\nimport CertificatePreview from '../upgrade-notification/certificate-preview';\nimport '../generic/upsell-bullets/UpsellTable.scss';\nimport SubscriptionUpsell from './SubscriptionUpsell';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\n/** The sidebar card (Figma 3331-33999): certificate preview, Buy vs Subscribe table, buttons. */\nconst SubscriptionUpgradeCard = ({\n courseId,\n withBorder,\n onSubscribeClick,\n onPurchaseClick,\n onUpgradeEvent,\n onUpgraded,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n\n if (!offer || (!offer.canPurchase && !offer.canSubscribe && !offer.canUpgradeInPlace)) {\n return null;\n }\n\n const { coursePrice, subscribePrice } = offer;\n const included = <Icon src={CheckCircle} screenReaderText={formatMessage(messages.includedAlt)} />;\n const notIncluded = <Icon src={CloseSmall} screenReaderText={formatMessage(messages.notIncludedAlt)} />;\n\n // Columns follow the buttons; a subscriber gets Upgrade now and nothing to compare.\n const showSubscribeColumn = offer.canSubscribe;\n const showBuyColumn = offer.canPurchase;\n const showTable = !offer.canUpgradeInPlace && (showSubscribeColumn || showBuyColumn);\n\n const rows = [\n showSubscribeColumn && offer.hasTrial\n && { key: 'free-trial', label: formatMessage(messages.featureFreeTrial), buy: false },\n showSubscribeColumn\n && { key: 'change-courses', label: formatMessage(messages.featureChangeCourses), buy: false },\n {\n key: 'certificates',\n label: formatMessage(messages.featureCertificates, {\n certificateLink: (\n <Hyperlink destination={`${getConfig().MARKETING_SITE_BASE_URL}/verified-certificate`}>\n {formatMessage(messages.featureCertificatesLink)}\n </Hyperlink>\n ),\n }),\n buy: true,\n },\n { key: 'graded-assignments', label: formatMessage(messages.featureGradedAssignments), buy: true },\n { key: 'unlimited-access', label: formatMessage(messages.featureUnlimitedAccess), buy: true },\n ].filter(Boolean);\n\n return (\n <section\n className={classNames('upgrade-notification subscription-upgrade-card small', {\n 'pgn__card pgn__card-light card mb-4 rounded': withBorder,\n })}\n data-testid=\"subscription-upgrade-card\"\n >\n <h2 className=\"upgrade-notification-header h4 px-4 pt-4 mb-3\">{formatMessage(messages.cardHeader)}</h2>\n <CertificatePreview courseId={courseId} />\n {showTable && (\n <div className=\"px-4 small\">\n <h3 className=\"mb-4 primary-500\">{formatMessage(messages.benefitsHeader)}</h3>\n <table className=\"w-100 text-center subscription-comparison-table\" data-testid=\"subscription-card-table\">\n <thead>\n <tr>\n <th scope=\"col\"><span className=\"sr-only\">{formatMessage(messages.featureColumn)}</span></th>\n {showBuyColumn && (\n <th scope=\"col\" className=\"audit-cell top-audit-border font-weight-normal\" data-testid=\"subscription-card-buy-header\">\n <div className=\"center-items flex-column\">\n <span>{formatMessage(messages.buyColumn)}</span>\n {coursePrice && <span>{coursePrice}</span>}\n </div>\n </th>\n )}\n {showSubscribeColumn && (\n <th scope=\"col\" className=\"verified-cell top-verified-border\" data-testid=\"subscription-card-subscribe-header\">\n <div className=\"center-items flex-column\">\n <span>{formatMessage(messages.subscribeColumn)}</span>\n {subscribePrice && <span className=\"font-weight-normal\">{subscribePrice}</span>}\n </div>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => {\n const last = index === rows.length - 1;\n return (\n <tr key={row.key} data-testid={`subscription-card-row-${row.key}`}>\n <th scope=\"row\" className={classNames('feature-cell text-left font-weight-normal', { 'bottom-no-border': last })}>\n {row.label}\n </th>\n {showBuyColumn && (\n <td className={classNames('audit-cell', { 'bottom-audit-border': last })}>\n <div className=\"center-items\">{row.buy ? included : notIncluded}</div>\n </td>\n )}\n {showSubscribeColumn && (\n <td className={classNames('verified-cell', { 'bottom-verified-border': last })}>\n <div className=\"center-items\">{included}</div>\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n <SubscriptionUpsell\n courseId={courseId}\n className=\"px-4 pb-4 pt-3\"\n onSubscribeClick={onSubscribeClick}\n onPurchaseClick={onPurchaseClick}\n onUpgradeEvent={onUpgradeEvent}\n onUpgraded={onUpgraded}\n />\n </section>\n );\n};\n\nSubscriptionUpgradeCard.propTypes = {\n courseId: PropTypes.string.isRequired,\n withBorder: PropTypes.bool,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n onUpgraded: PropTypes.func,\n};\n\nSubscriptionUpgradeCard.defaultProps = {\n withBorder: false,\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n onUpgradeEvent: undefined,\n onUpgraded: undefined,\n};\n\nexport default SubscriptionUpgradeCard;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SubscriptionUpgradeCard.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_frontendPlatform","_i18n","_paragon","_icons","_certificatePreview","_messages","_SubscriptionUpsell","_useSubscriptionOffer","_messages2","_jsxRuntime","e","__esModule","default","SubscriptionUpgradeCard","_ref","courseId","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","onUpgraded","onClose","banner","formatMessage","useIntl","offer","useSubscriptionOffer","canPurchase","canSubscribe","canUpgradeInPlace","coursePrice","subscribePrice","included","jsx","Icon","src","CheckCircle","screenReaderText","messages","includedAlt","notIncluded","CloseSmall","notIncludedAlt","showSubscribeColumn","showBuyColumn","showTable","rows","hasTrial","key","label","featureFreeTrial","buy","featureChangeCourses","featureCertificates","certificateLink","Hyperlink","destination","getConfig","MARKETING_SITE_BASE_URL","children","featureCertificatesLink","featureGradedAssignments","featureUnlimitedAccess","filter","Boolean","jsxs","className","classNames","id","Stack","direction","cardHeader","IconButton","Close","iconAs","size","alt","upgradeNotificationMessages","closeAlt","onClick","benefitsHeader","scope","featureColumn","buyColumn","subscribeColumn","map","row","index","last","length","propTypes","PropTypes","string","isRequired","bool","func","node","defaultProps","undefined","_default","exports"],"sources":["../../src/subscription-upsell/SubscriptionUpgradeCard.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { getConfig } from '@edx/frontend-platform';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Hyperlink, Icon, IconButton, Stack,\n} from '@openedx/paragon';\nimport { CheckCircle, Close, CloseSmall } from '@openedx/paragon/icons';\n\nimport CertificatePreview from '../upgrade-notification/certificate-preview';\nimport upgradeNotificationMessages from '../upgrade-notification/messages';\nimport '../generic/upsell-bullets/UpsellTable.scss';\nimport SubscriptionUpsell from './SubscriptionUpsell';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\n/** The sidebar card (Figma 3331-33999): certificate preview, Buy vs Subscribe table, buttons. */\nconst SubscriptionUpgradeCard = ({\n courseId,\n withBorder,\n onSubscribeClick,\n onPurchaseClick,\n onUpgradeEvent,\n onUpgraded,\n onClose,\n banner,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n\n if (!offer || (!offer.canPurchase && !offer.canSubscribe && !offer.canUpgradeInPlace)) {\n return null;\n }\n\n const { coursePrice, subscribePrice } = offer;\n const included = <Icon src={CheckCircle} screenReaderText={formatMessage(messages.includedAlt)} />;\n const notIncluded = <Icon src={CloseSmall} screenReaderText={formatMessage(messages.notIncludedAlt)} />;\n\n // Columns follow the buttons; a subscriber gets Upgrade now and nothing to compare.\n const showSubscribeColumn = offer.canSubscribe;\n const showBuyColumn = offer.canPurchase;\n const showTable = !offer.canUpgradeInPlace && (showSubscribeColumn || showBuyColumn);\n\n const rows = [\n showSubscribeColumn && offer.hasTrial\n && { key: 'free-trial', label: formatMessage(messages.featureFreeTrial), buy: false },\n showSubscribeColumn\n && { key: 'change-courses', label: formatMessage(messages.featureChangeCourses), buy: false },\n {\n key: 'certificates',\n label: formatMessage(messages.featureCertificates, {\n certificateLink: (\n <Hyperlink destination={`${getConfig().MARKETING_SITE_BASE_URL}/verified-certificate`}>\n {formatMessage(messages.featureCertificatesLink)}\n </Hyperlink>\n ),\n }),\n buy: true,\n },\n { key: 'graded-assignments', label: formatMessage(messages.featureGradedAssignments), buy: true },\n { key: 'unlimited-access', label: formatMessage(messages.featureUnlimitedAccess), buy: true },\n ].filter(Boolean);\n\n return (\n <section\n className={classNames('upgrade-notification subscription-upgrade-card small', {\n 'pgn__card pgn__card-light card mb-4 rounded': withBorder,\n })}\n id=\"courseHome-upgradeNotification\"\n data-testid=\"subscription-upgrade-card\"\n >\n <Stack direction=\"horizontal\" className=\"align-items-start px-4 pt-4 mb-3\">\n <h2 className=\"upgrade-notification-header h4 mb-0\">{formatMessage(messages.cardHeader)}</h2>\n {onClose && (\n <IconButton\n className=\"ml-auto\"\n src={Close}\n iconAs={Icon}\n size=\"sm\"\n alt={formatMessage(upgradeNotificationMessages.closeAlt)}\n onClick={onClose}\n />\n )}\n </Stack>\n <CertificatePreview courseId={courseId} />\n {banner}\n {showTable && (\n <div className=\"px-4 small\">\n <h3 className=\"mb-4 primary-500\">{formatMessage(messages.benefitsHeader)}</h3>\n <table className=\"w-100 text-center subscription-comparison-table\" data-testid=\"subscription-card-table\">\n <thead>\n <tr>\n <th scope=\"col\"><span className=\"sr-only\">{formatMessage(messages.featureColumn)}</span></th>\n {showBuyColumn && (\n <th scope=\"col\" className=\"audit-cell top-audit-border font-weight-normal\" data-testid=\"subscription-card-buy-header\">\n <div className=\"center-items flex-column\">\n <span>{formatMessage(messages.buyColumn)}</span>\n {coursePrice && <span>{coursePrice}</span>}\n </div>\n </th>\n )}\n {showSubscribeColumn && (\n <th scope=\"col\" className=\"verified-cell top-verified-border\" data-testid=\"subscription-card-subscribe-header\">\n <div className=\"center-items flex-column\">\n <span>{formatMessage(messages.subscribeColumn)}</span>\n {subscribePrice && <span className=\"font-weight-normal\">{subscribePrice}</span>}\n </div>\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => {\n const last = index === rows.length - 1;\n return (\n <tr key={row.key} data-testid={`subscription-card-row-${row.key}`}>\n <th scope=\"row\" className={classNames('feature-cell text-left font-weight-normal', { 'bottom-no-border': last })}>\n {row.label}\n </th>\n {showBuyColumn && (\n <td className={classNames('audit-cell', { 'bottom-audit-border': last })}>\n <div className=\"center-items\">{row.buy ? included : notIncluded}</div>\n </td>\n )}\n {showSubscribeColumn && (\n <td className={classNames('verified-cell', { 'bottom-verified-border': last })}>\n <div className=\"center-items\">{included}</div>\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n <SubscriptionUpsell\n courseId={courseId}\n className=\"px-4 pb-4 pt-3\"\n onSubscribeClick={onSubscribeClick}\n onPurchaseClick={onPurchaseClick}\n onUpgradeEvent={onUpgradeEvent}\n onUpgraded={onUpgraded}\n />\n </section>\n );\n};\n\nSubscriptionUpgradeCard.propTypes = {\n courseId: PropTypes.string.isRequired,\n withBorder: PropTypes.bool,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n onUpgraded: PropTypes.func,\n // The courseware sidebar widget passes its toggle so the card can close it.\n onClose: PropTypes.func,\n // Host content shown under the certificate preview, such as the access expiration countdown.\n banner: PropTypes.node,\n};\n\nSubscriptionUpgradeCard.defaultProps = {\n withBorder: false,\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n onUpgradeEvent: undefined,\n onUpgraded: undefined,\n onClose: undefined,\n banner: undefined,\n};\n\nexport default SubscriptionUpgradeCard;\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAL,OAAA;AAGA,IAAAM,MAAA,GAAAN,OAAA;AAEA,IAAAO,mBAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,SAAA,GAAAT,sBAAA,CAAAC,OAAA;AACAA,OAAA;AACA,IAAAS,mBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,qBAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,UAAA,GAAAZ,sBAAA,CAAAC,OAAA;AAAkC,IAAAY,WAAA,GAAAZ,OAAA;AAAA,SAAAD,uBAAAc,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhBlC;;AAkBA,iGACA,MAAMG,uBAAuB,GAAGC,IAAA,IAS1B;EAAA,IAT2B;IAC/BC,QAAQ;IACRC,UAAU;IACVC,gBAAgB;IAChBC,eAAe;IACfC,cAAc;IACdC,UAAU;IACVC,OAAO;IACPC;EACF,CAAC,GAAAR,IAAA;EACC,MAAM;IAAES;EAAc,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;EACnC,MAAMC,KAAK,GAAG,IAAAC,6BAAoB,EAACX,QAAQ,CAAC;EAE5C,IAAI,CAACU,KAAK,IAAK,CAACA,KAAK,CAACE,WAAW,IAAI,CAACF,KAAK,CAACG,YAAY,IAAI,CAACH,KAAK,CAACI,iBAAkB,EAAE;IACrF,OAAO,IAAI;EACb;EAEA,MAAM;IAAEC,WAAW;IAAEC;EAAe,CAAC,GAAGN,KAAK;EAC7C,MAAMO,QAAQ,gBAAG,IAAAvB,WAAA,CAAAwB,GAAA,EAAC/B,QAAA,CAAAgC,IAAI;IAACC,GAAG,EAAEC,kBAAY;IAACC,gBAAgB,EAAEd,aAAa,CAACe,kBAAQ,CAACC,WAAW;EAAE,CAAE,CAAC;EAClG,MAAMC,WAAW,gBAAG,IAAA/B,WAAA,CAAAwB,GAAA,EAAC/B,QAAA,CAAAgC,IAAI;IAACC,GAAG,EAAEM,iBAAW;IAACJ,gBAAgB,EAAEd,aAAa,CAACe,kBAAQ,CAACI,cAAc;EAAE,CAAE,CAAC;;EAEvG;EACA,MAAMC,mBAAmB,GAAGlB,KAAK,CAACG,YAAY;EAC9C,MAAMgB,aAAa,GAAGnB,KAAK,CAACE,WAAW;EACvC,MAAMkB,SAAS,GAAG,CAACpB,KAAK,CAACI,iBAAiB,KAAKc,mBAAmB,IAAIC,aAAa,CAAC;EAEpF,MAAME,IAAI,GAAG,CACXH,mBAAmB,IAAIlB,KAAK,CAACsB,QAAQ,IAChC;IAAEC,GAAG,EAAE,YAAY;IAAEC,KAAK,EAAE1B,aAAa,CAACe,kBAAQ,CAACY,gBAAgB,CAAC;IAAEC,GAAG,EAAE;EAAM,CAAC,EACvFR,mBAAmB,IACd;IAAEK,GAAG,EAAE,gBAAgB;IAAEC,KAAK,EAAE1B,aAAa,CAACe,kBAAQ,CAACc,oBAAoB,CAAC;IAAED,GAAG,EAAE;EAAM,CAAC,EAC/F;IACEH,GAAG,EAAE,cAAc;IACnBC,KAAK,EAAE1B,aAAa,CAACe,kBAAQ,CAACe,mBAAmB,EAAE;MACjDC,eAAe,eACb,IAAA7C,WAAA,CAAAwB,GAAA,EAAC/B,QAAA,CAAAqD,SAAS;QAACC,WAAW,EAAE,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,uBAAuB,uBAAwB;QAAAC,QAAA,EACnFpC,aAAa,CAACe,kBAAQ,CAACsB,uBAAuB;MAAC,CACvC;IAEf,CAAC,CAAC;IACFT,GAAG,EAAE;EACP,CAAC,EACD;IAAEH,GAAG,EAAE,oBAAoB;IAAEC,KAAK,EAAE1B,aAAa,CAACe,kBAAQ,CAACuB,wBAAwB,CAAC;IAAEV,GAAG,EAAE;EAAK,CAAC,EACjG;IAAEH,GAAG,EAAE,kBAAkB;IAAEC,KAAK,EAAE1B,aAAa,CAACe,kBAAQ,CAACwB,sBAAsB,CAAC;IAAEX,GAAG,EAAE;EAAK,CAAC,CAC9F,CAACY,MAAM,CAACC,OAAO,CAAC;EAEjB,oBACE,IAAAvD,WAAA,CAAAwD,IAAA;IACEC,SAAS,EAAE,IAAAC,mBAAU,EAAC,sDAAsD,EAAE;MAC5E,6CAA6C,EAAEnD;IACjD,CAAC,CAAE;IACHoD,EAAE,EAAC,gCAAgC;IACnC,eAAY,2BAA2B;IAAAT,QAAA,gBAEvC,IAAAlD,WAAA,CAAAwD,IAAA,EAAC/D,QAAA,CAAAmE,KAAK;MAACC,SAAS,EAAC,YAAY;MAACJ,SAAS,EAAC,kCAAkC;MAAAP,QAAA,gBACxE,IAAAlD,WAAA,CAAAwB,GAAA;QAAIiC,SAAS,EAAC,qCAAqC;QAAAP,QAAA,EAAEpC,aAAa,CAACe,kBAAQ,CAACiC,UAAU;MAAC,CAAK,CAAC,EAC5FlD,OAAO,iBACN,IAAAZ,WAAA,CAAAwB,GAAA,EAAC/B,QAAA,CAAAsE,UAAU;QACTN,SAAS,EAAC,SAAS;QACnB/B,GAAG,EAAEsC,YAAM;QACXC,MAAM,EAAExC,aAAK;QACbyC,IAAI,EAAC,IAAI;QACTC,GAAG,EAAErD,aAAa,CAACsD,iBAA2B,CAACC,QAAQ,CAAE;QACzDC,OAAO,EAAE1D;MAAQ,CAClB,CACF;IAAA,CACI,CAAC,eACR,IAAAZ,WAAA,CAAAwB,GAAA,EAAC7B,mBAAA,CAAAQ,OAAkB;MAACG,QAAQ,EAAEA;IAAS,CAAE,CAAC,EACzCO,MAAM,EACNuB,SAAS,iBACR,IAAApC,WAAA,CAAAwD,IAAA;MAAKC,SAAS,EAAC,YAAY;MAAAP,QAAA,gBACzB,IAAAlD,WAAA,CAAAwB,GAAA;QAAIiC,SAAS,EAAC,kBAAkB;QAAAP,QAAA,EAAEpC,aAAa,CAACe,kBAAQ,CAAC0C,cAAc;MAAC,CAAK,CAAC,eAC9E,IAAAvE,WAAA,CAAAwD,IAAA;QAAOC,SAAS,EAAC,iDAAiD;QAAC,eAAY,yBAAyB;QAAAP,QAAA,gBACtG,IAAAlD,WAAA,CAAAwB,GAAA;UAAA0B,QAAA,eACE,IAAAlD,WAAA,CAAAwD,IAAA;YAAAN,QAAA,gBACE,IAAAlD,WAAA,CAAAwB,GAAA;cAAIgD,KAAK,EAAC,KAAK;cAAAtB,QAAA,eAAC,IAAAlD,WAAA,CAAAwB,GAAA;gBAAMiC,SAAS,EAAC,SAAS;gBAAAP,QAAA,EAAEpC,aAAa,CAACe,kBAAQ,CAAC4C,aAAa;cAAC,CAAO;YAAC,CAAI,CAAC,EAC5FtC,aAAa,iBACZ,IAAAnC,WAAA,CAAAwB,GAAA;cAAIgD,KAAK,EAAC,KAAK;cAACf,SAAS,EAAC,gDAAgD;cAAC,eAAY,8BAA8B;cAAAP,QAAA,eACnH,IAAAlD,WAAA,CAAAwD,IAAA;gBAAKC,SAAS,EAAC,0BAA0B;gBAAAP,QAAA,gBACvC,IAAAlD,WAAA,CAAAwB,GAAA;kBAAA0B,QAAA,EAAOpC,aAAa,CAACe,kBAAQ,CAAC6C,SAAS;gBAAC,CAAO,CAAC,EAC/CrD,WAAW,iBAAI,IAAArB,WAAA,CAAAwB,GAAA;kBAAA0B,QAAA,EAAO7B;gBAAW,CAAO,CAAC;cAAA,CACvC;YAAC,CACJ,CACL,EACAa,mBAAmB,iBAClB,IAAAlC,WAAA,CAAAwB,GAAA;cAAIgD,KAAK,EAAC,KAAK;cAACf,SAAS,EAAC,mCAAmC;cAAC,eAAY,oCAAoC;cAAAP,QAAA,eAC5G,IAAAlD,WAAA,CAAAwD,IAAA;gBAAKC,SAAS,EAAC,0BAA0B;gBAAAP,QAAA,gBACvC,IAAAlD,WAAA,CAAAwB,GAAA;kBAAA0B,QAAA,EAAOpC,aAAa,CAACe,kBAAQ,CAAC8C,eAAe;gBAAC,CAAO,CAAC,EACrDrD,cAAc,iBAAI,IAAAtB,WAAA,CAAAwB,GAAA;kBAAMiC,SAAS,EAAC,oBAAoB;kBAAAP,QAAA,EAAE5B;gBAAc,CAAO,CAAC;cAAA,CAC5E;YAAC,CACJ,CACL;UAAA,CACC;QAAC,CACA,CAAC,eACR,IAAAtB,WAAA,CAAAwB,GAAA;UAAA0B,QAAA,EACGb,IAAI,CAACuC,GAAG,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;YACxB,MAAMC,IAAI,GAAGD,KAAK,KAAKzC,IAAI,CAAC2C,MAAM,GAAG,CAAC;YACtC,oBACE,IAAAhF,WAAA,CAAAwD,IAAA;cAAkB,eAAa,yBAAyBqB,GAAG,CAACtC,GAAG,EAAG;cAAAW,QAAA,gBAChE,IAAAlD,WAAA,CAAAwB,GAAA;gBAAIgD,KAAK,EAAC,KAAK;gBAACf,SAAS,EAAE,IAAAC,mBAAU,EAAC,2CAA2C,EAAE;kBAAE,kBAAkB,EAAEqB;gBAAK,CAAC,CAAE;gBAAA7B,QAAA,EAC9G2B,GAAG,CAACrC;cAAK,CACR,CAAC,EACJL,aAAa,iBACZ,IAAAnC,WAAA,CAAAwB,GAAA;gBAAIiC,SAAS,EAAE,IAAAC,mBAAU,EAAC,YAAY,EAAE;kBAAE,qBAAqB,EAAEqB;gBAAK,CAAC,CAAE;gBAAA7B,QAAA,eACvE,IAAAlD,WAAA,CAAAwB,GAAA;kBAAKiC,SAAS,EAAC,cAAc;kBAAAP,QAAA,EAAE2B,GAAG,CAACnC,GAAG,GAAGnB,QAAQ,GAAGQ;gBAAW,CAAM;cAAC,CACpE,CACL,EACAG,mBAAmB,iBAClB,IAAAlC,WAAA,CAAAwB,GAAA;gBAAIiC,SAAS,EAAE,IAAAC,mBAAU,EAAC,eAAe,EAAE;kBAAE,wBAAwB,EAAEqB;gBAAK,CAAC,CAAE;gBAAA7B,QAAA,eAC7E,IAAAlD,WAAA,CAAAwB,GAAA;kBAAKiC,SAAS,EAAC,cAAc;kBAAAP,QAAA,EAAE3B;gBAAQ,CAAM;cAAC,CAC5C,CACL;YAAA,GAbMsD,GAAG,CAACtC,GAcT,CAAC;UAET,CAAC;QAAC,CACG,CAAC;MAAA,CACH,CAAC;IAAA,CACL,CACN,eACD,IAAAvC,WAAA,CAAAwB,GAAA,EAAC3B,mBAAA,CAAAM,OAAkB;MACjBG,QAAQ,EAAEA,QAAS;MACnBmD,SAAS,EAAC,gBAAgB;MAC1BjD,gBAAgB,EAAEA,gBAAiB;MACnCC,eAAe,EAAEA,eAAgB;MACjCC,cAAc,EAAEA,cAAe;MAC/BC,UAAU,EAAEA;IAAW,CACxB,CAAC;EAAA,CACK,CAAC;AAEd,CAAC;AAEDP,uBAAuB,CAAC6E,SAAS,GAAG;EAClC3E,QAAQ,EAAE4E,kBAAS,CAACC,MAAM,CAACC,UAAU;EACrC7E,UAAU,EAAE2E,kBAAS,CAACG,IAAI;EAC1B7E,gBAAgB,EAAE0E,kBAAS,CAACI,IAAI;EAChC7E,eAAe,EAAEyE,kBAAS,CAACI,IAAI;EAC/B5E,cAAc,EAAEwE,kBAAS,CAACI,IAAI;EAC9B3E,UAAU,EAAEuE,kBAAS,CAACI,IAAI;EAC1B;EACA1E,OAAO,EAAEsE,kBAAS,CAACI,IAAI;EACvB;EACAzE,MAAM,EAAEqE,kBAAS,CAACK;AACpB,CAAC;AAEDnF,uBAAuB,CAACoF,YAAY,GAAG;EACrCjF,UAAU,EAAE,KAAK;EACjBC,gBAAgB,EAAEiF,SAAS;EAC3BhF,eAAe,EAAEgF,SAAS;EAC1B/E,cAAc,EAAE+E,SAAS;EACzB9E,UAAU,EAAE8E,SAAS;EACrB7E,OAAO,EAAE6E,SAAS;EAClB5E,MAAM,EAAE4E;AACV,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAxF,OAAA,GAEaC,uBAAuB","ignoreList":[]}
@@ -10,8 +10,9 @@ var _i18n = require("@edx/frontend-platform/i18n");
10
10
  var _logging = require("@edx/frontend-platform/logging");
11
11
  var _paragon = require("@openedx/paragon");
12
12
  var _lms_api = require("../data/lms_api");
13
+ var _messages = _interopRequireDefault(require("../upgrade-notification/messages"));
13
14
  var _useSubscriptionOffer = _interopRequireDefault(require("./useSubscriptionOffer"));
14
- var _messages = _interopRequireDefault(require("./messages"));
15
+ var _messages2 = _interopRequireDefault(require("./messages"));
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
18
  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); }
@@ -108,7 +109,7 @@ const SubscriptionUpsell = _ref => {
108
109
  className: className,
109
110
  role: "status",
110
111
  "data-testid": "subscription-upgrade-pending",
111
- children: formatMessage(_messages.default.upgradePending)
112
+ children: formatMessage(_messages2.default.upgradePending)
112
113
  });
113
114
  }
114
115
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -116,23 +117,23 @@ const SubscriptionUpsell = _ref => {
116
117
  children: [upgradeState === UPGRADE_STATE.NOT_ACTIVE && /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
117
118
  role: "alert",
118
119
  "data-testid": "subscription-upgrade-not-active",
119
- children: [formatMessage(_messages.default.upgradeNotActive), offer.subscribeUrl && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
120
+ children: [formatMessage(_messages2.default.upgradeNotActive), offer.subscribeUrl && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
120
121
  children: [' ', /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Hyperlink, {
121
122
  destination: offer.subscribeUrl,
122
- children: formatMessage(_messages.default.reactivateSubscription)
123
+ children: formatMessage(_messages2.default.reactivateSubscription)
123
124
  })]
124
125
  })]
125
126
  }), upgradeState === UPGRADE_STATE.FAILED && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
126
127
  role: "alert",
127
128
  "data-testid": "subscription-upgrade-failed",
128
- children: formatMessage(_messages.default.upgradeFailed)
129
+ children: formatMessage(_messages2.default.upgradeFailed)
129
130
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
130
131
  variant: "brand",
131
132
  block: true,
132
133
  onClick: handleUpgrade,
133
134
  disabled: upgradeState === UPGRADE_STATE.LOADING,
134
135
  "data-testid": "subscription-upgrade-now-button",
135
- children: formatMessage(upgradeState === UPGRADE_STATE.LOADING ? _messages.default.upgrading : _messages.default.upgradeNow)
136
+ children: formatMessage(upgradeState === UPGRADE_STATE.LOADING ? _messages2.default.upgrading : _messages2.default.upgradeNow)
136
137
  })]
137
138
  });
138
139
  }
@@ -143,7 +144,7 @@ const SubscriptionUpsell = _ref => {
143
144
  className: className,
144
145
  children: [offer.showNotIncluded && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
145
146
  "data-testid": "subscription-not-included",
146
- children: formatMessage(_messages.default.notIncluded)
147
+ children: formatMessage(_messages2.default.notIncluded)
147
148
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
148
149
  className: "d-flex",
149
150
  children: [canPurchase && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
@@ -152,9 +153,9 @@ const SubscriptionUpsell = _ref => {
152
153
  variant: offer.canSubscribe ? 'outline-primary' : 'brand',
153
154
  onClick: onPurchaseClick,
154
155
  "data-testid": "subscription-purchase-button",
155
- children: coursePrice ? formatMessage(_messages.default.purchase, {
156
+ children: coursePrice ? formatMessage(_messages2.default.purchase, {
156
157
  price: coursePrice
157
- }) : formatMessage(_messages.default.purchaseNoPrice)
158
+ }) : formatMessage(_messages2.default.purchaseNoPrice)
158
159
  }), offer.canSubscribe && /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
159
160
  as: "a",
160
161
  href: offer.subscribeUrl,
@@ -162,8 +163,17 @@ const SubscriptionUpsell = _ref => {
162
163
  className: "ml-2",
163
164
  onClick: onSubscribeClick,
164
165
  "data-testid": "subscription-subscribe-button",
165
- children: formatMessage(_messages.default.subscribe)
166
+ children: formatMessage(_messages2.default.subscribe)
166
167
  })]
168
+ }), canPurchase && offer.purchaseCode && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
169
+ className: "mt-2 mb-0",
170
+ "data-testid": "subscription-purchase-code",
171
+ children: formatMessage(_messages.default.discountCodeMessage, {
172
+ code: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
173
+ className: "font-weight-bold",
174
+ children: offer.purchaseCode
175
+ })
176
+ })
167
177
  })]
168
178
  });
169
179
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionUpsell.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_i18n","_logging","_paragon","_lms_api","_useSubscriptionOffer","_messages","_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","purchaseUrl","canPurchase","coursePrice","handleUpgrade","requestedCourseId","current","add","nextState","result","upgradeEnrollmentWithSubscription","success","SubscriptionUpgradeError","code","status","delete","canUpgradeInPlace","jsx","role","children","messages","upgradePending","jsxs","upgradeNotActive","subscribeUrl","Fragment","Hyperlink","destination","reactivateSubscription","upgradeFailed","Button","variant","block","onClick","disabled","upgrading","upgradeNow","canSubscribe","showNotIncluded","notIncluded","as","href","purchase","price","purchaseNoPrice","subscribe","propTypes","PropTypes","string","isRequired","func","defaultProps","undefined","_default"],"sources":["../../src/subscription-upsell/SubscriptionUpsell.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { 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 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\n if (!offer) {\n return null;\n }\n\n const { purchaseUrl, canPurchase, coursePrice } = offer;\n\n const handleUpgrade = async () => {\n const requestedCourseId = courseId;\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');\n safeCall(onUpgraded, 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 (!canPurchase && !offer.canSubscribe && !offer.showNotIncluded) {\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 </div>\n );\n};\n\nSubscriptionUpsell.propTypes = {\n courseId: PropTypes.string.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\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","_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","purchaseUrl","canPurchase","coursePrice","handleUpgrade","requestedCourseId","current","add","nextState","result","upgradeEnrollmentWithSubscription","success","SubscriptionUpgradeError","code","status","delete","canUpgradeInPlace","jsx","role","children","messages","upgradePending","jsxs","upgradeNotActive","subscribeUrl","Fragment","Hyperlink","destination","reactivateSubscription","upgradeFailed","Button","variant","block","onClick","disabled","upgrading","upgradeNow","canSubscribe","showNotIncluded","notIncluded","as","href","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, { 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 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\n if (!offer) {\n return null;\n }\n\n const { purchaseUrl, canPurchase, coursePrice } = offer;\n\n const handleUpgrade = async () => {\n const requestedCourseId = courseId;\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');\n safeCall(onUpgraded, 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 (!canPurchase && !offer.canSubscribe && !offer.showNotIncluded) {\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 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":[]}
@@ -44,7 +44,9 @@ const formatCoursePrice = verifiedMode => verifiedMode?.price === undefined || v
44
44
  /**
45
45
  * The offer for a course from courseHomeMeta.extraOffer, with the flags and labels the components
46
46
  * need, or null when the LMS sent no block (callers keep today's UI). The backend decides whether
47
- * Subscribe is offered: subscribeUrl is null when not. Purchase uses the course's verifiedMode link.
47
+ * Subscribe is offered: subscribeUrl is null when not. Purchase uses the first-purchase discount
48
+ * (the `offer` on the outline or courseware model, as the existing upgrade button does) when there
49
+ * is one, else the course's verifiedMode link and price.
48
50
  */
49
51
  exports.formatCoursePrice = formatCoursePrice;
50
52
  const useSubscriptionOffer = courseId => {
@@ -53,12 +55,25 @@ const useSubscriptionOffer = courseId => {
53
55
  extraOffer,
54
56
  verifiedMode
55
57
  } = (0, _modelStore.useModel)('courseHomeMeta', courseId) || {};
58
+ const outline = (0, _modelStore.useModel)('outline', courseId) || {};
59
+ const courseware = (0, _modelStore.useModel)('coursewareMeta', courseId) || {};
60
+ // Both models stay in the store across pages, so the one not fetched for this page may be stale.
61
+ // shortcut: an expired discount is dropped; a live one is the same per learner in both, so order is moot.
62
+ // Expiry is judged on server time: each model carries the server/browser clock offset.
63
+ const isLive = _ref => {
64
+ let {
65
+ offer,
66
+ timeOffsetMillis = 0
67
+ } = _ref;
68
+ return !!offer && (!offer.expirationDate || new Date(offer.expirationDate) > new Date(Date.now() + timeOffsetMillis));
69
+ };
70
+ const purchaseOffer = ([outline, courseware].find(isLive) || {}).offer || null;
56
71
  if (!extraOffer) {
57
72
  return null;
58
73
  }
59
74
  const inCatalog = extraOffer.inCatalog !== false;
60
75
  const isSubscriber = extraOffer.isSubscriber === true;
61
- const purchaseUrl = verifiedMode?.upgradeUrl || null;
76
+ const purchaseUrl = purchaseOffer?.upgradeUrl || verifiedMode?.upgradeUrl || null;
62
77
  const price = formatOfferPrice(intl, extraOffer.price);
63
78
  return _objectSpread(_objectSpread({}, extraOffer), {}, {
64
79
  inCatalog,
@@ -69,7 +84,8 @@ const useSubscriptionOffer = courseId => {
69
84
  canSubscribe: inCatalog && !isSubscriber && !!extraOffer.subscribeUrl,
70
85
  canUpgradeInPlace: inCatalog && isSubscriber,
71
86
  showNotIncluded: !inCatalog && isSubscriber,
72
- coursePrice: formatCoursePrice(verifiedMode),
87
+ coursePrice: purchaseOffer ? purchaseOffer.discountedPrice : formatCoursePrice(verifiedMode),
88
+ purchaseCode: purchaseOffer?.code || null,
73
89
  subscribePrice: price && intl.formatMessage(_messages.default.pricePerInterval, {
74
90
  price,
75
91
  interval: extraOffer.price.billingPeriod || 'month'
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscriptionOffer.js","names":["_i18n","require","_modelStore","_messages","_interopRequireDefault","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SUBSCRIPTION_STATUS","exports","NOT_SUBSCRIBED","TRIAL_ACTIVE","ACTIVE","CANCEL_PENDING","CANCELLED","UNKNOWN","formatOfferPrice","intl","price","amount","undefined","formatNumber","style","currency","isInteger","minimumFractionDigits","formatCoursePrice","verifiedMode","currencySymbol","useSubscriptionOffer","courseId","useIntl","extraOffer","useModel","inCatalog","isSubscriber","purchaseUrl","upgradeUrl","hasTrial","freeTrialEligible","canPurchase","canSubscribe","subscribeUrl","canUpgradeInPlace","showNotIncluded","coursePrice","subscribePrice","formatMessage","messages","pricePerInterval","interval","billingPeriod","_default"],"sources":["../../src/subscription-upsell/useSubscriptionOffer.js"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { useModel } from '@src/generic/model-store';\n\nimport messages from './messages';\n\n// Viax statuses, as the LMS extra_offer block reports them.\nexport const SUBSCRIPTION_STATUS = {\n NOT_SUBSCRIBED: 'NOT_SUBSCRIBED',\n TRIAL_ACTIVE: 'TRIAL_ACTIVE',\n ACTIVE: 'ACTIVE',\n CANCEL_PENDING: 'CANCEL_PENDING',\n CANCELLED: 'CANCELLED',\n UNKNOWN: 'UNKNOWN',\n};\n\n/** \"$39\" from { amount: \"39.00\", currency: \"USD\" }, or null without a price. */\nexport const formatOfferPrice = (intl, price) => {\n if (price?.amount === undefined || price?.amount === null) {\n return null;\n }\n const amount = Number(price.amount);\n return intl.formatNumber(amount, {\n style: 'currency',\n currency: price.currency || 'USD',\n // Whole amounts show as \"$39\"; otherwise the currency's own precision applies.\n ...(Number.isInteger(amount) ? { minimumFractionDigits: 0 } : {}),\n });\n};\n\n/** \"$149\" from verifiedMode, as the existing upgrade button shows it, or null. */\nexport const formatCoursePrice = (verifiedMode) => (\n verifiedMode?.price === undefined || verifiedMode?.price === null\n ? null\n : `${verifiedMode.currencySymbol || ''}${verifiedMode.price}`\n);\n\n/**\n * The offer for a course from courseHomeMeta.extraOffer, with the flags and labels the components\n * need, or null when the LMS sent no block (callers keep today's UI). The backend decides whether\n * Subscribe is offered: subscribeUrl is null when not. Purchase uses the course's verifiedMode link.\n */\nconst useSubscriptionOffer = (courseId) => {\n const intl = useIntl();\n const { extraOffer, verifiedMode } = useModel('courseHomeMeta', courseId) || {};\n if (!extraOffer) {\n return null;\n }\n const inCatalog = extraOffer.inCatalog !== false;\n const isSubscriber = extraOffer.isSubscriber === true;\n const purchaseUrl = verifiedMode?.upgradeUrl || null;\n const price = formatOfferPrice(intl, extraOffer.price);\n return {\n ...extraOffer,\n inCatalog,\n isSubscriber,\n purchaseUrl,\n hasTrial: extraOffer.freeTrialEligible === true,\n canPurchase: !!purchaseUrl,\n canSubscribe: inCatalog && !isSubscriber && !!extraOffer.subscribeUrl,\n canUpgradeInPlace: inCatalog && isSubscriber,\n showNotIncluded: !inCatalog && isSubscriber,\n coursePrice: formatCoursePrice(verifiedMode),\n subscribePrice: price && intl.formatMessage(messages.pricePerInterval, {\n price,\n interval: extraOffer.price.billingPeriod || 'month',\n }),\n };\n};\n\nexport default useSubscriptionOffer;\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAkC,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,QAAAH,CAAA,EAAAI,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAP,CAAA,OAAAM,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAR,CAAA,GAAAI,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAX,CAAA,EAAAI,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAf,CAAA,aAAAI,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAD,OAAA,CAAAG,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAnB,CAAA,EAAAI,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAArB,CAAA,EAAAM,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAF,OAAA,CAAAG,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAtB,CAAA,EAAAI,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAJ,CAAA;AAAA,SAAAmB,gBAAAnB,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAmB,cAAA,CAAAnB,CAAA,MAAAJ,CAAA,GAAAM,MAAA,CAAAgB,cAAA,CAAAtB,CAAA,EAAAI,CAAA,IAAAoB,KAAA,EAAAnB,CAAA,EAAAO,UAAA,MAAAa,YAAA,MAAAC,QAAA,UAAA1B,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAuB,eAAAlB,CAAA,QAAAsB,CAAA,GAAAC,YAAA,CAAAvB,CAAA,uCAAAsB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAvB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAwB,MAAA,CAAAC,WAAA,kBAAA9B,CAAA,QAAA2B,CAAA,GAAA3B,CAAA,CAAA+B,IAAA,CAAA1B,CAAA,EAAAD,CAAA,uCAAAuB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA5B,CAAA,GAAA6B,MAAA,GAAAC,MAAA,EAAA7B,CAAA,KAJlC;AAMA;AACO,MAAM8B,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG;EACjCE,cAAc,EAAE,gBAAgB;EAChCC,YAAY,EAAE,cAAc;EAC5BC,MAAM,EAAE,QAAQ;EAChBC,cAAc,EAAE,gBAAgB;EAChCC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE;AACX,CAAC;;AAED;AACO,MAAMC,gBAAgB,GAAGA,CAACC,IAAI,EAAEC,KAAK,KAAK;EAC/C,IAAIA,KAAK,EAAEC,MAAM,KAAKC,SAAS,IAAIF,KAAK,EAAEC,MAAM,KAAK,IAAI,EAAE;IACzD,OAAO,IAAI;EACb;EACA,MAAMA,MAAM,GAAGZ,MAAM,CAACW,KAAK,CAACC,MAAM,CAAC;EACnC,OAAOF,IAAI,CAACI,YAAY,CAACF,MAAM,EAAA/B,aAAA;IAC7BkC,KAAK,EAAE,UAAU;IACjBC,QAAQ,EAAEL,KAAK,CAACK,QAAQ,IAAI;EAAK,GAE7BhB,MAAM,CAACiB,SAAS,CAACL,MAAM,CAAC,GAAG;IAAEM,qBAAqB,EAAE;EAAE,CAAC,GAAG,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC;;AAED;AAAAhB,OAAA,CAAAO,gBAAA,GAAAA,gBAAA;AACO,MAAMU,iBAAiB,GAAIC,YAAY,IAC5CA,YAAY,EAAET,KAAK,KAAKE,SAAS,IAAIO,YAAY,EAAET,KAAK,KAAK,IAAI,GAC7D,IAAI,GACJ,GAAGS,YAAY,CAACC,cAAc,IAAI,EAAE,GAAGD,YAAY,CAACT,KAAK,EAC9D;;AAED;AACA;AACA;AACA;AACA;AAJAT,OAAA,CAAAiB,iBAAA,GAAAA,iBAAA;AAKA,MAAMG,oBAAoB,GAAIC,QAAQ,IAAK;EACzC,MAAMb,IAAI,GAAG,IAAAc,aAAO,EAAC,CAAC;EACtB,MAAM;IAAEC,UAAU;IAAEL;EAAa,CAAC,GAAG,IAAAM,oBAAQ,EAAC,gBAAgB,EAAEH,QAAQ,CAAC,IAAI,CAAC,CAAC;EAC/E,IAAI,CAACE,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EACA,MAAME,SAAS,GAAGF,UAAU,CAACE,SAAS,KAAK,KAAK;EAChD,MAAMC,YAAY,GAAGH,UAAU,CAACG,YAAY,KAAK,IAAI;EACrD,MAAMC,WAAW,GAAGT,YAAY,EAAEU,UAAU,IAAI,IAAI;EACpD,MAAMnB,KAAK,GAAGF,gBAAgB,CAACC,IAAI,EAAEe,UAAU,CAACd,KAAK,CAAC;EACtD,OAAA9B,aAAA,CAAAA,aAAA,KACK4C,UAAU;IACbE,SAAS;IACTC,YAAY;IACZC,WAAW;IACXE,QAAQ,EAAEN,UAAU,CAACO,iBAAiB,KAAK,IAAI;IAC/CC,WAAW,EAAE,CAAC,CAACJ,WAAW;IAC1BK,YAAY,EAAEP,SAAS,IAAI,CAACC,YAAY,IAAI,CAAC,CAACH,UAAU,CAACU,YAAY;IACrEC,iBAAiB,EAAET,SAAS,IAAIC,YAAY;IAC5CS,eAAe,EAAE,CAACV,SAAS,IAAIC,YAAY;IAC3CU,WAAW,EAAEnB,iBAAiB,CAACC,YAAY,CAAC;IAC5CmB,cAAc,EAAE5B,KAAK,IAAID,IAAI,CAAC8B,aAAa,CAACC,iBAAQ,CAACC,gBAAgB,EAAE;MACrE/B,KAAK;MACLgC,QAAQ,EAAElB,UAAU,CAACd,KAAK,CAACiC,aAAa,IAAI;IAC9C,CAAC;EAAC;AAEN,CAAC;AAAC,IAAAC,QAAA,GAAA3C,OAAA,CAAAlC,OAAA,GAEasD,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"useSubscriptionOffer.js","names":["_i18n","require","_modelStore","_messages","_interopRequireDefault","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","SUBSCRIPTION_STATUS","exports","NOT_SUBSCRIBED","TRIAL_ACTIVE","ACTIVE","CANCEL_PENDING","CANCELLED","UNKNOWN","formatOfferPrice","intl","price","amount","undefined","formatNumber","style","currency","isInteger","minimumFractionDigits","formatCoursePrice","verifiedMode","currencySymbol","useSubscriptionOffer","courseId","useIntl","extraOffer","useModel","outline","courseware","isLive","_ref","offer","timeOffsetMillis","expirationDate","Date","now","purchaseOffer","find","inCatalog","isSubscriber","purchaseUrl","upgradeUrl","hasTrial","freeTrialEligible","canPurchase","canSubscribe","subscribeUrl","canUpgradeInPlace","showNotIncluded","coursePrice","discountedPrice","purchaseCode","code","subscribePrice","formatMessage","messages","pricePerInterval","interval","billingPeriod","_default"],"sources":["../../src/subscription-upsell/useSubscriptionOffer.js"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { useModel } from '@src/generic/model-store';\n\nimport messages from './messages';\n\n// Viax statuses, as the LMS extra_offer block reports them.\nexport const SUBSCRIPTION_STATUS = {\n NOT_SUBSCRIBED: 'NOT_SUBSCRIBED',\n TRIAL_ACTIVE: 'TRIAL_ACTIVE',\n ACTIVE: 'ACTIVE',\n CANCEL_PENDING: 'CANCEL_PENDING',\n CANCELLED: 'CANCELLED',\n UNKNOWN: 'UNKNOWN',\n};\n\n/** \"$39\" from { amount: \"39.00\", currency: \"USD\" }, or null without a price. */\nexport const formatOfferPrice = (intl, price) => {\n if (price?.amount === undefined || price?.amount === null) {\n return null;\n }\n const amount = Number(price.amount);\n return intl.formatNumber(amount, {\n style: 'currency',\n currency: price.currency || 'USD',\n // Whole amounts show as \"$39\"; otherwise the currency's own precision applies.\n ...(Number.isInteger(amount) ? { minimumFractionDigits: 0 } : {}),\n });\n};\n\n/** \"$149\" from verifiedMode, as the existing upgrade button shows it, or null. */\nexport const formatCoursePrice = (verifiedMode) => (\n verifiedMode?.price === undefined || verifiedMode?.price === null\n ? null\n : `${verifiedMode.currencySymbol || ''}${verifiedMode.price}`\n);\n\n/**\n * The offer for a course from courseHomeMeta.extraOffer, with the flags and labels the components\n * need, or null when the LMS sent no block (callers keep today's UI). The backend decides whether\n * Subscribe is offered: subscribeUrl is null when not. Purchase uses the first-purchase discount\n * (the `offer` on the outline or courseware model, as the existing upgrade button does) when there\n * is one, else the course's verifiedMode link and price.\n */\nconst useSubscriptionOffer = (courseId) => {\n const intl = useIntl();\n const { extraOffer, verifiedMode } = useModel('courseHomeMeta', courseId) || {};\n const outline = useModel('outline', courseId) || {};\n const courseware = useModel('coursewareMeta', courseId) || {};\n // Both models stay in the store across pages, so the one not fetched for this page may be stale.\n // shortcut: an expired discount is dropped; a live one is the same per learner in both, so order is moot.\n // Expiry is judged on server time: each model carries the server/browser clock offset.\n const isLive = ({ offer, timeOffsetMillis = 0 }) => !!offer && (\n !offer.expirationDate || new Date(offer.expirationDate) > new Date(Date.now() + timeOffsetMillis)\n );\n const purchaseOffer = ([outline, courseware].find(isLive) || {}).offer || null;\n if (!extraOffer) {\n return null;\n }\n const inCatalog = extraOffer.inCatalog !== false;\n const isSubscriber = extraOffer.isSubscriber === true;\n const purchaseUrl = purchaseOffer?.upgradeUrl || verifiedMode?.upgradeUrl || null;\n const price = formatOfferPrice(intl, extraOffer.price);\n return {\n ...extraOffer,\n inCatalog,\n isSubscriber,\n purchaseUrl,\n hasTrial: extraOffer.freeTrialEligible === true,\n canPurchase: !!purchaseUrl,\n canSubscribe: inCatalog && !isSubscriber && !!extraOffer.subscribeUrl,\n canUpgradeInPlace: inCatalog && isSubscriber,\n showNotIncluded: !inCatalog && isSubscriber,\n coursePrice: purchaseOffer ? purchaseOffer.discountedPrice : formatCoursePrice(verifiedMode),\n purchaseCode: purchaseOffer?.code || null,\n subscribePrice: price && intl.formatMessage(messages.pricePerInterval, {\n price,\n interval: extraOffer.price.billingPeriod || 'month',\n }),\n };\n};\n\nexport default useSubscriptionOffer;\n"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,7 @@ var _icons = require("@openedx/paragon/icons");
14
14
  var _upgradeButton = require("@src/generic/upgrade-button");
15
15
  var _modelStore = require("@src/generic/model-store");
16
16
  var _data = require("../data");
17
+ var _subscriptionUpsell = require("../subscription-upsell");
17
18
  var _certificatePreview = _interopRequireDefault(require("./certificate-preview"));
18
19
  var _generic = require("../generic");
19
20
  var _utils = _interopRequireDefault(require("./utils"));
@@ -26,7 +27,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
26
27
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
28
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
28
29
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
29
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */
30
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */ // Placements that show the subscription card: course home and the courseware sidebar
31
+ // (tray and widget). The Progress page keeps the current card.
32
+ const SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];
30
33
  const UpgradeNotification = _ref => {
31
34
  let {
32
35
  id,
@@ -57,23 +60,30 @@ const UpgradeNotification = _ref => {
57
60
  const {
58
61
  conversion
59
62
  } = (0, _cohesion.useCohesion)(courseId);
63
+ const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
60
64
  const dateNow = Date.now();
61
65
  const timezoneFormatArgs = userTimezone ? {
62
66
  timeZone: userTimezone
63
67
  } : {};
64
68
  const correctedTime = new Date(dateNow + timeOffsetMillis);
65
69
  const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;
66
- const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;
70
+ // Server time, so this agrees with the countdown and the FBE branches below.
71
+ const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;
67
72
  const shouldDisplayBorder = pluginLocationId.includes('outline');
73
+ const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(placement => pluginLocationId.includes(placement));
74
+ // Without an offer, past the upgrade deadline, and on the Progress page, today's card renders.
75
+ const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer;
68
76
  const upsellPageName = (0, _utils.default)({
69
77
  id: pluginLocationId
70
78
  });
71
79
  const setupgradeNotificationCurrentState = setNotificationCurrentState;
72
80
  const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;
73
- const eventProperties = {
81
+ const eventProperties = _objectSpread({
74
82
  org_key: org,
75
83
  courserun_key: courseId
76
- };
84
+ }, showSubscriptionCard && {
85
+ variant: 'subscription'
86
+ });
77
87
  const promotionEventProperties = _objectSpread({
78
88
  creative: 'sidebarupsell',
79
89
  name: 'In-Course Verification Prompt',
@@ -110,6 +120,43 @@ const UpgradeNotification = _ref => {
110
120
  pageName: upsellPageName
111
121
  }));
112
122
  };
123
+ const logSubscribeClick = () => {
124
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
125
+ linkCategory: 'subscription',
126
+ linkName: `${upsellPageName}_subscribe`,
127
+ linkType: 'button',
128
+ pageName: upsellPageName
129
+ }));
130
+ conversion('Subscribed');
131
+ };
132
+ if (showSubscriptionCard) {
133
+ // the card handles every offer state itself
134
+ let banner;
135
+ if (isFBE) {
136
+ // content-gated learners keep the access expiration warning and its sidebar dot stages
137
+ const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
138
+ banner = hoursToAccessExpiration < 7 * 24 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.ExpirationCountdown, {
139
+ courseId: courseId,
140
+ hoursToExpiration: hoursToAccessExpiration,
141
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
142
+ type: "access"
143
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.AccessExpirationDateBanner, {
144
+ courseId: courseId,
145
+ accessExpirationDate: accessExpirationDate,
146
+ timezoneFormatArgs: timezoneFormatArgs,
147
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
148
+ });
149
+ }
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpgradeCard, {
151
+ courseId: courseId,
152
+ withBorder: shouldDisplayBorder,
153
+ banner: banner,
154
+ onSubscribeClick: logSubscribeClick,
155
+ onPurchaseClick: logUpgradeClick,
156
+ onUpgradeEvent: stage => stage === 'succeeded' && logUpgradeClick(),
157
+ onClose: toggleSidebar
158
+ });
159
+ }
113
160
 
114
161
  /*
115
162
  There are 5 parts that change in the upgrade card:
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_upgradeButton","_modelStore","_data","_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","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerCode","upsellMessage","jsx","UpsellTable","hoursToAccessExpiration","Math","floor","hoursToDiscountExpiration","expirationDate","messages","firstTimeLearnerDiscountHeader","percentage","ExpirationCountdown","hoursToExpiration","type","accessExpirationHeader","AccessExpirationDateBanner","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","variant","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 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\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\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 const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\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 };\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 /*\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,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,QAAA,GAAAZ,OAAA;AAQA,IAAAa,MAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,SAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,SAAA,GAAAf,OAAA;AAA0C,IAAAgB,WAAA,GAAAhB,OAAA;AAAA,SAAAE,uBAAAe,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAlB,wBAAAkB,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAtB,uBAAA,YAAAA,CAAAkB,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,KAxB1C;AA0BA,MAAMwC,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;EAE5C,MAAMmB,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC1B,MAAMC,kBAAkB,GAAGd,YAAY,GAAG;IAAEe,QAAQ,EAAEf;EAAa,CAAC,GAAG,CAAC,CAAC;EACzE,MAAMgB,aAAa,GAAG,IAAIJ,IAAI,CAACD,OAAO,GAAGH,gBAAgB,CAAC;EAC1D,MAAMS,oBAAoB,GAAGZ,gBAAgB,GAAG,IAAIO,IAAI,CAACP,gBAAgB,CAACa,eAAe,CAAC,GAAG,IAAI;EACjG,MAAMC,sBAAsB,GAAGd,gBAAgB,GAAG,IAAIO,IAAI,CAACD,OAAO,CAAC,GAAGM,oBAAoB,GAAG,KAAK;EAClG,MAAMG,mBAAmB,GAAGxB,gBAAgB,CAACyB,QAAQ,CAAC,SAAS,CAAC;EAChE,MAAMC,cAAc,GAAG,IAAAC,cAAiB,EAAC;IAAEhC,EAAE,EAAEK;EAAiB,CAAC,CAAC;EAClE,MAAM4B,kCAAkC,GAAG9B,2BAA2B;EACtE,MAAM+B,KAAK,GAAG,CAAC,CAACpB,gBAAgB,IAAI,CAAC,CAACC,eAAe,EAAEoB,wBAAwB;EAE/E,MAAMC,eAAe,GAAG;IACtBC,OAAO,EAAE7B,GAAG;IACZ8B,aAAa,EAAErC;EACjB,CAAC;EAED,MAAMsC,wBAAwB,GAAA1D,aAAA;IAC5B2D,QAAQ,EAAE,eAAe;IACzBC,IAAI,EAAE,+BAA+B;IACrCC,QAAQ,EAAE,iBAAiB;IAC3BC,YAAY,EAAE;EAAwC,GACnDP,eAAe,CACnB;EAED,IAAAQ,gBAAS,EAAC,MAAM;IACd,IAAAC,+BAAoB,EAAC,+CAA+C,EAAET,eAAe,CAAC;IACtF,IAAAU,yBAAc,EAAC,kBAAkB,EAAEP,wBAAwB,CAAC;IAC5D;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAAC7B,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAMqC,eAAe,GAAGA,CAAA,KAAM;IAC5B,IAAAF,+BAAoB,EAAC,6CAA6C,EAAET,eAAe,CAAC;IACpF,IAAAS,+BAAoB,EAAC,uCAAuC,EAAAhE,aAAA,CAAAA,aAAA,KACvDuD,eAAe;MAClBY,QAAQ,EAAE;IAAiB,EAC5B,CAAC;IACF,IAAAF,yBAAc,EAAC,mBAAmB,EAAEP,wBAAwB,CAAC;IAC7D,IAAAO,yBAAc,EAAC,uCAAuC,EAAAjE,aAAA,CAAAA,aAAA,KACjDuD,eAAe;MAClBa,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAE,GAAGnB,cAAc,QAAQ;MACnCoB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAErB;IAAc,EACzB,CAAC;IAEFb,UAAU,CAAC,UAAU,CAAC;EACxB,CAAC;EAED,MAAMmC,sBAAsB,GAAGA,CAAA,KAAM;IACnC,IAAAP,yBAAc,EAAC,sEAAsE,EAAAjE,aAAA,CAAAA,aAAA,KAChFuD,eAAe;MAClBa,YAAY,EAAE,sBAAsB;MACpCC,QAAQ,EAAE,GAAGnB,cAAc,iBAAiB;MAC5CoB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAErB;IAAc,EACzB,CAAC;EACJ,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIuB,6BAA6B;EACjC,IAAIC,gBAAgB;EACpB,IAAIC,kBAAkB;EACtB,IAAIC,SAAS;EAEb,IAAIC,aAAa,gBAAG,IAAAxG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAA8G,WAAW;IAAO1B,KAAK;IAAErB;EAAwB,CAAK,CAAC;EAE5E,IAAIqB,KAAK,EAAE;IACT,MAAM2B,uBAAuB,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACrC,oBAAoB,GAAGD,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnG,IAAIoC,uBAAuB,IAAK,CAAC,GAAG,EAAG,EAAE;MACvC,IAAI7C,KAAK,EAAE;QAAE;QACX,MAAMgD,yBAAyB,GAAGF,IAAI,CAACC,KAAK,CAAC,CAAC,IAAI1C,IAAI,CAACL,KAAK,CAACiD,cAAc,CAAC,GAAGxC,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QAC/G6B,6BAA6B,GAAGhD,aAAa,CAC3C4D,iBAAQ,CAACC,8BAA8B,EACvC;UAAEC,UAAU,EAAGpD,KAAK,CAACoD;QAAY,CACnC,CAAC;QACDb,gBAAgB,gBACd,IAAArG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAAuH,mBAAmB;UAClBpE,QAAQ,EAAEA,QAAS;UACnBqE,iBAAiB,EAAEN,yBAA0B;UAC7C/B,kCAAkC,EAAEA,kCAAmC;UACvEsC,IAAI,EAAC;QAAO,CACb,CACF;MACH,CAAC,MAAM;QACLjB,6BAA6B,GAAGhD,aAAa,CAAC4D,iBAAQ,CAACM,sBAAsB,CAAC;QAC9EjB,gBAAgB,gBACd,IAAArG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAA2H,0BAA0B;UACzBxE,QAAQ,EAAEA,QAAS;UACnByB,oBAAoB,EAAEA,oBAAqB;UAC3CH,kBAAkB,EAAEA,kBAAmB;UACvCU,kCAAkC,EAAEA;QAAmC,CACxE,CACF;MACH;IACF,CAAC,MAAM,IAAI4B,uBAAuB,GAAI,CAAC,GAAG,EAAG,IAAIA,uBAAuB,IAAI,CAAC,EAAE;MAC7E;MACAP,6BAA6B,GAAGhD,aAAa,CAAC4D,iBAAQ,CAACQ,4BAA4B,CAAC;MACpFnB,gBAAgB,gBACd,IAAArG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAAuH,mBAAmB;QAClBpE,QAAQ,EAAEA,QAAS;QACnBqE,iBAAiB,EAAET,uBAAwB;QAC3C5B,kCAAkC,EAAEA,kCAAmC;QACvEsC,IAAI,EAAC;MAAQ,CACd,CACF;MACD,IAAIxC,cAAc,KAAK4C,gBAAU,CAACC,QAAQ,EAAE;QAC1ClB,aAAa,gBACX,IAAAxG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAA+H,wBAAwB;UACvBnD,oBAAoB,EAAEA,oBAAqB;UAC3CH,kBAAkB,EAAEA;QAAmB,CACxC,CACF;MACH;IACF,CAAC,MAAM;MAAE;MACP+B,6BAA6B,GAAGhD,aAAa,CAAC4D,iBAAQ,CAACY,0BAA0B,CAAC;MAClFvB,gBAAgB,gBACd,IAAArG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAAiI,wBAAwB;QACvB9E,QAAQ,EAAEA,QAAS;QACnByB,oBAAoB,EAAEA,oBAAqB;QAC3CH,kBAAkB,EAAEA,kBAAmB;QACvCU,kCAAkC,EAAEA;MAAmC,CACxE,CACF;MACDyB,aAAa,gBACX,IAAAxG,WAAA,CAAAyG,GAAA,EAAC7G,QAAA,CAAAkI,yBAAyB,IAAE,CAC7B;IACH;EACF;EAEA,IAAIpD,sBAAsB,EAAE;IAC1B4B,kBAAkB,gBAChB,IAAAtG,WAAA,CAAAyG,GAAA,EAACnH,QAAA,CAAAyI,MAAM;MACLC,OAAO,EAAC,SAAS;MACjBC,OAAO,EAAE9B,sBAAuB;MAChC+B,IAAI,EAAExE,YAAa;MACnByE,KAAK;MAAAC,QAAA,EAEJhF,aAAa,CAAC4D,iBAAQ,CAACqB,+BAA+B;IAAC,CAClD,CACT;EACH,CAAC,MAAM;IACL/B,kBAAkB,gBAChB,IAAAtG,WAAA,CAAAyG,GAAA,EAACjH,cAAA,CAAA8I,aAAa;MACZxE,KAAK,EAAEA,KAAM;MACbmE,OAAO,EAAEpC,eAAgB;MACzBrC,YAAY,EAAEA,YAAa;MAC3B2E,KAAK;IAAA,CACN,CACF;EACH;EAEA,IAAIrE,KAAK,EAAE;IAAE;IACXyC,SAAS,gBACP,IAAAvG,WAAA,CAAAyG,GAAA;MAAK8B,SAAS,EAAC,2BAA2B;MAAAH,QAAA,EACvChF,aAAa,CACZ4D,iBAAQ,CAACwB,mBAAmB,EAC5B;QACEC,IAAI,eAAG,IAAAzI,WAAA,CAAAyG,GAAA;UAAM8B,SAAS,EAAC,kBAAkB;UAAAH,QAAA,EAAEtE,KAAK,CAAC2E;QAAI,CAAO;MAC9D,CACF;IAAC,CACE,CACN;EACH;EAEA,oBACE,IAAAzI,WAAA,CAAAyG,GAAA;IAAS8B,SAAS,EAAE,IAAAG,mBAAU,EAAC,4BAA4B,EAAE;MAAE,6CAA6C,EAAE/D;IAAoB,CAAC,CAAE;IAAAyD,QAAA,eACnI,IAAApI,WAAA,CAAA2I,IAAA;MAAK7F,EAAE,EAAC,gCAAgC;MAAAsF,QAAA,gBACtC,IAAApI,WAAA,CAAA2I,IAAA;QACEJ,SAAS,EAAE,IAAAG,mBAAU,EAAC,6BAA6B,EAAE;UACnD,yDAAyD,EAAE,CAAC,CAACxF,aAAa;UAC1E,KAAK,EAAE,CAACA;QACV,CAAC,CAAE;QACHJ,EAAE,EAAC,gCAAgC;QAAAsF,QAAA,GAElChF,aAAa,CAAC4D,iBAAQ,CAAC4B,wBAAwB,CAAC,EAChD,CAAC,CAAC1F,aAAa,iBACd,IAAAlD,WAAA,CAAAyG,GAAA;UAAK8B,SAAS,EAAC,uBAAuB;UAAAH,QAAA,eACpC,IAAApI,WAAA,CAAAyG,GAAA,EAACnH,QAAA,CAAAuJ,UAAU;YACTC,GAAG,EAAEC,YAAM;YACXC,IAAI,EAAC,IAAI;YACTC,MAAM,EAAEC,aAAK;YACbjB,OAAO,EAAE/E,aAAc;YACvBqF,SAAS,EAAC,YAAY;YACtBY,GAAG,EAAE/F,aAAa,CAAC4D,iBAAQ,CAACoC,QAAQ;UAAE,CACvC;QAAC,CACC,CACN;MAAA,CACC,CAAC,eACL,IAAApJ,WAAA,CAAAyG,GAAA,EAAC9G,mBAAA,CAAAQ,OAAkB;QAAC4C,QAAQ,EAAEA;MAAS,CAAE,CAAC,eAC1C,IAAA/C,WAAA,CAAAyG,GAAA;QAAI8B,SAAS,EAAC,MAAM;QAAAH,QAAA,EACjBhC;MAA6B,CAC5B,CAAC,EACJC,gBAAgB,eACjB,IAAArG,WAAA,CAAAyG,GAAA;QAAK8B,SAAS,EAAC,8BAA8B;QAAAH,QAAA,EAC1C5B;MAAa,CACX,CAAC,eACN,IAAAxG,WAAA,CAAAyG,GAAA;QAAK8B,SAAS,EAAC,iCAAiC;QAAAH,QAAA,EAC7C9B;MAAkB,CAChB,CAAC,EACLC,SAAS;IAAA,CACP;EAAC,CACC,CAAC;AAEd,CAAC;AAED3D,mBAAmB,CAACyG,SAAS,GAAG;EAC9BvG,EAAE,EAAEwG,kBAAS,CAACC,MAAM,CAACC,UAAU;EAC/BzG,QAAQ,EAAEuG,kBAAS,CAACC,MAAM,CAACC,UAAU;EACrCxG,KAAK,EAAEsG,kBAAS,CAACC,MAAM;EACvBtG,2BAA2B,EAAEqG,kBAAS,CAACG,IAAI;EAC3CvG,aAAa,EAAEoG,kBAAS,CAACG;AAC3B,CAAC;AAED7G,mBAAmB,CAAC8G,YAAY,GAAG;EACjCzG,2BAA2B,EAAE,IAAI;EACjCC,aAAa,EAAE,IAAI;EACnBF,KAAK,EAAE;AACT,CAAC;AAAC,IAAA2G,QAAA,GAAAC,OAAA,CAAAzJ,OAAA,GAEayC,mBAAmB","ignoreList":[]}
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","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, past the upgrade deadline, and on the Progress page, today's card renders.\n const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer;\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('Subscribed');\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":"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","ignoreList":[]}
@@ -9,6 +9,8 @@ var _reactRedux = require("react-redux");
9
9
  var _i18n = require("@edx/frontend-platform/i18n");
10
10
  var _paragon = require("@openedx/paragon");
11
11
  var _modelStore = require("@src/generic/model-store");
12
+ var _cohesion = require("../cohesion");
13
+ var _subscriptionUpsell = require("../subscription-upsell");
12
14
  var _messages = _interopRequireDefault(require("./messages"));
13
15
  var _track = require("./track");
14
16
  var _jsxRuntime = require("react/jsx-runtime");
@@ -27,6 +29,10 @@ const UpgradeToCompleteAlert = () => {
27
29
  const {
28
30
  org
29
31
  } = (0, _modelStore.useModel)('courseHomeMeta', courseId);
32
+ const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
33
+ const {
34
+ conversion
35
+ } = (0, _cohesion.useCohesion)(courseId);
30
36
  const {
31
37
  contentTypeGatingEnabled,
32
38
  missedDeadlines,
@@ -42,16 +48,35 @@ const UpgradeToCompleteAlert = () => {
42
48
  className: "w-100 m-0",
43
49
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Col, {
44
50
  xs: 12,
45
- md: 9,
51
+ md: subscriptionOffer ? 8 : 9,
46
52
  className: "small p-0 pr-md-2",
47
53
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert.Heading, {
48
54
  children: intl.formatMessage(_messages.default.upgradeToCompleteHeader)
49
55
  }), intl.formatMessage(_messages.default.upgradeToCompleteBody)]
50
56
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Col, {
51
57
  xs: 12,
52
- md: 3,
58
+ md: subscriptionOffer ? 4 : 3,
53
59
  className: "align-self-center text-right mt-3 mt-md-0 p-0",
54
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
60
+ children: subscriptionOffer ?
61
+ /*#__PURE__*/
62
+ // No Figma for this banner yet: same banner, with the LP-1422 buttons in place of Upgrade now.
63
+ (0, _jsxRuntime.jsx)("div", {
64
+ className: "d-inline-block text-left",
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpsell, {
66
+ courseId: courseId,
67
+ onSubscribeClick: () => {
68
+ (0, _track.logUpgradeLinkClick)(org, courseId, 'dates_subscribe');
69
+ conversion('Subscribed');
70
+ },
71
+ onPurchaseClick: () => (0, _track.logUpgradeLinkClick)(org, courseId),
72
+ onUpgradeEvent: stage => {
73
+ if (stage === 'succeeded') {
74
+ (0, _track.logUpgradeLinkClick)(org, courseId);
75
+ conversion('Upgraded');
76
+ }
77
+ }
78
+ })
79
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
55
80
  variant: "brand",
56
81
  size: "sm",
57
82
  className: "w-xs-100 w-md-auto",
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeToCompleteAlert.js","names":["_react","_interopRequireDefault","require","_reactRedux","_i18n","_paragon","_modelStore","_messages","_track","_jsxRuntime","e","__esModule","default","UpgradeToCompleteAlert","intl","useIntl","courseId","useSelector","state","courseHome","datesBannerInfo","hasEnded","useModel","org","contentTypeGatingEnabled","missedDeadlines","verifiedUpgradeLink","jsx","Alert","id","className","children","jsxs","Row","Col","xs","md","Heading","formatMessage","messages","upgradeToCompleteHeader","upgradeToCompleteBody","Button","variant","size","onClick","logUpgradeLinkClick","global","location","replace","upgradeToCompleteButton","_default","exports"],"sources":["../../src/upgrade-to-complete-alert/UpgradeToCompleteAlert.jsx"],"sourcesContent":["import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Col,\n Row,\n} from '@openedx/paragon';\n\nimport { useModel } from '@src/generic/model-store'; // eslint-disable-line import/no-unresolved\nimport messages from './messages';\nimport { logUpgradeLinkClick } from './track';\n\nconst UpgradeToCompleteAlert = () => {\n const intl = useIntl();\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel('dates', courseId);\n\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n verifiedUpgradeLink,\n } = datesBannerInfo || {};\n\n if (!contentTypeGatingEnabled || missedDeadlines || hasEnded || !verifiedUpgradeLink) {\n return null;\n }\n\n return (\n <Alert id=\"upgrade-complete-alert\" className=\"bg-light-200\">\n <Row className=\"w-100 m-0\">\n <Col xs={12} md={9} className=\"small p-0 pr-md-2\">\n <Alert.Heading>{intl.formatMessage(messages.upgradeToCompleteHeader)}</Alert.Heading>\n {intl.formatMessage(messages.upgradeToCompleteBody)}\n </Col>\n <Col xs={12} md={3} className=\"align-self-center text-right mt-3 mt-md-0 p-0\">\n <Button\n variant=\"brand\"\n size=\"sm\"\n className=\"w-xs-100 w-md-auto\"\n onClick={() => {\n logUpgradeLinkClick(org, courseId);\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToCompleteButton)}\n </Button>\n </Col>\n </Row>\n </Alert>\n );\n};\n\nexport default UpgradeToCompleteAlert;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAOA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAA8C,IAAAO,WAAA,GAAAP,OAAA;AAAA,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAFO;;AAIrD,MAAMG,sBAAsB,GAAGA,CAAA,KAAM;EACnC,MAAMC,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,MAAM;IACJC;EACF,CAAC,GAAG,IAAAC,uBAAW,EAACC,KAAK,IAAIA,KAAK,CAACC,UAAU,CAAC;EAE1C,MAAM;IACJC,eAAe;IACfC;EACF,CAAC,GAAG,IAAAC,oBAAQ,EAAC,OAAO,EAAEN,QAAQ,CAAC;EAE/B,MAAM;IACJO;EACF,CAAC,GAAG,IAAAD,oBAAQ,EAAC,gBAAgB,EAAEN,QAAQ,CAAC;EAExC,MAAM;IACJQ,wBAAwB;IACxBC,eAAe;IACfC;EACF,CAAC,GAAGN,eAAe,IAAI,CAAC,CAAC;EAEzB,IAAI,CAACI,wBAAwB,IAAIC,eAAe,IAAIJ,QAAQ,IAAI,CAACK,mBAAmB,EAAE;IACpF,OAAO,IAAI;EACb;EAEA,oBACE,IAAAjB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAuB,KAAK;IAACC,EAAE,EAAC,wBAAwB;IAACC,SAAS,EAAC,cAAc;IAAAC,QAAA,eACzD,IAAAtB,WAAA,CAAAuB,IAAA,EAAC3B,QAAA,CAAA4B,GAAG;MAACH,SAAS,EAAC,WAAW;MAAAC,QAAA,gBACxB,IAAAtB,WAAA,CAAAuB,IAAA,EAAC3B,QAAA,CAAA6B,GAAG;QAACC,EAAE,EAAE,EAAG;QAACC,EAAE,EAAE,CAAE;QAACN,SAAS,EAAC,mBAAmB;QAAAC,QAAA,gBAC/C,IAAAtB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAuB,KAAK,CAACS,OAAO;UAAAN,QAAA,EAAEjB,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACC,uBAAuB;QAAC,CAAgB,CAAC,EACpF1B,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACE,qBAAqB,CAAC;MAAA,CAChD,CAAC,eACN,IAAAhC,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAA6B,GAAG;QAACC,EAAE,EAAE,EAAG;QAACC,EAAE,EAAE,CAAE;QAACN,SAAS,EAAC,+CAA+C;QAAAC,QAAA,eAC3E,IAAAtB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAqC,MAAM;UACLC,OAAO,EAAC,OAAO;UACfC,IAAI,EAAC,IAAI;UACTd,SAAS,EAAC,oBAAoB;UAC9Be,OAAO,EAAEA,CAAA,KAAM;YACb,IAAAC,0BAAmB,EAACvB,GAAG,EAAEP,QAAQ,CAAC;YAClC+B,MAAM,CAACC,QAAQ,CAACC,OAAO,CAACvB,mBAAmB,CAAC;UAC9C,CAAE;UAAAK,QAAA,EAEDjB,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACW,uBAAuB;QAAC,CAC/C;MAAC,CACN,CAAC;IAAA,CACH;EAAC,CACD,CAAC;AAEZ,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAxC,OAAA,GAEaC,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"UpgradeToCompleteAlert.js","names":["_react","_interopRequireDefault","require","_reactRedux","_i18n","_paragon","_modelStore","_cohesion","_subscriptionUpsell","_messages","_track","_jsxRuntime","e","__esModule","default","UpgradeToCompleteAlert","intl","useIntl","courseId","useSelector","state","courseHome","datesBannerInfo","hasEnded","useModel","org","subscriptionOffer","useSubscriptionOffer","conversion","useCohesion","contentTypeGatingEnabled","missedDeadlines","verifiedUpgradeLink","jsx","Alert","id","className","children","jsxs","Row","Col","xs","md","Heading","formatMessage","messages","upgradeToCompleteHeader","upgradeToCompleteBody","SubscriptionUpsell","onSubscribeClick","logUpgradeLinkClick","onPurchaseClick","onUpgradeEvent","stage","Button","variant","size","onClick","global","location","replace","upgradeToCompleteButton","_default","exports"],"sources":["../../src/upgrade-to-complete-alert/UpgradeToCompleteAlert.jsx"],"sourcesContent":["import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Col,\n Row,\n} from '@openedx/paragon';\n\nimport { useModel } from '@src/generic/model-store'; // eslint-disable-line import/no-unresolved\nimport { useCohesion } from '../cohesion';\nimport { SubscriptionUpsell, useSubscriptionOffer } from '../subscription-upsell';\nimport messages from './messages';\nimport { logUpgradeLinkClick } from './track';\n\nconst UpgradeToCompleteAlert = () => {\n const intl = useIntl();\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel('dates', courseId);\n\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n const { conversion } = useCohesion(courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n verifiedUpgradeLink,\n } = datesBannerInfo || {};\n\n if (!contentTypeGatingEnabled || missedDeadlines || hasEnded || !verifiedUpgradeLink) {\n return null;\n }\n\n return (\n <Alert id=\"upgrade-complete-alert\" className=\"bg-light-200\">\n <Row className=\"w-100 m-0\">\n <Col xs={12} md={subscriptionOffer ? 8 : 9} className=\"small p-0 pr-md-2\">\n <Alert.Heading>{intl.formatMessage(messages.upgradeToCompleteHeader)}</Alert.Heading>\n {intl.formatMessage(messages.upgradeToCompleteBody)}\n </Col>\n <Col xs={12} md={subscriptionOffer ? 4 : 3} className=\"align-self-center text-right mt-3 mt-md-0 p-0\">\n {subscriptionOffer ? (\n // No Figma for this banner yet: same banner, with the LP-1422 buttons in place of Upgrade now.\n <div className=\"d-inline-block text-left\">\n <SubscriptionUpsell\n courseId={courseId}\n onSubscribeClick={() => { logUpgradeLinkClick(org, courseId, 'dates_subscribe'); conversion('Subscribed'); }}\n onPurchaseClick={() => logUpgradeLinkClick(org, courseId)}\n onUpgradeEvent={(stage) => {\n if (stage === 'succeeded') { logUpgradeLinkClick(org, courseId); conversion('Upgraded'); }\n }}\n />\n </div>\n ) : (\n <Button\n variant=\"brand\"\n size=\"sm\"\n className=\"w-xs-100 w-md-auto\"\n onClick={() => {\n logUpgradeLinkClick(org, courseId);\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToCompleteButton)}\n </Button>\n )}\n </Col>\n </Row>\n </Alert>\n );\n};\n\nexport default UpgradeToCompleteAlert;\n"],"mappings":"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","ignoreList":[]}
@@ -10,13 +10,15 @@ var _analytics = require("@edx/frontend-platform/analytics");
10
10
  *
11
11
  * @param {string} org - The organization key
12
12
  * @param {string} courseId - The course run key
13
+ * @param {string} [linkName] - 'dates_upgrade' for Buy/Upgrade, 'dates_subscribe' for Subscribe
13
14
  */
14
- const logUpgradeLinkClick = (org, courseId) => {
15
+ const logUpgradeLinkClick = function (org, courseId) {
16
+ let linkName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'dates_upgrade';
15
17
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', {
16
18
  org_key: org,
17
19
  courserun_key: courseId,
18
20
  linkCategory: 'personalized_learner_schedules',
19
- linkName: 'dates_upgrade',
21
+ linkName,
20
22
  linkType: 'button',
21
23
  pageName: 'dates_tab'
22
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"track.js","names":["_analytics","require","logUpgradeLinkClick","org","courseId","sendTrackEvent","org_key","courserun_key","linkCategory","linkName","linkType","pageName","exports"],"sources":["../../src/upgrade-to-complete-alert/track.js"],"sourcesContent":["import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\n/**\n * Logs an upgrade link click event for the upgrade to complete alert.\n *\n * @param {string} org - The organization key\n * @param {string} courseId - The course run key\n */\nexport const logUpgradeLinkClick = (org, courseId) => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'personalized_learner_schedules',\n linkName: 'dates_upgrade',\n linkType: 'button',\n pageName: 'dates_tab',\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,mBAAmB,GAAGA,CAACC,GAAG,EAAEC,QAAQ,KAAK;EACpD,IAAAC,yBAAc,EAAC,uCAAuC,EAAE;IACtDC,OAAO,EAAEH,GAAG;IACZI,aAAa,EAAEH,QAAQ;IACvBI,YAAY,EAAE,gCAAgC;IAC9CC,QAAQ,EAAE,eAAe;IACzBC,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"track.js","names":["_analytics","require","logUpgradeLinkClick","org","courseId","linkName","arguments","length","undefined","sendTrackEvent","org_key","courserun_key","linkCategory","linkType","pageName","exports"],"sources":["../../src/upgrade-to-complete-alert/track.js"],"sourcesContent":["import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\n/**\n * Logs an upgrade link click event for the upgrade to complete alert.\n *\n * @param {string} org - The organization key\n * @param {string} courseId - The course run key\n * @param {string} [linkName] - 'dates_upgrade' for Buy/Upgrade, 'dates_subscribe' for Subscribe\n */\nexport const logUpgradeLinkClick = (org, courseId, linkName = 'dates_upgrade') => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'personalized_learner_schedules',\n linkName,\n linkType: 'button',\n pageName: 'dates_tab',\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,mBAAmB,GAAG,SAAAA,CAACC,GAAG,EAAEC,QAAQ,EAAiC;EAAA,IAA/BC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,eAAe;EAC3E,IAAAG,yBAAc,EAAC,uCAAuC,EAAE;IACtDC,OAAO,EAAEP,GAAG;IACZQ,aAAa,EAAEP,QAAQ;IACvBQ,YAAY,EAAE,gCAAgC;IAC9CP,QAAQ;IACRQ,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAb,mBAAA,GAAAA,mBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-plugin-advertisements",
3
- "version": "2.25.0",
3
+ "version": "2.26.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "main": "dist/index.js",
6
6
  "repository": {