@edx/frontend-plugin-advertisements 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.rst ADDED
@@ -0,0 +1,93 @@
1
+ frontend-plugin-advertisements
2
+ ##############################
3
+
4
+ |license-badge| |status-badge| |ci-badge| |codecov-badge|
5
+
6
+ .. |license-badge| image:: https://img.shields.io/github/license/edx/frontend-plugin-advertisements.svg
7
+ :target: https://github.com/edx/frontend-plugin-advertisements/blob/main/LICENSE
8
+ :alt: License
9
+
10
+ .. |status-badge| image:: https://img.shields.io/badge/Status-Maintained-brightgreen
11
+
12
+ .. |ci-badge| image:: https://github.com/edx/frontend-plugin-advertisements/actions/workflows/ci.yml/badge.svg
13
+ :target: https://github.com/edx/frontend-plugin-advertisements/actions/workflows/ci.yml
14
+ :alt: Continuous Integration
15
+
16
+ .. |codecov-badge| image:: https://codecov.io/github/edx/frontend-plugin-advertisements/coverage.svg?branch=main
17
+ :target: https://codecov.io/github/edx/frontend-plugin-advertisements?branch=main
18
+ :alt: Codecov
19
+
20
+ Purpose
21
+ =======
22
+
23
+ This repository hosts plugin components intended for use in frontend-app-learning plugin slots. These components are related
24
+ to in course advertising and experimentation around in course advertising.
25
+
26
+ For more on the frontend plugin framework, please see https://github.com/openedx/frontend-plugin-framework/tree/master.
27
+
28
+ Getting Started
29
+ ===============
30
+
31
+ Devstack Installation
32
+ ---------------------
33
+ This plugin is intended for use with the `Learning MFE`_. Please follow instructions for running the Learning MFE as
34
+ documented in the repository README.
35
+
36
+ .. _Learning MFE: https://github.com/openedx/frontend-app-learning
37
+
38
+ Development
39
+ -----------
40
+ This plugin is intended for use with the `Learning MFE`_, specifically with several plugin slots defined in the MFE.
41
+ In order to install a local checkout of this plugin into the `Learning MFE`_ instead of from npm, follow the
42
+ documentation for `local module development`_ in the `Learning MFE`_. Additionally, if you would like for these
43
+ components to appear in the correct plugin slots, you will need a local ``env.config.js`` file in your copy of
44
+ ``frontend-app-learning``.
45
+
46
+ If you are planning to run the `Learning MFE`_ in `devstack`_, be sure to clone this repository into a ``src``
47
+ subdirectory of your `devstack`_ workspace directory so that the code is properly mounted into the `Learning MFE`_
48
+ Docker container. You will need to update the ``dir`` key in your ``module.config.js`` file appropriately. See
49
+ the `Mounting frontend packages from src directory`_ ADR in the `devstack`_ repository for further details.
50
+
51
+ If you want to install a local checkout of this plugin for use in your `Learning MFE`_ ``env.config.jsx`` file,
52
+ follow the documentation mentioned above. However, if you want do active development on this plugin and wish to see your
53
+ changes immediately reflected in the `Learning MFE`_, then you will need to modify your ``module.config.js`` to reference
54
+ the ``src`` directory of this ``repository`` in the ``dist`` key instead of the ``dist`` directory. Below is an example
55
+ ``module.config.js`` for this use case. If you set up your ``module.config.js`` this way, your changes will be picked
56
+ up by the `Learning MFE`_ via the hot module reloading process.::
57
+
58
+ module.exports = {
59
+ localModules: [
60
+ { moduleName: '@edx/frontend-plugin-advertisements', dir: '../src/frontend-plugin-advertisements', dist: 'src' },
61
+ ],
62
+ };
63
+
64
+ .. _devstack: https://github.com/openedx/devstack
65
+ .. _Learning MFE: https://github.com/openedx/frontend-app-learning
66
+ .. _local module development: https://github.com/openedx/frontend-app-learning#local-module-development
67
+ .. _Mounting frontend packages from src directory: https://github.com/openedx/devstack/blob/master/docs/decisions/0005-frontend-package-mounts.rst
68
+
69
+ Development with Optimizely
70
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
71
+ This repository uses the Optimizely SDK to implement frontend experiments. In order to simplify local development,
72
+ this repository contains a mock Optimizely implementation. Please see the `instructions`_ for further details.
73
+
74
+ .. _instructions: https://github.com/edx/frontend-plugin-advertisements/tree/main/src/mocks/optimizely/README.rst
75
+
76
+ License
77
+ =======
78
+
79
+ The code in this repository is licensed under the AGPLv3 unless otherwise
80
+ noted.
81
+
82
+ Please see `LICENSE <LICENSE>`_ for details.
83
+
84
+
85
+ People
86
+ ======
87
+
88
+ Contact `edx/masters-devs-cosmonauts` if you need help with this repository.
89
+
90
+ Reporting Security Issues
91
+ =========================
92
+
93
+ Please do not report security issues in public. Email security@edx.org instead.
@@ -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":[]}
@@ -0,0 +1,46 @@
1
+ Optimizely Mock Implementation
2
+ ##############################
3
+
4
+ Purpose
5
+ =======
6
+
7
+ This repository uses the `Optimizely SDK`_ to implement frontend experiments. Using Optimizely requires the use of an
8
+ SDK key or datafile. This poses a problem for development locally, because it requires that an `Optimizely environment`_
9
+ exists for local environments. When developing locally, it may be preferable not to rely explicitly on Optimizely and
10
+ to reserve testing the Optimizely flow in a staging environment.
11
+
12
+ This module contains a mock Optimizely implementation module that allows engineers to hardcode the return
13
+ values of the functions of the `Optimizely SDK`_, namely the `useDecision hook`_.
14
+
15
+ Usage
16
+ =====
17
+
18
+ The implementations of the `createInstance function`_ and the `OptimizelyProvider component`_ are no-op pass through
19
+ functions. They do not do anything.
20
+
21
+ In order to modify the experiment and how your user is bucketed, you will need to modify the `useDecision hook`_
22
+ implementation. Use the React SDK documentation to determine how to modify this function to suit your needs.
23
+
24
+ In addition, you will need to update your ``module.config.js`` file in your local checkout of the Learning MFE to
25
+ map the ``@optimizely/react-sdk`` module to this mock module.
26
+
27
+ A sample ``module.config.js`` file is shown below, but please refer to the documentation for `local module development`_
28
+ in the `Learning MFE`_ for more information.
29
+
30
+
31
+ .. code-block::
32
+
33
+ module.exports = {
34
+ localModules: [
35
+ { moduleName: '@edx/frontend-plugin-advertisements', dir: '../src/frontend-plugin-advertisements', dist: 'src' },
36
+ { moduleName: '@optimizely/react-sdk', dir: '../src/frontend-plugin-advertisements/src/mocks/optimizely', dist: '.' },
37
+ ],
38
+ };
39
+
40
+ .. _createInstance function: https://docs.developers.optimizely.com/feature-experimentation/docs/initialize-sdk-react
41
+ .. _Learning MFE: https://github.com/openedx/frontend-app-learning
42
+ .. _local module development: https://github.com/openedx/frontend-app-learning#local-module-development
43
+ .. _Optimizely environment: https://docs.developers.optimizely.com/feature-experimentation/docs/manage-environments
44
+ .. _OptimizelyProvider component: https://docs.developers.optimizely.com/feature-experimentation/docs/optimizelyprovider
45
+ .. _Optimizely SDK: https://docs.developers.optimizely.com/feature-experimentation/docs/javascript-react-sdk
46
+ .. _useDecision hook: https://docs.developers.optimizely.com/feature-experimentation/docs/usedecision-react
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useDecision = exports.createInstance = exports.OptimizelyProvider = void 0;
7
+ /* eslint-disable no-unused-vars */
8
+ /* eslint-disable react/prop-types */
9
+
10
+ const useDecision = experimentKey => [{
11
+ enabled: false,
12
+ variationKey: 'fill me in'
13
+ }];
14
+ exports.useDecision = useDecision;
15
+ const OptimizelyProvider = _ref => {
16
+ let {
17
+ optimizely,
18
+ user,
19
+ children = null
20
+ } = _ref;
21
+ return children;
22
+ };
23
+ exports.OptimizelyProvider = OptimizelyProvider;
24
+ const createInstance = args => null;
25
+ exports.createInstance = createInstance;
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["useDecision","experimentKey","enabled","variationKey","exports","OptimizelyProvider","_ref","optimizely","user","children","createInstance","args"],"sources":["../../../src/mocks/optimizely/index.jsx"],"sourcesContent":["/* eslint-disable no-unused-vars */\n/* eslint-disable react/prop-types */\n\nconst useDecision = (experimentKey) => (\n [{ enabled: false, variationKey: 'fill me in' }]\n);\n\nconst OptimizelyProvider = ({ optimizely, user, children = null }) => children;\n\nconst createInstance = (args) => (null);\n\nexport { createInstance, useDecision, OptimizelyProvider };\n"],"mappings":";;;;;;AAAA;AACA;;AAEA,MAAMA,WAAW,GAAIC,aAAa,IAChC,CAAC;EAAEC,OAAO,EAAE,KAAK;EAAEC,YAAY,EAAE;AAAa,CAAC,CAChD;AAACC,OAAA,CAAAJ,WAAA,GAAAA,WAAA;AAEF,MAAMK,kBAAkB,GAAGC,IAAA;EAAA,IAAC;IAAEC,UAAU;IAAEC,IAAI;IAAEC,QAAQ,GAAG;EAAK,CAAC,GAAAH,IAAA;EAAA,OAAKG,QAAQ;AAAA;AAACL,OAAA,CAAAC,kBAAA,GAAAA,kBAAA;AAE/E,MAAMK,cAAc,GAAIC,IAAI,IAAM,IAAK;AAACP,OAAA,CAAAM,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "optimizely",
3
+ "version": "1.0.0",
4
+ "description": "Optimizely mock application for local development",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "author": "edX",
10
+ "license": "AGPL-3.0"
11
+ }
@@ -9,12 +9,16 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
10
  var _i18n = require("@edx/frontend-platform/i18n");
11
11
  var _analytics = require("@edx/frontend-platform/analytics");
12
+ var _auth = require("@edx/frontend-platform/auth");
12
13
  var _paragon = require("@openedx/paragon");
13
14
  var _icons = require("@openedx/paragon/icons");
15
+ var _reactSdk = require("@optimizely/react-sdk");
14
16
  var _localStorage = require("@src/data/localStorage");
15
17
  var _upgradeButton = require("@src/generic/upgrade-button");
16
18
  var _UpsellBullets = require("@src/generic/upsell-bullets/UpsellBullets");
17
19
  var _messages = _interopRequireDefault(require("@src/generic/messages"));
20
+ var _data = require("../data");
21
+ var _PartnerBranding = _interopRequireDefault(require("./partner-branding/PartnerBranding"));
18
22
  var _jsxRuntime = require("react/jsx-runtime");
19
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
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); }
@@ -284,9 +288,16 @@ const ExperimentalUpgradeNotification = _ref5 => {
284
288
  const correctedTime = new Date(dateNow + timeOffsetMillis);
285
289
  const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;
286
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;
287
296
  const eventProperties = {
288
297
  org_key: org,
289
- courserun_key: courseId
298
+ courserun_key: courseId,
299
+ experiment_key: _data.OPTIMIZELY_VTR_EXPERIMENT_KEY,
300
+ variation_key: variationKey
290
301
  };
291
302
  const promotionEventProperties = _objectSpread({
292
303
  creative: 'sidebarupsell',
@@ -314,6 +325,10 @@ const ExperimentalUpgradeNotification = _ref5 => {
314
325
  linkType: 'button',
315
326
  pageName: upsellPageName
316
327
  }));
328
+ const {
329
+ userId
330
+ } = (0, _auth.getAuthenticatedUser)();
331
+ (0, _data.trackUpgradeClickOptimizely)(userId.toString());
317
332
  };
318
333
  const logClickPastExpiration = () => {
319
334
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
@@ -445,7 +460,9 @@ const ExperimentalUpgradeNotification = _ref5 => {
445
460
  }),
446
461
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
447
462
  id: "courseHome-upgradeNotification",
448
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
463
+ children: [variationKey === 'partner_branding' && enabled ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_PartnerBranding.default, {
464
+ courseRunId: courseId
465
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
449
466
  className: (0, _classnames.default)('h5 upgrade-notification-header', {
450
467
  'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar
451
468
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"ExperimentalUpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_localStorage","_upgradeButton","_UpsellBullets","_messages","_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","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","upsellMessage","callToActionButton","offerCode","hoursToAccessExpiration","hoursToDiscountExpiration","percentage","Button","variant","onClick","block","UpgradeButton","code","classNames","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 { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\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\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 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 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 };\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 <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":[]}
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,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.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "repository": {
6
6
  "type": "git",