@edx/frontend-plugin-advertisements 2.24.3 → 2.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/data/__factories__/extraOffer.factory.js +15 -0
  2. package/dist/data/__factories__/extraOffer.factory.js.map +1 -0
  3. package/dist/data/__factories__/index.js +1 -0
  4. package/dist/data/__factories__/index.js.map +1 -1
  5. package/dist/data/lms_api.js +40 -0
  6. package/dist/data/lms_api.js.map +1 -1
  7. package/dist/index.js +31 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/paywall/LockPaywall.js +26 -3
  10. package/dist/paywall/LockPaywall.js.map +1 -1
  11. package/dist/paywall/SubscriptionPaywall.js +99 -0
  12. package/dist/paywall/SubscriptionPaywall.js.map +1 -0
  13. package/dist/subscription-upsell/SubscriptionBenefitsModal.js +145 -0
  14. package/dist/subscription-upsell/SubscriptionBenefitsModal.js.map +1 -0
  15. package/dist/subscription-upsell/SubscriptionComparisonModal.js +248 -0
  16. package/dist/subscription-upsell/SubscriptionComparisonModal.js.map +1 -0
  17. package/dist/subscription-upsell/SubscriptionComparisonModal.scss +66 -0
  18. package/dist/subscription-upsell/SubscriptionUpgradeCard.js +214 -0
  19. package/dist/subscription-upsell/SubscriptionUpgradeCard.js.map +1 -0
  20. package/dist/subscription-upsell/SubscriptionUpsell.js +196 -0
  21. package/dist/subscription-upsell/SubscriptionUpsell.js.map +1 -0
  22. package/dist/subscription-upsell/index.js +61 -0
  23. package/dist/subscription-upsell/index.js.map +1 -0
  24. package/dist/subscription-upsell/messages.js +261 -0
  25. package/dist/subscription-upsell/messages.js.map +1 -0
  26. package/dist/subscription-upsell/useSubscriptionOffer.js +96 -0
  27. package/dist/subscription-upsell/useSubscriptionOffer.js.map +1 -0
  28. package/dist/upgrade-notification/UpgradeNotification.js +51 -4
  29. package/dist/upgrade-notification/UpgradeNotification.js.map +1 -1
  30. package/dist/upgrade-to-complete-alert/UpgradeToCompleteAlert.js +28 -3
  31. package/dist/upgrade-to-complete-alert/UpgradeToCompleteAlert.js.map +1 -1
  32. package/dist/upgrade-to-complete-alert/track.js +4 -2
  33. package/dist/upgrade-to-complete-alert/track.js.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatOfferPrice = exports.formatCoursePrice = exports.default = exports.SUBSCRIPTION_STATUS = void 0;
7
+ var _i18n = require("@edx/frontend-platform/i18n");
8
+ var _modelStore = require("@src/generic/model-store");
9
+ var _messages = _interopRequireDefault(require("./messages"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
14
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */
16
+ // Viax statuses, as the LMS extra_offer block reports them.
17
+ const SUBSCRIPTION_STATUS = exports.SUBSCRIPTION_STATUS = {
18
+ NOT_SUBSCRIBED: 'NOT_SUBSCRIBED',
19
+ TRIAL_ACTIVE: 'TRIAL_ACTIVE',
20
+ ACTIVE: 'ACTIVE',
21
+ CANCEL_PENDING: 'CANCEL_PENDING',
22
+ CANCELLED: 'CANCELLED',
23
+ UNKNOWN: 'UNKNOWN'
24
+ };
25
+
26
+ /** "$39" from { amount: "39.00", currency: "USD" }, or null without a price. */
27
+ const formatOfferPrice = (intl, price) => {
28
+ if (price?.amount === undefined || price?.amount === null) {
29
+ return null;
30
+ }
31
+ const amount = Number(price.amount);
32
+ return intl.formatNumber(amount, _objectSpread({
33
+ style: 'currency',
34
+ currency: price.currency || 'USD'
35
+ }, Number.isInteger(amount) ? {
36
+ minimumFractionDigits: 0
37
+ } : {}));
38
+ };
39
+
40
+ /** "$149" from verifiedMode, as the existing upgrade button shows it, or null. */
41
+ exports.formatOfferPrice = formatOfferPrice;
42
+ const formatCoursePrice = verifiedMode => verifiedMode?.price === undefined || verifiedMode?.price === null ? null : `${verifiedMode.currencySymbol || ''}${verifiedMode.price}`;
43
+
44
+ /**
45
+ * The offer for a course from courseHomeMeta.extraOffer, with the flags and labels the components
46
+ * need, or null when the LMS sent no block (callers keep today's UI). The backend decides whether
47
+ * Subscribe is offered: subscribeUrl is null when not. Purchase uses the first-purchase discount
48
+ * (the `offer` on the outline or courseware model, as the existing upgrade button does) when there
49
+ * is one, else the course's verifiedMode link and price.
50
+ */
51
+ exports.formatCoursePrice = formatCoursePrice;
52
+ const useSubscriptionOffer = courseId => {
53
+ const intl = (0, _i18n.useIntl)();
54
+ const {
55
+ extraOffer,
56
+ verifiedMode
57
+ } = (0, _modelStore.useModel)('courseHomeMeta', courseId) || {};
58
+ const outline = (0, _modelStore.useModel)('outline', courseId) || {};
59
+ const courseware = (0, _modelStore.useModel)('coursewareMeta', courseId) || {};
60
+ // Both models stay in the store across pages, so the one not fetched for this page may be stale.
61
+ // shortcut: an expired discount is dropped; a live one is the same per learner in both, so order is moot.
62
+ // Expiry is judged on server time: each model carries the server/browser clock offset.
63
+ const isLive = _ref => {
64
+ let {
65
+ offer,
66
+ timeOffsetMillis = 0
67
+ } = _ref;
68
+ return !!offer && (!offer.expirationDate || new Date(offer.expirationDate) > new Date(Date.now() + timeOffsetMillis));
69
+ };
70
+ const purchaseOffer = ([outline, courseware].find(isLive) || {}).offer || null;
71
+ if (!extraOffer) {
72
+ return null;
73
+ }
74
+ const inCatalog = extraOffer.inCatalog !== false;
75
+ const isSubscriber = extraOffer.isSubscriber === true;
76
+ const purchaseUrl = purchaseOffer?.upgradeUrl || verifiedMode?.upgradeUrl || null;
77
+ const price = formatOfferPrice(intl, extraOffer.price);
78
+ return _objectSpread(_objectSpread({}, extraOffer), {}, {
79
+ inCatalog,
80
+ isSubscriber,
81
+ purchaseUrl,
82
+ hasTrial: extraOffer.freeTrialEligible === true,
83
+ canPurchase: !!purchaseUrl,
84
+ canSubscribe: inCatalog && !isSubscriber && !!extraOffer.subscribeUrl,
85
+ canUpgradeInPlace: inCatalog && isSubscriber,
86
+ showNotIncluded: !inCatalog && isSubscriber,
87
+ coursePrice: purchaseOffer ? purchaseOffer.discountedPrice : formatCoursePrice(verifiedMode),
88
+ purchaseCode: purchaseOffer?.code || null,
89
+ subscribePrice: price && intl.formatMessage(_messages.default.pricePerInterval, {
90
+ price,
91
+ interval: extraOffer.price.billingPeriod || 'month'
92
+ })
93
+ });
94
+ };
95
+ var _default = exports.default = useSubscriptionOffer;
96
+ //# sourceMappingURL=useSubscriptionOffer.js.map
@@ -0,0 +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":[]}
@@ -14,6 +14,7 @@ var _icons = require("@openedx/paragon/icons");
14
14
  var _upgradeButton = require("@src/generic/upgrade-button");
15
15
  var _modelStore = require("@src/generic/model-store");
16
16
  var _data = require("../data");
17
+ var _subscriptionUpsell = require("../subscription-upsell");
17
18
  var _certificatePreview = _interopRequireDefault(require("./certificate-preview"));
18
19
  var _generic = require("../generic");
19
20
  var _utils = _interopRequireDefault(require("./utils"));
@@ -26,7 +27,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
26
27
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
28
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
28
29
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
29
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */
30
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */ // Placements that show the subscription card: course home and the courseware sidebar
31
+ // (tray and widget). The Progress page keeps the current card.
32
+ const SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];
30
33
  const UpgradeNotification = _ref => {
31
34
  let {
32
35
  id,
@@ -57,23 +60,30 @@ const UpgradeNotification = _ref => {
57
60
  const {
58
61
  conversion
59
62
  } = (0, _cohesion.useCohesion)(courseId);
63
+ const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
60
64
  const dateNow = Date.now();
61
65
  const timezoneFormatArgs = userTimezone ? {
62
66
  timeZone: userTimezone
63
67
  } : {};
64
68
  const correctedTime = new Date(dateNow + timeOffsetMillis);
65
69
  const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;
66
- const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;
70
+ // Server time, so this agrees with the countdown and the FBE branches below.
71
+ const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;
67
72
  const shouldDisplayBorder = pluginLocationId.includes('outline');
73
+ const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(placement => pluginLocationId.includes(placement));
74
+ // Without an offer, past the upgrade deadline, and on the Progress page, today's card renders.
75
+ const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer;
68
76
  const upsellPageName = (0, _utils.default)({
69
77
  id: pluginLocationId
70
78
  });
71
79
  const setupgradeNotificationCurrentState = setNotificationCurrentState;
72
80
  const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;
73
- const eventProperties = {
81
+ const eventProperties = _objectSpread({
74
82
  org_key: org,
75
83
  courserun_key: courseId
76
- };
84
+ }, showSubscriptionCard && {
85
+ variant: 'subscription'
86
+ });
77
87
  const promotionEventProperties = _objectSpread({
78
88
  creative: 'sidebarupsell',
79
89
  name: 'In-Course Verification Prompt',
@@ -110,6 +120,43 @@ const UpgradeNotification = _ref => {
110
120
  pageName: upsellPageName
111
121
  }));
112
122
  };
123
+ const logSubscribeClick = () => {
124
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
125
+ linkCategory: 'subscription',
126
+ linkName: `${upsellPageName}_subscribe`,
127
+ linkType: 'button',
128
+ pageName: upsellPageName
129
+ }));
130
+ conversion('Subscribed');
131
+ };
132
+ if (showSubscriptionCard) {
133
+ // the card handles every offer state itself
134
+ let banner;
135
+ if (isFBE) {
136
+ // content-gated learners keep the access expiration warning and its sidebar dot stages
137
+ const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
138
+ banner = hoursToAccessExpiration < 7 * 24 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.ExpirationCountdown, {
139
+ courseId: courseId,
140
+ hoursToExpiration: hoursToAccessExpiration,
141
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
142
+ type: "access"
143
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_generic.AccessExpirationDateBanner, {
144
+ courseId: courseId,
145
+ accessExpirationDate: accessExpirationDate,
146
+ timezoneFormatArgs: timezoneFormatArgs,
147
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
148
+ });
149
+ }
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpgradeCard, {
151
+ courseId: courseId,
152
+ withBorder: shouldDisplayBorder,
153
+ banner: banner,
154
+ onSubscribeClick: logSubscribeClick,
155
+ onPurchaseClick: logUpgradeClick,
156
+ onUpgradeEvent: stage => stage === 'succeeded' && logUpgradeClick(),
157
+ onClose: toggleSidebar
158
+ });
159
+ }
113
160
 
114
161
  /*
115
162
  There are 5 parts that change in the upgrade card:
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_upgradeButton","_modelStore","_data","_certificatePreview","_generic","_utils","_messages","_cohesion","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpgradeNotification","_ref","id","courseId","model","setNotificationCurrentState","toggleSidebar","pluginLocationId","formatMessage","useIntl","org","userTimezone","verifiedMode","useModel","marketingUrl","learningAssistantEnabled","accessExpiration","datesBannerInfo","offer","timeOffsetMillis","conversion","useCohesion","dateNow","Date","now","timezoneFormatArgs","timeZone","correctedTime","accessExpirationDate","upgradeDeadline","pastExpirationDeadline","shouldDisplayBorder","includes","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerCode","upsellMessage","jsx","UpsellTable","hoursToAccessExpiration","Math","floor","hoursToDiscountExpiration","expirationDate","messages","firstTimeLearnerDiscountHeader","percentage","ExpirationCountdown","hoursToExpiration","type","accessExpirationHeader","AccessExpirationDateBanner","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","variant","onClick","href","block","children","pastExpirationCallToActionLabel","UpgradeButton","className","discountCodeMessage","code","classNames","jsxs","pursueCertificateMessage","IconButton","src","Close","size","iconAs","Icon","alt","closeAlt","propTypes","PropTypes","string","isRequired","func","defaultProps","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { useModel } from '@src/generic/model-store';\n\nimport { PAGE_NAMES } from '../data';\nimport CertificatePreview from './certificate-preview';\nimport {\n ExpirationCountdown,\n AccessExpirationDateBanner,\n PastExpirationDateBanner,\n PastExpirationCardContent,\n UpsellFBESoonCardContent,\n UpsellTable,\n} from '../generic';\nimport getUpsellPageName from './utils';\nimport messages from './messages';\nimport { useCohesion } from '../cohesion';\n\nconst UpgradeNotification = ({\n id,\n courseId,\n model,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n const { formatMessage } = useIntl();\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n marketingUrl,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n datesBannerInfo,\n offer,\n timeOffsetMillis,\n } = useModel(model, courseId);\n\n const { conversion } = useCohesion(courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\n const upsellPageName = getUpsellPageName({ id: pluginLocationId });\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logUpgradeClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let callToActionButton;\n let offerCode;\n\n let upsellMessage = <UpsellTable {...{ isFBE, learningAssistantEnabled }} />;\n\n if (isFBE) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = formatMessage(\n messages.firstTimeLearnerDiscountHeader,\n { percentage: (offer.percentage) },\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationHeader);\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationUrgentHeader);\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n if (upsellPageName !== PAGE_NAMES.PROGRESS) {\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n }\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationPastHeader);\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n {formatMessage(messages.pastExpirationCallToActionLabel)}\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logUpgradeClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n {formatMessage(\n messages.discountCodeMessage,\n {\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n },\n )}\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification small', { 'pgn__card pgn__card-light card mb-4 rounded': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n 'm-4': !toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {formatMessage(messages.pursueCertificateMessage)}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={formatMessage(messages.closeAlt)}\n />\n </div>\n )}\n </h2>\n <CertificatePreview courseId={courseId} />\n <h3 className=\"ml-4\">\n {upgradeNotificationHeaderText}\n </h3>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button m-4\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n model: PropTypes.string,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n model: 'outline',\n};\n\nexport default UpgradeNotification;\n"],"mappings":"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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","upsellPageName","getUpsellPageName","setupgradeNotificationCurrentState","isFBE","contentTypeGatingEnabled","eventProperties","org_key","courserun_key","variant","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logUpgradeClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","logSubscribeClick","banner","hoursToAccessExpiration","Math","floor","jsx","ExpirationCountdown","hoursToExpiration","type","AccessExpirationDateBanner","SubscriptionUpgradeCard","withBorder","onSubscribeClick","onPurchaseClick","onUpgradeEvent","stage","onClose","upgradeNotificationHeaderText","expirationBanner","callToActionButton","offerCode","upsellMessage","UpsellTable","hoursToDiscountExpiration","expirationDate","messages","firstTimeLearnerDiscountHeader","percentage","accessExpirationHeader","accessExpirationUrgentHeader","PAGE_NAMES","PROGRESS","UpsellFBESoonCardContent","accessExpirationPastHeader","PastExpirationDateBanner","PastExpirationCardContent","Button","onClick","href","block","children","pastExpirationCallToActionLabel","UpgradeButton","className","discountCodeMessage","code","classNames","jsxs","pursueCertificateMessage","IconButton","src","Close","size","iconAs","Icon","alt","closeAlt","propTypes","PropTypes","string","isRequired","func","defaultProps","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\n\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { useModel } from '@src/generic/model-store';\n\nimport { PAGE_NAMES } from '../data';\nimport { SubscriptionUpgradeCard, useSubscriptionOffer } from '../subscription-upsell';\nimport CertificatePreview from './certificate-preview';\nimport {\n ExpirationCountdown,\n AccessExpirationDateBanner,\n PastExpirationDateBanner,\n PastExpirationCardContent,\n UpsellFBESoonCardContent,\n UpsellTable,\n} from '../generic';\nimport getUpsellPageName from './utils';\nimport messages from './messages';\nimport { useCohesion } from '../cohesion';\n\n// Placements that show the subscription card: course home and the courseware sidebar\n// (tray and widget). The Progress page keeps the current card.\nconst SUBSCRIPTION_CARD_PLACEMENTS = ['outline', 'notification_tray', 'notification_widget'];\n\nconst UpgradeNotification = ({\n id,\n courseId,\n model,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n const { formatMessage } = useIntl();\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n marketingUrl,\n learningAssistantEnabled,\n } = useModel('coursewareMeta', courseId);\n\n const {\n accessExpiration,\n datesBannerInfo,\n offer,\n timeOffsetMillis,\n } = useModel(model, courseId);\n\n const { conversion } = useCohesion(courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.upgradeDeadline) : null;\n // Server time, so this agrees with the countdown and the FBE branches below.\n const pastExpirationDeadline = accessExpiration ? correctedTime > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId.includes('outline');\n const isSubscriptionCardPlacement = SUBSCRIPTION_CARD_PLACEMENTS.some(\n (placement) => pluginLocationId.includes(placement),\n );\n // Without an offer, past the upgrade deadline, and on the Progress page, today's card renders.\n const showSubscriptionCard = isSubscriptionCardPlacement && !pastExpirationDeadline && !!subscriptionOffer;\n const upsellPageName = getUpsellPageName({ id: pluginLocationId });\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n const isFBE = !!accessExpiration && !!datesBannerInfo?.contentTypeGatingEnabled;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n // Tags the placements that switched to the subscription card, so reports can split them from today's card.\n ...(showSubscriptionCard && { variant: 'subscription' }),\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logUpgradeClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n\n conversion('Upgraded');\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const logSubscribeClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'subscription',\n linkName: `${upsellPageName}_subscribe`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n conversion('Subscribed');\n };\n\n if (showSubscriptionCard) { // the card handles every offer state itself\n let banner;\n if (isFBE) { // content-gated learners keep the access expiration warning and its sidebar dot stages\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n banner = hoursToAccessExpiration < (7 * 24) ? (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n ) : (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n return (\n <SubscriptionUpgradeCard\n courseId={courseId}\n withBorder={shouldDisplayBorder}\n banner={banner}\n onSubscribeClick={logSubscribeClick}\n onPurchaseClick={logUpgradeClick}\n onUpgradeEvent={(stage) => stage === 'succeeded' && logUpgradeClick()}\n onClose={toggleSidebar}\n />\n );\n }\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let callToActionButton;\n let offerCode;\n\n let upsellMessage = <UpsellTable {...{ isFBE, learningAssistantEnabled }} />;\n\n if (isFBE) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = formatMessage(\n messages.firstTimeLearnerDiscountHeader,\n { percentage: (offer.percentage) },\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationHeader);\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationUrgentHeader);\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n if (upsellPageName !== PAGE_NAMES.PROGRESS) {\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n }\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = formatMessage(messages.accessExpirationPastHeader);\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n {formatMessage(messages.pastExpirationCallToActionLabel)}\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logUpgradeClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n {formatMessage(\n messages.discountCodeMessage,\n {\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n },\n )}\n </div>\n );\n }\n\n return (\n <section className={classNames('upgrade-notification small', { 'pgn__card pgn__card-light card mb-4 rounded': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <h2\n className={classNames('upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n 'm-4': !toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {formatMessage(messages.pursueCertificateMessage)}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={formatMessage(messages.closeAlt)}\n />\n </div>\n )}\n </h2>\n <CertificatePreview courseId={courseId} />\n <h3 className=\"ml-4\">\n {upgradeNotificationHeaderText}\n </h3>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button m-4\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n model: PropTypes.string,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n model: 'outline',\n};\n\nexport default UpgradeNotification;\n"],"mappings":"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","ignoreList":[]}
@@ -9,6 +9,8 @@ var _reactRedux = require("react-redux");
9
9
  var _i18n = require("@edx/frontend-platform/i18n");
10
10
  var _paragon = require("@openedx/paragon");
11
11
  var _modelStore = require("@src/generic/model-store");
12
+ var _cohesion = require("../cohesion");
13
+ var _subscriptionUpsell = require("../subscription-upsell");
12
14
  var _messages = _interopRequireDefault(require("./messages"));
13
15
  var _track = require("./track");
14
16
  var _jsxRuntime = require("react/jsx-runtime");
@@ -27,6 +29,10 @@ const UpgradeToCompleteAlert = () => {
27
29
  const {
28
30
  org
29
31
  } = (0, _modelStore.useModel)('courseHomeMeta', courseId);
32
+ const subscriptionOffer = (0, _subscriptionUpsell.useSubscriptionOffer)(courseId);
33
+ const {
34
+ conversion
35
+ } = (0, _cohesion.useCohesion)(courseId);
30
36
  const {
31
37
  contentTypeGatingEnabled,
32
38
  missedDeadlines,
@@ -42,16 +48,35 @@ const UpgradeToCompleteAlert = () => {
42
48
  className: "w-100 m-0",
43
49
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_paragon.Col, {
44
50
  xs: 12,
45
- md: 9,
51
+ md: subscriptionOffer ? 8 : 9,
46
52
  className: "small p-0 pr-md-2",
47
53
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert.Heading, {
48
54
  children: intl.formatMessage(_messages.default.upgradeToCompleteHeader)
49
55
  }), intl.formatMessage(_messages.default.upgradeToCompleteBody)]
50
56
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Col, {
51
57
  xs: 12,
52
- md: 3,
58
+ md: subscriptionOffer ? 4 : 3,
53
59
  className: "align-self-center text-right mt-3 mt-md-0 p-0",
54
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
60
+ children: subscriptionOffer ?
61
+ /*#__PURE__*/
62
+ // No Figma for this banner yet: same banner, with the LP-1422 buttons in place of Upgrade now.
63
+ (0, _jsxRuntime.jsx)("div", {
64
+ className: "d-inline-block text-left",
65
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_subscriptionUpsell.SubscriptionUpsell, {
66
+ courseId: courseId,
67
+ onSubscribeClick: () => {
68
+ (0, _track.logUpgradeLinkClick)(org, courseId, 'dates_subscribe');
69
+ conversion('Subscribed');
70
+ },
71
+ onPurchaseClick: () => (0, _track.logUpgradeLinkClick)(org, courseId),
72
+ onUpgradeEvent: stage => {
73
+ if (stage === 'succeeded') {
74
+ (0, _track.logUpgradeLinkClick)(org, courseId);
75
+ conversion('Upgraded');
76
+ }
77
+ }
78
+ })
79
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
55
80
  variant: "brand",
56
81
  size: "sm",
57
82
  className: "w-xs-100 w-md-auto",
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeToCompleteAlert.js","names":["_react","_interopRequireDefault","require","_reactRedux","_i18n","_paragon","_modelStore","_messages","_track","_jsxRuntime","e","__esModule","default","UpgradeToCompleteAlert","intl","useIntl","courseId","useSelector","state","courseHome","datesBannerInfo","hasEnded","useModel","org","contentTypeGatingEnabled","missedDeadlines","verifiedUpgradeLink","jsx","Alert","id","className","children","jsxs","Row","Col","xs","md","Heading","formatMessage","messages","upgradeToCompleteHeader","upgradeToCompleteBody","Button","variant","size","onClick","logUpgradeLinkClick","global","location","replace","upgradeToCompleteButton","_default","exports"],"sources":["../../src/upgrade-to-complete-alert/UpgradeToCompleteAlert.jsx"],"sourcesContent":["import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Col,\n Row,\n} from '@openedx/paragon';\n\nimport { useModel } from '@src/generic/model-store'; // eslint-disable-line import/no-unresolved\nimport messages from './messages';\nimport { logUpgradeLinkClick } from './track';\n\nconst UpgradeToCompleteAlert = () => {\n const intl = useIntl();\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel('dates', courseId);\n\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n verifiedUpgradeLink,\n } = datesBannerInfo || {};\n\n if (!contentTypeGatingEnabled || missedDeadlines || hasEnded || !verifiedUpgradeLink) {\n return null;\n }\n\n return (\n <Alert id=\"upgrade-complete-alert\" className=\"bg-light-200\">\n <Row className=\"w-100 m-0\">\n <Col xs={12} md={9} className=\"small p-0 pr-md-2\">\n <Alert.Heading>{intl.formatMessage(messages.upgradeToCompleteHeader)}</Alert.Heading>\n {intl.formatMessage(messages.upgradeToCompleteBody)}\n </Col>\n <Col xs={12} md={3} className=\"align-self-center text-right mt-3 mt-md-0 p-0\">\n <Button\n variant=\"brand\"\n size=\"sm\"\n className=\"w-xs-100 w-md-auto\"\n onClick={() => {\n logUpgradeLinkClick(org, courseId);\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToCompleteButton)}\n </Button>\n </Col>\n </Row>\n </Alert>\n );\n};\n\nexport default UpgradeToCompleteAlert;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAOA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAN,OAAA;AAA8C,IAAAO,WAAA,GAAAP,OAAA;AAAA,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAFO;;AAIrD,MAAMG,sBAAsB,GAAGA,CAAA,KAAM;EACnC,MAAMC,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,MAAM;IACJC;EACF,CAAC,GAAG,IAAAC,uBAAW,EAACC,KAAK,IAAIA,KAAK,CAACC,UAAU,CAAC;EAE1C,MAAM;IACJC,eAAe;IACfC;EACF,CAAC,GAAG,IAAAC,oBAAQ,EAAC,OAAO,EAAEN,QAAQ,CAAC;EAE/B,MAAM;IACJO;EACF,CAAC,GAAG,IAAAD,oBAAQ,EAAC,gBAAgB,EAAEN,QAAQ,CAAC;EAExC,MAAM;IACJQ,wBAAwB;IACxBC,eAAe;IACfC;EACF,CAAC,GAAGN,eAAe,IAAI,CAAC,CAAC;EAEzB,IAAI,CAACI,wBAAwB,IAAIC,eAAe,IAAIJ,QAAQ,IAAI,CAACK,mBAAmB,EAAE;IACpF,OAAO,IAAI;EACb;EAEA,oBACE,IAAAjB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAuB,KAAK;IAACC,EAAE,EAAC,wBAAwB;IAACC,SAAS,EAAC,cAAc;IAAAC,QAAA,eACzD,IAAAtB,WAAA,CAAAuB,IAAA,EAAC3B,QAAA,CAAA4B,GAAG;MAACH,SAAS,EAAC,WAAW;MAAAC,QAAA,gBACxB,IAAAtB,WAAA,CAAAuB,IAAA,EAAC3B,QAAA,CAAA6B,GAAG;QAACC,EAAE,EAAE,EAAG;QAACC,EAAE,EAAE,CAAE;QAACN,SAAS,EAAC,mBAAmB;QAAAC,QAAA,gBAC/C,IAAAtB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAuB,KAAK,CAACS,OAAO;UAAAN,QAAA,EAAEjB,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACC,uBAAuB;QAAC,CAAgB,CAAC,EACpF1B,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACE,qBAAqB,CAAC;MAAA,CAChD,CAAC,eACN,IAAAhC,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAA6B,GAAG;QAACC,EAAE,EAAE,EAAG;QAACC,EAAE,EAAE,CAAE;QAACN,SAAS,EAAC,+CAA+C;QAAAC,QAAA,eAC3E,IAAAtB,WAAA,CAAAkB,GAAA,EAACtB,QAAA,CAAAqC,MAAM;UACLC,OAAO,EAAC,OAAO;UACfC,IAAI,EAAC,IAAI;UACTd,SAAS,EAAC,oBAAoB;UAC9Be,OAAO,EAAEA,CAAA,KAAM;YACb,IAAAC,0BAAmB,EAACvB,GAAG,EAAEP,QAAQ,CAAC;YAClC+B,MAAM,CAACC,QAAQ,CAACC,OAAO,CAACvB,mBAAmB,CAAC;UAC9C,CAAE;UAAAK,QAAA,EAEDjB,IAAI,CAACwB,aAAa,CAACC,iBAAQ,CAACW,uBAAuB;QAAC,CAC/C;MAAC,CACN,CAAC;IAAA,CACH;EAAC,CACD,CAAC;AAEZ,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAxC,OAAA,GAEaC,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"UpgradeToCompleteAlert.js","names":["_react","_interopRequireDefault","require","_reactRedux","_i18n","_paragon","_modelStore","_cohesion","_subscriptionUpsell","_messages","_track","_jsxRuntime","e","__esModule","default","UpgradeToCompleteAlert","intl","useIntl","courseId","useSelector","state","courseHome","datesBannerInfo","hasEnded","useModel","org","subscriptionOffer","useSubscriptionOffer","conversion","useCohesion","contentTypeGatingEnabled","missedDeadlines","verifiedUpgradeLink","jsx","Alert","id","className","children","jsxs","Row","Col","xs","md","Heading","formatMessage","messages","upgradeToCompleteHeader","upgradeToCompleteBody","SubscriptionUpsell","onSubscribeClick","logUpgradeLinkClick","onPurchaseClick","onUpgradeEvent","stage","Button","variant","size","onClick","global","location","replace","upgradeToCompleteButton","_default","exports"],"sources":["../../src/upgrade-to-complete-alert/UpgradeToCompleteAlert.jsx"],"sourcesContent":["import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useIntl } from '@edx/frontend-platform/i18n';\nimport {\n Alert,\n Button,\n Col,\n Row,\n} from '@openedx/paragon';\n\nimport { useModel } from '@src/generic/model-store'; // eslint-disable-line import/no-unresolved\nimport { useCohesion } from '../cohesion';\nimport { SubscriptionUpsell, useSubscriptionOffer } from '../subscription-upsell';\nimport messages from './messages';\nimport { logUpgradeLinkClick } from './track';\n\nconst UpgradeToCompleteAlert = () => {\n const intl = useIntl();\n const {\n courseId,\n } = useSelector(state => state.courseHome);\n\n const {\n datesBannerInfo,\n hasEnded,\n } = useModel('dates', courseId);\n\n const {\n org,\n } = useModel('courseHomeMeta', courseId);\n const subscriptionOffer = useSubscriptionOffer(courseId);\n const { conversion } = useCohesion(courseId);\n\n const {\n contentTypeGatingEnabled,\n missedDeadlines,\n verifiedUpgradeLink,\n } = datesBannerInfo || {};\n\n if (!contentTypeGatingEnabled || missedDeadlines || hasEnded || !verifiedUpgradeLink) {\n return null;\n }\n\n return (\n <Alert id=\"upgrade-complete-alert\" className=\"bg-light-200\">\n <Row className=\"w-100 m-0\">\n <Col xs={12} md={subscriptionOffer ? 8 : 9} className=\"small p-0 pr-md-2\">\n <Alert.Heading>{intl.formatMessage(messages.upgradeToCompleteHeader)}</Alert.Heading>\n {intl.formatMessage(messages.upgradeToCompleteBody)}\n </Col>\n <Col xs={12} md={subscriptionOffer ? 4 : 3} className=\"align-self-center text-right mt-3 mt-md-0 p-0\">\n {subscriptionOffer ? (\n // No Figma for this banner yet: same banner, with the LP-1422 buttons in place of Upgrade now.\n <div className=\"d-inline-block text-left\">\n <SubscriptionUpsell\n courseId={courseId}\n onSubscribeClick={() => { logUpgradeLinkClick(org, courseId, 'dates_subscribe'); conversion('Subscribed'); }}\n onPurchaseClick={() => logUpgradeLinkClick(org, courseId)}\n onUpgradeEvent={(stage) => {\n if (stage === 'succeeded') { logUpgradeLinkClick(org, courseId); conversion('Upgraded'); }\n }}\n />\n </div>\n ) : (\n <Button\n variant=\"brand\"\n size=\"sm\"\n className=\"w-xs-100 w-md-auto\"\n onClick={() => {\n logUpgradeLinkClick(org, courseId);\n global.location.replace(verifiedUpgradeLink);\n }}\n >\n {intl.formatMessage(messages.upgradeToCompleteButton)}\n </Button>\n )}\n </Col>\n </Row>\n </Alert>\n );\n};\n\nexport default UpgradeToCompleteAlert;\n"],"mappings":"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","ignoreList":[]}
@@ -10,13 +10,15 @@ var _analytics = require("@edx/frontend-platform/analytics");
10
10
  *
11
11
  * @param {string} org - The organization key
12
12
  * @param {string} courseId - The course run key
13
+ * @param {string} [linkName] - 'dates_upgrade' for Buy/Upgrade, 'dates_subscribe' for Subscribe
13
14
  */
14
- const logUpgradeLinkClick = (org, courseId) => {
15
+ const logUpgradeLinkClick = function (org, courseId) {
16
+ let linkName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'dates_upgrade';
15
17
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', {
16
18
  org_key: org,
17
19
  courserun_key: courseId,
18
20
  linkCategory: 'personalized_learner_schedules',
19
- linkName: 'dates_upgrade',
21
+ linkName,
20
22
  linkType: 'button',
21
23
  pageName: 'dates_tab'
22
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"track.js","names":["_analytics","require","logUpgradeLinkClick","org","courseId","sendTrackEvent","org_key","courserun_key","linkCategory","linkName","linkType","pageName","exports"],"sources":["../../src/upgrade-to-complete-alert/track.js"],"sourcesContent":["import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\n/**\n * Logs an upgrade link click event for the upgrade to complete alert.\n *\n * @param {string} org - The organization key\n * @param {string} courseId - The course run key\n */\nexport const logUpgradeLinkClick = (org, courseId) => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'personalized_learner_schedules',\n linkName: 'dates_upgrade',\n linkType: 'button',\n pageName: 'dates_tab',\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,mBAAmB,GAAGA,CAACC,GAAG,EAAEC,QAAQ,KAAK;EACpD,IAAAC,yBAAc,EAAC,uCAAuC,EAAE;IACtDC,OAAO,EAAEH,GAAG;IACZI,aAAa,EAAEH,QAAQ;IACvBI,YAAY,EAAE,gCAAgC;IAC9CC,QAAQ,EAAE,eAAe;IACzBC,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"track.js","names":["_analytics","require","logUpgradeLinkClick","org","courseId","linkName","arguments","length","undefined","sendTrackEvent","org_key","courserun_key","linkCategory","linkType","pageName","exports"],"sources":["../../src/upgrade-to-complete-alert/track.js"],"sourcesContent":["import { sendTrackEvent } from '@edx/frontend-platform/analytics';\n\n/**\n * Logs an upgrade link click event for the upgrade to complete alert.\n *\n * @param {string} org - The organization key\n * @param {string} courseId - The course run key\n * @param {string} [linkName] - 'dates_upgrade' for Buy/Upgrade, 'dates_subscribe' for Subscribe\n */\nexport const logUpgradeLinkClick = (org, courseId, linkName = 'dates_upgrade') => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'personalized_learner_schedules',\n linkName,\n linkType: 'button',\n pageName: 'dates_tab',\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,mBAAmB,GAAG,SAAAA,CAACC,GAAG,EAAEC,QAAQ,EAAiC;EAAA,IAA/BC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,eAAe;EAC3E,IAAAG,yBAAc,EAAC,uCAAuC,EAAE;IACtDC,OAAO,EAAEP,GAAG;IACZQ,aAAa,EAAEP,QAAQ;IACvBQ,YAAY,EAAE,gCAAgC;IAC9CP,QAAQ;IACRQ,QAAQ,EAAE,QAAQ;IAClBC,QAAQ,EAAE;EACZ,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAb,mBAAA,GAAAA,mBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-plugin-advertisements",
3
- "version": "2.24.3",
3
+ "version": "2.26.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "main": "dist/index.js",
6
6
  "repository": {