@edx/frontend-plugin-advertisements 2.26.0 → 2.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.rst CHANGED
@@ -110,6 +110,9 @@ components to appear in the correct plugin slots, you will need a local ``env.co
110
110
  },
111
111
  },
112
112
  OPTIMIZELY_FULL_STACK_SDK_KEY: 'vtr_upgrade',
113
+ // Optional. 'true' (any case) renders the in-house upgrade modal instead of the Red Ventures widget.
114
+ // Unset or any other value keeps the Red Ventures widget.
115
+ DISABLE_RED_VENTURES_WIDGETS: 'true',
113
116
  };
114
117
 
115
118
  export default config;
@@ -6,8 +6,8 @@ var _rosie = require("rosie");
6
6
  // The `extra_offer` block of the course home metadata API, as the MFE stores it (camel-cased).
7
7
  // Shape from edx-subscription's devstack mock, branch abhalsod/LP-1415-devstack-offer-mock.
8
8
  // status is the Viax status; isSubscriber and freeTrialEligible are null when it is UNKNOWN;
9
- // subscribeUrl is null when Subscribe should not be offered.
10
- _rosie.Factory.define('extraOffer').option('checkoutHost', 'https://checkout.example.com').attr('inCatalog', true).attr('status', 'NOT_SUBSCRIBED').attr('isSubscriber', false).attr('freeTrialEligible', true).attr('subscribeUrl', ['checkoutHost'], host => `${host}/subscribe?course_run_key=course-v1:edX+DemoX+Demo_Course`).attr('price', () => ({
9
+ // subscribeUrl is null when Subscribe should not be offered; its shape follows the real checkout link.
10
+ _rosie.Factory.define('extraOffer').option('checkoutHost', 'https://checkout.example.com').attr('inCatalog', true).attr('status', 'NOT_SUBSCRIBED').attr('isSubscriber', false).attr('freeTrialEligible', true).attr('subscribeUrl', ['checkoutHost'], host => `${host}/checkout?plan=monthly&course_run_key=${encodeURIComponent('course-v1:edX+DemoX+Demo_Course')}`).attr('price', () => ({
11
11
  amount: '39.00',
12
12
  currency: 'USD',
13
13
  billingPeriod: 'month'
@@ -1 +1 @@
1
- {"version":3,"file":"extraOffer.factory.js","names":["_rosie","require","Factory","define","option","attr","host","amount","currency","billingPeriod"],"sources":["../../../src/data/__factories__/extraOffer.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\n// The `extra_offer` block of the course home metadata API, as the MFE stores it (camel-cased).\n// Shape from edx-subscription's devstack mock, branch abhalsod/LP-1415-devstack-offer-mock.\n// status is the Viax status; isSubscriber and freeTrialEligible are null when it is UNKNOWN;\n// subscribeUrl is null when Subscribe should not be offered.\nFactory.define('extraOffer')\n .option('checkoutHost', 'https://checkout.example.com')\n .attr('inCatalog', true)\n .attr('status', 'NOT_SUBSCRIBED')\n .attr('isSubscriber', false)\n .attr('freeTrialEligible', true)\n .attr('subscribeUrl', ['checkoutHost'], (host) => `${host}/subscribe?course_run_key=course-v1:edX+DemoX+Demo_Course`)\n .attr('price', () => ({ amount: '39.00', currency: 'USD', billingPeriod: 'month' }));\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjC;AACA;AACA;AACA;AACAC,cAAO,CAACC,MAAM,CAAC,YAAY,CAAC,CACzBC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC,CACtDC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CACvBA,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAChCA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAC3BA,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAC/BA,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,EAAGC,IAAI,IAAK,GAAGA,IAAI,2DAA2D,CAAC,CACpHD,IAAI,CAAC,OAAO,EAAE,OAAO;EAAEE,MAAM,EAAE,OAAO;EAAEC,QAAQ,EAAE,KAAK;EAAEC,aAAa,EAAE;AAAQ,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"extraOffer.factory.js","names":["_rosie","require","Factory","define","option","attr","host","encodeURIComponent","amount","currency","billingPeriod"],"sources":["../../../src/data/__factories__/extraOffer.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\n// The `extra_offer` block of the course home metadata API, as the MFE stores it (camel-cased).\n// Shape from edx-subscription's devstack mock, branch abhalsod/LP-1415-devstack-offer-mock.\n// status is the Viax status; isSubscriber and freeTrialEligible are null when it is UNKNOWN;\n// subscribeUrl is null when Subscribe should not be offered; its shape follows the real checkout link.\nFactory.define('extraOffer')\n .option('checkoutHost', 'https://checkout.example.com')\n .attr('inCatalog', true)\n .attr('status', 'NOT_SUBSCRIBED')\n .attr('isSubscriber', false)\n .attr('freeTrialEligible', true)\n .attr('subscribeUrl', ['checkoutHost'], (host) => `${host}/checkout?plan=monthly&course_run_key=${encodeURIComponent('course-v1:edX+DemoX+Demo_Course')}`)\n .attr('price', () => ({ amount: '39.00', currency: 'USD', billingPeriod: 'month' }));\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjC;AACA;AACA;AACA;AACAC,cAAO,CAACC,MAAM,CAAC,YAAY,CAAC,CACzBC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC,CACtDC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CACvBA,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAChCA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAC3BA,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAC/BA,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,EAAGC,IAAI,IAAK,GAAGA,IAAI,yCAAyCC,kBAAkB,CAAC,iCAAiC,CAAC,EAAE,CAAC,CACzJF,IAAI,CAAC,OAAO,EAAE,OAAO;EAAEG,MAAM,EAAE,OAAO;EAAEC,QAAQ,EAAE,KAAK;EAAEC,aAAa,EAAE;AAAQ,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SubscriptionUpgradeError = void 0;
7
+ exports.fetchEnrollmentMode = fetchEnrollmentMode;
7
8
  exports.fetchOrg = fetchOrg;
8
9
  exports.fetchVerifiedName = fetchVerifiedName;
9
10
  exports.upgradeEnrollmentWithSubscription = upgradeEnrollmentWithSubscription;
@@ -73,4 +74,20 @@ async function upgradeEnrollmentWithSubscription(courseRunKey) {
73
74
  });
74
75
  }
75
76
  }
77
+
78
+ /**
79
+ * The current learner's enrollment mode in a course run, such as 'audit' or 'verified', or null when it
80
+ * cannot be read or the learner has no active enrollment.
81
+ */
82
+ async function fetchEnrollmentMode(courseRunKey) {
83
+ const url = `${(0, _frontendPlatform.getConfig)().LMS_BASE_URL}/api/enrollment/v1/enrollment/${courseRunKey}`;
84
+ try {
85
+ const {
86
+ data
87
+ } = await (0, _auth.getAuthenticatedHttpClient)().get(url);
88
+ return data?.is_active && data.mode || null;
89
+ } catch (error) {
90
+ return null;
91
+ }
92
+ }
76
93
  //# sourceMappingURL=lms_api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lms_api.js","names":["_frontendPlatform","require","_auth","fetchOrg","org","LmsApiUrl","getConfig","LMS_BASE_URL","orgUrl","URL","data","getAuthenticatedHttpClient","get","href","error","camelCaseObject","fetchVerifiedName","verifiedNameUrl","SubscriptionUpgradeError","Error","constructor","message","code","status","arguments","length","undefined","name","exports","upgradeEnrollmentWithSubscription","courseRunKey","url","post","response"],"sources":["../../src/data/lms_api.js"],"sourcesContent":["import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchOrg(org) {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);\n\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(orgUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport async function fetchVerifiedName() {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(verifiedNameUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport class SubscriptionUpgradeError extends Error {\n constructor(message, { code, status } = {}) {\n super(message);\n this.name = 'SubscriptionUpgradeError';\n this.code = code;\n this.status = status;\n }\n}\n\n/**\n * Upgrade a subscriber's enrollment in place. Resolves with the LMS response, e.g. { success, status: 'PENDING' }.\n * Unlike the fetches above, errors are not swallowed: rejects with SubscriptionUpgradeError (code, status).\n */\nexport async function upgradeEnrollmentWithSubscription(courseRunKey) {\n const url = `${getConfig().LMS_BASE_URL}/api/subscription/enrollment/upgrade/`;\n try {\n const { data } = await getAuthenticatedHttpClient().post(url, { courseRunKey });\n return camelCaseObject(data);\n } catch (error) {\n const { status, data } = error.response || {};\n throw new SubscriptionUpgradeError(data?.error || error.message, { code: data?.code, status });\n }\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEO,eAAeE,QAAQA,CAACC,GAAG,EAAE;EAClC,MAAMC,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAC,GAAGJ,SAAS,uCAAuCD,GAAG,GAAG,CAAC;EAEjF,IAAIM,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACJ,MAAM,CAACK,IAAI,CAAC;EACjE,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B;AAEO,eAAeM,iBAAiBA,CAAA,EAAG;EACxC,MAAMX,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMU,eAAe,GAAG,IAAIR,GAAG,CAAC,GAAGJ,SAAS,4CAA4C,CAAC;EACzF,IAAIK,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACK,eAAe,CAACJ,IAAI,CAAC;EAC1E,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B;AAEO,MAAMQ,wBAAwB,SAASC,KAAK,CAAC;EAClDC,WAAWA,CAACC,OAAO,EAAyB;IAAA,IAAvB;MAAEC,IAAI;MAAEC;IAAO,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACxC,KAAK,CAACH,OAAO,CAAC;IACd,IAAI,CAACM,IAAI,GAAG,0BAA0B;IACtC,IAAI,CAACL,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,MAAM,GAAGA,MAAM;EACtB;AACF;;AAEA;AACA;AACA;AACA;AAHAK,OAAA,CAAAV,wBAAA,GAAAA,wBAAA;AAIO,eAAeW,iCAAiCA,CAACC,YAAY,EAAE;EACpE,MAAMC,GAAG,GAAG,GAAG,IAAAzB,2BAAS,EAAC,CAAC,CAACC,YAAY,uCAAuC;EAC9E,IAAI;IACF,MAAM;MAAEG;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACqB,IAAI,CAACD,GAAG,EAAE;MAAED;IAAa,CAAC,CAAC;IAC/E,OAAO,IAAAf,iCAAe,EAACL,IAAI,CAAC;EAC9B,CAAC,CAAC,OAAOI,KAAK,EAAE;IACd,MAAM;MAAES,MAAM;MAAEb;IAAK,CAAC,GAAGI,KAAK,CAACmB,QAAQ,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAIf,wBAAwB,CAACR,IAAI,EAAEI,KAAK,IAAIA,KAAK,CAACO,OAAO,EAAE;MAAEC,IAAI,EAAEZ,IAAI,EAAEY,IAAI;MAAEC;IAAO,CAAC,CAAC;EAChG;AACF","ignoreList":[]}
1
+ {"version":3,"file":"lms_api.js","names":["_frontendPlatform","require","_auth","fetchOrg","org","LmsApiUrl","getConfig","LMS_BASE_URL","orgUrl","URL","data","getAuthenticatedHttpClient","get","href","error","camelCaseObject","fetchVerifiedName","verifiedNameUrl","SubscriptionUpgradeError","Error","constructor","message","code","status","arguments","length","undefined","name","exports","upgradeEnrollmentWithSubscription","courseRunKey","url","post","response","fetchEnrollmentMode","is_active","mode"],"sources":["../../src/data/lms_api.js"],"sourcesContent":["import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchOrg(org) {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);\n\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(orgUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport async function fetchVerifiedName() {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(verifiedNameUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport class SubscriptionUpgradeError extends Error {\n constructor(message, { code, status } = {}) {\n super(message);\n this.name = 'SubscriptionUpgradeError';\n this.code = code;\n this.status = status;\n }\n}\n\n/**\n * Upgrade a subscriber's enrollment in place. Resolves with the LMS response, e.g. { success, status: 'PENDING' }.\n * Unlike the fetches above, errors are not swallowed: rejects with SubscriptionUpgradeError (code, status).\n */\nexport async function upgradeEnrollmentWithSubscription(courseRunKey) {\n const url = `${getConfig().LMS_BASE_URL}/api/subscription/enrollment/upgrade/`;\n try {\n const { data } = await getAuthenticatedHttpClient().post(url, { courseRunKey });\n return camelCaseObject(data);\n } catch (error) {\n const { status, data } = error.response || {};\n throw new SubscriptionUpgradeError(data?.error || error.message, { code: data?.code, status });\n }\n}\n\n/**\n * The current learner's enrollment mode in a course run, such as 'audit' or 'verified', or null when it\n * cannot be read or the learner has no active enrollment.\n */\nexport async function fetchEnrollmentMode(courseRunKey) {\n const url = `${getConfig().LMS_BASE_URL}/api/enrollment/v1/enrollment/${courseRunKey}`;\n try {\n const { data } = await getAuthenticatedHttpClient().get(url);\n return (data?.is_active && data.mode) || null;\n } catch (error) {\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -76,7 +76,7 @@ const LockPaywall = _ref => {
76
76
  linkType: 'link',
77
77
  pageName: 'in_course'
78
78
  }));
79
- conversion('Subscribed');
79
+ conversion('Subscribe Clicked'); // on the click, before checkout
80
80
  };
81
81
 
82
82
  // Learners who can subscribe get the Subscribe banner (Figma shows Subscribe only) and subscribers
@@ -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","_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":";;;;;;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;AACA,IAAAc,mBAAA,GAAAd,OAAA;AACA,IAAAe,oBAAA,GAAAhB,sBAAA,CAAAC,OAAA;AAAwD,IAAAgB,WAAA,GAAAhB,OAAA;AAAA,SAAAD,uBAAAkB,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,KAxBxD;AA0BA,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;EAC5C,MAAMY,iBAAiB,GAAG,IAAAC,wCAAoB,EAACb,QAAQ,CAAC;;EAExD;EACA;EACA,MAAMc,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,GAAGjB,gBAAgB,GAAG,IAAIkB,IAAI,CAAClB,gBAAgB,CAACmB,cAAc,CAAC,GAAG,IAAI;EAChG,MAAMC,sBAAsB,GAAGpB,gBAAgB,GAAG,IAAIkB,IAAI,CAACA,IAAI,CAACG,GAAG,CAAC,CAAC,CAAC,GAAGJ,oBAAoB,GAAG,KAAK;EAErG,IAAI,CAACb,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAMkB,eAAe,GAAG;IACtBC,OAAO,EAAEpB,GAAG;IACZqB,aAAa,EAAE7B;EACjB,CAAC;EAED,MAAM8B,kBAAkB,GAAGA,CAAA,KAAM;IAC/B,IAAAC,yBAAc,EAAC,uCAAuC,EAAArD,aAAA,CAAAA,aAAA,KACjDiD,eAAe;MAClBK,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,oBAAoB,GAAGA,CAAA,KAAM;IACjC,IAAAL,yBAAc,EAAC,uCAAuC,EAAArD,aAAA,CAAAA,aAAA,KACjDiD,eAAe;MAClBK,YAAY,EAAE,QAAQ;MACtBC,QAAQ,EAAE,qBAAqB;MAC/BC,QAAQ,EAAE,MAAM;MAChBC,QAAQ,EAAE;IAAW,EACtB,CAAC;IACFzB,UAAU,CAAC,YAAY,CAAC;EAC1B,CAAC;;EAED;EACA;EACA,IAAI,CAACe,sBAAsB,KAAKb,iBAAiB,EAAEyB,YAAY,IAAIzB,iBAAiB,EAAE0B,iBAAiB,CAAC,EAAE;IACxG,oBACE,IAAA5E,WAAA,CAAA6E,GAAA,EAAC9E,oBAAA,CAAAI,OAAmB;MAClBmC,QAAQ,EAAEA,QAAS;MACnBO,KAAK,EAAEK,iBAAkB;MACzB4B,gBAAgB,EAAEJ,oBAAqB;MACvCK,cAAc,EAAGC,KAAK,IAAKA,KAAK,KAAK,WAAW,IAAIZ,kBAAkB,CAAC;IAAE,CAC1E,CAAC;EAEN;EAEA,MAAM;IAAEa;EAAO,CAAC,GAAG,IAAAC,0BAAoB,EAAC,CAAC;EAEzC,MAAMC,gCAAgC,GAAGA,CAAA,KAAM;IAC7C,IAAAd,yBAAc,EAAC,6DAA6D,EAAArD,aAAA,CAAAA,aAAA,KACvEiD,eAAe;MAClBK,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAE,gBAAgB;MAC1BC,QAAQ,EAAE,MAAM;MAChBC,QAAQ,EAAE;IAAW,EACtB,CAAC;EACJ,CAAC;EAED,oBACE,IAAAzE,WAAA,CAAA6E,GAAA,EAACzF,QAAA,CAAAgG,KAAK;IAACC,OAAO,EAAC,OAAO;IAAC,aAAU,KAAK;IAACC,IAAI,EAAEC,aAAO;IAACC,SAAS,EAAC,wBAAwB;IAAC,eAAY,mCAAmC;IAAAC,QAAA,eACrI,IAAAzF,WAAA,CAAA0F,IAAA;MAAKF,SAAS,EAAC,KAAK;MAAAC,QAAA,gBAClB,IAAAzF,WAAA,CAAA0F,IAAA;QAAKF,SAAS,EAAC,KAAK;QAAAC,QAAA,gBAClB,IAAAzF,WAAA,CAAA6E,GAAA;UAAI,cAAW,GAAG;UAAAY,QAAA,eAChB,IAAAzF,WAAA,CAAA6E,GAAA;YAAAY,QAAA,EAAOlD,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,yBAAyB,CAAC;UAAC,CAAO;QAAC,CACpE,CAAC,EACJ7B,sBAAsB,gBACrB,IAAA/D,WAAA,CAAA0F,IAAA;UAAKF,SAAS,EAAC,oBAAoB;UAAC,eAAY,8BAA8B;UAAAC,QAAA,GAC3ElD,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,0CAA0C,CAAC,CAAC,eACzE,IAAA5F,WAAA,CAAA0F,IAAA,EAACtG,QAAA,CAAAyG,SAAS;YACRC,WAAW,EAAElD,YAAa;YAC1BmD,OAAO,EAAEZ,gCAAgC,CAAClB,eAAe,CAAE;YAC3D+B,MAAM,EAAC,QAAQ;YACf,eAAY,mCAAmC;YAAAP,QAAA,GAE9ClD,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,iCAAiC,CAAC,CAAC,eAChE,IAAA5F,WAAA,CAAA6E,GAAA;cAAAY,QAAA,EACGlD,IAAI,CAACoD,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,IAAAnG,WAAA,CAAA6E,GAAA;UAAKW,SAAS,EAAC,oBAAoB;UAAAC,QAAA,EAChClD,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,2BAA2B,CAAC;QAAC,CACvD,CACN,eAED,IAAA5F,WAAA,CAAA0F,IAAA;UAAKF,SAAS,EAAE,IAAAY,mBAAU,EAAC,wBAAwB,EAAE;YAAE,WAAW,EAAEhD;UAAwC,CAAC,CAAE;UAAAqC,QAAA,gBAC7G,IAAAzF,WAAA,CAAA6E,GAAA;YAAKwB,KAAK,EAAE;cAAEC,KAAK,EAAE;YAAO,CAAE;YAACd,SAAS,EAAC,WAAW;YAAAC,QAAA,eAClD,IAAAzF,WAAA,CAAA6E,GAAA;cACE0B,GAAG,EAAEhE,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,+BAA+B,CAAC,CAAE;cACnEY,GAAG,EAAEC,+BAAkB;cACvBjB,SAAS,EAAC,mCAAmC;cAC7Ca,KAAK,EAAE;gBAAEK,MAAM,EAAE,OAAO;gBAAEpD,KAAK,EAAE;cAAQ;YAAE,CAC5C;UAAC,CACC,CAAC,eAEN,IAAAtD,WAAA,CAAA0F,IAAA;YAAKF,SAAS,EAAC,gBAAgB;YAAAC,QAAA,gBAC7B,IAAAzF,WAAA,CAAA6E,GAAA;cAAKW,SAAS,EAAC,MAAM;cAAAC,QAAA,EAClBlD,IAAI,CAACoD,aAAa,CAACC,iBAAQ,CAAC,8BAA8B,CAAC;YAAC,CAC1D,CAAC,eACN,IAAA5F,WAAA,CAAA0F,IAAA;cAAIF,SAAS,EAAC,iBAAiB;cAAAC,QAAA,gBAC7B,IAAAzF,WAAA,CAAA6E,GAAA,EAACjF,cAAA,CAAA+G,kBAAkB,IAAE,CAAC,eACtB,IAAA3G,WAAA,CAAA6E,GAAA,EAACjF,cAAA,CAAAgH,kBAAkB,IAAE,CAAC,eACtB,IAAA5G,WAAA,CAAA6E,GAAA,EAACjF,cAAA,CAAAiH,gBAAgB,IAAE,CAAC,eACpB,IAAA7G,WAAA,CAAA6E,GAAA,EAACjF,cAAA,CAAAkH,oBAAoB,IAAE,CAAC;YAAA,CACtB,CAAC;UAAA,CACF,CAAC;QAAA,CACH,CAAC;MAAA,CACH,CAAC,EAEL/C,sBAAsB,GACnB,IAAI,gBAEJ,IAAA/D,WAAA,CAAA6E,GAAA;QACEW,SAAS,EACP,IAAAY,mBAAU,EAAC,4EAA4E,EAAE;UACvF,kBAAkB,EAAE,CAAChD,uCAAuC;UAAE,UAAU,EAAEA;QAC5E,CAAC,CACF;QAAAqC,QAAA,eAED,IAAAzF,WAAA,CAAA6E,GAAA,EAACpF,cAAA,CAAAsH,aAAa;UACZlE,KAAK,EAAEA,KAAM;UACbkD,OAAO,EAAEA,CAAA,KAAM3B,kBAAkB,CAACH,eAAe,EAAEgB,MAAM,CAAE;UAC3DlC,YAAY,EAAEA,YAAa;UAC3BsD,KAAK,EAAE;YAAEW,UAAU,EAAEtD,sBAAsB,GAAG,QAAQ,GAAG;UAAK,CAAE;UAChE,eAAY;QAAgB,CAC7B;MAAC,CACC,CACN;IAAA,CACA;EAAC,CACD,CAAC;AAEZ,CAAC;AACDtB,WAAW,CAAC6E,SAAS,GAAG;EACtB3E,QAAQ,EAAE4E,kBAAS,CAACC,MAAM,CAACC;AAC7B,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAnH,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('Subscribe Clicked'); // on the click, before checkout\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":[]}
@@ -36,7 +36,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
36
36
  formatMessage
37
37
  } = (0, _i18n.useIntl)();
38
38
  const offer = (0, _useSubscriptionOffer.default)(courseId);
39
- if (!offer || !offer.canPurchase && !offer.canSubscribe && !offer.canUpgradeInPlace) {
39
+ if (!offer?.hasUpsell) {
40
40
  return null;
41
41
  }
42
42
  const {
@@ -1 +1 @@
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":"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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","hasUpsell","coursePrice","subscribePrice","included","jsx","Icon","src","CheckCircle","screenReaderText","messages","includedAlt","notIncluded","CloseSmall","notIncludedAlt","showSubscribeColumn","canSubscribe","showBuyColumn","canPurchase","showTable","canUpgradeInPlace","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?.hasUpsell) {\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":"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","ignoreList":[]}
@@ -11,6 +11,7 @@ var _logging = require("@edx/frontend-platform/logging");
11
11
  var _paragon = require("@openedx/paragon");
12
12
  var _lms_api = require("../data/lms_api");
13
13
  var _messages = _interopRequireDefault(require("../upgrade-notification/messages"));
14
+ var _reloadWhenUpgraded = _interopRequireDefault(require("./reloadWhenUpgraded"));
14
15
  var _useSubscriptionOffer = _interopRequireDefault(require("./useSubscriptionOffer"));
15
16
  var _messages2 = _interopRequireDefault(require("./messages"));
16
17
  var _jsxRuntime = require("react/jsx-runtime");
@@ -62,6 +63,13 @@ const SubscriptionUpsell = _ref => {
62
63
  const setUpgradeFor = (id, state) => setUpgrades(prev => _objectSpread(_objectSpread({}, prev), {}, {
63
64
  [id]: state
64
65
  }));
66
+ // Cancels the reload poll when this component unmounts or shows another course.
67
+ const pollSignal = (0, _react.useRef)(null);
68
+ (0, _react.useEffect)(() => {
69
+ const controller = new AbortController();
70
+ pollSignal.current = controller.signal;
71
+ return () => controller.abort();
72
+ }, [courseId]);
65
73
  if (!offer) {
66
74
  return null;
67
75
  }
@@ -72,6 +80,9 @@ const SubscriptionUpsell = _ref => {
72
80
  } = offer;
73
81
  const handleUpgrade = async () => {
74
82
  const requestedCourseId = courseId;
83
+ const signal = pollSignal.current;
84
+ // Read before the request, so moving to another unit while it is pending also rules out the reload.
85
+ const startPath = global.location.pathname;
75
86
  if (inFlight.current.has(requestedCourseId)) {
76
87
  return;
77
88
  }
@@ -100,7 +111,10 @@ const SubscriptionUpsell = _ref => {
100
111
  safeCall(onUpgradeEvent, 'failed', error);
101
112
  } else {
102
113
  safeCall(onUpgradeEvent, 'succeeded');
103
- safeCall(onUpgraded, result);
114
+ safeCall(onUpgraded || (() => (0, _reloadWhenUpgraded.default)(requestedCourseId, {
115
+ signal,
116
+ startPath
117
+ })), result);
104
118
  }
105
119
  };
106
120
  if (offer.canUpgradeInPlace) {
@@ -137,7 +151,7 @@ const SubscriptionUpsell = _ref => {
137
151
  })]
138
152
  });
139
153
  }
140
- if (!canPurchase && !offer.canSubscribe && !offer.showNotIncluded) {
154
+ if (!offer.hasUpsell) {
141
155
  return null;
142
156
  }
143
157
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -182,6 +196,7 @@ SubscriptionUpsell.propTypes = {
182
196
  onSubscribeClick: _propTypes.default.func,
183
197
  onPurchaseClick: _propTypes.default.func,
184
198
  onUpgradeEvent: _propTypes.default.func,
199
+ // Called after an accepted upgrade. Without it, the page reloads once the LMS has upgraded the enrollment.
185
200
  onUpgraded: _propTypes.default.func,
186
201
  className: _propTypes.default.string
187
202
  };
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"file":"SubscriptionUpsell.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_i18n","_logging","_paragon","_lms_api","_messages","_reloadWhenUpgraded","_useSubscriptionOffer","_messages2","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UPGRADE_STATE","exports","IDLE","LOADING","PENDING","NOT_ACTIVE","FAILED","safeCall","fn","_len","args","Array","_key","Promise","resolve","catch","logError","error","SubscriptionUpsell","_ref","courseId","onSubscribeClick","onPurchaseClick","onUpgradeEvent","onUpgraded","className","formatMessage","useIntl","offer","useSubscriptionOffer","upgrades","setUpgrades","useState","inFlight","useRef","Set","upgradeState","setUpgradeFor","id","state","prev","pollSignal","useEffect","controller","AbortController","current","signal","abort","purchaseUrl","canPurchase","coursePrice","handleUpgrade","requestedCourseId","startPath","global","location","pathname","add","nextState","result","upgradeEnrollmentWithSubscription","success","SubscriptionUpgradeError","code","status","delete","reloadWhenUpgraded","canUpgradeInPlace","jsx","role","children","messages","upgradePending","jsxs","upgradeNotActive","subscribeUrl","Fragment","Hyperlink","destination","reactivateSubscription","upgradeFailed","Button","variant","block","onClick","disabled","upgrading","upgradeNow","hasUpsell","showNotIncluded","notIncluded","as","href","canSubscribe","purchase","price","purchaseNoPrice","subscribe","purchaseCode","upgradeNotificationMessages","discountCodeMessage","propTypes","PropTypes","string","isRequired","func","defaultProps","undefined","_default"],"sources":["../../src/subscription-upsell/SubscriptionUpsell.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { logError } from '@edx/frontend-platform/logging';\nimport { Button, Hyperlink } from '@openedx/paragon';\n\nimport { SubscriptionUpgradeError, upgradeEnrollmentWithSubscription } from '../data/lms_api';\nimport upgradeNotificationMessages from '../upgrade-notification/messages';\nimport reloadWhenUpgraded from './reloadWhenUpgraded';\nimport useSubscriptionOffer from './useSubscriptionOffer';\nimport messages from './messages';\n\nexport const UPGRADE_STATE = {\n IDLE: 'idle',\n LOADING: 'loading',\n PENDING: 'pending',\n NOT_ACTIVE: 'not_active',\n FAILED: 'failed',\n};\n\n// Host callbacks (analytics, refresh) must never change the outcome of the upgrade request.\nconst safeCall = (fn, ...args) => {\n try {\n Promise.resolve(fn?.(...args)).catch(logError);\n } catch (error) {\n logError(error);\n }\n};\n\n/** Subscribe and Purchase, Purchase only, Upgrade now for subscribers, or the \"not included\" note. */\nconst SubscriptionUpsell = ({\n courseId,\n onSubscribeClick,\n onPurchaseClick,\n onUpgradeEvent,\n onUpgraded,\n className,\n}) => {\n const { formatMessage } = useIntl();\n const offer = useSubscriptionOffer(courseId);\n // Per course, so a course change reads as idle and a late response cannot touch another course.\n const [upgrades, setUpgrades] = useState({});\n const inFlight = useRef(new Set());\n const upgradeState = upgrades[courseId] || UPGRADE_STATE.IDLE;\n const setUpgradeFor = (id, state) => setUpgrades((prev) => ({ ...prev, [id]: state }));\n // Cancels the reload poll when this component unmounts or shows another course.\n const pollSignal = useRef(null);\n useEffect(() => {\n const controller = new AbortController();\n pollSignal.current = controller.signal;\n return () => controller.abort();\n }, [courseId]);\n\n if (!offer) {\n return null;\n }\n\n const { purchaseUrl, canPurchase, coursePrice } = offer;\n\n const handleUpgrade = async () => {\n const requestedCourseId = courseId;\n const signal = pollSignal.current;\n // Read before the request, so moving to another unit while it is pending also rules out the reload.\n const startPath = global.location.pathname;\n if (inFlight.current.has(requestedCourseId)) {\n return;\n }\n inFlight.current.add(requestedCourseId);\n setUpgradeFor(requestedCourseId, UPGRADE_STATE.LOADING);\n safeCall(onUpgradeEvent, 'started');\n let nextState;\n let result;\n let error;\n try {\n result = await upgradeEnrollmentWithSubscription(requestedCourseId);\n if (result?.success !== true) {\n throw new SubscriptionUpgradeError('Upgrade was not accepted', { code: result?.code, status: result?.status });\n }\n nextState = UPGRADE_STATE.PENDING;\n } catch (e) {\n error = e;\n nextState = e.code === 'SUBSCRIPTION_NOT_ACTIVE' ? UPGRADE_STATE.NOT_ACTIVE : UPGRADE_STATE.FAILED;\n }\n inFlight.current.delete(requestedCourseId);\n setUpgradeFor(requestedCourseId, nextState);\n if (error) {\n safeCall(onUpgradeEvent, 'failed', error);\n } else {\n safeCall(onUpgradeEvent, 'succeeded');\n safeCall(onUpgraded || (() => reloadWhenUpgraded(requestedCourseId, { signal, startPath })), result);\n }\n };\n\n if (offer.canUpgradeInPlace) {\n if (upgradeState === UPGRADE_STATE.PENDING) {\n return <p className={className} role=\"status\" data-testid=\"subscription-upgrade-pending\">{formatMessage(messages.upgradePending)}</p>;\n }\n return (\n <div className={className}>\n {upgradeState === UPGRADE_STATE.NOT_ACTIVE && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-not-active\">\n {formatMessage(messages.upgradeNotActive)}\n {offer.subscribeUrl && (\n <>\n {' '}\n <Hyperlink destination={offer.subscribeUrl}>{formatMessage(messages.reactivateSubscription)}</Hyperlink>\n </>\n )}\n </p>\n )}\n {upgradeState === UPGRADE_STATE.FAILED && (\n <p role=\"alert\" data-testid=\"subscription-upgrade-failed\">{formatMessage(messages.upgradeFailed)}</p>\n )}\n <Button\n variant=\"brand\"\n block\n onClick={handleUpgrade}\n disabled={upgradeState === UPGRADE_STATE.LOADING}\n data-testid=\"subscription-upgrade-now-button\"\n >\n {formatMessage(upgradeState === UPGRADE_STATE.LOADING ? messages.upgrading : messages.upgradeNow)}\n </Button>\n </div>\n );\n }\n\n if (!offer.hasUpsell) {\n return null;\n }\n\n return (\n <div className={className}>\n {offer.showNotIncluded && (\n <p data-testid=\"subscription-not-included\">{formatMessage(messages.notIncluded)}</p>\n )}\n <div className=\"d-flex\">\n {canPurchase && (\n <Button\n as=\"a\"\n href={purchaseUrl}\n variant={offer.canSubscribe ? 'outline-primary' : 'brand'}\n onClick={onPurchaseClick}\n data-testid=\"subscription-purchase-button\"\n >\n {coursePrice\n ? formatMessage(messages.purchase, { price: coursePrice })\n : formatMessage(messages.purchaseNoPrice)}\n </Button>\n )}\n {offer.canSubscribe && (\n <Button\n as=\"a\"\n href={offer.subscribeUrl}\n variant=\"brand\"\n className=\"ml-2\"\n onClick={onSubscribeClick}\n data-testid=\"subscription-subscribe-button\"\n >\n {formatMessage(messages.subscribe)}\n </Button>\n )}\n </div>\n {canPurchase && offer.purchaseCode && (\n <p className=\"mt-2 mb-0\" data-testid=\"subscription-purchase-code\">\n {formatMessage(upgradeNotificationMessages.discountCodeMessage, {\n code: <span className=\"font-weight-bold\">{offer.purchaseCode}</span>,\n })}\n </p>\n )}\n </div>\n );\n};\n\nSubscriptionUpsell.propTypes = {\n courseId: PropTypes.string.isRequired,\n onSubscribeClick: PropTypes.func,\n onPurchaseClick: PropTypes.func,\n onUpgradeEvent: PropTypes.func,\n // Called after an accepted upgrade. Without it, the page reloads once the LMS has upgraded the enrollment.\n onUpgraded: PropTypes.func,\n className: PropTypes.string,\n};\n\nSubscriptionUpsell.defaultProps = {\n onSubscribeClick: undefined,\n onPurchaseClick: undefined,\n onUpgradeEvent: undefined,\n onUpgraded: undefined,\n className: undefined,\n};\n\nexport default SubscriptionUpsell;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.POLL_INTERVAL_MS = exports.MAX_POLLS = void 0;
7
+ var _lms_api = require("../data/lms_api");
8
+ const POLL_INTERVAL_MS = exports.POLL_INTERVAL_MS = 3000;
9
+ const MAX_POLLS = exports.MAX_POLLS = 10;
10
+ const wait = ms => new Promise(resolve => {
11
+ setTimeout(resolve, ms);
12
+ });
13
+
14
+ // One poll per course, however many placements on the page started one: the enrollment API allows
15
+ // 40 requests a minute per learner, and a poll makes 20.
16
+ const activePolls = new Map();
17
+ const pollAndReload = async (courseId, callers) => {
18
+ // Stop once no caller still wants it: each cancels (unmount, course change) or the learner has left
19
+ // the page it started from, so a reload never throws away what they are doing there. The next page
20
+ // load shows the upgrade.
21
+ const isStillWanted = () => callers.some(_ref => {
22
+ let {
23
+ signal,
24
+ startPath
25
+ } = _ref;
26
+ return !signal?.aborted && global.location.pathname === startPath;
27
+ });
28
+ for (let poll = 0; poll < MAX_POLLS; poll += 1) {
29
+ await wait(POLL_INTERVAL_MS); // eslint-disable-line no-await-in-loop
30
+ if (!isStillWanted()) {
31
+ return false;
32
+ }
33
+ const mode = await (0, _lms_api.fetchEnrollmentMode)(courseId); // eslint-disable-line no-await-in-loop
34
+ if (mode === 'verified') {
35
+ if (!isStillWanted()) {
36
+ return false;
37
+ }
38
+ global.location.reload();
39
+ return true;
40
+ }
41
+ }
42
+ return false;
43
+ };
44
+
45
+ /**
46
+ * Upgrade now answers PENDING and the LMS upgrades the enrollment later, so a reload right away would
47
+ * still show the audit page. This polls the enrollment and reloads once it is verified. After MAX_POLLS
48
+ * it gives up and the pending message stays. Resolves true when it reloaded. startPath is the page the
49
+ * learner clicked on, read before the upgrade request; it defaults to the current page.
50
+ */
51
+ const reloadWhenUpgraded = function (courseId) {
52
+ let {
53
+ signal,
54
+ startPath = global.location.pathname
55
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
56
+ if (!activePolls.has(courseId)) {
57
+ const callers = [];
58
+ activePolls.set(courseId, {
59
+ callers,
60
+ done: pollAndReload(courseId, callers).finally(() => activePolls.delete(courseId))
61
+ });
62
+ }
63
+ const poll = activePolls.get(courseId);
64
+ poll.callers.push({
65
+ signal,
66
+ startPath
67
+ });
68
+ return poll.done;
69
+ };
70
+ var _default = exports.default = reloadWhenUpgraded;
71
+ //# sourceMappingURL=reloadWhenUpgraded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reloadWhenUpgraded.js","names":["_lms_api","require","POLL_INTERVAL_MS","exports","MAX_POLLS","wait","ms","Promise","resolve","setTimeout","activePolls","Map","pollAndReload","courseId","callers","isStillWanted","some","_ref","signal","startPath","aborted","global","location","pathname","poll","mode","fetchEnrollmentMode","reload","reloadWhenUpgraded","arguments","length","undefined","has","set","done","finally","delete","get","push","_default","default"],"sources":["../../src/subscription-upsell/reloadWhenUpgraded.js"],"sourcesContent":["import { fetchEnrollmentMode } from '../data/lms_api';\n\nexport const POLL_INTERVAL_MS = 3000;\nexport const MAX_POLLS = 10;\n\nconst wait = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); });\n\n// One poll per course, however many placements on the page started one: the enrollment API allows\n// 40 requests a minute per learner, and a poll makes 20.\nconst activePolls = new Map();\n\nconst pollAndReload = async (courseId, callers) => {\n // Stop once no caller still wants it: each cancels (unmount, course change) or the learner has left\n // the page it started from, so a reload never throws away what they are doing there. The next page\n // load shows the upgrade.\n const isStillWanted = () => callers.some(\n ({ signal, startPath }) => !signal?.aborted && global.location.pathname === startPath,\n );\n\n for (let poll = 0; poll < MAX_POLLS; poll += 1) {\n await wait(POLL_INTERVAL_MS); // eslint-disable-line no-await-in-loop\n if (!isStillWanted()) {\n return false;\n }\n const mode = await fetchEnrollmentMode(courseId); // eslint-disable-line no-await-in-loop\n if (mode === 'verified') {\n if (!isStillWanted()) {\n return false;\n }\n global.location.reload();\n return true;\n }\n }\n return false;\n};\n\n/**\n * Upgrade now answers PENDING and the LMS upgrades the enrollment later, so a reload right away would\n * still show the audit page. This polls the enrollment and reloads once it is verified. After MAX_POLLS\n * it gives up and the pending message stays. Resolves true when it reloaded. startPath is the page the\n * learner clicked on, read before the upgrade request; it defaults to the current page.\n */\nconst reloadWhenUpgraded = (courseId, { signal, startPath = global.location.pathname } = {}) => {\n if (!activePolls.has(courseId)) {\n const callers = [];\n activePolls.set(courseId, {\n callers,\n done: pollAndReload(courseId, callers).finally(() => activePolls.delete(courseId)),\n });\n }\n const poll = activePolls.get(courseId);\n poll.callers.push({ signal, startPath });\n return poll.done;\n};\n\nexport default reloadWhenUpgraded;\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,IAAI;AAC7B,MAAME,SAAS,GAAAD,OAAA,CAAAC,SAAA,GAAG,EAAE;AAE3B,MAAMC,IAAI,GAAIC,EAAE,IAAK,IAAIC,OAAO,CAAEC,OAAO,IAAK;EAAEC,UAAU,CAACD,OAAO,EAAEF,EAAE,CAAC;AAAE,CAAC,CAAC;;AAE3E;AACA;AACA,MAAMI,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAE7B,MAAMC,aAAa,GAAG,MAAAA,CAAOC,QAAQ,EAAEC,OAAO,KAAK;EACjD;EACA;EACA;EACA,MAAMC,aAAa,GAAGA,CAAA,KAAMD,OAAO,CAACE,IAAI,CACtCC,IAAA;IAAA,IAAC;MAAEC,MAAM;MAAEC;IAAU,CAAC,GAAAF,IAAA;IAAA,OAAK,CAACC,MAAM,EAAEE,OAAO,IAAIC,MAAM,CAACC,QAAQ,CAACC,QAAQ,KAAKJ,SAAS;EAAA,CACvF,CAAC;EAED,KAAK,IAAIK,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGpB,SAAS,EAAEoB,IAAI,IAAI,CAAC,EAAE;IAC9C,MAAMnB,IAAI,CAACH,gBAAgB,CAAC,CAAC,CAAC;IAC9B,IAAI,CAACa,aAAa,CAAC,CAAC,EAAE;MACpB,OAAO,KAAK;IACd;IACA,MAAMU,IAAI,GAAG,MAAM,IAAAC,4BAAmB,EAACb,QAAQ,CAAC,CAAC,CAAC;IAClD,IAAIY,IAAI,KAAK,UAAU,EAAE;MACvB,IAAI,CAACV,aAAa,CAAC,CAAC,EAAE;QACpB,OAAO,KAAK;MACd;MACAM,MAAM,CAACC,QAAQ,CAACK,MAAM,CAAC,CAAC;MACxB,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,GAAG,SAAAA,CAACf,QAAQ,EAA4D;EAAA,IAA1D;IAAEK,MAAM;IAAEC,SAAS,GAAGE,MAAM,CAACC,QAAQ,CAACC;EAAS,CAAC,GAAAM,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACzF,IAAI,CAACnB,WAAW,CAACsB,GAAG,CAACnB,QAAQ,CAAC,EAAE;IAC9B,MAAMC,OAAO,GAAG,EAAE;IAClBJ,WAAW,CAACuB,GAAG,CAACpB,QAAQ,EAAE;MACxBC,OAAO;MACPoB,IAAI,EAAEtB,aAAa,CAACC,QAAQ,EAAEC,OAAO,CAAC,CAACqB,OAAO,CAAC,MAAMzB,WAAW,CAAC0B,MAAM,CAACvB,QAAQ,CAAC;IACnF,CAAC,CAAC;EACJ;EACA,MAAMW,IAAI,GAAGd,WAAW,CAAC2B,GAAG,CAACxB,QAAQ,CAAC;EACtCW,IAAI,CAACV,OAAO,CAACwB,IAAI,CAAC;IAAEpB,MAAM;IAAEC;EAAU,CAAC,CAAC;EACxC,OAAOK,IAAI,CAACU,IAAI;AAClB,CAAC;AAAC,IAAAK,QAAA,GAAApC,OAAA,CAAAqC,OAAA,GAEaZ,kBAAkB","ignoreList":[]}
@@ -75,15 +75,22 @@ const useSubscriptionOffer = courseId => {
75
75
  const isSubscriber = extraOffer.isSubscriber === true;
76
76
  const purchaseUrl = purchaseOffer?.upgradeUrl || verifiedMode?.upgradeUrl || null;
77
77
  const price = formatOfferPrice(intl, extraOffer.price);
78
+ const canPurchase = !!purchaseUrl;
79
+ const canSubscribe = inCatalog && !isSubscriber && !!extraOffer.subscribeUrl;
80
+ const canUpgradeInPlace = inCatalog && isSubscriber;
81
+ const showNotIncluded = !inCatalog && isSubscriber;
78
82
  return _objectSpread(_objectSpread({}, extraOffer), {}, {
79
83
  inCatalog,
80
84
  isSubscriber,
81
85
  purchaseUrl,
82
86
  hasTrial: extraOffer.freeTrialEligible === true,
83
- canPurchase: !!purchaseUrl,
84
- canSubscribe: inCatalog && !isSubscriber && !!extraOffer.subscribeUrl,
85
- canUpgradeInPlace: inCatalog && isSubscriber,
86
- showNotIncluded: !inCatalog && isSubscriber,
87
+ canPurchase,
88
+ canSubscribe,
89
+ canUpgradeInPlace,
90
+ showNotIncluded,
91
+ // Something for SubscriptionUpsell to show: a button or the "not included" note. Without it, e.g.
92
+ // unknown status and no purchase link, the placements keep today's UI.
93
+ hasUpsell: canPurchase || canSubscribe || canUpgradeInPlace || showNotIncluded,
87
94
  coursePrice: purchaseOffer ? purchaseOffer.discountedPrice : formatCoursePrice(verifiedMode),
88
95
  purchaseCode: purchaseOffer?.code || null,
89
96
  subscribePrice: price && intl.formatMessage(_messages.default.pricePerInterval, {
@@ -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","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":[]}
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","canPurchase","canSubscribe","subscribeUrl","canUpgradeInPlace","showNotIncluded","hasTrial","freeTrialEligible","hasUpsell","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 const canPurchase = !!purchaseUrl;\n const canSubscribe = inCatalog && !isSubscriber && !!extraOffer.subscribeUrl;\n const canUpgradeInPlace = inCatalog && isSubscriber;\n const showNotIncluded = !inCatalog && isSubscriber;\n return {\n ...extraOffer,\n inCatalog,\n isSubscriber,\n purchaseUrl,\n hasTrial: extraOffer.freeTrialEligible === true,\n canPurchase,\n canSubscribe,\n canUpgradeInPlace,\n showNotIncluded,\n // Something for SubscriptionUpsell to show: a button or the \"not included\" note. Without it, e.g.\n // unknown status and no purchase link, the placements keep today's UI.\n hasUpsell: canPurchase || canSubscribe || canUpgradeInPlace || showNotIncluded,\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":[]}
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _paragon = require("@openedx/paragon");
10
+ var _frontendPlatform = require("@edx/frontend-platform");
10
11
  var _react2 = require("@edx/frontend-platform/react");
11
12
  var _modelStore = require("@src/generic/model-store");
12
13
  var _hooks = require("@src/data/hooks");
@@ -33,6 +34,7 @@ const NextUnitButton = _ref => {
33
34
  buttonStyle,
34
35
  isAtTop
35
36
  } = _ref;
37
+ const disableRedVentures = String((0, _frontendPlatform.getConfig)().DISABLE_RED_VENTURES_WIDGETS).toLowerCase() === 'true';
36
38
  const courseId = (0, _hooks.useContextId)();
37
39
  const [isOpen, open, close] = (0, _paragon.useToggle)(false);
38
40
  const {
@@ -81,7 +83,7 @@ const NextUnitButton = _ref => {
81
83
  buttonText: buttonText,
82
84
  disabled: disabled,
83
85
  isAtTop: isAtTop
84
- }), isOpen && /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.ErrorBoundary, {
86
+ }), isOpen && disableRedVentures && /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeModal.default, _objectSpread({}, modalProps)), isOpen && !disableRedVentures && /*#__PURE__*/(0, _jsxRuntime.jsx)(_react2.ErrorBoundary, {
85
87
  fallbackComponent: /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpgradeModal.default, _objectSpread({}, modalProps)),
86
88
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_dynamicExperienceSlot.default, {
87
89
  widgetName: "MonarchResolvedDynamicExperience",
@@ -1 +1 @@
1
- {"version":3,"file":"NextUnitButton.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_react2","_modelStore","_hooks","_NextButton","_hooks2","_UpgradeModal","_dynamicExperienceSlot","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NextUnitButton","_ref","disabled","buttonText","sequenceId","onClickHandler","nextLink","variant","buttonStyle","isAtTop","courseId","useContextId","isOpen","open","close","useToggle","verifiedMode","org","useModel","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","isEnabled","useIsModalEnabled","shouldShowModalOnClick","countNextClick","useInCourseUpgradeModal","handleModal","useEffect","modalProps","useMemo","jsxs","Fragment","children","jsx","ErrorBoundary","fallbackComponent","widgetName","placement","tenantId","pluginProps","defaultProps","propTypes","PropTypes","bool","isRequired","string","unitId","func","_default","exports"],"sources":["../../src/upgrade-modal/NextUnitButton.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useToggle } from '@openedx/paragon';\nimport { ErrorBoundary } from '@edx/frontend-platform/react';\n\nimport { useModel } from '@src/generic/model-store';\nimport { useContextId } from '@src/data/hooks';\nimport NextButton from '@src/courseware/course/sequence/sequence-navigation/generic/NextButton';\nimport { useInCourseUpgradeModal, useIsModalEnabled } from './hooks';\nimport UpgradeModal from './UpgradeModal';\nimport DynamicExperienceSlot from '../dynamic-experience-slot';\n\nconst NextUnitButton = ({\n disabled,\n buttonText,\n sequenceId,\n onClickHandler,\n nextLink,\n variant,\n buttonStyle,\n isAtTop,\n}) => {\n const courseId = useContextId();\n const [isOpen, open, close] = useToggle(false);\n const {\n verifiedMode,\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const isEnabled = useIsModalEnabled(courseId);\n const [shouldShowModalOnClick, countNextClick] = useInCourseUpgradeModal();\n\n const handleModal = () => {\n if (isEnabled) {\n countNextClick();\n if (shouldShowModalOnClick) {\n open();\n }\n }\n };\n\n useEffect(() => {\n handleModal();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sequenceId]);\n\n const modalProps = useMemo(() => ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n }), [\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n ]);\n\n return (\n <>\n <NextButton\n onClickHandler={onClickHandler}\n nextLink={nextLink}\n variant={variant}\n buttonStyle={buttonStyle}\n buttonText={buttonText}\n disabled={disabled}\n isAtTop={isAtTop}\n />\n\n {isOpen && (\n <ErrorBoundary fallbackComponent={<UpgradeModal {...modalProps} />}>\n <DynamicExperienceSlot\n widgetName=\"MonarchResolvedDynamicExperience\"\n placement=\"org.2u.edx.frontend.learning.upgrade.modal.v1\"\n tenantId=\"2u-edx-learning\"\n pluginProps={modalProps}\n />\n </ErrorBoundary>\n )}\n </>\n );\n};\n\nNextUnitButton.defaultProps = {\n isAtTop: false,\n};\n\nNextUnitButton.propTypes = {\n disabled: PropTypes.bool.isRequired,\n buttonText: PropTypes.string.isRequired,\n nextLink: PropTypes.string.isRequired,\n sequenceId: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n unitId: PropTypes.string.isRequired,\n onClickHandler: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n courseId: PropTypes.string.isRequired,\n variant: PropTypes.string.isRequired,\n buttonStyle: PropTypes.string.isRequired,\n isAtTop: PropTypes.bool,\n};\n\nexport default NextUnitButton;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NextUnitButton.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_frontendPlatform","_react2","_modelStore","_hooks","_NextButton","_hooks2","_UpgradeModal","_dynamicExperienceSlot","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NextUnitButton","_ref","disabled","buttonText","sequenceId","onClickHandler","nextLink","variant","buttonStyle","isAtTop","disableRedVentures","getConfig","DISABLE_RED_VENTURES_WIDGETS","toLowerCase","courseId","useContextId","isOpen","open","close","useToggle","verifiedMode","org","useModel","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","isEnabled","useIsModalEnabled","shouldShowModalOnClick","countNextClick","useInCourseUpgradeModal","handleModal","useEffect","modalProps","useMemo","jsxs","Fragment","children","jsx","ErrorBoundary","fallbackComponent","widgetName","placement","tenantId","pluginProps","defaultProps","propTypes","PropTypes","bool","isRequired","string","unitId","func","_default","exports"],"sources":["../../src/upgrade-modal/NextUnitButton.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useToggle } from '@openedx/paragon';\nimport { getConfig } from '@edx/frontend-platform';\nimport { ErrorBoundary } from '@edx/frontend-platform/react';\n\nimport { useModel } from '@src/generic/model-store';\nimport { useContextId } from '@src/data/hooks';\nimport NextButton from '@src/courseware/course/sequence/sequence-navigation/generic/NextButton';\nimport { useInCourseUpgradeModal, useIsModalEnabled } from './hooks';\nimport UpgradeModal from './UpgradeModal';\nimport DynamicExperienceSlot from '../dynamic-experience-slot';\n\nconst NextUnitButton = ({\n disabled,\n buttonText,\n sequenceId,\n onClickHandler,\n nextLink,\n variant,\n buttonStyle,\n isAtTop,\n}) => {\n const disableRedVentures = String(getConfig().DISABLE_RED_VENTURES_WIDGETS).toLowerCase() === 'true';\n const courseId = useContextId();\n const [isOpen, open, close] = useToggle(false);\n const {\n verifiedMode,\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const isEnabled = useIsModalEnabled(courseId);\n const [shouldShowModalOnClick, countNextClick] = useInCourseUpgradeModal();\n\n const handleModal = () => {\n if (isEnabled) {\n countNextClick();\n if (shouldShowModalOnClick) {\n open();\n }\n }\n };\n\n useEffect(() => {\n handleModal();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sequenceId]);\n\n const modalProps = useMemo(() => ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n }), [\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n ]);\n\n return (\n <>\n <NextButton\n onClickHandler={onClickHandler}\n nextLink={nextLink}\n variant={variant}\n buttonStyle={buttonStyle}\n buttonText={buttonText}\n disabled={disabled}\n isAtTop={isAtTop}\n />\n\n {isOpen && disableRedVentures && <UpgradeModal {...modalProps} />}\n {isOpen && !disableRedVentures && (\n <ErrorBoundary fallbackComponent={<UpgradeModal {...modalProps} />}>\n <DynamicExperienceSlot\n widgetName=\"MonarchResolvedDynamicExperience\"\n placement=\"org.2u.edx.frontend.learning.upgrade.modal.v1\"\n tenantId=\"2u-edx-learning\"\n pluginProps={modalProps}\n />\n </ErrorBoundary>\n )}\n </>\n );\n};\n\nNextUnitButton.defaultProps = {\n isAtTop: false,\n};\n\nNextUnitButton.propTypes = {\n disabled: PropTypes.bool.isRequired,\n buttonText: PropTypes.string.isRequired,\n nextLink: PropTypes.string.isRequired,\n sequenceId: PropTypes.string.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n unitId: PropTypes.string.isRequired,\n onClickHandler: PropTypes.func.isRequired,\n // eslint-disable-next-line react/no-unused-prop-types\n courseId: PropTypes.string.isRequired,\n variant: PropTypes.string.isRequired,\n buttonStyle: PropTypes.string.isRequired,\n isAtTop: PropTypes.bool,\n};\n\nexport default NextUnitButton;\n"],"mappings":"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","ignoreList":[]}
@@ -99,16 +99,16 @@ const UpgradeModal = _ref => {
99
99
  })
100
100
  });
101
101
  }
102
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_BaseModal.default, {
102
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_BaseModal.default, {
103
103
  isOpen,
104
104
  close,
105
105
  courseId,
106
106
  offer,
107
107
  callToActionButton,
108
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.UpsellTable, {
108
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.UpsellTable, {
109
109
  isFBE,
110
110
  learningAssistantEnabled
111
- }), ";"]
111
+ })
112
112
  });
113
113
  };
114
114
  UpgradeModal.defaultProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_i18n","_paragon","_upgradeButton","_generic","_BaseModal","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpgradeModal","_ref","isOpen","close","verifiedMode","org","courseId","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","upsellPageName","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","conversion","useCohesion","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","intl","useIntl","dateNow","Date","now","upgradeDeadlineDate","upgradeDeadline","pastDeadline","isFBE","contentTypeGatingEnabled","callToActionButton","jsx","UpgradeButton","onClick","block","Button","className","href","children","formatMessage","id","defaultMessage","description","jsxs","UpsellTable","defaultProps","propTypes","PropTypes","shape","price","number","isRequired","currencySymbol","string","upgradeUrl","code","bool","func","_default","exports"],"sources":["../../src/upgrade-modal/UpgradeModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { UpsellTable } from '../generic';\nimport BaseModal from './BaseModal';\nimport { useCohesion } from '../cohesion';\n\nconst UpgradeModal = ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n}) => {\n const upsellPageName = 'course_sequence_modal';\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n const promotionEventProperties = {\n creative: 'marketmodalupsell',\n name: 'In-Course Verification Prompt',\n position: 'marketing-modal-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n const { conversion } = useCohesion(courseId);\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketmodalupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketingmodal.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'marketing-modal-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_modal.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_modal',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const intl = useIntl();\n const dateNow = Date.now();\n const upgradeDeadlineDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n const pastDeadline = accessExpiration ? new Date(dateNow) > upgradeDeadlineDate : false;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n let callToActionButton = (\n <UpgradeButton\n data-testid=\"upgrade-button\"\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n\n if (pastDeadline) {\n callToActionButton = (\n <Button\n className=\"w-100\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n >\n {intl.formatMessage(\n {\n id: 'learning.upgrade-modal.upgrade-button.label',\n defaultMessage: 'View course details',\n description: 'Label for upgrade button',\n },\n )}\n </Button>\n );\n }\n\n return (\n <BaseModal\n {...{\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n }}\n >\n <UpsellTable {...{ isFBE, learningAssistantEnabled }} />;\n </BaseModal>\n );\n};\n\nUpgradeModal.defaultProps = {\n verifiedMode: {},\n offer: null,\n accessExpiration: null,\n datesBannerInfo: null,\n};\nUpgradeModal.propTypes = {\n verifiedMode: PropTypes.shape({\n price: PropTypes.number.isRequired,\n currencySymbol: PropTypes.string.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n offer: PropTypes.shape({\n code: PropTypes.string,\n }),\n accessExpiration: PropTypes.shape({\n upgradeDeadline: PropTypes.string,\n }),\n datesBannerInfo: PropTypes.shape({\n contentTypeGatingEnabled: PropTypes.bool,\n }),\n marketingUrl: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n learningAssistantEnabled: PropTypes.bool.isRequired,\n};\n\nexport default UpgradeModal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"UpgradeModal.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_i18n","_paragon","_upgradeButton","_generic","_BaseModal","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpgradeModal","_ref","isOpen","close","verifiedMode","org","courseId","offer","marketingUrl","accessExpiration","datesBannerInfo","learningAssistantEnabled","upsellPageName","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","conversion","useCohesion","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","intl","useIntl","dateNow","Date","now","upgradeDeadlineDate","upgradeDeadline","pastDeadline","isFBE","contentTypeGatingEnabled","callToActionButton","jsx","UpgradeButton","onClick","block","Button","className","href","children","formatMessage","id","defaultMessage","description","UpsellTable","defaultProps","propTypes","PropTypes","shape","price","number","isRequired","currencySymbol","string","upgradeUrl","code","bool","func","_default","exports"],"sources":["../../src/upgrade-modal/UpgradeModal.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { Button } from '@openedx/paragon';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { UpsellTable } from '../generic';\nimport BaseModal from './BaseModal';\nimport { useCohesion } from '../cohesion';\n\nconst UpgradeModal = ({\n isOpen,\n close,\n verifiedMode,\n org,\n courseId,\n offer,\n marketingUrl,\n accessExpiration,\n datesBannerInfo,\n learningAssistantEnabled,\n}) => {\n const upsellPageName = 'course_sequence_modal';\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n const promotionEventProperties = {\n creative: 'marketmodalupsell',\n name: 'In-Course Verification Prompt',\n position: 'marketing-modal-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n const { conversion } = useCohesion(courseId);\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketmodalupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.marketingmodal.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'marketing-modal-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_modal.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_modal',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const intl = useIntl();\n const dateNow = Date.now();\n const upgradeDeadlineDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n const pastDeadline = accessExpiration ? new Date(dateNow) > upgradeDeadlineDate : false;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n let callToActionButton = (\n <UpgradeButton\n data-testid=\"upgrade-button\"\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n\n if (pastDeadline) {\n callToActionButton = (\n <Button\n className=\"w-100\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n >\n {intl.formatMessage(\n {\n id: 'learning.upgrade-modal.upgrade-button.label',\n defaultMessage: 'View course details',\n description: 'Label for upgrade button',\n },\n )}\n </Button>\n );\n }\n\n return (\n <BaseModal\n {...{\n isOpen,\n close,\n courseId,\n offer,\n callToActionButton,\n }}\n >\n <UpsellTable {...{ isFBE, learningAssistantEnabled }} />\n </BaseModal>\n );\n};\n\nUpgradeModal.defaultProps = {\n verifiedMode: {},\n offer: null,\n accessExpiration: null,\n datesBannerInfo: null,\n};\nUpgradeModal.propTypes = {\n verifiedMode: PropTypes.shape({\n price: PropTypes.number.isRequired,\n currencySymbol: PropTypes.string.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n offer: PropTypes.shape({\n code: PropTypes.string,\n }),\n accessExpiration: PropTypes.shape({\n upgradeDeadline: PropTypes.string,\n }),\n datesBannerInfo: PropTypes.shape({\n contentTypeGatingEnabled: PropTypes.bool,\n }),\n marketingUrl: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n close: PropTypes.func.isRequired,\n isOpen: PropTypes.bool.isRequired,\n learningAssistantEnabled: PropTypes.bool.isRequired,\n};\n\nexport default UpgradeModal;\n"],"mappings":"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","ignoreList":[]}
@@ -71,8 +71,9 @@ const UpgradeNotification = _ref => {
71
71
  const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;
72
72
  const shouldDisplayBorder = pluginLocationId.includes('outline');
73
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;
74
+ // Without an offer or anything in it to show, past the upgrade deadline, and on the Progress page,
75
+ // today's card renders.
76
+ const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer?.hasUpsell;
76
77
  const upsellPageName = (0, _utils.default)({
77
78
  id: pluginLocationId
78
79
  });
@@ -127,7 +128,7 @@ const UpgradeNotification = _ref => {
127
128
  linkType: 'button',
128
129
  pageName: upsellPageName
129
130
  }));
130
- conversion('Subscribed');
131
+ conversion('Subscribe Clicked'); // on the click, before checkout
131
132
  };
132
133
  if (showSubscriptionCard) {
133
134
  // the card handles every offer state itself
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_upgradeButton","_modelStore","_data","_subscriptionUpsell","_certificatePreview","_generic","_utils","_messages","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","SUBSCRIPTION_CARD_PLACEMENTS","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","isSubscriptionCardPlacement","some","placement","showSubscriptionCard","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":[]}
1
+ {"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_upgradeButton","_modelStore","_data","_subscriptionUpsell","_certificatePreview","_generic","_utils","_messages","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","SUBSCRIPTION_CARD_PLACEMENTS","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","subscriptionOffer","useSubscriptionOffer","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","isSubscriptionCardPlacement","some","placement","showSubscriptionCard","hasUpsell","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","variant","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","logSubscribeClick","banner","hoursToAccessExpiration","Math","floor","jsx","ExpirationCountdown","hoursToExpiration","type","AccessExpirationDateBanner","SubscriptionUpgradeCard","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","stage","onClose","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerCode","upsellMessage","UpsellTable","hoursToDiscountExpiration","expirationDate","messages","firstTimeLearnerDiscountHeader","percentage","accessExpirationHeader","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","onClick","href","block","children","pastExpirationCallToActionLabel","UpgradeButton","className","discountCodeMessage","code","classNames","jsxs","pursueCertificateMessage","IconButton","src","Close","size","iconAs","Icon","alt","closeAlt","propTypes","PropTypes","string","isRequired","func","defaultProps","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { useModel } from '@src/generic/model-store';\n\nimport { PAGE_NAMES } from '../data';\nimport { SubscriptionUpgradeCard, useSubscriptionOffer } from '../subscription-upsell';\nimport CertificatePreview from './certificate-preview';\nimport {\n ExpirationCountdown,\n AccessExpirationDateBanner,\n PastExpirationDateBanner,\n PastExpirationCardContent,\n UpsellFBESoonCardContent,\n UpsellTable,\n} from '../generic';\nimport getUpsellPageName from './utils';\nimport messages from './messages';\nimport { useCohesion } from '../cohesion';\n\n// Placements that show the subscription card: course home and the courseware sidebar\n// (tray and widget). The Progress page keeps the current card.\nconst SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];\n\nconst UpgradeNotification = ({\n id,\n courseId,\n model,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n const { formatMessage } = useIntl();\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n marketingUrl,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n datesBannerInfo,\n offer,\n timeOffsetMillis,\n } = useModel(model, courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n // Server time, so this agrees with the countdown and the FBE branches below.\n const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\n const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(\n (placement) => pluginLocationId.includes(placement),\n );\n // Without an offer or anything in it to show, past the upgrade deadline, and on the Progress page,\n // today's card renders.\n const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer?.hasUpsell;\n const upsellPageName = getUpsellPageName({ id: pluginLocationId });\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n // Tags the placements that switched to the subscription card, so reports can split them from today's card.\n ...(showSubscriptionCard && { variant: 'subscription' }),\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logUpgradeClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const logSubscribeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'subscription',\n linkName: `${upsellPageName}_subscribe`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n conversion('Subscribe Clicked'); // on the click, before checkout\n };\n\n if (showSubscriptionCard) { // the card handles every offer state itself\n let banner;\n if (isFBE) { // content-gated learners keep the access expiration warning and its sidebar dot stages\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n banner = hoursToAccessExpiration < (7 * 24) ? (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n ) : (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n return (\n <SubscriptionUpgradeCard\n courseId={courseId}\n withBorder={shouldDisplayBorder}\n banner={banner}\n onSubscribeClick={logSubscribeClick}\n onPurchaseClick={logUpgradeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && logUpgradeClick()}\n onClose={toggleSidebar}\n />\n );\n }\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let callToActionButton;\n let offerCode;\n\n let upsellMessage = <UpsellTable {...{ isFBE, learningAssistantEnabled }} />;\n\n if (isFBE) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = formatMessage(\n messages.firstTimeLearnerDiscountHeader,\n { percentage: (offer.percentage) },\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationHeader);\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationUrgentHeader);\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n if (upsellPageName !== PAGE_NAMES.PROGRESS) {\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n }\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationPastHeader);\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n {formatMessage(messages.pastExpirationCallToActionLabel)}\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logUpgradeClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n {formatMessage(\n messages.discountCodeMessage,\n {\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n },\n )}\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification small', { 'pgn__card pgn__card-light card mb-4 rounded': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n 'm-4': !toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {formatMessage(messages.pursueCertificateMessage)}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={formatMessage(messages.closeAlt)}\n />\n </div>\n )}\n </h2>\n <CertificatePreview courseId={courseId} />\n <h3 className=\"ml-4\">\n {upgradeNotificationHeaderText}\n </h3>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button m-4\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n model: PropTypes.string,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n model: 'outline',\n};\n\nexport default UpgradeNotification;\n"],"mappings":"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","ignoreList":[]}
@@ -30,6 +30,8 @@ const UpgradeToCompleteAlert = () => {
30
30
  org
31
31
  } = (0, _modelStore.useModel)('courseHomeMeta', courseId);
32
32
  const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
33
+ // Without anything in the offer to show, the banner keeps today's Upgrade now button.
34
+ const showSubscriptionUpsell = !!subscriptionOffer?.hasUpsell;
33
35
  const {
34
36
  conversion
35
37
  } = (0, _cohesion.useCohesion)(courseId);
@@ -48,16 +50,16 @@ const UpgradeToCompleteAlert = () => {
48
50
  className: "w-100 m-0",
49
51
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Col, {
50
52
  xs: 12,
51
- md: subscriptionOffer ? 8 : 9,
53
+ md: showSubscriptionUpsell ? 8 : 9,
52
54
  className: "small p-0 pr-md-2",
53
55
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert.Heading, {
54
56
  children: intl.formatMessage(_messages.default.upgradeToCompleteHeader)
55
57
  }), intl.formatMessage(_messages.default.upgradeToCompleteBody)]
56
58
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Col, {
57
59
  xs: 12,
58
- md: subscriptionOffer ? 4 : 3,
60
+ md: showSubscriptionUpsell ? 4 : 3,
59
61
  className: "align-self-center text-right mt-3 mt-md-0 p-0",
60
- children: subscriptionOffer ?
62
+ children: showSubscriptionUpsell ?
61
63
  /*#__PURE__*/
62
64
  // No Figma for this banner yet: same banner, with the LP-1422 buttons in place of Upgrade now.
63
65
  (0, _jsxRuntime.jsx)("div", {
@@ -66,7 +68,7 @@ const UpgradeToCompleteAlert = () => {
66
68
  courseId: courseId,
67
69
  onSubscribeClick: () => {
68
70
  (0, _track.logUpgradeLinkClick)(org, courseId, 'dates_subscribe');
69
- conversion('Subscribed');
71
+ conversion('Subscribe Clicked');
70
72
  },
71
73
  onPurchaseClick: () => (0, _track.logUpgradeLinkClick)(org, courseId),
72
74
  onUpgradeEvent: stage => {
@@ -1 +1 @@
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":[]}
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","showSubscriptionUpsell","hasUpsell","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 // Without anything in the offer to show, the banner keeps today's Upgrade now button.\n const showSubscriptionUpsell = !!subscriptionOffer?.hasUpsell;\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={showSubscriptionUpsell ? 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={showSubscriptionUpsell ? 4 : 3} className=\"align-self-center text-right mt-3 mt-md-0 p-0\">\n {showSubscriptionUpsell ? (\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('Subscribe Clicked'); }}\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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-plugin-advertisements",
3
- "version": "2.26.0",
3
+ "version": "2.27.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "main": "dist/index.js",
6
6
  "repository": {