@edx/frontend-plugin-advertisements 1.7.0 → 1.8.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/dist/data/__factories__/courseHomeMeta.factory.js +1 -1
- package/dist/data/__factories__/courseHomeMeta.factory.js.map +1 -1
- package/dist/data/{api.js → discovery_api.js} +1 -1
- package/dist/data/discovery_api.js.map +1 -0
- package/dist/data/index.js +6 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/lms_api.js +36 -0
- package/dist/data/lms_api.js.map +1 -0
- package/dist/data/optimizely.js +8 -1
- package/dist/data/optimizely.js.map +1 -1
- package/dist/index.js +4 -9
- package/dist/index.js.map +1 -1
- package/dist/upgrade-notification/ExperimentalUpgradeNotification.js +4 -1
- package/dist/upgrade-notification/ExperimentalUpgradeNotification.js.map +1 -1
- package/dist/upgrade-notification/UpgradeNotification.js +25 -0
- package/dist/upgrade-notification/UpgradeNotification.js.map +1 -0
- package/dist/upgrade-notification/certificate-preview/CertificatePreview.js +169 -0
- package/dist/upgrade-notification/certificate-preview/CertificatePreview.js.map +1 -0
- package/dist/upgrade-notification/certificate-preview/CertificatePreview.scss +104 -0
- package/dist/upgrade-notification/certificate-preview/Signatory.js +39 -0
- package/dist/upgrade-notification/certificate-preview/Signatory.js.map +1 -0
- package/dist/upgrade-notification/certificate-preview/assets/signatory-placeholder.png +0 -0
- package/dist/upgrade-notification/certificate-preview/index.js +10 -0
- package/dist/upgrade-notification/certificate-preview/index.js.map +1 -0
- package/dist/upgrade-notification/index.js +3 -14
- package/dist/upgrade-notification/index.js.map +1 -1
- package/dist/upgrade-notification/partner-branding/PartnerBranding.js +2 -2
- package/dist/upgrade-notification/partner-branding/PartnerBranding.js.map +1 -1
- package/package.json +5 -4
- package/dist/data/api.js.map +0 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _rosie = require("rosie");
|
|
4
4
|
// eslint-disable-line import/no-extraneous-dependencies
|
|
5
5
|
|
|
6
|
-
_rosie.Factory.define('courseHomeMeta').option('host', 'http://localhost:18000').attr('org', 'edX').attr('userTimezone', null).attr('verifiedMode', ['host'], host => ({
|
|
6
|
+
_rosie.Factory.define('courseHomeMeta').option('host', 'http://localhost:18000').attr('number', 'DemoX').attr('title', 'Demonstration Course').attr('org', 'edX').attr('userTimezone', null).attr('verifiedMode', ['host'], host => ({
|
|
7
7
|
access_expiration_date: '2050-01-01T12:00:00',
|
|
8
8
|
currency: 'USD',
|
|
9
9
|
currencySymbol: '$',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"courseHomeMeta.factory.js","names":["_rosie","require","Factory","define","option","attr","host","access_expiration_date","currency","currencySymbol","price","sku","upgradeUrl"],"sources":["../../../src/data/__factories__/courseHomeMeta.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\nFactory.define('courseHomeMeta')\n .option('host', 'http://localhost:18000')\n .attr('org', 'edX')\n .attr('userTimezone', null)\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"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjCC,cAAO,CAACC,MAAM,CAAC,gBAAgB,CAAC,CAC7BC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CACxCC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAClBA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAC1BA,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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"courseHomeMeta.factory.js","names":["_rosie","require","Factory","define","option","attr","host","access_expiration_date","currency","currencySymbol","price","sku","upgradeUrl"],"sources":["../../../src/data/__factories__/courseHomeMeta.factory.js"],"sourcesContent":["import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies\n\nFactory.define('courseHomeMeta')\n .option('host', 'http://localhost:18000')\n .attr('number', 'DemoX')\n .attr('title', 'Demonstration Course')\n .attr('org', 'edX')\n .attr('userTimezone', null)\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"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAiC;;AAEjCC,cAAO,CAACC,MAAM,CAAC,gBAAgB,CAAC,CAC7BC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CACxCC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CACvBA,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CACrCA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAClBA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAC1BA,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","ignoreList":[]}
|
|
@@ -24,4 +24,4 @@ async function fetchOrg(courseRunId) {
|
|
|
24
24
|
} = await (0, _auth.getAuthenticatedHttpClient)().get(coursesUrl.href);
|
|
25
25
|
return data.owners[0]; // only retrieve first org related to course
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=
|
|
27
|
+
//# sourceMappingURL=discovery_api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery_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/discovery_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":[]}
|
package/dist/data/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "OPTIMIZELY_VTR_EXPERIMENT_KEY", {
|
|
|
9
9
|
return _optimizely.OPTIMIZELY_VTR_EXPERIMENT_KEY;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _optimizely.OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "optimizely", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function () {
|
package/dist/data/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_optimizely","require"],"sources":["../../src/data/index.jsx"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"file":"index.js","names":["_optimizely","require"],"sources":["../../src/data/index.jsx"],"sourcesContent":["export {\n optimizely,\n OPTIMIZELY_VTR_EXPERIMENT_KEY,\n OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS,\n trackUpgradeClickOptimizely,\n} from './optimizely';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fetchOrg = fetchOrg;
|
|
7
|
+
exports.fetchVerifiedName = fetchVerifiedName;
|
|
8
|
+
var _frontendPlatform = require("@edx/frontend-platform");
|
|
9
|
+
var _auth = require("@edx/frontend-platform/auth");
|
|
10
|
+
async function fetchOrg(org) {
|
|
11
|
+
const LmsApiUrl = (0, _frontendPlatform.getConfig)().LMS_BASE_URL;
|
|
12
|
+
const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);
|
|
13
|
+
let data;
|
|
14
|
+
try {
|
|
15
|
+
({
|
|
16
|
+
data
|
|
17
|
+
} = await (0, _auth.getAuthenticatedHttpClient)().get(orgUrl.href));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
data = null;
|
|
20
|
+
}
|
|
21
|
+
return (0, _frontendPlatform.camelCaseObject)(data);
|
|
22
|
+
}
|
|
23
|
+
async function fetchVerifiedName() {
|
|
24
|
+
const LmsApiUrl = (0, _frontendPlatform.getConfig)().LMS_BASE_URL;
|
|
25
|
+
const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);
|
|
26
|
+
let data;
|
|
27
|
+
try {
|
|
28
|
+
({
|
|
29
|
+
data
|
|
30
|
+
} = await (0, _auth.getAuthenticatedHttpClient)().get(verifiedNameUrl.href));
|
|
31
|
+
} catch (error) {
|
|
32
|
+
data = null;
|
|
33
|
+
}
|
|
34
|
+
return (0, _frontendPlatform.camelCaseObject)(data);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=lms_api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lms_api.js","names":["_frontendPlatform","require","_auth","fetchOrg","org","LmsApiUrl","getConfig","LMS_BASE_URL","orgUrl","URL","data","getAuthenticatedHttpClient","get","href","error","camelCaseObject","fetchVerifiedName","verifiedNameUrl"],"sources":["../../src/data/lms_api.js"],"sourcesContent":["import { getConfig, camelCaseObject } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\n\nexport async function fetchOrg(org) {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const orgUrl = new URL(`${LmsApiUrl}/api/organizations/v0/organizations/${org}/`);\n\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(orgUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n\nexport async function fetchVerifiedName() {\n const LmsApiUrl = getConfig().LMS_BASE_URL;\n const verifiedNameUrl = new URL(`${LmsApiUrl}/api/edx_name_affirmation/v1/verified_name`);\n let data;\n try {\n ({ data } = await getAuthenticatedHttpClient().get(verifiedNameUrl.href));\n } catch (error) {\n data = null;\n }\n return camelCaseObject(data);\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEO,eAAeE,QAAQA,CAACC,GAAG,EAAE;EAClC,MAAMC,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMC,MAAM,GAAG,IAAIC,GAAG,CAAE,GAAEJ,SAAU,uCAAsCD,GAAI,GAAE,CAAC;EAEjF,IAAIM,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACJ,MAAM,CAACK,IAAI,CAAC;EACjE,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B;AAEO,eAAeM,iBAAiBA,CAAA,EAAG;EACxC,MAAMX,SAAS,GAAG,IAAAC,2BAAS,EAAC,CAAC,CAACC,YAAY;EAC1C,MAAMU,eAAe,GAAG,IAAIR,GAAG,CAAE,GAAEJ,SAAU,4CAA2C,CAAC;EACzF,IAAIK,IAAI;EACR,IAAI;IACF,CAAC;MAAEA;IAAK,CAAC,GAAG,MAAM,IAAAC,gCAA0B,EAAC,CAAC,CAACC,GAAG,CAACK,eAAe,CAACJ,IAAI,CAAC;EAC1E,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdJ,IAAI,GAAG,IAAI;EACb;EACA,OAAO,IAAAK,iCAAe,EAACL,IAAI,CAAC;AAC9B","ignoreList":[]}
|
package/dist/data/optimizely.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.trackUpgradeClickOptimizely = exports.optimizely = exports.OPTIMIZELY_VTR_EXPERIMENT_KEY = void 0;
|
|
6
|
+
exports.trackUpgradeClickOptimizely = exports.optimizely = exports.OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS = 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,6 +11,13 @@ 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 OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS = exports.OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS = {
|
|
15
|
+
WHY_NOT_SURVEY: 'why_not_survey',
|
|
16
|
+
CERTIFICATE_PREVIEW: 'certificate_preview',
|
|
17
|
+
PARTNER_BRANDING: 'partner_branding',
|
|
18
|
+
CONTROL: 'control',
|
|
19
|
+
OFF: 'off'
|
|
20
|
+
};
|
|
14
21
|
const trackUpgradeClickOptimizely = function (userId) {
|
|
15
22
|
let userAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
16
23
|
optimizely.track('upgrade_button_click', userId, userAttributes);
|
|
@@ -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","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 {
|
|
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","OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS","WHY_NOT_SURVEY","CERTIFICATE_PREVIEW","PARTNER_BRANDING","CONTROL","OFF","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 OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS = {\n WHY_NOT_SURVEY: 'why_not_survey',\n CERTIFICATE_PREVIEW: 'certificate_preview',\n PARTNER_BRANDING: 'partner_branding',\n CONTROL: 'control',\n OFF: 'off',\n};\n\nconst trackUpgradeClickOptimizely = (userId, userAttributes = {}) => {\n optimizely.track('upgrade_button_click', userId, userAttributes);\n};\n\nexport {\n optimizely,\n OPTIMIZELY_VTR_EXPERIMENT_KEY,\n OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS,\n trackUpgradeClickOptimizely,\n};\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,wCAAwC,GAAAJ,OAAA,CAAAI,wCAAA,GAAG;EAC/CC,cAAc,EAAE,gBAAgB;EAChCC,mBAAmB,EAAE,qBAAqB;EAC1CC,gBAAgB,EAAE,kBAAkB;EACpCC,OAAO,EAAE,SAAS;EAClBC,GAAG,EAAE;AACP,CAAC;AAED,MAAMC,2BAA2B,GAAG,SAAAA,CAACC,MAAM,EAA0B;EAAA,IAAxBC,cAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC9Dd,UAAU,CAACiB,KAAK,CAAC,sBAAsB,EAAEL,MAAM,EAAEC,cAAc,CAAC;AAClE,CAAC;AAACZ,OAAA,CAAAU,2BAAA,GAAAA,2BAAA","ignoreList":[]}
|
package/dist/index.js
CHANGED
|
@@ -9,18 +9,13 @@ Object.defineProperty(exports, "DefaultLockPaywall", {
|
|
|
9
9
|
return _paywall.DefaultLockPaywall;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
Object.defineProperty(exports, "
|
|
12
|
+
Object.defineProperty(exports, "UpgradeNotification", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return _upgradeNotification.
|
|
15
|
+
return _upgradeNotification.default;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _upgradeNotification.ExperimentalUpgradeNotification;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
var _upgradeNotification = require("./upgrade-notification");
|
|
18
|
+
var _upgradeNotification = _interopRequireDefault(require("./upgrade-notification"));
|
|
25
19
|
var _paywall = require("./paywall");
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_upgradeNotification","require","_paywall"],"sources":["../src/index.jsx"],"sourcesContent":["export {
|
|
1
|
+
{"version":3,"file":"index.js","names":["_upgradeNotification","_interopRequireDefault","require","_paywall","obj","__esModule","default"],"sources":["../src/index.jsx"],"sourcesContent":["export { default as UpgradeNotification } from './upgrade-notification';\nexport { DefaultLockPaywall } from './paywall';\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,oBAAA,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":[]}
|
|
@@ -19,6 +19,7 @@ var _UpsellBullets = require("@src/generic/upsell-bullets/UpsellBullets");
|
|
|
19
19
|
var _messages = _interopRequireDefault(require("@src/generic/messages"));
|
|
20
20
|
var _modelStore = require("@src/generic/model-store");
|
|
21
21
|
var _data = require("../data");
|
|
22
|
+
var _certificatePreview = _interopRequireDefault(require("./certificate-preview"));
|
|
22
23
|
var _PartnerBranding = _interopRequireDefault(require("./partner-branding/PartnerBranding"));
|
|
23
24
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -468,8 +469,10 @@ const ExperimentalUpgradeNotification = _ref5 => {
|
|
|
468
469
|
}),
|
|
469
470
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
470
471
|
id: "courseHome-upgradeNotification",
|
|
471
|
-
children: [variationKey ===
|
|
472
|
+
children: [variationKey === _data.OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.PARTNER_BRANDING && enabled ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_PartnerBranding.default, {
|
|
472
473
|
courseRunId: courseId
|
|
474
|
+
}) : null, variationKey === _data.OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.CERTIFICATE_PREVIEW && enabled ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_certificatePreview.default, {
|
|
475
|
+
courseId: courseId
|
|
473
476
|
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
|
|
474
477
|
className: (0, _classnames.default)('h5 upgrade-notification-header', {
|
|
475
478
|
'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExperimentalUpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_auth","_paragon","_icons","_reactSdk","_localStorage","_upgradeButton","_UpsellBullets","_messages","_modelStore","_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","setNotificationCurrentState","toggleSidebar","pluginLocationId","org","userTimezone","verifiedMode","useModel","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","timeOffsetMillis","intl","useIntl","dateNow","now","correctedTime","expirationDate","pastExpirationDeadline","shouldDisplayBorder","upsellPageName","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","_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';\nimport { useModel } from '@src/generic/model-store';\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 id,\n courseId,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n offer,\n timeOffsetMillis,\n } = useModel('coursewareMeta', courseId);\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 const shouldDisplayBorder = pluginLocationId !== 'outline_tab_notifications';\n const upsellPageName = pluginLocationId === 'outline_tab_notifications' ? 'course_home' : 'in_course';\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\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 id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nExperimentalUpgradeNotification.defaultProps = {\n setNotificationCurrentState: 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","_modelStore","_data","_certificatePreview","_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","setNotificationCurrentState","toggleSidebar","pluginLocationId","org","userTimezone","verifiedMode","useModel","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","timeOffsetMillis","intl","useIntl","dateNow","now","correctedTime","expirationDate","pastExpirationDeadline","shouldDisplayBorder","upsellPageName","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","OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS","PARTNER_BRANDING","courseRunId","CERTIFICATE_PREVIEW","IconButton","src","Close","size","iconAs","Icon","alt","formatMessage","messages","close","_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';\nimport { useModel } from '@src/generic/model-store';\n\nimport { OPTIMIZELY_VTR_EXPERIMENT_KEY, OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS, trackUpgradeClickOptimizely } from '../data';\nimport CertificatePreview from './certificate-preview';\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 id,\n courseId,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n offer,\n timeOffsetMillis,\n } = useModel('coursewareMeta', courseId);\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 const shouldDisplayBorder = pluginLocationId !== 'outline_tab_notifications';\n const upsellPageName = pluginLocationId === 'outline_tab_notifications' ? 'course_home' : 'in_course';\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\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 === OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.PARTNER_BRANDING && enabled)\n ? <PartnerBranding courseRunId={courseId} />\n : null\n }\n {\n (variationKey === OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.CERTIFICATE_PREVIEW && enabled)\n ? <CertificatePreview courseId={courseId} />\n : 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 id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nExperimentalUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n};\n\nexport default injectIntl(ExperimentalUpgradeNotification);\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AAGA,IAAAK,UAAA,GAAAL,OAAA;AACA,IAAAM,KAAA,GAAAN,OAAA;AACA,IAAAO,QAAA,GAAAP,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AACA,IAAAS,SAAA,GAAAT,OAAA;AAEA,IAAAU,aAAA,GAAAV,OAAA;AACA,IAAAW,cAAA,GAAAX,OAAA;AACA,IAAAY,cAAA,GAAAZ,OAAA;AAMA,IAAAa,SAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAd,OAAA;AAEA,IAAAe,KAAA,GAAAf,OAAA;AACA,IAAAgB,mBAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,gBAAA,GAAAf,sBAAA,CAAAF,OAAA;AAAiE,IAAAkB,WAAA,GAAAlB,OAAA;AAAA,SAAAE,uBAAAiB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAxB,wBAAAwB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAd,CAAA,EAAAY,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAa,GAAA,CAAAhB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAAA,SAAAW,QAAAjB,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAM,MAAA,CAAAS,IAAA,CAAAlB,CAAA,OAAAS,MAAA,CAAAU,qBAAA,QAAAC,CAAA,GAAAX,MAAA,CAAAU,qBAAA,CAAAnB,CAAA,GAAAE,CAAA,KAAAkB,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAnB,CAAA,WAAAO,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAE,CAAA,EAAAoB,UAAA,OAAAnB,CAAA,CAAAoB,IAAA,CAAAC,KAAA,CAAArB,CAAA,EAAAiB,CAAA,YAAAjB,CAAA;AAAA,SAAAsB,cAAAzB,CAAA,aAAAE,CAAA,MAAAA,CAAA,GAAAwB,SAAA,CAAAC,MAAA,EAAAzB,CAAA,UAAAC,CAAA,WAAAuB,SAAA,CAAAxB,CAAA,IAAAwB,SAAA,CAAAxB,CAAA,QAAAA,CAAA,OAAAe,OAAA,CAAAR,MAAA,CAAAN,CAAA,OAAAyB,OAAA,WAAA1B,CAAA,IAAA2B,eAAA,CAAA7B,CAAA,EAAAE,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAO,MAAA,CAAAqB,yBAAA,GAAArB,MAAA,CAAAsB,gBAAA,CAAA/B,CAAA,EAAAS,MAAA,CAAAqB,yBAAA,CAAA3B,CAAA,KAAAc,OAAA,CAAAR,MAAA,CAAAN,CAAA,GAAAyB,OAAA,WAAA1B,CAAA,IAAAO,MAAA,CAAAC,cAAA,CAAAV,CAAA,EAAAE,CAAA,EAAAO,MAAA,CAAAE,wBAAA,CAAAR,CAAA,EAAAD,CAAA,iBAAAF,CAAA;AAAA,SAAA6B,gBAAAjC,GAAA,EAAAoC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAApC,GAAA,IAAAa,MAAA,CAAAC,cAAA,CAAAd,GAAA,EAAAoC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAX,UAAA,QAAAa,YAAA,QAAAC,QAAA,oBAAAxC,GAAA,CAAAoC,GAAA,IAAAC,KAAA,WAAArC,GAAA;AAAA,SAAAsC,eAAA/B,CAAA,QAAAY,CAAA,GAAAsB,YAAA,CAAAlC,CAAA,uCAAAY,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAsB,aAAAlC,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAH,CAAA,GAAAG,CAAA,CAAAmC,MAAA,CAAAC,WAAA,kBAAAvC,CAAA,QAAAe,CAAA,GAAAf,CAAA,CAAAc,IAAA,CAAAX,CAAA,EAAAD,CAAA,uCAAAa,CAAA,SAAAA,CAAA,YAAAyB,SAAA,yEAAAtC,CAAA,GAAAuC,MAAA,GAAAC,MAAA,EAAAvC,CAAA,KA1BjE;AA4BA,MAAMwC,sBAAsB,GAAGA,CAAA,kBAC7B,IAAAhD,WAAA,CAAAiD,IAAA;EAAIC,SAAS,EAAC,oCAAoC;EAAAC,QAAA,gBAChD,IAAAnD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA2D,kBAAkB,IAAE,CAAC,eACtB,IAAArD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA4D,oBAAoB,IAAE,CAAC;AAAA,CACtB,CACL;AAED,MAAMC,2BAA2B,GAAGA,CAAA,kBAClC,IAAAvD,WAAA,CAAAiD,IAAA;EAAIC,SAAS,EAAC,+BAA+B;EAAAC,QAAA,gBAC3C,IAAAnD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA2D,kBAAkB,IAAE,CAAC,eACtB,IAAArD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA8D,kBAAkB,IAAE,CAAC,eACtB,IAAAxD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA+D,gBAAgB,IAAE,CAAC,eACpB,IAAAzD,WAAA,CAAAoD,GAAA,EAAC1D,cAAA,CAAA4D,oBAAoB,IAAE,CAAC;AAAA,CACtB,CACL;AAED,MAAMI,wBAAwB,GAAGC,IAAA,IAAkD;EAAA,IAAjD;IAAEC,oBAAoB;IAAEC;EAAmB,CAAC,GAAAF,IAAA;EAC5E,MAAMG,oBAAoB,gBACxB,IAAA9D,WAAA,CAAAoD,GAAA;IAAMF,SAAS,EAAC,kBAAkB;IAAAC,QAAA,eAChC,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,oEAAoE;MACvEC,cAAc,EAAC;IAAwB,CACxC;EAAC,CACE,CACP;EAED,MAAMC,IAAI,gBACR,IAAAlE,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAAiF,aAAa,EAAArC,aAAA;IAEZsC,GAAG,EAAC,SAAS;IACbC,KAAK,EAAC,MAAM;IACZ/B,KAAK,EAAE,IAAIgC,IAAI,CAACV,oBAAoB;EAAE,GAClCC,kBAAkB,GAJlB,YAKL,CACF;EAED,MAAMU,mBAAmB,gBACvB,IAAAvE,WAAA,CAAAoD,GAAA;IAAGF,SAAS,EAAC,wCAAwC;IAACsB,GAAG,EAAC,qBAAqB;IAACC,MAAM,EAAC,QAAQ;IAACC,IAAI,EAAC,+HAA+H;IAAAvB,QAAA,eAClO,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,sEAAsE;MACzEC,cAAc,EAAC;IAAuB,CACvC;EAAC,CACD,CACJ;EAED,oBACE,IAAAjE,WAAA,CAAAiD,IAAA;IAAKC,SAAS,EAAC,2BAA2B;IAAAC,QAAA,gBACxC,IAAAnD,WAAA,CAAAoD,GAAA;MAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;QACfC,EAAE,EAAC,2DAA2D;QAC9DC,cAAc,EAAC,6EAA6E;QAC5FU,MAAM,EAAE;UACNb,oBAAoB;UACpBI;QACF;MAAE,CACH;IAAC,CACD,CAAC,eACJ,IAAAlE,WAAA,CAAAoD,GAAA;MAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;QACfC,EAAE,EAAC,6DAA6D;QAChEC,cAAc,EAAC,+IAA+I;QAC9JU,MAAM,EAAE;UAAEJ;QAAoB;MAAE,CACjC;IAAC,CACD,CAAC;EAAA,CACD,CAAC;AAEV,CAAC;AAEDb,wBAAwB,CAACkB,SAAS,GAAG;EACnChB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC;AACH,CAAC;AAEDxB,wBAAwB,CAACyB,YAAY,GAAG;EACtCtB,kBAAkB,EAAE,CAAC;AACvB,CAAC;AAED,MAAMuB,yBAAyB,GAAGA,CAAA,kBAChC,IAAApF,WAAA,CAAAoD,GAAA;EAAKF,SAAS,EAAC,2BAA2B;EAAAC,QAAA,eACxC,IAAAnD,WAAA,CAAAoD,GAAA;IAAAD,QAAA,eACE,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,6DAA6D;MAChEC,cAAc,EAAC;IAAgG,CAChH;EAAC,CACD;AAAC,CACD,CACN;AAED,MAAMoB,mBAAmB,GAAGC,KAAA,IAEtB;EAAA,IAFuB;IAC3BC,QAAQ;IAAEC,iBAAiB;IAAEC,kCAAkC;IAAEC;EACnE,CAAC,GAAAJ,KAAA;EACC,IAAIK,cAAc;EAClB,IAAIH,iBAAiB,IAAI,EAAE,EAAE;IAAE;IAC7B;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,gBAAgB,CAAC;QACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;MAClF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,aAAa,CAAC;QACjD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,aAAa,CAAC;MAC/E;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,qDAAqD;MACxDC,cAAc,EAAG;AACzB;AACA,6BAA8B;MACtBU,MAAM,EAAE;QACNkB,QAAQ,EAAGC,IAAI,CAACC,KAAK,CAACP,iBAAiB,GAAG,EAAE;MAC9C;IAAE,CACH,CACF;EACH,CAAC,MAAM,IAAIA,iBAAiB,IAAI,CAAC,EAAE;IAAE;IACnC;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,iBAAiB,CAAC;QACrD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,iBAAiB,CAAC;MACnF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,cAAc,CAAC;QAClD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,cAAc,CAAC;MAChF;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,sDAAsD;MACzDC,cAAc,EAAG;AACzB;AACA,8BAA+B;MACvBU,MAAM,EAAE;QACNqB,SAAS,EAAGR;MACd;IAAE,CACH,CACF;EACH,CAAC,MAAM;IAAE;IACP;IACA,IAAIC,kCAAkC,EAAE;MACtC,IAAIC,IAAI,KAAK,QAAQ,EAAE;QACrBD,kCAAkC,CAAC,gBAAgB,CAAC;QACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;MAClF;MACA,IAAIG,IAAI,KAAK,OAAO,EAAE;QACpBD,kCAAkC,CAAC,aAAa,CAAC;QACjD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,aAAa,CAAC;MAC/E;IACF;IACAI,cAAc,gBACZ,IAAA3F,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,wDAAwD;MAC3DC,cAAc,EAAC;IAAuB,CACvC,CACF;EACH;EACA,oBAAQ,IAAAjE,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,gBAAgB;IAAAC,QAAA,EAAEwC;EAAc,CAAM,CAAC;AAChE,CAAC;AAEDN,mBAAmB,CAACT,SAAS,GAAG;EAC9BW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCS,iBAAiB,EAAEX,kBAAS,CAACoB,MAAM,CAAClB,UAAU;EAC9CU,kCAAkC,EAAEZ,kBAAS,CAACqB,IAAI;EAClDR,IAAI,EAAEb,kBAAS,CAACK;AAClB,CAAC;AACDG,mBAAmB,CAACF,YAAY,GAAG;EACjCM,kCAAkC,EAAE,IAAI;EACxCC,IAAI,EAAE;AACR,CAAC;AAED,MAAMS,0BAA0B,GAAGC,KAAA,IAE7B;EAAA,IAF8B;IAClCb,QAAQ;IAAE3B,oBAAoB;IAAEC,kBAAkB;IAAE4B;EACtD,CAAC,GAAAW,KAAA;EACC,IAAIX,kCAAkC,EAAE;IACtCA,kCAAkC,CAAC,gBAAgB,CAAC;IACpD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,gBAAgB,CAAC;EAClF;EACA,oBACE,IAAAvF,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,sBAAsB;IAAAC,QAAA,eACnC,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,iDAAiD;MACpDC,cAAc,EAAC,kCAAkC;MACjDU,MAAM,EAAE;QACNT,IAAI,eACF,IAAAlE,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAAiF,aAAa,EAAArC,aAAA;UAEZsC,GAAG,EAAC,SAAS;UACbC,KAAK,EAAC,MAAM;UACZ/B,KAAK,EAAEsB;QAAqB,GACxBC,kBAAkB,GAJlB,kBAKL;MAEL;IAAE,CACH;EAAC,CACC,CAAC;AAEV,CAAC;AAEDsC,0BAA0B,CAACvB,SAAS,GAAG;EACrCW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCnB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC,CAAC;EACFO,kCAAkC,EAAEZ,kBAAS,CAACqB;AAChD,CAAC;AAEDC,0BAA0B,CAAChB,YAAY,GAAG;EACxCtB,kBAAkB,EAAE,CAAC,CAAC;EACtB4B,kCAAkC,EAAE;AACtC,CAAC;AAED,MAAMY,wBAAwB,GAAGC,KAAA,IAE3B;EAAA,IAF4B;IAChCf,QAAQ;IAAE3B,oBAAoB;IAAEC,kBAAkB;IAAE4B;EACtD,CAAC,GAAAa,KAAA;EACC,IAAIb,kCAAkC,EAAE;IACtCA,kCAAkC,CAAC,oBAAoB,CAAC;IACxD,IAAAG,6BAAe,EAAE,mCAAkCL,QAAS,EAAC,EAAE,oBAAoB,CAAC;EACtF;EACA,oBACE,IAAAvF,WAAA,CAAAoD,GAAA;IAAKF,SAAS,EAAC,gBAAgB;IAAAC,QAAA,eAC7B,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,4DAA4D;MAC/DC,cAAc,EAAC,mCAAmC;MAClDU,MAAM,EAAE;QACNT,IAAI,eACF,IAAAlE,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAAiF,aAAa,EAAArC,aAAA;UAEZsC,GAAG,EAAC,SAAS;UACbC,KAAK,EAAC,MAAM;UACZ/B,KAAK,EAAEsB;QAAqB,GACxBC,kBAAkB,GAJlB,kBAKL;MAEL;IAAE,CACH;EAAC,CACC,CAAC;AAEV,CAAC;AAEDwC,wBAAwB,CAACzB,SAAS,GAAG;EACnCW,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrCnB,oBAAoB,EAAEiB,kBAAS,CAACA,SAAS,CAACC,UAAU,CAACR,IAAI,CAAC,CAACS,UAAU;EACrElB,kBAAkB,EAAEgB,kBAAS,CAACG,KAAK,CAAC;IAClCC,QAAQ,EAAEJ,kBAAS,CAACK;EACtB,CAAC,CAAC;EACFO,kCAAkC,EAAEZ,kBAAS,CAACqB;AAChD,CAAC;AAEDG,wBAAwB,CAAClB,YAAY,GAAG;EACtCtB,kBAAkB,EAAE,CAAC,CAAC;EACtB4B,kCAAkC,EAAE;AACtC,CAAC;AAED,MAAMc,+BAA+B,GAAGC,KAAA,IAKlC;EAAA,IALmC;IACvCxC,EAAE;IACFuB,QAAQ;IACRkB,2BAA2B;IAC3BC;EACF,CAAC,GAAAF,KAAA;EACC,MAAMG,gBAAgB,GAAG3C,EAAE;EAE3B,MAAM;IACJ4C,GAAG;IACHC,YAAY;IACZC;EACF,CAAC,GAAG,IAAAC,oBAAQ,EAAC,gBAAgB,EAAExB,QAAQ,CAAC;EAExC,MAAM;IACJyB,gBAAgB;IAChBC,wBAAwB;IACxBC,YAAY;IACZC,KAAK;IACLC;EACF,CAAC,GAAG,IAAAL,oBAAQ,EAAC,gBAAgB,EAAExB,QAAQ,CAAC;EAExC,MAAM8B,IAAI,GAAG,IAAAC,aAAO,EAAC,CAAC;EACtB,MAAMC,OAAO,GAAGjD,IAAI,CAACkD,GAAG,CAAC,CAAC;EAC1B,MAAM3D,kBAAkB,GAAGgD,YAAY,GAAG;IAAE5B,QAAQ,EAAE4B;EAAa,CAAC,GAAG,CAAC,CAAC;EACzE,MAAMY,aAAa,GAAG,IAAInD,IAAI,CAACiD,OAAO,GAAGH,gBAAgB,CAAC;EAC1D,MAAMxD,oBAAoB,GAAGoD,gBAAgB,GAAG,IAAI1C,IAAI,CAAC0C,gBAAgB,CAACU,cAAc,CAAC,GAAG,IAAI;EAChG,MAAMC,sBAAsB,GAAGX,gBAAgB,GAAG,IAAI1C,IAAI,CAACiD,OAAO,CAAC,GAAG3D,oBAAoB,GAAG,KAAK;EAClG,MAAMgE,mBAAmB,GAAGjB,gBAAgB,KAAK,2BAA2B;EAC5E,MAAMkB,cAAc,GAAGlB,gBAAgB,KAAK,2BAA2B,GAAG,aAAa,GAAG,WAAW;EACrG,MAAMlB,kCAAkC,GAAGgB,2BAA2B;EAEtE,MAAM,CAACqB,QAAQ,CAAC,GAAG,IAAAC,qBAAW,EAACC,mCAA6B,CAAC;EAC7D,MAAM;IAAEC,OAAO;IAAEC;EAAa,CAAC,GAAGJ,QAAQ;EAE1C,MAAMK,eAAe,GAAG;IACtBC,OAAO,EAAExB,GAAG;IACZyB,aAAa,EAAE9C,QAAQ;IACvB+C,cAAc,EAAEN,mCAA6B;IAC7CO,aAAa,EAAEL;EACjB,CAAC;EAED,MAAMM,wBAAwB,GAAA1G,aAAA;IAC5B2G,QAAQ,EAAE,eAAe;IACzBC,IAAI,EAAE,+BAA+B;IACrCC,QAAQ,EAAE,iBAAiB;IAC3BC,YAAY,EAAE;EAAwC,GACnDT,eAAe,CACnB;EAED,IAAAU,gBAAS,EAAC,MAAM;IACd,IAAAC,+BAAoB,EAAC,+CAA+C,EAAEX,eAAe,CAAC;IACtF,IAAAY,yBAAc,EAAC,kBAAkB,EAAEP,wBAAwB,CAAC;IAC5D;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,IAAI,CAAC1B,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EAEA,MAAMkC,QAAQ,GAAGA,CAAA,KAAM;IACrB,IAAAF,+BAAoB,EAAC,6CAA6C,EAAEX,eAAe,CAAC;IACpF,IAAAW,+BAAoB,EAAC,uCAAuC,EAAAhH,aAAA,CAAAA,aAAA,KACvDqG,eAAe;MAClBc,QAAQ,EAAE;IAAiB,EAC5B,CAAC;IACF,IAAAF,yBAAc,EAAC,mBAAmB,EAAEP,wBAAwB,CAAC;IAC7D,IAAAO,yBAAc,EAAC,uCAAuC,EAAAjH,aAAA,CAAAA,aAAA,KACjDqG,eAAe;MAClBe,YAAY,EAAE,eAAe;MAC7BC,QAAQ,EAAG,GAAEtB,cAAe,QAAO;MACnCuB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAExB;IAAc,EACzB,CAAC;IACF,MAAM;MAAEyB;IAAO,CAAC,GAAG,IAAAC,0BAAoB,EAAC,CAAC;IACzC,IAAAC,iCAA2B,EAACF,MAAM,CAACG,QAAQ,CAAC,CAAC,CAAC;EAChD,CAAC;EAED,MAAMC,sBAAsB,GAAGA,CAAA,KAAM;IACnC,IAAAX,yBAAc,EAAC,sEAAsE,EAAAjH,aAAA,CAAAA,aAAA,KAChFqG,eAAe;MAClBe,YAAY,EAAE,sBAAsB;MACpCC,QAAQ,EAAG,GAAEtB,cAAe,iBAAgB;MAC5CuB,QAAQ,EAAE,QAAQ;MAClBC,QAAQ,EAAExB;IAAc,EACzB,CAAC;EACJ,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI8B,6BAA6B;EACjC,IAAIC,gBAAgB;EACpB,IAAIC,aAAa;EACjB,IAAIC,kBAAkB;EACtB,IAAIC,SAAS;EAEb,IAAI,CAAC,CAAC/C,gBAAgB,IAAI,CAAC,CAACC,wBAAwB,EAAE;IACpD,MAAM+C,uBAAuB,GAAGlE,IAAI,CAACC,KAAK,CAAC,CAACnC,oBAAoB,GAAG6D,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnG,IAAIuC,uBAAuB,IAAK,CAAC,GAAG,EAAG,EAAE;MACvC,IAAI7C,KAAK,EAAE;QAAE;QACX,MAAM8C,yBAAyB,GAAGnE,IAAI,CAACC,KAAK,CAAC,CAAC,IAAIzB,IAAI,CAAC6C,KAAK,CAACO,cAAc,CAAC,GAAGD,aAAa,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;QAC/GkC,6BAA6B,gBAC3B,IAAA3J,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;UACfC,EAAE,EAAC,+DAA+D;UAClEC,cAAc,EAAC,2CAA2C;UAC1DU,MAAM,EAAE;YACNuF,UAAU,EAAG/C,KAAK,CAAC+C;UACrB;QAAE,CACH,CACF;QACDN,gBAAgB,gBACd,IAAA5J,WAAA,CAAAoD,GAAA,EAACiC,mBAAmB;UAClBE,QAAQ,EAAEA,QAAS;UACnBC,iBAAiB,EAAEyE,yBAA0B;UAC7CxE,kCAAkC,EAAEA,kCAAmC;UACvEC,IAAI,EAAC;QAAO,CACb,CACF;MACH,CAAC,MAAM;QACLiE,6BAA6B,gBAC3B,IAAA3J,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;UACfC,EAAE,EAAC,uDAAuD;UAC1DC,cAAc,EAAC;QAA2B,CAC3C,CACF;QACD2F,gBAAgB,gBACd,IAAA5J,WAAA,CAAAoD,GAAA,EAAC+C,0BAA0B;UACzBZ,QAAQ,EAAEA,QAAS;UACnB3B,oBAAoB,EAAEA,oBAAqB;UAC3CC,kBAAkB,EAAEA,kBAAmB;UACvC4B,kCAAkC,EAAEA;QAAmC,CACxE,CACF;MACH;MACAoE,aAAa,gBAAG,IAAA7J,WAAA,CAAAoD,GAAA,EAACG,2BAA2B,IAAE,CAAC;IACjD,CAAC,MAAM,IAAIyG,uBAAuB,GAAI,CAAC,GAAG,EAAG,IAAIA,uBAAuB,IAAI,CAAC,EAAE;MAC7E;MACAL,6BAA6B,gBAC3B,IAAA3J,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;QACfC,EAAE,EAAC,6DAA6D;QAChEC,cAAc,EAAC;MAA0B,CAC1C,CACF;MACD2F,gBAAgB,gBACd,IAAA5J,WAAA,CAAAoD,GAAA,EAACiC,mBAAmB;QAClBE,QAAQ,EAAEA,QAAS;QACnBC,iBAAiB,EAAEwE,uBAAwB;QAC3CvE,kCAAkC,EAAEA,kCAAmC;QACvEC,IAAI,EAAC;MAAQ,CACd,CACF;MACDmE,aAAa,gBACX,IAAA7J,WAAA,CAAAoD,GAAA,EAACM,wBAAwB;QACvBE,oBAAoB,EAAEA,oBAAqB;QAC3CC,kBAAkB,EAAEA;MAAmB,CACxC,CACF;IACH,CAAC,MAAM;MAAE;MACP8F,6BAA6B,gBAC3B,IAAA3J,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;QACfC,EAAE,EAAC,2DAA2D;QAC9DC,cAAc,EAAC;MAA0B,CAC1C,CACF;MACD2F,gBAAgB,gBACd,IAAA5J,WAAA,CAAAoD,GAAA,EAACiD,wBAAwB;QACvBd,QAAQ,EAAEA,QAAS;QACnB3B,oBAAoB,EAAEA,oBAAqB;QAC3CC,kBAAkB,EAAEA,kBAAmB;QACvC4B,kCAAkC,EAAEA;MAAmC,CACxE,CACF;MACDoE,aAAa,gBACX,IAAA7J,WAAA,CAAAoD,GAAA,EAACgC,yBAAyB,IAAE,CAC7B;IACH;EACF,CAAC,MAAM;IAAE;IACPuE,6BAA6B,gBAC3B,IAAA3J,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;MACfC,EAAE,EAAC,iEAAiE;MACpEC,cAAc,EAAC;IAA+B,CAC/C,CACF;IACD4F,aAAa,gBAAI,IAAA7J,WAAA,CAAAoD,GAAA,EAACJ,sBAAsB,IAAE,CAAE;EAC9C;EAEA,IAAI2E,sBAAsB,EAAE;IAC1BmC,kBAAkB,gBAChB,IAAA9J,WAAA,CAAAoD,GAAA,EAAC/D,QAAA,CAAA8K,MAAM;MACLC,OAAO,EAAC,SAAS;MACjBC,OAAO,EAAEX,sBAAuB;MAChChF,IAAI,EAAEwC,YAAa;MACnBoD,KAAK;MAAAnH,QAAA,EACN;IAED,CAAQ,CACT;EACH,CAAC,MAAM;IACL2G,kBAAkB,gBAChB,IAAA9J,WAAA,CAAAoD,GAAA,EAAC3D,cAAA,CAAA8K,aAAa;MACZpD,KAAK,EAAEA,KAAM;MACbkD,OAAO,EAAErB,QAAS;MAClBlC,YAAY,EAAEA,YAAa;MAC3BwD,KAAK;IAAA,CACN,CACF;EACH;EAEA,IAAInD,KAAK,EAAE;IAAE;IACX4C,SAAS,gBACP,IAAA/J,WAAA,CAAAoD,GAAA;MAAKF,SAAS,EAAC,2BAA2B;MAAAC,QAAA,eACxC,IAAAnD,WAAA,CAAAoD,GAAA,EAAClE,KAAA,CAAA6E,gBAAgB;QACfC,EAAE,EAAC,2CAA2C;QAC9CC,cAAc,EAAC,6BAA6B;QAC5CU,MAAM,EAAE;UACN6F,IAAI,eAAG,IAAAxK,WAAA,CAAAoD,GAAA;YAAMF,SAAS,EAAC,kBAAkB;YAAAC,QAAA,EAAEgE,KAAK,CAACqD;UAAI,CAAO;QAC9D;MAAE,CACH;IAAC,CACC,CACN;EACH;EAEA,oBACE,IAAAxK,WAAA,CAAAoD,GAAA;IAASF,SAAS,EAAE,IAAAuH,mBAAU,EAAC,4BAA4B,EAAE;MAAE,WAAW,EAAE7C;IAAoB,CAAC,CAAE;IAAAzE,QAAA,eACjG,IAAAnD,WAAA,CAAAiD,IAAA;MAAKe,EAAE,EAAC,gCAAgC;MAAAb,QAAA,GAEnC+E,YAAY,KAAKwC,8CAAwC,CAACC,gBAAgB,IAAI1C,OAAO,gBAClF,IAAAjI,WAAA,CAAAoD,GAAA,EAACrD,gBAAA,CAAAI,OAAe;QAACyK,WAAW,EAAErF;MAAS,CAAE,CAAC,GAC1C,IAAI,EAGP2C,YAAY,KAAKwC,8CAAwC,CAACG,mBAAmB,IAAI5C,OAAO,gBACrF,IAAAjI,WAAA,CAAAoD,GAAA,EAACtD,mBAAA,CAAAK,OAAkB;QAACoF,QAAQ,EAAEA;MAAS,CAAE,CAAC,GAC1C,IAAI,eAEV,IAAAvF,WAAA,CAAAiD,IAAA;QACEC,SAAS,EAAE,IAAAuH,mBAAU,EAAC,gCAAgC,EAAE;UACtD,yDAAyD,EAAE,CAAC,CAAC/D;QAC/D,CAAC,CAAE;QACH1C,EAAE,EAAC,gCAAgC;QAAAb,QAAA,GAElCwG,6BAA6B,EAC7B,CAAC,CAACjD,aAAa,iBACd,IAAA1G,WAAA,CAAAoD,GAAA;UAAKF,SAAS,EAAC,uBAAuB;UAAAC,QAAA,eACpC,IAAAnD,WAAA,CAAAoD,GAAA,EAAC/D,QAAA,CAAAyL,UAAU;YACTC,GAAG,EAAEC,YAAM;YACXC,IAAI,EAAC,IAAI;YACTC,MAAM,EAAEC,aAAK;YACbd,OAAO,EAAE3D,aAAc;YACvBxD,SAAS,EAAC,YAAY;YACtBkI,GAAG,EAAE/D,IAAI,CAACgE,aAAa,CAACC,iBAAQ,CAACC,KAAK;UAAE,CACzC;QAAC,CACC,CACN;MAAA,CACC,CAAC,EACJ3B,gBAAgB,eACjB,IAAA5J,WAAA,CAAAoD,GAAA;QAAKF,SAAS,EAAC,8BAA8B;QAAAC,QAAA,EAC1C0G;MAAa,CACX,CAAC,eACN,IAAA7J,WAAA,CAAAoD,GAAA;QAAKF,SAAS,EAAC,6BAA6B;QAAAC,QAAA,EACzC2G;MAAkB,CAChB,CAAC,EACLC,SAAS;IAAA,CACP;EAAC,CACC,CAAC;AAEd,CAAC;AAEDxD,+BAA+B,CAAC3B,SAAS,GAAG;EAC1CZ,EAAE,EAAEa,kBAAS,CAACK,MAAM,CAACH,UAAU;EAC/BQ,QAAQ,EAAEV,kBAAS,CAACK,MAAM,CAACH,UAAU;EACrC0B,2BAA2B,EAAE5B,kBAAS,CAACqB,IAAI;EAC3CQ,aAAa,EAAE7B,kBAAS,CAACqB;AAC3B,CAAC;AAEDK,+BAA+B,CAACpB,YAAY,GAAG;EAC7CsB,2BAA2B,EAAE,IAAI;EACjCC,aAAa,EAAE;AACjB,CAAC;AAAC,IAAA8E,QAAA,GAAAC,OAAA,CAAAtL,OAAA,GAEa,IAAAuL,gBAAU,EAACnF,+BAA+B,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _DefaultUpgradeNotification = _interopRequireDefault(require("./DefaultUpgradeNotification"));
|
|
8
|
+
var _ExperimentalUpgradeNotification = _interopRequireDefault(require("./ExperimentalUpgradeNotification"));
|
|
9
|
+
var _optimizely = _interopRequireDefault(require("../optimizely"));
|
|
10
|
+
var _optimizely2 = require("../data/optimizely");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
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; }
|
|
14
|
+
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; }
|
|
15
|
+
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; }
|
|
16
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
17
|
+
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); }
|
|
18
|
+
const UpgradeNotification = props => /*#__PURE__*/(0, _jsxRuntime.jsx)(_optimizely.default, _objectSpread({
|
|
19
|
+
defaultComponent: _DefaultUpgradeNotification.default,
|
|
20
|
+
experimentalComponent: _ExperimentalUpgradeNotification.default,
|
|
21
|
+
defaultVariationKey: "off",
|
|
22
|
+
experimentKey: _optimizely2.OPTIMIZELY_VTR_EXPERIMENT_KEY
|
|
23
|
+
}, props));
|
|
24
|
+
var _default = exports.default = UpgradeNotification;
|
|
25
|
+
//# sourceMappingURL=UpgradeNotification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpgradeNotification.js","names":["_DefaultUpgradeNotification","_interopRequireDefault","require","_ExperimentalUpgradeNotification","_optimizely","_optimizely2","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","UpgradeNotification","props","jsx","defaultComponent","DefaultUpgradeNotification","experimentalComponent","ExperimentalUpgradeNotification","defaultVariationKey","experimentKey","OPTIMIZELY_VTR_EXPERIMENT_KEY","_default","exports"],"sources":["../../src/upgrade-notification/UpgradeNotification.jsx"],"sourcesContent":["import DefaultUpgradeNotification from './DefaultUpgradeNotification';\nimport ExperimentalUpgradeNotification from './ExperimentalUpgradeNotification';\n\nimport OptimizelyExperiment from '../optimizely';\nimport { OPTIMIZELY_VTR_EXPERIMENT_KEY } from '../data/optimizely';\n\nconst UpgradeNotification = (props) => (\n <OptimizelyExperiment\n defaultComponent={DefaultUpgradeNotification}\n experimentalComponent={ExperimentalUpgradeNotification}\n defaultVariationKey=\"off\"\n experimentKey={OPTIMIZELY_VTR_EXPERIMENT_KEY}\n {...props}\n />\n);\n\nexport default UpgradeNotification;\n"],"mappings":";;;;;;AAAA,IAAAA,2BAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gCAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,WAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAAmE,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,uBAAAM,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAApB,GAAA,EAAAwB,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAxB,GAAA,IAAAO,MAAA,CAAAgB,cAAA,CAAAvB,GAAA,EAAAwB,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAZ,UAAA,QAAAc,YAAA,QAAAC,QAAA,oBAAA5B,GAAA,CAAAwB,GAAA,IAAAC,KAAA,WAAAzB,GAAA;AAAA,SAAA0B,eAAApB,CAAA,QAAAuB,CAAA,GAAAC,YAAA,CAAAxB,CAAA,uCAAAuB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAxB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAyB,MAAA,CAAAC,WAAA,kBAAA5B,CAAA,QAAAyB,CAAA,GAAAzB,CAAA,CAAA6B,IAAA,CAAA3B,CAAA,EAAAD,CAAA,uCAAAwB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA7B,CAAA,GAAA8B,MAAA,GAAAC,MAAA,EAAA9B,CAAA;AAEnE,MAAM+B,mBAAmB,GAAIC,KAAK,iBAChC,IAAAvC,WAAA,CAAAwC,GAAA,EAAC1C,WAAA,CAAAK,OAAoB,EAAAc,aAAA;EACnBwB,gBAAgB,EAAEC,mCAA2B;EAC7CC,qBAAqB,EAAEC,wCAAgC;EACvDC,mBAAmB,EAAC,KAAK;EACzBC,aAAa,EAAEC;AAA8B,GACzCR,KAAK,CACV,CACF;AAAC,IAAAS,QAAA,GAAAC,OAAA,CAAA9C,OAAA,GAEamC,mBAAmB","ignoreList":[]}
|
|
@@ -0,0 +1,169 @@
|
|
|
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 _frontendPlatform = require("@edx/frontend-platform");
|
|
10
|
+
var _auth = require("@edx/frontend-platform/auth");
|
|
11
|
+
var _paragon = require("@openedx/paragon");
|
|
12
|
+
var _modelStore = require("@src/generic/model-store");
|
|
13
|
+
var _lms_api = require("../../data/lms_api");
|
|
14
|
+
var _Signatory = _interopRequireDefault(require("./Signatory"));
|
|
15
|
+
require("./CertificatePreview.scss");
|
|
16
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
+
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); }
|
|
19
|
+
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; }
|
|
20
|
+
/* eslint import/no-unresolved: 0 */
|
|
21
|
+
|
|
22
|
+
const CertificatePreview = _ref => {
|
|
23
|
+
let {
|
|
24
|
+
courseId
|
|
25
|
+
} = _ref;
|
|
26
|
+
const {
|
|
27
|
+
username,
|
|
28
|
+
name
|
|
29
|
+
} = (0, _auth.getAuthenticatedUser)();
|
|
30
|
+
const {
|
|
31
|
+
number,
|
|
32
|
+
org,
|
|
33
|
+
title
|
|
34
|
+
} = (0, _modelStore.useModel)('courseHomeMeta', courseId);
|
|
35
|
+
const platformLogoUrl = (0, _frontendPlatform.getConfig)().LOGO_URL;
|
|
36
|
+
const [isLoading, setIsLoading] = (0, _react.useState)(true);
|
|
37
|
+
const [orgMetadata, setOrgMetadata] = (0, _react.useState)({});
|
|
38
|
+
const [certificateName, setCertificateName] = (0, _react.useState)(name);
|
|
39
|
+
(0, _react.useEffect)(() => {
|
|
40
|
+
(0, _lms_api.fetchOrg)(org).then(data => {
|
|
41
|
+
setOrgMetadata(data);
|
|
42
|
+
});
|
|
43
|
+
(0, _lms_api.fetchVerifiedName)(username).then(data => {
|
|
44
|
+
if (data) {
|
|
45
|
+
const certName = data.useVerifiedNameForCerts ? data.verifiedName : data.profileName;
|
|
46
|
+
setCertificateName(certName);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
setIsLoading(false);
|
|
50
|
+
}, [org, username, name]);
|
|
51
|
+
const CertificatePreviewComponent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
52
|
+
className: "certificate-preview border m-4 p-3",
|
|
53
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
54
|
+
className: "d-flex justify-content-between",
|
|
55
|
+
"data-testid": "certificate-preview-header",
|
|
56
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
57
|
+
alt: "Verified Certificate logo",
|
|
58
|
+
className: "verified-certificate-logo",
|
|
59
|
+
src: "https://edxuploads.s3.amazonaws.com/certificate_template_assets/122/verified-certificate-logo.svg"
|
|
60
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
61
|
+
className: "sr-only",
|
|
62
|
+
children: "Verified Certificate"
|
|
63
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
64
|
+
className: "mb-4",
|
|
65
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
66
|
+
className: "sr-only",
|
|
67
|
+
children: "Supported by the following organizations"
|
|
68
|
+
}), orgMetadata?.logo ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
69
|
+
alt: `${orgMetadata.shortName} logo`,
|
|
70
|
+
className: "organization-logo",
|
|
71
|
+
"data-testid": "organization-logo",
|
|
72
|
+
src: orgMetadata.logo
|
|
73
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
74
|
+
"data-testid": "organization-short-name",
|
|
75
|
+
children: orgMetadata.shortName
|
|
76
|
+
})]
|
|
77
|
+
})]
|
|
78
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
79
|
+
className: "d-flex justify-content-between",
|
|
80
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
81
|
+
className: "certificate-statement",
|
|
82
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
83
|
+
className: "certificate-statement-container d-flex flex-column",
|
|
84
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
85
|
+
className: "certificate-statement-detail",
|
|
86
|
+
children: "This is to certify that"
|
|
87
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
|
|
88
|
+
className: "certificate-statement-detail certificate-recipient font-weight-bold",
|
|
89
|
+
children: certificateName
|
|
90
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
91
|
+
className: "certificate-statement-detail",
|
|
92
|
+
children: "successfully completed and received a passing grade in"
|
|
93
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
|
|
94
|
+
className: "certificate-course font-weight-bold",
|
|
95
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
96
|
+
children: number
|
|
97
|
+
}), ":", /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
98
|
+
children: title
|
|
99
|
+
})]
|
|
100
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
|
|
101
|
+
className: "certificate-statement-detail",
|
|
102
|
+
children: ["a course of study offered by ", orgMetadata.shortName, ", an online learning initiative of ", orgMetadata.name, "."]
|
|
103
|
+
})]
|
|
104
|
+
})
|
|
105
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
106
|
+
className: "signatories",
|
|
107
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
108
|
+
className: "sr-only",
|
|
109
|
+
children: "Noted by"
|
|
110
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Signatory.default, {
|
|
111
|
+
name: "Maurilio Pugliesi"
|
|
112
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Signatory.default, {
|
|
113
|
+
name: "Justine Doe, Ph.D."
|
|
114
|
+
})]
|
|
115
|
+
})]
|
|
116
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
117
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
|
|
118
|
+
className: "d-flex no-bullets stamps pt-3",
|
|
119
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
|
|
120
|
+
className: "stamp",
|
|
121
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
122
|
+
className: "platform-logo",
|
|
123
|
+
src: platformLogoUrl,
|
|
124
|
+
alt: "edX"
|
|
125
|
+
})
|
|
126
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
|
|
127
|
+
className: "stamp d-flex flex-column",
|
|
128
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
129
|
+
className: "title",
|
|
130
|
+
children: "Verified Certificate"
|
|
131
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
132
|
+
className: "emphasized",
|
|
133
|
+
children: "Issued Month / Year"
|
|
134
|
+
})]
|
|
135
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("li", {
|
|
136
|
+
className: "stamp d-flex flex-column",
|
|
137
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
138
|
+
className: "title",
|
|
139
|
+
children: "Valid Certificate ID"
|
|
140
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
141
|
+
className: "emphasized",
|
|
142
|
+
children: "12345678901234567890"
|
|
143
|
+
})]
|
|
144
|
+
})]
|
|
145
|
+
})
|
|
146
|
+
})]
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// We can render if the call to the verified name endpoint returns a null, because we fall back to their LMS
|
|
150
|
+
// profile name, but if the call to the organization endpoint fails, we cannot render the certificate because
|
|
151
|
+
// we require data from this endpoint.
|
|
152
|
+
let component;
|
|
153
|
+
if (!orgMetadata) {
|
|
154
|
+
component = false;
|
|
155
|
+
} else if (isLoading) {
|
|
156
|
+
component = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Skeleton, {
|
|
157
|
+
count: 1,
|
|
158
|
+
height: "5rem"
|
|
159
|
+
});
|
|
160
|
+
} else {
|
|
161
|
+
component = /*#__PURE__*/(0, _jsxRuntime.jsx)(CertificatePreviewComponent, {});
|
|
162
|
+
}
|
|
163
|
+
return component;
|
|
164
|
+
};
|
|
165
|
+
CertificatePreview.propTypes = {
|
|
166
|
+
courseId: _propTypes.default.string.isRequired
|
|
167
|
+
};
|
|
168
|
+
var _default = exports.default = CertificatePreview;
|
|
169
|
+
//# sourceMappingURL=CertificatePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertificatePreview.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_frontendPlatform","_auth","_paragon","_modelStore","_lms_api","_Signatory","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","CertificatePreview","_ref","courseId","username","name","getAuthenticatedUser","number","org","title","useModel","platformLogoUrl","getConfig","LOGO_URL","isLoading","setIsLoading","useState","orgMetadata","setOrgMetadata","certificateName","setCertificateName","useEffect","fetchOrg","then","data","fetchVerifiedName","certName","useVerifiedNameForCerts","verifiedName","profileName","CertificatePreviewComponent","jsxs","className","children","jsx","alt","src","logo","shortName","component","Skeleton","count","height","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../../src/upgrade-notification/certificate-preview/CertificatePreview.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { Skeleton } from '@openedx/paragon';\nimport { useModel } from '@src/generic/model-store';\n\nimport { fetchOrg, fetchVerifiedName } from '../../data/lms_api';\nimport Signatory from './Signatory';\nimport './CertificatePreview.scss';\n\nconst CertificatePreview = ({ courseId }) => {\n const { username, name } = getAuthenticatedUser();\n\n const {\n number,\n org,\n title,\n } = useModel('courseHomeMeta', courseId);\n\n const platformLogoUrl = getConfig().LOGO_URL;\n\n const [isLoading, setIsLoading] = useState(true);\n const [orgMetadata, setOrgMetadata] = useState({});\n const [certificateName, setCertificateName] = useState(name);\n\n useEffect(() => {\n fetchOrg(org).then((data) => {\n setOrgMetadata(data);\n });\n\n fetchVerifiedName(username).then((data) => {\n if (data) {\n const certName = data.useVerifiedNameForCerts ? data.verifiedName : data.profileName;\n setCertificateName(certName);\n }\n });\n\n setIsLoading(false);\n }, [org, username, name]);\n\n const CertificatePreviewComponent = () => (\n <div className=\"certificate-preview border m-4 p-3\">\n <div className=\"d-flex justify-content-between\" data-testid=\"certificate-preview-header\">\n <img\n alt=\"Verified Certificate logo\"\n className=\"verified-certificate-logo\"\n src=\"https://edxuploads.s3.amazonaws.com/certificate_template_assets/122/verified-certificate-logo.svg\"\n />\n <span className=\"sr-only\">Verified Certificate</span>\n <div className=\"mb-4\">\n <div className=\"sr-only\">Supported by the following organizations</div>\n {orgMetadata?.logo\n ? (\n <img\n alt={`${orgMetadata.shortName} logo`}\n className=\"organization-logo\"\n data-testid=\"organization-logo\"\n src={orgMetadata.logo}\n />\n )\n : (<div data-testid=\"organization-short-name\">{orgMetadata.shortName}</div>)}\n </div>\n </div>\n <div className=\"d-flex justify-content-between\">\n <div className=\"certificate-statement\">\n <div className=\"certificate-statement-container d-flex flex-column\">\n <span\n className=\"certificate-statement-detail\"\n >\n This is to certify that\n </span>\n <strong\n className=\"certificate-statement-detail certificate-recipient font-weight-bold\"\n >\n {certificateName}\n </strong>\n <span\n className=\"certificate-statement-detail\"\n >\n successfully completed and received a passing grade in\n </span>\n <span\n className=\"certificate-course font-weight-bold\"\n >\n <span>{number}</span>:\n <span>{title}</span>\n </span>\n <span\n className=\"certificate-statement-detail\"\n >\n a course of study offered by {orgMetadata.shortName},\n an online learning initiative of {orgMetadata.name}.\n </span>\n </div>\n </div>\n <div className=\"signatories\">\n <div className=\"sr-only\">Noted by</div>\n <Signatory name=\"Maurilio Pugliesi\" />\n <Signatory name=\"Justine Doe, Ph.D.\" />\n </div>\n </div>\n <div>\n <ul className=\"d-flex no-bullets stamps pt-3\">\n <li className=\"stamp\">\n <img className=\"platform-logo\" src={platformLogoUrl} alt=\"edX\" />\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Verified Certificate</span>\n <span className=\"emphasized\">Issued Month / Year</span>\n </li>\n <li className=\"stamp d-flex flex-column\">\n <span className=\"title\">Valid Certificate ID</span>\n <span className=\"emphasized\">12345678901234567890</span>\n </li>\n </ul>\n </div>\n </div>\n );\n\n // We can render if the call to the verified name endpoint returns a null, because we fall back to their LMS\n // profile name, but if the call to the organization endpoint fails, we cannot render the certificate because\n // we require data from this endpoint.\n let component;\n\n if (!orgMetadata) {\n component = false;\n } else if (isLoading) {\n component = (\n <Skeleton\n count={1}\n height=\"5rem\"\n />\n );\n } else {\n component = (\n <CertificatePreviewComponent />\n );\n }\n\n return (\n component\n );\n};\n\nCertificatePreview.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default CertificatePreview;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
@import '~@openedx/paragon/scss/core/core.scss';
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
.certificate-preview {
|
|
5
|
+
border-radius: 6px;
|
|
6
|
+
|
|
7
|
+
@media (min-width: map-get($grid-breakpoints, "md")) and (max-width: map-get($grid-breakpoints, "lg")) {
|
|
8
|
+
max-width: 50%;
|
|
9
|
+
};
|
|
10
|
+
@media (min-width: map-get($grid-breakpoints, "sm")) and (max-width: map-get($grid-breakpoints, "md")) {
|
|
11
|
+
max-width: 65%;
|
|
12
|
+
};
|
|
13
|
+
@media (min-width: 464px) and (max-width: map-get($grid-breakpoints, "sm")) {
|
|
14
|
+
max-width: 75%;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Certificate Statement Body
|
|
19
|
+
.certificate-statement {
|
|
20
|
+
max-width: 70%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.certificate-statement-container {
|
|
24
|
+
row-gap: 0.25rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.certificate-course {
|
|
28
|
+
color: $gray-700;
|
|
29
|
+
font-size: 1rem;
|
|
30
|
+
font-weight: $font-weight-bold;
|
|
31
|
+
text-wrap: balance;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.certificate-statement-detail {
|
|
35
|
+
color: $gray-500;
|
|
36
|
+
font-size: 0.5rem;
|
|
37
|
+
text-wrap: pretty;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.certificate-recipient {
|
|
41
|
+
color: $gray-700;
|
|
42
|
+
font-size: 1rem;
|
|
43
|
+
font-weight: $font-weight-bold;
|
|
44
|
+
text-wrap: balance;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Logos
|
|
48
|
+
.verified-certificate-logo {
|
|
49
|
+
height: 30px;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.platform-logo {
|
|
53
|
+
width: 25px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.organization-logo {
|
|
57
|
+
max-width: 150px;
|
|
58
|
+
max-height: 30px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Signatories
|
|
62
|
+
.signatories {
|
|
63
|
+
text-align: right;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.signatory-credentials {
|
|
67
|
+
color: $gray-700;
|
|
68
|
+
font-size: .4rem;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.signatory-name {
|
|
72
|
+
color: $gray-700;
|
|
73
|
+
font-size: 0.5rem;
|
|
74
|
+
font-weight: $font-weight-bold;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.signatory-signature {
|
|
78
|
+
max-width: 4rem;
|
|
79
|
+
width: auto;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Stamps
|
|
83
|
+
.stamps {
|
|
84
|
+
column-gap: 0.75rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.stamp {
|
|
88
|
+
font-size: .5rem;
|
|
89
|
+
|
|
90
|
+
> .title {
|
|
91
|
+
color: #6c757d;
|
|
92
|
+
font-weight: $font-weight-bold;
|
|
93
|
+
}
|
|
94
|
+
> .emphasized {
|
|
95
|
+
font-weight: bolder;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Utilities
|
|
100
|
+
.no-bullets {
|
|
101
|
+
list-style-type: none;
|
|
102
|
+
padding: 0;
|
|
103
|
+
margin: 0;
|
|
104
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
+
var _signatoryPlaceholder = _interopRequireDefault(require("./assets/signatory-placeholder.png"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
const Signatory = _ref => {
|
|
12
|
+
let {
|
|
13
|
+
name
|
|
14
|
+
} = _ref;
|
|
15
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
16
|
+
className: "signatory",
|
|
17
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
|
|
18
|
+
className: "signatory-signature",
|
|
19
|
+
src: _signatoryPlaceholder.default,
|
|
20
|
+
alt: name
|
|
21
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
22
|
+
className: "signatory-name",
|
|
23
|
+
children: name
|
|
24
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
25
|
+
className: "signatory-credentials",
|
|
26
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
27
|
+
children: "Professor"
|
|
28
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
29
|
+
className: "font-italic",
|
|
30
|
+
children: "UniversityX"
|
|
31
|
+
})]
|
|
32
|
+
})]
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
Signatory.propTypes = {
|
|
36
|
+
name: _propTypes.default.string.isRequired
|
|
37
|
+
};
|
|
38
|
+
var _default = exports.default = Signatory;
|
|
39
|
+
//# sourceMappingURL=Signatory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signatory.js","names":["_propTypes","_interopRequireDefault","require","_signatoryPlaceholder","_jsxRuntime","obj","__esModule","default","Signatory","_ref","name","jsxs","className","children","jsx","src","signatoryPlaceholder","alt","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../../src/upgrade-notification/certificate-preview/Signatory.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\n\nimport signatoryPlaceholder from './assets/signatory-placeholder.png';\n\nconst Signatory = ({ name }) => (\n <div className=\"signatory\">\n <img\n className=\"signatory-signature\"\n src={signatoryPlaceholder}\n alt={name}\n />\n <div className=\"signatory-name\">\n {name}\n </div>\n <div className=\"signatory-credentials\">\n <div>Professor</div>\n <div className=\"font-italic\">UniversityX</div>\n </div>\n </div>\n);\n\nSignatory.propTypes = {\n name: PropTypes.string.isRequired,\n};\n\nexport default Signatory;\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,qBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAsE,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtE,MAAMG,SAAS,GAAGC,IAAA;EAAA,IAAC;IAAEC;EAAK,CAAC,GAAAD,IAAA;EAAA,oBACzB,IAAAL,WAAA,CAAAO,IAAA;IAAKC,SAAS,EAAC,WAAW;IAAAC,QAAA,gBACxB,IAAAT,WAAA,CAAAU,GAAA;MACEF,SAAS,EAAC,qBAAqB;MAC/BG,GAAG,EAAEC,6BAAqB;MAC1BC,GAAG,EAAEP;IAAK,CACX,CAAC,eACF,IAAAN,WAAA,CAAAU,GAAA;MAAKF,SAAS,EAAC,gBAAgB;MAAAC,QAAA,EAC5BH;IAAI,CACF,CAAC,eACN,IAAAN,WAAA,CAAAO,IAAA;MAAKC,SAAS,EAAC,uBAAuB;MAAAC,QAAA,gBACpC,IAAAT,WAAA,CAAAU,GAAA;QAAAD,QAAA,EAAK;MAAS,CAAK,CAAC,eACpB,IAAAT,WAAA,CAAAU,GAAA;QAAKF,SAAS,EAAC,aAAa;QAAAC,QAAA,EAAC;MAAW,CAAK,CAAC;IAAA,CAC3C,CAAC;EAAA,CACH,CAAC;AAAA,CACP;AAEDL,SAAS,CAACU,SAAS,GAAG;EACpBR,IAAI,EAAES,kBAAS,CAACC,MAAM,CAACC;AACzB,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAhB,OAAA,GAEaC,SAAS","ignoreList":[]}
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _CertificatePreview = _interopRequireDefault(require("./CertificatePreview"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
var _default = exports.default = _CertificatePreview.default;
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_CertificatePreview","_interopRequireDefault","require","obj","__esModule","default","_default","exports","CertificatePreview"],"sources":["../../../src/upgrade-notification/certificate-preview/index.jsx"],"sourcesContent":["import CertificatePreview from './CertificatePreview';\n\nexport default CertificatePreview;\n"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsD,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEvCG,2BAAkB","ignoreList":[]}
|
|
@@ -3,19 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
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"));
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _UpgradeNotification = _interopRequireDefault(require("./UpgradeNotification"));
|
|
20
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
var _default = exports.default = _UpgradeNotification.default;
|
|
21
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["_UpgradeNotification","_interopRequireDefault","require","obj","__esModule","default","_default","exports","UpgradeNotification"],"sources":["../../src/upgrade-notification/index.jsx"],"sourcesContent":["import UpgradeNotification from './UpgradeNotification';\n\nexport default UpgradeNotification;\n"],"mappings":";;;;;;AAAA,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAwD,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEzCG,4BAAmB","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _paragon = require("@openedx/paragon");
|
|
10
|
-
var
|
|
10
|
+
var _discovery_api = require("../../data/discovery_api");
|
|
11
11
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
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); }
|
|
@@ -20,7 +20,7 @@ const PartnerBranding = _ref => {
|
|
|
20
20
|
const [orgName, setOrgName] = (0, _react.useState)('');
|
|
21
21
|
(0, _react.useEffect)(() => {
|
|
22
22
|
async function fetchData() {
|
|
23
|
-
const orgData = await (0,
|
|
23
|
+
const orgData = await (0, _discovery_api.fetchOrg)(courseRunId);
|
|
24
24
|
setImageURL(orgData.logo_image_url);
|
|
25
25
|
setOrgName(orgData.name);
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartnerBranding.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","
|
|
1
|
+
{"version":3,"file":"PartnerBranding.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_paragon","_discovery_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/discovery_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
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Frontend plugin for edX in course advertisements",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -38,7 +38,8 @@
|
|
|
38
38
|
"url": "https://github.com/edx/frontend-plugin-advertisements/issues"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@optimizely/react-sdk": "^3.1.0"
|
|
41
|
+
"@optimizely/react-sdk": "^3.1.0",
|
|
42
|
+
"react-dom": "^17.0.2"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@edx/browserslist-config": "^1.1.1",
|
|
@@ -49,8 +50,8 @@
|
|
|
49
50
|
"glob": "7.2.3",
|
|
50
51
|
"husky": "7.0.4",
|
|
51
52
|
"jest": "29.7.0",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
53
|
+
"rosie": "2.1.1",
|
|
54
|
+
"semantic-release": "^21.0.7"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
57
|
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
|
package/dist/data/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|