@edx/frontend-plugin-advertisements 1.3.0 → 1.5.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.
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ var _rosie = require("rosie");
4
+ // eslint-disable-line import/no-extraneous-dependencies
5
+
6
+ _rosie.Factory.define('experimentalUpgradeNotificationData').option('host', 'http://localhost:18000').option('dateBlocks', []).option('offer', null).option('userTimezone', null).option('contentTypeGatingEnabled', false).attr('courseId', 'course-v1:edX+DemoX+Demo_Course').attr('upsellPageName', 'test').attr('verifiedMode', ['host'], host => ({
7
+ access_expiration_date: '2050-01-01T12:00:00',
8
+ currency: 'USD',
9
+ currencySymbol: '$',
10
+ price: 149,
11
+ sku: 'ABCD1234',
12
+ upgradeUrl: `${host}/dashboard`
13
+ })).attr('org', 'edX').attrs({
14
+ accessExpiration: {
15
+ expiration_date: '1950-07-13T02:04:49.040006Z'
16
+ }
17
+ }).attr('timeOffsetMillis', 0);
18
+ //# sourceMappingURL=experimentalUpgradeNotificationData.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experimentalUpgradeNotificationData.factory.js","names":["_rosie","require","Factory","define","option","attr","host","access_expiration_date","currency","currencySymbol","price","sku","upgradeUrl","attrs","accessExpiration","expiration_date"],"sources":["../../../src/data/__factories__/experimentalUpgradeNotificationData.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\nFactory.define('experimentalUpgradeNotificationData')\n .option('host', 'http://localhost:18000')\n .option('dateBlocks', [])\n .option('offer', null)\n .option('userTimezone', null)\n .option('contentTypeGatingEnabled', false)\n .attr('courseId', 'course-v1:edX+DemoX+Demo_Course')\n .attr('upsellPageName', 'test')\n .attr('verifiedMode', ['host'], (host) => ({\n access_expiration_date: '2050-01-01T12:00:00',\n currency: 'USD',\n currencySymbol: '$',\n price: 149,\n sku: 'ABCD1234',\n upgradeUrl: `${host}/dashboard`,\n }))\n .attr('org', 'edX')\n .attrs({\n accessExpiration: {\n expiration_date: '1950-07-13T02:04:49.040006Z',\n },\n })\n .attr('timeOffsetMillis', 0);\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjCC,cAAO,CAACC,MAAM,CAAC,qCAAqC,CAAC,CAClDC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CACxCA,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CACxBA,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CACrBA,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAC5BA,MAAM,CAAC,0BAA0B,EAAE,KAAK,CAAC,CACzCC,IAAI,CAAC,UAAU,EAAE,iCAAiC,CAAC,CACnDA,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAC9BA,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EAAGC,IAAI,KAAM;EACzCC,sBAAsB,EAAE,qBAAqB;EAC7CC,QAAQ,EAAE,KAAK;EACfC,cAAc,EAAE,GAAG;EACnBC,KAAK,EAAE,GAAG;EACVC,GAAG,EAAE,UAAU;EACfC,UAAU,EAAG,GAAEN,IAAK;AACtB,CAAC,CAAC,CAAC,CACFD,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAClBQ,KAAK,CAAC;EACLC,gBAAgB,EAAE;IAChBC,eAAe,EAAE;EACnB;AACF,CAAC,CAAC,CACDV,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ require("./experimentalUpgradeNotificationData.factory");
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["require"],"sources":["../../../src/data/__factories__/index.js"],"sourcesContent":["import './experimentalUpgradeNotificationData.factory';\n"],"mappings":";;AAAAA,OAAA","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchCourseId = fetchCourseId;
7
+ exports.fetchOrg = fetchOrg;
8
+ var _frontendPlatform = require("@edx/frontend-platform");
9
+ var _auth = require("@edx/frontend-platform/auth");
10
+ async function fetchCourseId(courseRunId) {
11
+ const discoveryApiUrl = (0, _frontendPlatform.getConfig)().DISCOVERY_API_BASE_URL;
12
+ const courseRunsUrl = new URL(`${discoveryApiUrl}/api/v1/course_runs/${courseRunId}`);
13
+ const {
14
+ data
15
+ } = await (0, _auth.getAuthenticatedHttpClient)().get(courseRunsUrl.href);
16
+ return data.course;
17
+ }
18
+ async function fetchOrg(courseRunId) {
19
+ const courseId = await fetchCourseId(courseRunId);
20
+ const discoveryApiUrl = (0, _frontendPlatform.getConfig)().DISCOVERY_API_BASE_URL;
21
+ const coursesUrl = new URL(`${discoveryApiUrl}/api/v1/courses/${courseId}`);
22
+ const {
23
+ data
24
+ } = await (0, _auth.getAuthenticatedHttpClient)().get(coursesUrl.href);
25
+ return data.owners[0]; // only retrieve first org related to course
26
+ }
27
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","names":["_frontendPlatform","require","_auth","fetchCourseId","courseRunId","discoveryApiUrl","getConfig","DISCOVERY_API_BASE_URL","courseRunsUrl","URL","data","getAuthenticatedHttpClient","get","href","course","fetchOrg","courseId","coursesUrl","owners"],"sources":["../../src/data/api.js"],"sourcesContent":["import { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchCourseId(courseRunId) {\n const discoveryApiUrl = getConfig().DISCOVERY_API_BASE_URL;\n const courseRunsUrl = new URL(`${discoveryApiUrl}/api/v1/course_runs/${courseRunId}`);\n const { data } = await getAuthenticatedHttpClient().get(courseRunsUrl.href);\n return data.course;\n}\n\nexport async function fetchOrg(courseRunId) {\n const courseId = await fetchCourseId(courseRunId);\n const discoveryApiUrl = getConfig().DISCOVERY_API_BASE_URL;\n const coursesUrl = new URL(`${discoveryApiUrl}/api/v1/courses/${courseId}`);\n const { data } = await getAuthenticatedHttpClient().get(coursesUrl.href);\n return data.owners[0]; // only retrieve first org related to course\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEO,eAAeE,aAAaA,CAACC,WAAW,EAAE;EAC/C,MAAMC,eAAe,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,sBAAsB;EAC1D,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAE,GAAEJ,eAAgB,uBAAsBD,WAAY,EAAC,CAAC;EACrF,MAAM;IAAEM;EAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACJ,aAAa,CAACK,IAAI,CAAC;EAC3E,OAAOH,IAAI,CAACI,MAAM;AACpB;AAEO,eAAeC,QAAQA,CAACX,WAAW,EAAE;EAC1C,MAAMY,QAAQ,GAAG,MAAMb,aAAa,CAACC,WAAW,CAAC;EACjD,MAAMC,eAAe,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,sBAAsB;EAC1D,MAAMU,UAAU,GAAG,IAAIR,GAAG,CAAE,GAAEJ,eAAgB,mBAAkBW,QAAS,EAAC,CAAC;EAC3E,MAAM;IAAEN;EAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACK,UAAU,CAACJ,IAAI,CAAC;EACxE,OAAOH,IAAI,CAACQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB","ignoreList":[]}
@@ -15,5 +15,11 @@ Object.defineProperty(exports, "optimizely", {
15
15
  return _optimizely.optimizely;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "trackUpgradeClickOptimizely", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _optimizely.trackUpgradeClickOptimizely;
22
+ }
23
+ });
18
24
  var _optimizely = require("./optimizely");
19
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_optimizely","require"],"sources":["../../src/data/index.jsx"],"sourcesContent":["export { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY } from './optimizely';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_optimizely","require"],"sources":["../../src/data/index.jsx"],"sourcesContent":["export { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY, trackUpgradeClickOptimizely } from './optimizely';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.optimizely = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = void 0;
6
+ exports.trackUpgradeClickOptimizely = exports.optimizely = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = void 0;
7
7
  var _reactSdk = require("@optimizely/react-sdk");
8
8
  var _frontendPlatform = require("@edx/frontend-platform");
9
9
  const OPTIMIZELY_SDK_KEY = (0, _frontendPlatform.getConfig)().OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY;
@@ -11,4 +11,9 @@ const optimizely = exports.optimizely = (0, _reactSdk.createInstance)({
11
11
  sdkKey: OPTIMIZELY_SDK_KEY
12
12
  });
13
13
  const OPTIMIZELY_VTR_EXPERIMENT_KEY = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = 'verified_take_rate_experimentation';
14
+ const trackUpgradeClickOptimizely = function (userId) {
15
+ let userAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
16
+ optimizely.track('upgrade_button_click', userId, userAttributes);
17
+ };
18
+ exports.trackUpgradeClickOptimizely = trackUpgradeClickOptimizely;
14
19
  //# sourceMappingURL=optimizely.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"optimizely.js","names":["_reactSdk","require","_frontendPlatform","OPTIMIZELY_SDK_KEY","getConfig","OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY","optimizely","exports","createInstance","sdkKey","OPTIMIZELY_VTR_EXPERIMENT_KEY"],"sources":["../../src/data/optimizely.js"],"sourcesContent":["import { createInstance } from '@optimizely/react-sdk';\n\nimport { getConfig } from '@edx/frontend-platform';\n\nconst OPTIMIZELY_SDK_KEY = getConfig().OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY;\n\nconst optimizely = createInstance({\n sdkKey: OPTIMIZELY_SDK_KEY,\n});\n\nconst OPTIMIZELY_VTR_EXPERIMENT_KEY = 'verified_take_rate_experimentation';\n\nexport { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY };\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,0CAA0C;AAEjF,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,IAAAE,wBAAc,EAAC;EAChCC,MAAM,EAAEN;AACV,CAAC,CAAC;AAEF,MAAMO,6BAA6B,GAAAH,OAAA,CAAAG,6BAAA,GAAG,oCAAoC","ignoreList":[]}
1
+ {"version":3,"file":"optimizely.js","names":["_reactSdk","require","_frontendPlatform","OPTIMIZELY_SDK_KEY","getConfig","OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY","optimizely","exports","createInstance","sdkKey","OPTIMIZELY_VTR_EXPERIMENT_KEY","trackUpgradeClickOptimizely","userId","userAttributes","arguments","length","undefined","track"],"sources":["../../src/data/optimizely.js"],"sourcesContent":["import { createInstance } from '@optimizely/react-sdk';\n\nimport { getConfig } from '@edx/frontend-platform';\n\nconst OPTIMIZELY_SDK_KEY = getConfig().OPTIMIZELY_FEATURE_EXPERIMENTATION_SDK_KEY;\n\nconst optimizely = createInstance({\n sdkKey: OPTIMIZELY_SDK_KEY,\n});\n\nconst OPTIMIZELY_VTR_EXPERIMENT_KEY = 'verified_take_rate_experimentation';\n\nconst trackUpgradeClickOptimizely = (userId, userAttributes = {}) => {\n optimizely.track('upgrade_button_click', userId, userAttributes);\n};\n\nexport { optimizely, OPTIMIZELY_VTR_EXPERIMENT_KEY, trackUpgradeClickOptimizely };\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,iBAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,0CAA0C;AAEjF,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,IAAAE,wBAAc,EAAC;EAChCC,MAAM,EAAEN;AACV,CAAC,CAAC;AAEF,MAAMO,6BAA6B,GAAAH,OAAA,CAAAG,6BAAA,GAAG,oCAAoC;AAE1E,MAAMC,2BAA2B,GAAG,SAAAA,CAACC,MAAM,EAA0B;EAAA,IAAxBC,cAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC9DR,UAAU,CAACW,KAAK,CAAC,sBAAsB,EAAEL,MAAM,EAAEC,cAAc,CAAC;AAClE,CAAC;AAACN,OAAA,CAAAI,2BAAA,GAAAA,2BAAA","ignoreList":[]}
package/dist/index.js CHANGED
@@ -12,10 +12,15 @@ Object.defineProperty(exports, "DefaultLockPaywall", {
12
12
  Object.defineProperty(exports, "DefaultUpgradeNotification", {
13
13
  enumerable: true,
14
14
  get: function () {
15
- return _DefaultUpgradeNotification.default;
15
+ return _upgradeNotification.DefaultUpgradeNotification;
16
16
  }
17
17
  });
18
- var _DefaultUpgradeNotification = _interopRequireDefault(require("./upgrade-notification/DefaultUpgradeNotification"));
18
+ Object.defineProperty(exports, "ExperimentalUpgradeNotification", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _upgradeNotification.ExperimentalUpgradeNotification;
22
+ }
23
+ });
24
+ var _upgradeNotification = require("./upgrade-notification");
19
25
  var _paywall = require("./paywall");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_DefaultUpgradeNotification","_interopRequireDefault","require","_paywall","obj","__esModule","default"],"sources":["../src/index.jsx"],"sourcesContent":["export { default as DefaultUpgradeNotification } from './upgrade-notification/DefaultUpgradeNotification';\nexport { DefaultLockPaywall } from './paywall';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,2BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAA+C,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_upgradeNotification","require","_paywall"],"sources":["../src/index.jsx"],"sourcesContent":["export { DefaultUpgradeNotification, ExperimentalUpgradeNotification } from './upgrade-notification';\nexport { DefaultLockPaywall } from './paywall';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,529 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _i18n = require("@edx/frontend-platform/i18n");
11
+ var _analytics = require("@edx/frontend-platform/analytics");
12
+ var _auth = require("@edx/frontend-platform/auth");
13
+ var _paragon = require("@openedx/paragon");
14
+ var _icons = require("@openedx/paragon/icons");
15
+ var _reactSdk = require("@optimizely/react-sdk");
16
+ var _localStorage = require("@src/data/localStorage");
17
+ var _upgradeButton = require("@src/generic/upgrade-button");
18
+ var _UpsellBullets = require("@src/generic/upsell-bullets/UpsellBullets");
19
+ var _messages = _interopRequireDefault(require("@src/generic/messages"));
20
+ var _data = require("../data");
21
+ var _PartnerBranding = _interopRequireDefault(require("./partner-branding/PartnerBranding"));
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
25
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
+ 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; }
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; }
28
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
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 */
31
+ const UpsellNoFBECardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
32
+ className: "fa-ul upgrade-notification-ul pt-0",
33
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.SupportMissionBullet, {})]
34
+ });
35
+ const UpsellFBEFarAwayCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
36
+ className: "fa-ul upgrade-notification-ul",
37
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.UnlockGradedBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.FullAccessBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_UpsellBullets.SupportMissionBullet, {})]
38
+ });
39
+ const UpsellFBESoonCardContent = _ref => {
40
+ let {
41
+ accessExpirationDate,
42
+ timezoneFormatArgs
43
+ } = _ref;
44
+ const includingAnyProgress = /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
45
+ className: "font-weight-bold",
46
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
47
+ id: "learning.generic.upgradeNotification.expirationAccessLoss.progress",
48
+ defaultMessage: "including any progress"
49
+ })
50
+ });
51
+ const date = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
52
+ day: "numeric",
53
+ month: "long",
54
+ value: new Date(accessExpirationDate)
55
+ }, timezoneFormatArgs), "accessDate");
56
+ const benefitsOfUpgrading = /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
57
+ className: "inline-link-underline font-weight-bold",
58
+ rel: "noopener noreferrer",
59
+ target: "_blank",
60
+ href: "https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-",
61
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
62
+ id: "learning.generic.upgradeNotification.expirationVerifiedCert.benefits",
63
+ defaultMessage: "benefits of upgrading"
64
+ })
65
+ });
66
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
67
+ className: "upgrade-notification-text",
68
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
69
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
70
+ id: "learning.generic.upgradeNotification.expirationAccessLoss",
71
+ defaultMessage: "You will lose all access to this course, {includingAnyProgress}, on {date}.",
72
+ values: {
73
+ includingAnyProgress,
74
+ date
75
+ }
76
+ })
77
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
78
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
79
+ id: "learning.generic.upgradeNotification.expirationVerifiedCert",
80
+ defaultMessage: "Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.",
81
+ values: {
82
+ benefitsOfUpgrading
83
+ }
84
+ })
85
+ })]
86
+ });
87
+ };
88
+ UpsellFBESoonCardContent.propTypes = {
89
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
90
+ timezoneFormatArgs: _propTypes.default.shape({
91
+ timeZone: _propTypes.default.string
92
+ })
93
+ };
94
+ UpsellFBESoonCardContent.defaultProps = {
95
+ timezoneFormatArgs: {}
96
+ };
97
+ const PastExpirationCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
98
+ className: "upgrade-notification-text",
99
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
101
+ id: "learning.generic.upgradeNotification.pastExpiration.content",
102
+ defaultMessage: "The upgrade deadline for this course passed. To upgrade, enroll in the next available session."
103
+ })
104
+ })
105
+ });
106
+ const ExpirationCountdown = _ref2 => {
107
+ let {
108
+ courseId,
109
+ hoursToExpiration,
110
+ setupgradeNotificationCurrentState,
111
+ type
112
+ } = _ref2;
113
+ let expirationText;
114
+ if (hoursToExpiration >= 24) {
115
+ // More than 1 day left
116
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
117
+ if (setupgradeNotificationCurrentState) {
118
+ if (type === 'access') {
119
+ setupgradeNotificationCurrentState('accessDaysLeft');
120
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');
121
+ }
122
+ if (type === 'offer') {
123
+ setupgradeNotificationCurrentState('FPDdaysLeft');
124
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');
125
+ }
126
+ }
127
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
128
+ id: "learning.generic.upgradeNotification.expirationDays",
129
+ defaultMessage: `{dayCount, number} {dayCount, plural,
130
+ one {day}
131
+ other {days}} left`,
132
+ values: {
133
+ dayCount: Math.floor(hoursToExpiration / 24)
134
+ }
135
+ });
136
+ } else if (hoursToExpiration >= 1) {
137
+ // More than 1 hour left
138
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
139
+ if (setupgradeNotificationCurrentState) {
140
+ if (type === 'access') {
141
+ setupgradeNotificationCurrentState('accessHoursLeft');
142
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');
143
+ }
144
+ if (type === 'offer') {
145
+ setupgradeNotificationCurrentState('FPDHoursLeft');
146
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');
147
+ }
148
+ }
149
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
150
+ id: "learning.generic.upgradeNotification.expirationHours",
151
+ defaultMessage: `{hourCount, number} {hourCount, plural,
152
+ one {hour}
153
+ other {hours}} left`,
154
+ values: {
155
+ hourCount: hoursToExpiration
156
+ }
157
+ });
158
+ } else {
159
+ // Less than 1 hour
160
+ // setupgradeNotificationCurrentState is available in NotificationTray (not course home)
161
+ if (setupgradeNotificationCurrentState) {
162
+ if (type === 'access') {
163
+ setupgradeNotificationCurrentState('accessLastHour');
164
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');
165
+ }
166
+ if (type === 'offer') {
167
+ setupgradeNotificationCurrentState('FPDLastHour');
168
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');
169
+ }
170
+ }
171
+ expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
172
+ id: "learning.generic.upgradeNotification.expirationMinutes",
173
+ defaultMessage: "Less than 1 hour left"
174
+ });
175
+ }
176
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
177
+ className: "upsell-warning",
178
+ children: expirationText
179
+ });
180
+ };
181
+ ExpirationCountdown.propTypes = {
182
+ courseId: _propTypes.default.string.isRequired,
183
+ hoursToExpiration: _propTypes.default.number.isRequired,
184
+ setupgradeNotificationCurrentState: _propTypes.default.func,
185
+ type: _propTypes.default.string
186
+ };
187
+ ExpirationCountdown.defaultProps = {
188
+ setupgradeNotificationCurrentState: null,
189
+ type: null
190
+ };
191
+ const AccessExpirationDateBanner = _ref3 => {
192
+ let {
193
+ courseId,
194
+ accessExpirationDate,
195
+ timezoneFormatArgs,
196
+ setupgradeNotificationCurrentState
197
+ } = _ref3;
198
+ if (setupgradeNotificationCurrentState) {
199
+ setupgradeNotificationCurrentState('accessDateView');
200
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');
201
+ }
202
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
203
+ className: "upsell-warning-light",
204
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
205
+ id: "learning.generic.upgradeNotification.expiration",
206
+ defaultMessage: "Course access will expire {date}",
207
+ values: {
208
+ date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
209
+ day: "numeric",
210
+ month: "long",
211
+ value: accessExpirationDate
212
+ }, timezoneFormatArgs), "accessExpireDate")
213
+ }
214
+ })
215
+ });
216
+ };
217
+ AccessExpirationDateBanner.propTypes = {
218
+ courseId: _propTypes.default.string.isRequired,
219
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
220
+ timezoneFormatArgs: _propTypes.default.shape({
221
+ timeZone: _propTypes.default.string
222
+ }),
223
+ setupgradeNotificationCurrentState: _propTypes.default.func
224
+ };
225
+ AccessExpirationDateBanner.defaultProps = {
226
+ timezoneFormatArgs: {},
227
+ setupgradeNotificationCurrentState: null
228
+ };
229
+ const PastExpirationDateBanner = _ref4 => {
230
+ let {
231
+ courseId,
232
+ accessExpirationDate,
233
+ timezoneFormatArgs,
234
+ setupgradeNotificationCurrentState
235
+ } = _ref4;
236
+ if (setupgradeNotificationCurrentState) {
237
+ setupgradeNotificationCurrentState('PastExpirationDate');
238
+ (0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');
239
+ }
240
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
241
+ className: "upsell-warning",
242
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
243
+ id: "learning.generic.upgradeNotification.pastExpiration.banner",
244
+ defaultMessage: "Upgrade deadline passed on {date}",
245
+ values: {
246
+ date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
247
+ day: "numeric",
248
+ month: "long",
249
+ value: accessExpirationDate
250
+ }, timezoneFormatArgs), "accessExpireDate")
251
+ }
252
+ })
253
+ });
254
+ };
255
+ PastExpirationDateBanner.propTypes = {
256
+ courseId: _propTypes.default.string.isRequired,
257
+ accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
258
+ timezoneFormatArgs: _propTypes.default.shape({
259
+ timeZone: _propTypes.default.string
260
+ }),
261
+ setupgradeNotificationCurrentState: _propTypes.default.func
262
+ };
263
+ PastExpirationDateBanner.defaultProps = {
264
+ timezoneFormatArgs: {},
265
+ setupgradeNotificationCurrentState: null
266
+ };
267
+ const ExperimentalUpgradeNotification = _ref5 => {
268
+ let {
269
+ accessExpiration,
270
+ contentTypeGatingEnabled,
271
+ marketingUrl,
272
+ courseId,
273
+ offer,
274
+ org,
275
+ setupgradeNotificationCurrentState,
276
+ shouldDisplayBorder,
277
+ timeOffsetMillis,
278
+ upsellPageName,
279
+ userTimezone,
280
+ verifiedMode,
281
+ toggleSidebar
282
+ } = _ref5;
283
+ const intl = (0, _i18n.useIntl)();
284
+ const dateNow = Date.now();
285
+ const timezoneFormatArgs = userTimezone ? {
286
+ timeZone: userTimezone
287
+ } : {};
288
+ const correctedTime = new Date(dateNow + timeOffsetMillis);
289
+ const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;
290
+ const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;
291
+ const [decision] = (0, _reactSdk.useDecision)(_data.OPTIMIZELY_VTR_EXPERIMENT_KEY);
292
+ const {
293
+ enabled,
294
+ variationKey
295
+ } = decision;
296
+ const eventProperties = {
297
+ org_key: org,
298
+ courserun_key: courseId,
299
+ experiment_key: _data.OPTIMIZELY_VTR_EXPERIMENT_KEY,
300
+ variation_key: variationKey
301
+ };
302
+ const promotionEventProperties = _objectSpread({
303
+ creative: 'sidebarupsell',
304
+ name: 'In-Course Verification Prompt',
305
+ position: 'sidebar-message',
306
+ promotion_id: 'courseware_verified_certificate_upsell'
307
+ }, eventProperties);
308
+ (0, _react.useEffect)(() => {
309
+ (0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);
310
+ (0, _analytics.sendTrackEvent)('Promotion Viewed', promotionEventProperties);
311
+ // eslint-disable-next-line react-hooks/exhaustive-deps
312
+ }, []);
313
+ if (!verifiedMode) {
314
+ return null;
315
+ }
316
+ const logClick = () => {
317
+ (0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);
318
+ (0, _analytics.sendTrackingLogEvent)('edx.course.enrollment.upgrade.clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
319
+ location: 'sidebar-message'
320
+ }));
321
+ (0, _analytics.sendTrackEvent)('Promotion Clicked', promotionEventProperties);
322
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
323
+ linkCategory: 'green_upgrade',
324
+ linkName: `${upsellPageName}_green`,
325
+ linkType: 'button',
326
+ pageName: upsellPageName
327
+ }));
328
+ const {
329
+ userId
330
+ } = (0, _auth.getAuthenticatedUser)();
331
+ (0, _data.trackUpgradeClickOptimizely)(userId.toString());
332
+ };
333
+ const logClickPastExpiration = () => {
334
+ (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
335
+ linkCategory: 'upgrade_notification',
336
+ linkName: `${upsellPageName}_course_details`,
337
+ linkType: 'button',
338
+ pageName: upsellPageName
339
+ }));
340
+ };
341
+
342
+ /*
343
+ There are 5 parts that change in the upgrade card:
344
+ upgradeNotificationHeaderText
345
+ expirationBanner
346
+ upsellMessage
347
+ callToActionButton
348
+ offerCode
349
+ */
350
+ let upgradeNotificationHeaderText;
351
+ let expirationBanner;
352
+ let upsellMessage;
353
+ let callToActionButton;
354
+ let offerCode;
355
+ if (!!accessExpiration && !!contentTypeGatingEnabled) {
356
+ const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
357
+ if (hoursToAccessExpiration >= 7 * 24) {
358
+ if (offer) {
359
+ // countdown to the first purchase discount if there is one
360
+ const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);
361
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
362
+ id: "learning.generic.upgradeNotification.firstTimeLearnerDiscount",
363
+ defaultMessage: "{percentage}% First-Time Learner Discount",
364
+ values: {
365
+ percentage: offer.percentage
366
+ }
367
+ });
368
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
369
+ courseId: courseId,
370
+ hoursToExpiration: hoursToDiscountExpiration,
371
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
372
+ type: "offer"
373
+ });
374
+ } else {
375
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
376
+ id: "learning.generic.upgradeNotification.accessExpiration",
377
+ defaultMessage: "Upgrade your course today"
378
+ });
379
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(AccessExpirationDateBanner, {
380
+ courseId: courseId,
381
+ accessExpirationDate: accessExpirationDate,
382
+ timezoneFormatArgs: timezoneFormatArgs,
383
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
384
+ });
385
+ }
386
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBEFarAwayCardContent, {});
387
+ } else if (hoursToAccessExpiration < 7 * 24 && hoursToAccessExpiration >= 0) {
388
+ // more urgent messaging if there's less than 7 days left to access expiration
389
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
390
+ id: "learning.generic.upgradeNotification.accessExpirationUrgent",
391
+ defaultMessage: "Course Access Expiration"
392
+ });
393
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
394
+ courseId: courseId,
395
+ hoursToExpiration: hoursToAccessExpiration,
396
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
397
+ type: "access"
398
+ });
399
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBESoonCardContent, {
400
+ accessExpirationDate: accessExpirationDate,
401
+ timezoneFormatArgs: timezoneFormatArgs
402
+ });
403
+ } else {
404
+ // access expiration deadline has passed
405
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
406
+ id: "learning.generic.upgradeNotification.accessExpirationPast",
407
+ defaultMessage: "Course Access Expiration"
408
+ });
409
+ expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationDateBanner, {
410
+ courseId: courseId,
411
+ accessExpirationDate: accessExpirationDate,
412
+ timezoneFormatArgs: timezoneFormatArgs,
413
+ setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
414
+ });
415
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationCardContent, {});
416
+ }
417
+ } else {
418
+ // FBE is turned off
419
+ upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
420
+ id: "learning.generic.upgradeNotification.pursueAverifiedCertificate",
421
+ defaultMessage: "Pursue a verified certificate"
422
+ });
423
+ upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellNoFBECardContent, {});
424
+ }
425
+ if (pastExpirationDeadline) {
426
+ callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
427
+ variant: "primary",
428
+ onClick: logClickPastExpiration,
429
+ href: marketingUrl,
430
+ block: true,
431
+ children: "View Course Details"
432
+ });
433
+ } else {
434
+ callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_upgradeButton.UpgradeButton, {
435
+ offer: offer,
436
+ onClick: logClick,
437
+ verifiedMode: verifiedMode,
438
+ block: true
439
+ });
440
+ }
441
+ if (offer) {
442
+ // if there's a first purchase discount, message the code at the bottom
443
+ offerCode = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
444
+ className: "text-center discount-info",
445
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
446
+ id: "learning.generic.upgradeNotification.code",
447
+ defaultMessage: "Use code {code} at checkout",
448
+ values: {
449
+ code: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
450
+ className: "font-weight-bold",
451
+ children: offer.code
452
+ })
453
+ }
454
+ })
455
+ });
456
+ }
457
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("section", {
458
+ className: (0, _classnames.default)('upgrade-notification small', {
459
+ 'card mb-4': shouldDisplayBorder
460
+ }),
461
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
462
+ id: "courseHome-upgradeNotification",
463
+ children: [variationKey === 'partner_branding' && enabled ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_PartnerBranding.default, {
464
+ courseRunId: courseId
465
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
466
+ className: (0, _classnames.default)('h5 upgrade-notification-header', {
467
+ 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar
468
+ }),
469
+ id: "outline-sidebar-upgrade-header",
470
+ children: [upgradeNotificationHeaderText, !!toggleSidebar && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
471
+ className: "d-inline-flex ml-auto",
472
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.IconButton, {
473
+ src: _icons.Close,
474
+ size: "sm",
475
+ iconAs: _paragon.Icon,
476
+ onClick: toggleSidebar,
477
+ className: "icon-hover",
478
+ alt: intl.formatMessage(_messages.default.close)
479
+ })
480
+ })]
481
+ }), expirationBanner, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
482
+ className: "upgrade-notification-message",
483
+ children: upsellMessage
484
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
485
+ className: "upgrade-notification-button",
486
+ children: callToActionButton
487
+ }), offerCode]
488
+ })
489
+ });
490
+ };
491
+ ExperimentalUpgradeNotification.propTypes = {
492
+ courseId: _propTypes.default.string.isRequired,
493
+ org: _propTypes.default.string.isRequired,
494
+ accessExpiration: _propTypes.default.shape({
495
+ expirationDate: _propTypes.default.string
496
+ }),
497
+ contentTypeGatingEnabled: _propTypes.default.bool,
498
+ marketingUrl: _propTypes.default.string,
499
+ offer: _propTypes.default.shape({
500
+ expirationDate: _propTypes.default.string,
501
+ percentage: _propTypes.default.number,
502
+ code: _propTypes.default.string
503
+ }),
504
+ toggleSidebar: _propTypes.default.func,
505
+ shouldDisplayBorder: _propTypes.default.bool,
506
+ setupgradeNotificationCurrentState: _propTypes.default.func,
507
+ timeOffsetMillis: _propTypes.default.number,
508
+ upsellPageName: _propTypes.default.string.isRequired,
509
+ userTimezone: _propTypes.default.string,
510
+ verifiedMode: _propTypes.default.shape({
511
+ currencySymbol: _propTypes.default.string.isRequired,
512
+ price: _propTypes.default.number.isRequired,
513
+ upgradeUrl: _propTypes.default.string.isRequired
514
+ })
515
+ };
516
+ ExperimentalUpgradeNotification.defaultProps = {
517
+ accessExpiration: null,
518
+ contentTypeGatingEnabled: false,
519
+ marketingUrl: null,
520
+ offer: null,
521
+ setupgradeNotificationCurrentState: null,
522
+ shouldDisplayBorder: null,
523
+ timeOffsetMillis: 0,
524
+ userTimezone: null,
525
+ verifiedMode: null,
526
+ toggleSidebar: null
527
+ };
528
+ var _default = exports.default = (0, _i18n.injectIntl)(ExperimentalUpgradeNotification);
529
+ //# sourceMappingURL=ExperimentalUpgradeNotification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExperimentalUpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_auth","_paragon","_icons","_reactSdk","_localStorage","_upgradeButton","_UpsellBullets","_messages","_data","_PartnerBranding","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpsellNoFBECardContent","jsxs","className","children","jsx","VerifiedCertBullet","SupportMissionBullet","UpsellFBEFarAwayCardContent","UnlockGradedBullet","FullAccessBullet","UpsellFBESoonCardContent","_ref","accessExpirationDate","timezoneFormatArgs","includingAnyProgress","FormattedMessage","id","defaultMessage","date","FormattedDate","day","month","Date","benefitsOfUpgrading","rel","target","href","values","propTypes","PropTypes","instanceOf","isRequired","shape","timeZone","string","defaultProps","PastExpirationCardContent","ExpirationCountdown","_ref2","courseId","hoursToExpiration","setupgradeNotificationCurrentState","type","expirationText","setLocalStorage","dayCount","Math","floor","hourCount","number","func","AccessExpirationDateBanner","_ref3","PastExpirationDateBanner","_ref4","ExperimentalUpgradeNotification","_ref5","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","org","shouldDisplayBorder","timeOffsetMillis","upsellPageName","userTimezone","verifiedMode","toggleSidebar","intl","useIntl","dateNow","now","correctedTime","expirationDate","pastExpirationDeadline","decision","useDecision","OPTIMIZELY_VTR_EXPERIMENT_KEY","enabled","variationKey","eventProperties","org_key","courserun_key","experiment_key","variation_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","userId","getAuthenticatedUser","trackUpgradeClickOptimizely","toString","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","upsellMessage","callToActionButton","offerCode","hoursToAccessExpiration","hoursToDiscountExpiration","percentage","Button","variant","onClick","block","UpgradeButton","code","classNames","courseRunId","IconButton","src","Close","size","iconAs","Icon","alt","formatMessage","messages","close","bool","currencySymbol","price","upgradeUrl","_default","exports","injectIntl"],"sources":["../../src/upgrade-notification/ExperimentalUpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n useIntl, FormattedDate, FormattedMessage, injectIntl,\n} from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\nimport { useDecision } from '@optimizely/react-sdk';\n\nimport { setLocalStorage } from '@src/data/localStorage';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '@src/generic/upsell-bullets/UpsellBullets';\nimport messages from '@src/generic/messages';\n\nimport { OPTIMIZELY_VTR_EXPERIMENT_KEY, trackUpgradeClickOptimizely } from '../data';\nimport PartnerBranding from './partner-branding/PartnerBranding';\n\nconst UpsellNoFBECardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul pt-0\">\n <VerifiedCertBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBEFarAwayCardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBESoonCardContent = ({ accessExpirationDate, timezoneFormatArgs }) => {\n const includingAnyProgress = (\n <span className=\"font-weight-bold\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationAccessLoss.progress\"\n defaultMessage=\"including any progress\"\n />\n </span>\n );\n\n const date = (\n <FormattedDate\n key=\"accessDate\"\n day=\"numeric\"\n month=\"long\"\n value={new Date(accessExpirationDate)}\n {...timezoneFormatArgs}\n />\n );\n\n const benefitsOfUpgrading = (\n <a className=\"inline-link-underline font-weight-bold\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationVerifiedCert.benefits\"\n defaultMessage=\"benefits of upgrading\"\n />\n </a>\n );\n\n return (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationAccessLoss\"\n defaultMessage=\"You will lose all access to this course, {includingAnyProgress}, on {date}.\"\n values={{\n includingAnyProgress,\n date,\n }}\n />\n </p>\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationVerifiedCert\"\n defaultMessage=\"Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.\"\n values={{ benefitsOfUpgrading }}\n />\n </p>\n </div>\n );\n};\n\nUpsellFBESoonCardContent.propTypes = {\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n};\n\nUpsellFBESoonCardContent.defaultProps = {\n timezoneFormatArgs: {},\n};\n\nconst PastExpirationCardContent = () => (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pastExpiration.content\"\n defaultMessage=\"The upgrade deadline for this course passed. To upgrade, enroll in the next available session.\"\n />\n </p>\n </div>\n);\n\nconst ExpirationCountdown = ({\n courseId, hoursToExpiration, setupgradeNotificationCurrentState, type,\n}) => {\n let expirationText;\n if (hoursToExpiration >= 24) { // More than 1 day left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessDaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDdaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationDays\"\n defaultMessage={`{dayCount, number} {dayCount, plural,\n one {day}\n other {days}} left`}\n values={{\n dayCount: (Math.floor(hoursToExpiration / 24)),\n }}\n />\n );\n } else if (hoursToExpiration >= 1) { // More than 1 hour left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationHours\"\n defaultMessage={`{hourCount, number} {hourCount, plural,\n one {hour}\n other {hours}} left`}\n values={{\n hourCount: (hoursToExpiration),\n }}\n />\n );\n } else { // Less than 1 hour\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expirationMinutes\"\n defaultMessage=\"Less than 1 hour left\"\n />\n );\n }\n return (<div className=\"upsell-warning\">{expirationText}</div>);\n};\n\nExpirationCountdown.propTypes = {\n courseId: PropTypes.string.isRequired,\n hoursToExpiration: PropTypes.number.isRequired,\n setupgradeNotificationCurrentState: PropTypes.func,\n type: PropTypes.string,\n};\nExpirationCountdown.defaultProps = {\n setupgradeNotificationCurrentState: null,\n type: null,\n};\n\nconst AccessExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('accessDateView');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');\n }\n return (\n <div className=\"upsell-warning-light\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.expiration\"\n defaultMessage=\"Course access will expire {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nAccessExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nAccessExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst PastExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('PastExpirationDate');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');\n }\n return (\n <div className=\"upsell-warning\">\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pastExpiration.banner\"\n defaultMessage=\"Upgrade deadline passed on {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nPastExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nPastExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst ExperimentalUpgradeNotification = ({\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n courseId,\n offer,\n org,\n setupgradeNotificationCurrentState,\n shouldDisplayBorder,\n timeOffsetMillis,\n upsellPageName,\n userTimezone,\n verifiedMode,\n toggleSidebar,\n}) => {\n const intl = useIntl();\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.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n\n const [decision] = useDecision(OPTIMIZELY_VTR_EXPERIMENT_KEY);\n const { enabled, variationKey } = decision;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n experiment_key: OPTIMIZELY_VTR_EXPERIMENT_KEY,\n variation_key: variationKey,\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 logClick = () => {\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 const { userId } = getAuthenticatedUser();\n trackUpgradeClickOptimizely(userId.toString());\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 upsellMessage;\n let callToActionButton;\n let offerCode;\n\n if (!!accessExpiration && !!contentTypeGatingEnabled) {\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 = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.firstTimeLearnerDiscount\"\n defaultMessage=\"{percentage}% First-Time Learner Discount\"\n values={{\n percentage: (offer.percentage),\n }}\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpiration\"\n defaultMessage=\"Upgrade your course today\"\n />\n );\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n upsellMessage = <UpsellFBEFarAwayCardContent />;\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 = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpirationUrgent\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.accessExpirationPast\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\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 } else { // FBE is turned off\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"learning.generic.upgradeNotification.pursueAverifiedCertificate\"\n defaultMessage=\"Pursue a verified certificate\"\n />\n );\n upsellMessage = (<UpsellNoFBECardContent />);\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n View Course Details\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logClick}\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 <FormattedMessage\n id=\"learning.generic.upgradeNotification.code\"\n defaultMessage=\"Use code {code} at checkout\"\n values={{\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', { 'card mb-4': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n {\n (variationKey === 'partner_branding' && enabled) ? <PartnerBranding courseRunId={courseId} /> : null\n }\n <h2\n className={classNames('h5 upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {upgradeNotificationHeaderText}\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={intl.formatMessage(messages.close)}\n />\n </div>\n )}\n </h2>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nExperimentalUpgradeNotification.propTypes = {\n courseId: PropTypes.string.isRequired,\n org: PropTypes.string.isRequired,\n accessExpiration: PropTypes.shape({\n expirationDate: PropTypes.string,\n }),\n contentTypeGatingEnabled: PropTypes.bool,\n marketingUrl: PropTypes.string,\n offer: PropTypes.shape({\n expirationDate: PropTypes.string,\n percentage: PropTypes.number,\n code: PropTypes.string,\n }),\n toggleSidebar: PropTypes.func,\n shouldDisplayBorder: PropTypes.bool,\n setupgradeNotificationCurrentState: PropTypes.func,\n timeOffsetMillis: PropTypes.number,\n upsellPageName: PropTypes.string.isRequired,\n userTimezone: PropTypes.string,\n verifiedMode: PropTypes.shape({\n currencySymbol: PropTypes.string.isRequired,\n price: PropTypes.number.isRequired,\n upgradeUrl: PropTypes.string.isRequired,\n }),\n};\n\nExperimentalUpgradeNotification.defaultProps = {\n accessExpiration: null,\n contentTypeGatingEnabled: false,\n marketingUrl: null,\n offer: null,\n setupgradeNotificationCurrentState: null,\n shouldDisplayBorder: null,\n timeOffsetMillis: 0,\n userTimezone: null,\n verifiedMode: null,\n toggleSidebar: null,\n};\n\nexport default injectIntl(ExperimentalUpgradeNotification);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "DefaultUpgradeNotification", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _DefaultUpgradeNotification.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ExperimentalUpgradeNotification", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _ExperimentalUpgradeNotification.default;
16
+ }
17
+ });
18
+ var _DefaultUpgradeNotification = _interopRequireDefault(require("./DefaultUpgradeNotification"));
19
+ var _ExperimentalUpgradeNotification = _interopRequireDefault(require("./ExperimentalUpgradeNotification"));
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_DefaultUpgradeNotification","_interopRequireDefault","require","_ExperimentalUpgradeNotification","obj","__esModule","default"],"sources":["../../src/upgrade-notification/index.jsx"],"sourcesContent":["export { default as DefaultUpgradeNotification } from './DefaultUpgradeNotification';\nexport { default as ExperimentalUpgradeNotification } from './ExperimentalUpgradeNotification';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,2BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gCAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA+F,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _paragon = require("@openedx/paragon");
10
+ var _api = require("../../data/api");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ const PartnerBranding = _ref => {
16
+ let {
17
+ courseRunId
18
+ } = _ref;
19
+ const [imageURL, setImageURL] = (0, _react.useState)('');
20
+ const [orgName, setOrgName] = (0, _react.useState)('');
21
+ (0, _react.useEffect)(() => {
22
+ async function fetchData() {
23
+ const orgData = await (0, _api.fetchOrg)(courseRunId);
24
+ setImageURL(orgData.logo_image_url);
25
+ setOrgName(orgData.name);
26
+ }
27
+ fetchData();
28
+ }, [courseRunId]);
29
+ return imageURL ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
30
+ src: imageURL,
31
+ alt: `${orgName} logo`,
32
+ className: "border-light-400 border",
33
+ style: {
34
+ width: '40%',
35
+ marginTop: '20px',
36
+ marginLeft: '20px',
37
+ padding: '5px'
38
+ }
39
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
40
+ "data-testid": "img-skeleton",
41
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Skeleton, {
42
+ width: 200,
43
+ height: 100,
44
+ style: {
45
+ marginTop: '20px',
46
+ marginLeft: '20px'
47
+ }
48
+ })
49
+ });
50
+ };
51
+ PartnerBranding.propTypes = {
52
+ courseRunId: _propTypes.default.string.isRequired
53
+ };
54
+ var _default = exports.default = PartnerBranding;
55
+ //# sourceMappingURL=PartnerBranding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PartnerBranding.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_api","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","PartnerBranding","_ref","courseRunId","imageURL","setImageURL","useState","orgName","setOrgName","useEffect","fetchData","orgData","fetchOrg","logo_image_url","name","jsx","src","alt","className","style","width","marginTop","marginLeft","padding","children","Skeleton","height","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../../src/upgrade-notification/partner-branding/PartnerBranding.jsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Skeleton } from '@openedx/paragon';\n\nimport { fetchOrg } from '../../data/api';\n\nconst PartnerBranding = ({ courseRunId }) => {\n const [imageURL, setImageURL] = useState('');\n const [orgName, setOrgName] = useState('');\n\n useEffect(() => {\n async function fetchData() {\n const orgData = await fetchOrg(courseRunId);\n setImageURL(orgData.logo_image_url);\n setOrgName(orgData.name);\n }\n fetchData();\n }, [courseRunId]);\n\n return (\n imageURL ? (\n <img\n src={imageURL}\n alt={`${orgName} logo`}\n className=\"border-light-400 border\"\n style={{\n width: '40%',\n marginTop: '20px',\n marginLeft: '20px',\n padding: '5px',\n }}\n />\n ) : (\n <div data-testid=\"img-skeleton\">\n <Skeleton\n width={200}\n height={100}\n style={{\n marginTop: '20px',\n marginLeft: '20px',\n }}\n />\n </div>\n )\n );\n};\n\nPartnerBranding.propTypes = {\n courseRunId: PropTypes.string.isRequired,\n};\n\nexport default PartnerBranding;\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": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,7 +49,8 @@
49
49
  "glob": "7.2.3",
50
50
  "husky": "7.0.4",
51
51
  "jest": "29.7.0",
52
- "semantic-release": "^21.0.7"
52
+ "semantic-release": "^21.0.7",
53
+ "rosie": "2.1.1"
53
54
  },
54
55
  "peerDependencies": {
55
56
  "@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",