@edx/frontend-plugin-advertisements 2.21.0 → 2.23.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.
@@ -6,14 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _reactSdk = require("@optimizely/react-sdk");
9
10
  var _analytics = require("@edx/frontend-platform/analytics");
10
- var _auth = require("@edx/frontend-platform/auth");
11
11
  var _i18n = require("@edx/frontend-platform/i18n");
12
12
  var _logging = require("@edx/frontend-platform/logging");
13
13
  var _paragon = require("@openedx/paragon");
14
14
  var _icons = require("@openedx/paragon/icons");
15
15
  var _modelStore = require("@src/generic/model-store");
16
- var _optimizely = require("../data/optimizely");
16
+ var _optimizely = require("../optimizely");
17
17
  var _messages = _interopRequireDefault(require("./messages"));
18
18
  var _jsxRuntime = require("react/jsx-runtime");
19
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -23,12 +23,65 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
23
23
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
24
24
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
25
25
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint import/no-unresolved: 0 */
26
- const AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v4';
27
- const trackOptimizelyEvent = (optimizely, eventKey, userId, eventTags) => {
26
+ const AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v10';
27
+ const initializeOptimizelyExperimentContext = async (optimizely, experimentKey, variant) => {
28
+ (0, _logging.logInfo)('AuditExpiry experimentContext start', {
29
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
30
+ experimentKey,
31
+ variant,
32
+ hasOptimizely: Boolean(optimizely)
33
+ });
34
+ if (!optimizely) {
35
+ (0, _logging.logInfo)('AuditExpiry experimentContext no optimizely', {
36
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
37
+ experimentKey,
38
+ variant
39
+ });
40
+ return false;
41
+ }
42
+ if (typeof optimizely.onReady === 'function') {
43
+ const readyResult = await optimizely.onReady();
44
+ (0, _logging.logInfo)('AuditExpiry experimentContext onReady result', {
45
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
46
+ experimentKey,
47
+ variant,
48
+ readySuccess: readyResult?.success,
49
+ readyReason: readyResult?.reason
50
+ });
51
+ }
52
+ if (typeof optimizely.setForcedVariation !== 'function') {
53
+ (0, _logging.logInfo)('AuditExpiry experimentContext missing setForcedVariation', {
54
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
55
+ experimentKey,
56
+ variant
57
+ });
58
+ return false;
59
+ }
60
+ const forced = optimizely.setForcedVariation(experimentKey, variant);
61
+ (0, _logging.logInfo)('AuditExpiry experimentContext forced variation result', {
62
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
63
+ experimentKey,
64
+ variant,
65
+ forced
66
+ });
67
+ if (!forced) {
68
+ return false;
69
+ }
70
+ if (typeof optimizely.activate === 'function') {
71
+ const activatedVariation = optimizely.activate(experimentKey);
72
+ (0, _logging.logInfo)('AuditExpiry experimentContext activate result', {
73
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
74
+ experimentKey,
75
+ variant,
76
+ activatedVariation
77
+ });
78
+ }
79
+ return true;
80
+ };
81
+ const trackOptimizelyEvent = (optimizely, eventKey, eventTags) => {
28
82
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent start', {
29
83
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
30
84
  eventKey,
31
- userId,
32
85
  hasOptimizely: Boolean(optimizely),
33
86
  eventTags
34
87
  });
@@ -51,32 +104,24 @@ const trackOptimizelyEvent = (optimizely, eventKey, userId, eventTags) => {
51
104
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent calling track', {
52
105
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
53
106
  eventKey,
54
- userId,
55
107
  eventTags,
56
108
  hasOnReady: typeof optimizely.onReady === 'function'
57
109
  });
58
- optimizely.track(eventKey, userId, undefined, eventTags);
110
+ optimizely.track(eventKey, undefined, undefined, eventTags);
59
111
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent track called', {
60
112
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
61
113
  eventKey
62
114
  });
63
115
  return true;
64
116
  };
65
-
66
- /**
67
- * Access Expiration top-of-courseware banner.
68
- *
69
- * This is the plugin-architecture equivalent of the Learning MFE's
70
- * `src/alerts/access-expiration-alert/AccessExpirationAlert.jsx`.
71
- *
72
- * It renders directly as a plugin widget (does NOT use the Learning MFE alert registration system).
73
- */
74
- const AccessExpirationAlert = _ref => {
117
+ const AccessExpirationAlertInnerBase = _ref => {
75
118
  let {
76
- courseId
119
+ courseId,
120
+ optimizely
77
121
  } = _ref;
78
122
  const intl = (0, _i18n.useIntl)();
79
123
  const hasTrackedBannerView = (0, _react.useRef)(false);
124
+ const [isExperimentContextReady, setIsExperimentContextReady] = (0, _react.useState)(false);
80
125
  const {
81
126
  org,
82
127
  userTimezone
@@ -91,45 +136,75 @@ const AccessExpirationAlert = _ref => {
91
136
  const expiryDays = accessExpiration?.expiryDays;
92
137
  const variant = accessExpiration?.variant;
93
138
  (0, _react.useEffect)(() => {
94
- (0, _logging.logInfo)('AuditExpiry useEffect entered', {
139
+ let isMounted = true;
140
+ const setupExperimentContext = async () => {
141
+ if (!experimentKey || !variant || !optimizely) {
142
+ setIsExperimentContextReady(false);
143
+ (0, _logging.logInfo)('AuditExpiry experimentContext skipped', {
144
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
145
+ courseId,
146
+ experimentKey,
147
+ variant,
148
+ hasOptimizely: Boolean(optimizely)
149
+ });
150
+ return;
151
+ }
152
+ try {
153
+ const isReady = await initializeOptimizelyExperimentContext(optimizely, experimentKey, variant);
154
+ if (isMounted) {
155
+ setIsExperimentContextReady(isReady);
156
+ }
157
+ (0, _logging.logInfo)('AuditExpiry experimentContext ready state', {
158
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
159
+ courseId,
160
+ experimentKey,
161
+ variant,
162
+ isExperimentContextReady: isReady
163
+ });
164
+ } catch (error) {
165
+ if (isMounted) {
166
+ setIsExperimentContextReady(false);
167
+ }
168
+ (0, _logging.logError)(error, {
169
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
170
+ source: 'AuditExpiry experimentContext setup',
171
+ courseId,
172
+ experimentKey,
173
+ variant
174
+ });
175
+ }
176
+ };
177
+ setupExperimentContext();
178
+ return () => {
179
+ isMounted = false;
180
+ };
181
+ }, [courseId, experimentKey, optimizely, variant]);
182
+ (0, _react.useEffect)(() => {
183
+ (0, _logging.logInfo)('AuditExpiry bannerTrack effect entered', {
95
184
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
96
185
  courseId,
97
186
  experimentKey,
98
187
  variant,
99
188
  expiryDays,
100
- alreadyTracked: hasTrackedBannerView.current
189
+ alreadyTracked: hasTrackedBannerView.current,
190
+ hasOptimizely: Boolean(optimizely),
191
+ isExperimentContextReady
101
192
  });
102
- if (!experimentKey || !variant || hasTrackedBannerView.current) {
103
- (0, _logging.logInfo)('AuditExpiry useEffect skipped', {
193
+ if (!experimentKey || !variant || hasTrackedBannerView.current || !isExperimentContextReady) {
194
+ (0, _logging.logInfo)('AuditExpiry bannerTrack effect skipped', {
104
195
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
105
196
  courseId,
106
197
  experimentKey,
107
198
  variant,
108
- alreadyTracked: hasTrackedBannerView.current
199
+ alreadyTracked: hasTrackedBannerView.current,
200
+ isExperimentContextReady
109
201
  });
110
202
  return undefined;
111
203
  }
112
204
  let isMounted = true;
113
205
  const trackBannerShown = async () => {
114
206
  try {
115
- const optimizely = (0, _optimizely.getOptimizely)();
116
- (0, _logging.logInfo)('AuditExpiry trackBannerShown getOptimizely', {
117
- debugVersion: AUDIT_EXPIRY_LOG_VERSION,
118
- hasOptimizely: Boolean(optimizely),
119
- hasOnReady: typeof optimizely?.onReady === 'function',
120
- hasTrack: typeof optimizely?.track === 'function'
121
- });
122
- if (!optimizely) {
123
- return;
124
- }
125
- const {
126
- userId
127
- } = (0, _auth.getAuthenticatedUser)();
128
- (0, _logging.logInfo)('AuditExpiry trackBannerShown user', {
129
- debugVersion: AUDIT_EXPIRY_LOG_VERSION,
130
- userId
131
- });
132
- const didTrack = trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_banner_shown', userId.toString(), {
207
+ const didTrack = trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_banner_shown', {
133
208
  experimentKey,
134
209
  variant,
135
210
  expiryDays,
@@ -152,16 +227,13 @@ const AccessExpirationAlert = _ref => {
152
227
  experimentKey,
153
228
  variant
154
229
  });
155
- // Never break the banner experience if analytics fails.
156
230
  }
157
231
  };
158
232
  trackBannerShown();
159
233
  return () => {
160
234
  isMounted = false;
161
235
  };
162
- }, [courseId, experimentKey, expiryDays, variant]);
163
-
164
- // Match original MFE logic.
236
+ }, [courseId, experimentKey, expiryDays, isExperimentContextReady, optimizely, variant]);
165
237
  if (!accessExpiration || accessExpiration.masqueradingExpiredCourse) {
166
238
  return null;
167
239
  }
@@ -176,10 +248,9 @@ const AccessExpirationAlert = _ref => {
176
248
  courseId,
177
249
  experimentKey,
178
250
  variant,
179
- expiryDays
251
+ expiryDays,
252
+ isExperimentContextReady
180
253
  });
181
- // Keep analytics identical to the temporary in-course wiring:
182
- // analyticsPageName === 'in_course'
183
254
  const analyticsPageName = 'in_course';
184
255
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', {
185
256
  org_key: org,
@@ -189,40 +260,31 @@ const AccessExpirationAlert = _ref => {
189
260
  linkType: 'link',
190
261
  pageName: analyticsPageName
191
262
  });
192
- if (experimentKey && variant) {
193
- try {
194
- const optimizely = (0, _optimizely.getOptimizely)();
195
- (0, _logging.logInfo)('AuditExpiry logClick getOptimizely', {
196
- debugVersion: AUDIT_EXPIRY_LOG_VERSION,
197
- hasOptimizely: Boolean(optimizely),
198
- hasOnReady: typeof optimizely?.onReady === 'function',
199
- hasTrack: typeof optimizely?.track === 'function'
200
- });
201
- if (optimizely) {
202
- const {
203
- userId
204
- } = (0, _auth.getAuthenticatedUser)();
205
- (0, _logging.logInfo)('AuditExpiry logClick user', {
206
- debugVersion: AUDIT_EXPIRY_LOG_VERSION,
207
- userId
208
- });
209
- trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_upgrade_clicked', userId.toString(), {
210
- experimentKey,
211
- variant,
212
- expiryDays,
213
- courseId
214
- });
215
- }
216
- } catch (error) {
217
- (0, _logging.logError)(error, {
218
- debugVersion: AUDIT_EXPIRY_LOG_VERSION,
219
- source: 'AuditExpiry logClick',
220
- courseId,
221
- experimentKey,
222
- variant
223
- });
224
- // Never block the click-through path if analytics fails.
225
- }
263
+ if (!experimentKey || !variant || !optimizely || !isExperimentContextReady) {
264
+ (0, _logging.logInfo)('AuditExpiry logClick skipped Optimizely track', {
265
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
266
+ courseId,
267
+ experimentKey,
268
+ variant,
269
+ isExperimentContextReady
270
+ });
271
+ return;
272
+ }
273
+ try {
274
+ trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_upgrade_clicked', {
275
+ experimentKey,
276
+ variant,
277
+ expiryDays,
278
+ courseId
279
+ });
280
+ } catch (error) {
281
+ (0, _logging.logError)(error, {
282
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
283
+ source: 'AuditExpiry logClick',
284
+ courseId,
285
+ experimentKey,
286
+ variant
287
+ });
226
288
  }
227
289
  };
228
290
  let deadlineMessage = null;
@@ -284,6 +346,40 @@ const AccessExpirationAlert = _ref => {
284
346
  }), deadlineMessage]
285
347
  });
286
348
  };
349
+ const AccessExpirationAlertInner = (0, _reactSdk.withOptimizely)(AccessExpirationAlertInnerBase);
350
+ AccessExpirationAlertInnerBase.propTypes = {
351
+ courseId: _propTypes.default.string.isRequired,
352
+ optimizely: _propTypes.default.shape({
353
+ activate: _propTypes.default.func,
354
+ onReady: _propTypes.default.func,
355
+ setForcedVariation: _propTypes.default.func,
356
+ track: _propTypes.default.func
357
+ })
358
+ };
359
+ AccessExpirationAlertInnerBase.defaultProps = {
360
+ optimizely: null
361
+ };
362
+ const AccessExpirationAlert = _ref2 => {
363
+ let {
364
+ courseId
365
+ } = _ref2;
366
+ const {
367
+ enrollmentMode
368
+ } = (0, _modelStore.useModel)('coursewareMeta', courseId);
369
+ (0, _logging.logInfo)('AuditExpiry provider setup', {
370
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
371
+ courseId,
372
+ enrollmentMode
373
+ });
374
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_optimizely.OptimizelyProviderWrapper, {
375
+ defaultComponent: AccessExpirationAlertInnerBase,
376
+ experimentalComponent: AccessExpirationAlertInner,
377
+ courseId: courseId,
378
+ userAttributes: _objectSpread({}, enrollmentMode ? {
379
+ lms_enrollment_mode: enrollmentMode
380
+ } : {})
381
+ });
382
+ };
287
383
  AccessExpirationAlert.propTypes = {
288
384
  courseId: _propTypes.default.string.isRequired
289
385
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AccessExpirationAlert.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_auth","_i18n","_logging","_paragon","_icons","_modelStore","_optimizely","_messages","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","AUDIT_EXPIRY_LOG_VERSION","trackOptimizelyEvent","optimizely","eventKey","userId","eventTags","logInfo","debugVersion","hasOptimizely","Boolean","track","hasTrack","hasOnReady","onReady","undefined","AccessExpirationAlert","_ref","courseId","intl","useIntl","hasTrackedBannerView","useRef","org","userTimezone","useModel","accessExpiration","timezoneFormatArgs","timeZone","experimentKey","expiryDays","variant","useEffect","alreadyTracked","current","isMounted","trackBannerShown","getOptimizely","getAuthenticatedUser","didTrack","toString","error","logError","source","masqueradingExpiredCourse","expirationDate","upgradeDeadline","upgradeUrl","logClick","analyticsPageName","sendTrackEvent","org_key","courserun_key","linkCategory","linkName","linkType","pageName","deadlineMessage","jsxs","Fragment","children","jsx","FormattedMessage","id","defaultMessage","description","values","date","FormattedDate","day","month","year","Hyperlink","className","style","textDecoration","destination","onClick","formatMessage","messages","upgradeNow","Alert","icon","Info","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/access-expiration-alert/AccessExpirationAlert.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { FormattedMessage, FormattedDate, useIntl } from '@edx/frontend-platform/i18n';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { Alert, Hyperlink } from '@openedx/paragon';\nimport { Info } from '@openedx/paragon/icons';\n\nimport { useModel } from '@src/generic/model-store';\nimport { getOptimizely } from '../data/optimizely';\n\nimport messages from './messages';\n\nconst AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v4';\n\nconst trackOptimizelyEvent = (optimizely, eventKey, userId, eventTags) => {\n logInfo('AuditExpiry trackOptimizelyEvent start', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n userId,\n hasOptimizely: Boolean(optimizely),\n eventTags,\n });\n\n if (!optimizely) {\n logInfo('AuditExpiry trackOptimizelyEvent no optimizely', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n });\n return false;\n }\n\n if (typeof optimizely.track !== 'function') {\n logInfo('AuditExpiry trackOptimizelyEvent missing track method', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n hasTrack: typeof optimizely.track === 'function',\n hasOnReady: typeof optimizely.onReady === 'function',\n });\n return false;\n }\n\n logInfo('AuditExpiry trackOptimizelyEvent calling track', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n userId,\n eventTags,\n hasOnReady: typeof optimizely.onReady === 'function',\n });\n optimizely.track(eventKey, userId, undefined, eventTags);\n logInfo('AuditExpiry trackOptimizelyEvent track called', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n });\n return true;\n};\n\n/**\n * Access Expiration top-of-courseware banner.\n *\n * This is the plugin-architecture equivalent of the Learning MFE's\n * `src/alerts/access-expiration-alert/AccessExpirationAlert.jsx`.\n *\n * It renders directly as a plugin widget (does NOT use the Learning MFE alert registration system).\n */\nconst AccessExpirationAlert = ({\n courseId,\n}) => {\n const intl = useIntl();\n const hasTrackedBannerView = useRef(false);\n\n const { org, userTimezone } = useModel('courseHomeMeta', courseId);\n const { accessExpiration } = useModel('coursewareMeta', courseId);\n\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const experimentKey = accessExpiration?.experimentKey;\n const expiryDays = accessExpiration?.expiryDays;\n const variant = accessExpiration?.variant;\n\n useEffect(() => {\n logInfo('AuditExpiry useEffect entered', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n expiryDays,\n alreadyTracked: hasTrackedBannerView.current,\n });\n\n if (!experimentKey || !variant || hasTrackedBannerView.current) {\n logInfo('AuditExpiry useEffect skipped', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n alreadyTracked: hasTrackedBannerView.current,\n });\n return undefined;\n }\n\n let isMounted = true;\n\n const trackBannerShown = async () => {\n try {\n const optimizely = getOptimizely();\n logInfo('AuditExpiry trackBannerShown getOptimizely', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n hasOptimizely: Boolean(optimizely),\n hasOnReady: typeof optimizely?.onReady === 'function',\n hasTrack: typeof optimizely?.track === 'function',\n });\n if (!optimizely) {\n return;\n }\n\n const { userId } = getAuthenticatedUser();\n logInfo('AuditExpiry trackBannerShown user', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n userId,\n });\n const didTrack = trackOptimizelyEvent(\n optimizely,\n 'audit_expiry_urgency_banner_shown',\n userId.toString(),\n {\n experimentKey,\n variant,\n expiryDays,\n courseId,\n },\n );\n\n if (didTrack && isMounted) {\n hasTrackedBannerView.current = true;\n logInfo('AuditExpiry trackBannerShown marked tracked', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n });\n }\n } catch (error) {\n logError(error, {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n source: 'AuditExpiry trackBannerShown',\n courseId,\n experimentKey,\n variant,\n });\n // Never break the banner experience if analytics fails.\n }\n };\n\n trackBannerShown();\n\n return () => {\n isMounted = false;\n };\n }, [courseId, experimentKey, expiryDays, variant]);\n\n // Match original MFE logic.\n if (!accessExpiration || accessExpiration.masqueradingExpiredCourse) {\n return null;\n }\n\n const {\n expirationDate,\n upgradeDeadline,\n upgradeUrl,\n } = accessExpiration;\n\n const logClick = () => {\n logInfo('AuditExpiry logClick entered', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n expiryDays,\n });\n // Keep analytics identical to the temporary in-course wiring:\n // analyticsPageName === 'in_course'\n const analyticsPageName = 'in_course';\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'FBE_banner',\n linkName: `${analyticsPageName}_audit_access_expires`,\n linkType: 'link',\n pageName: analyticsPageName,\n });\n\n if (experimentKey && variant) {\n try {\n const optimizely = getOptimizely();\n logInfo('AuditExpiry logClick getOptimizely', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n hasOptimizely: Boolean(optimizely),\n hasOnReady: typeof optimizely?.onReady === 'function',\n hasTrack: typeof optimizely?.track === 'function',\n });\n if (optimizely) {\n const { userId } = getAuthenticatedUser();\n logInfo('AuditExpiry logClick user', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n userId,\n });\n trackOptimizelyEvent(\n optimizely,\n 'audit_expiry_urgency_upgrade_clicked',\n userId.toString(),\n {\n experimentKey,\n variant,\n expiryDays,\n courseId,\n },\n );\n }\n } catch (error) {\n logError(error, {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n source: 'AuditExpiry logClick',\n courseId,\n experimentKey,\n variant,\n });\n // Never block the click-through path if analytics fails.\n }\n }\n };\n\n let deadlineMessage = null;\n if (upgradeDeadline && upgradeUrl) {\n deadlineMessage = (\n <>\n <br />\n <FormattedMessage\n id=\"learning.accessExpiration.deadline\"\n defaultMessage=\"Upgrade by {date} to get unlimited access to the course as long as it exists on the site.\"\n description=\"Warning shown to learner to upgrade while they are enrolled on the audit version and it's possible to upgrade\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationUpgradeDeadline\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={upgradeDeadline}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n &nbsp;\n <Hyperlink\n className=\"font-weight-bold\"\n style={{ textDecoration: 'underline' }}\n destination={upgradeUrl}\n onClick={logClick}\n >\n {intl.formatMessage(messages.upgradeNow)}\n </Hyperlink>\n </>\n );\n }\n\n return (\n <Alert variant=\"info\" icon={Info}>\n <span className=\"font-weight-bold\">\n <FormattedMessage\n id=\"learning.accessExpiration.header\"\n defaultMessage=\"Audit Access Expires {date}\"\n description=\"Headline for auditing deadline\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationHeaderDate\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={expirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </span>\n <br />\n <FormattedMessage\n id=\"learning.accessExpiration.body\"\n defaultMessage=\"You lose all access to this course, including your progress, on {date}.\"\n description=\"Message body to tell learner the consequences of course expiration.\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationBodyDate\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={expirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n {deadlineMessage}\n </Alert>\n );\n};\n\nAccessExpirationAlert.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default AccessExpirationAlert;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AccessExpirationAlert.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_reactSdk","_analytics","_i18n","_logging","_paragon","_icons","_modelStore","_optimizely","_messages","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","AUDIT_EXPIRY_LOG_VERSION","initializeOptimizelyExperimentContext","optimizely","experimentKey","variant","logInfo","debugVersion","hasOptimizely","Boolean","onReady","readyResult","readySuccess","success","readyReason","reason","setForcedVariation","forced","activate","activatedVariation","trackOptimizelyEvent","eventKey","eventTags","track","hasTrack","hasOnReady","undefined","AccessExpirationAlertInnerBase","_ref","courseId","intl","useIntl","hasTrackedBannerView","useRef","isExperimentContextReady","setIsExperimentContextReady","useState","org","userTimezone","useModel","accessExpiration","timezoneFormatArgs","timeZone","expiryDays","useEffect","isMounted","setupExperimentContext","isReady","error","logError","source","alreadyTracked","current","trackBannerShown","didTrack","masqueradingExpiredCourse","expirationDate","upgradeDeadline","upgradeUrl","logClick","analyticsPageName","sendTrackEvent","org_key","courserun_key","linkCategory","linkName","linkType","pageName","deadlineMessage","jsxs","Fragment","children","jsx","FormattedMessage","id","defaultMessage","description","values","date","FormattedDate","day","month","year","Hyperlink","className","style","textDecoration","destination","onClick","formatMessage","messages","upgradeNow","Alert","icon","Info","AccessExpirationAlertInner","withOptimizely","propTypes","PropTypes","string","isRequired","shape","func","defaultProps","AccessExpirationAlert","_ref2","enrollmentMode","OptimizelyProviderWrapper","defaultComponent","experimentalComponent","userAttributes","lms_enrollment_mode","_default","exports"],"sources":["../../src/access-expiration-alert/AccessExpirationAlert.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { withOptimizely } from '@optimizely/react-sdk';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport {\n FormattedMessage, FormattedDate, useIntl,\n} from '@edx/frontend-platform/i18n';\nimport { logError, logInfo } from '@edx/frontend-platform/logging';\nimport { Alert, Hyperlink } from '@openedx/paragon';\nimport { Info } from '@openedx/paragon/icons';\n\nimport { useModel } from '@src/generic/model-store';\nimport { OptimizelyProviderWrapper } from '../optimizely';\n\nimport messages from './messages';\n\nconst AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v10';\n\nconst initializeOptimizelyExperimentContext = async (optimizely, experimentKey, variant) => {\n logInfo('AuditExpiry experimentContext start', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n hasOptimizely: Boolean(optimizely),\n });\n\n if (!optimizely) {\n logInfo('AuditExpiry experimentContext no optimizely', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n });\n return false;\n }\n\n if (typeof optimizely.onReady === 'function') {\n const readyResult = await optimizely.onReady();\n logInfo('AuditExpiry experimentContext onReady result', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n readySuccess: readyResult?.success,\n readyReason: readyResult?.reason,\n });\n }\n\n if (typeof optimizely.setForcedVariation !== 'function') {\n logInfo('AuditExpiry experimentContext missing setForcedVariation', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n });\n return false;\n }\n\n const forced = optimizely.setForcedVariation(experimentKey, variant);\n logInfo('AuditExpiry experimentContext forced variation result', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n forced,\n });\n\n if (!forced) {\n return false;\n }\n\n if (typeof optimizely.activate === 'function') {\n const activatedVariation = optimizely.activate(experimentKey);\n logInfo('AuditExpiry experimentContext activate result', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n experimentKey,\n variant,\n activatedVariation,\n });\n }\n\n return true;\n};\n\nconst trackOptimizelyEvent = (optimizely, eventKey, eventTags) => {\n logInfo('AuditExpiry trackOptimizelyEvent start', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n hasOptimizely: Boolean(optimizely),\n eventTags,\n });\n\n if (!optimizely) {\n logInfo('AuditExpiry trackOptimizelyEvent no optimizely', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n });\n return false;\n }\n\n if (typeof optimizely.track !== 'function') {\n logInfo('AuditExpiry trackOptimizelyEvent missing track method', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n hasTrack: typeof optimizely.track === 'function',\n hasOnReady: typeof optimizely.onReady === 'function',\n });\n return false;\n }\n\n logInfo('AuditExpiry trackOptimizelyEvent calling track', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n eventTags,\n hasOnReady: typeof optimizely.onReady === 'function',\n });\n\n optimizely.track(eventKey, undefined, undefined, eventTags);\n\n logInfo('AuditExpiry trackOptimizelyEvent track called', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n eventKey,\n });\n return true;\n};\n\nconst AccessExpirationAlertInnerBase = ({\n courseId,\n optimizely,\n}) => {\n const intl = useIntl();\n const hasTrackedBannerView = useRef(false);\n const [isExperimentContextReady, setIsExperimentContextReady] = useState(false);\n\n const { org, userTimezone } = useModel('courseHomeMeta', courseId);\n const { accessExpiration } = useModel('coursewareMeta', courseId);\n\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const experimentKey = accessExpiration?.experimentKey;\n const expiryDays = accessExpiration?.expiryDays;\n const variant = accessExpiration?.variant;\n\n useEffect(() => {\n let isMounted = true;\n\n const setupExperimentContext = async () => {\n if (!experimentKey || !variant || !optimizely) {\n setIsExperimentContextReady(false);\n logInfo('AuditExpiry experimentContext skipped', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n hasOptimizely: Boolean(optimizely),\n });\n return;\n }\n\n try {\n const isReady = await initializeOptimizelyExperimentContext(optimizely, experimentKey, variant);\n if (isMounted) {\n setIsExperimentContextReady(isReady);\n }\n logInfo('AuditExpiry experimentContext ready state', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n isExperimentContextReady: isReady,\n });\n } catch (error) {\n if (isMounted) {\n setIsExperimentContextReady(false);\n }\n logError(error, {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n source: 'AuditExpiry experimentContext setup',\n courseId,\n experimentKey,\n variant,\n });\n }\n };\n\n setupExperimentContext();\n\n return () => {\n isMounted = false;\n };\n }, [courseId, experimentKey, optimizely, variant]);\n\n useEffect(() => {\n logInfo('AuditExpiry bannerTrack effect entered', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n expiryDays,\n alreadyTracked: hasTrackedBannerView.current,\n hasOptimizely: Boolean(optimizely),\n isExperimentContextReady,\n });\n\n if (!experimentKey || !variant || hasTrackedBannerView.current || !isExperimentContextReady) {\n logInfo('AuditExpiry bannerTrack effect skipped', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n alreadyTracked: hasTrackedBannerView.current,\n isExperimentContextReady,\n });\n return undefined;\n }\n\n let isMounted = true;\n\n const trackBannerShown = async () => {\n try {\n const didTrack = trackOptimizelyEvent(\n optimizely,\n 'audit_expiry_urgency_banner_shown',\n {\n experimentKey,\n variant,\n expiryDays,\n courseId,\n },\n );\n\n if (didTrack && isMounted) {\n hasTrackedBannerView.current = true;\n logInfo('AuditExpiry trackBannerShown marked tracked', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n });\n }\n } catch (error) {\n logError(error, {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n source: 'AuditExpiry trackBannerShown',\n courseId,\n experimentKey,\n variant,\n });\n }\n };\n\n trackBannerShown();\n\n return () => {\n isMounted = false;\n };\n }, [courseId, experimentKey, expiryDays, isExperimentContextReady, optimizely, variant]);\n\n if (!accessExpiration || accessExpiration.masqueradingExpiredCourse) {\n return null;\n }\n\n const {\n expirationDate,\n upgradeDeadline,\n upgradeUrl,\n } = accessExpiration;\n\n const logClick = () => {\n logInfo('AuditExpiry logClick entered', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n expiryDays,\n isExperimentContextReady,\n });\n\n const analyticsPageName = 'in_course';\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n org_key: org,\n courserun_key: courseId,\n linkCategory: 'FBE_banner',\n linkName: `${analyticsPageName}_audit_access_expires`,\n linkType: 'link',\n pageName: analyticsPageName,\n });\n\n if (!experimentKey || !variant || !optimizely || !isExperimentContextReady) {\n logInfo('AuditExpiry logClick skipped Optimizely track', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n experimentKey,\n variant,\n isExperimentContextReady,\n });\n return;\n }\n\n try {\n trackOptimizelyEvent(\n optimizely,\n 'audit_expiry_urgency_upgrade_clicked',\n {\n experimentKey,\n variant,\n expiryDays,\n courseId,\n },\n );\n } catch (error) {\n logError(error, {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n source: 'AuditExpiry logClick',\n courseId,\n experimentKey,\n variant,\n });\n }\n };\n\n let deadlineMessage = null;\n if (upgradeDeadline && upgradeUrl) {\n deadlineMessage = (\n <>\n <br />\n <FormattedMessage\n id=\"learning.accessExpiration.deadline\"\n defaultMessage=\"Upgrade by {date} to get unlimited access to the course as long as it exists on the site.\"\n description=\"Warning shown to learner to upgrade while they are enrolled on the audit version and it's possible to upgrade\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationUpgradeDeadline\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={upgradeDeadline}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n &nbsp;\n <Hyperlink\n className=\"font-weight-bold\"\n style={{ textDecoration: 'underline' }}\n destination={upgradeUrl}\n onClick={logClick}\n >\n {intl.formatMessage(messages.upgradeNow)}\n </Hyperlink>\n </>\n );\n }\n\n return (\n <Alert variant=\"info\" icon={Info}>\n <span className=\"font-weight-bold\">\n <FormattedMessage\n id=\"learning.accessExpiration.header\"\n defaultMessage=\"Audit Access Expires {date}\"\n description=\"Headline for auditing deadline\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationHeaderDate\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={expirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </span>\n <br />\n <FormattedMessage\n id=\"learning.accessExpiration.body\"\n defaultMessage=\"You lose all access to this course, including your progress, on {date}.\"\n description=\"Message body to tell learner the consequences of course expiration.\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpirationBodyDate\"\n day=\"numeric\"\n month=\"short\"\n year=\"numeric\"\n value={expirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n {deadlineMessage}\n </Alert>\n );\n};\n\nconst AccessExpirationAlertInner = withOptimizely(AccessExpirationAlertInnerBase);\n\nAccessExpirationAlertInnerBase.propTypes = {\n courseId: PropTypes.string.isRequired,\n optimizely: PropTypes.shape({\n activate: PropTypes.func,\n onReady: PropTypes.func,\n setForcedVariation: PropTypes.func,\n track: PropTypes.func,\n }),\n};\n\nAccessExpirationAlertInnerBase.defaultProps = {\n optimizely: null,\n};\n\nconst AccessExpirationAlert = ({\n courseId,\n}) => {\n const { enrollmentMode } = useModel('coursewareMeta', courseId);\n\n logInfo('AuditExpiry provider setup', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n enrollmentMode,\n });\n\n return (\n <OptimizelyProviderWrapper\n defaultComponent={AccessExpirationAlertInnerBase}\n experimentalComponent={AccessExpirationAlertInner}\n courseId={courseId}\n userAttributes={{\n ...(enrollmentMode ? { lms_enrollment_mode: enrollmentMode } : {}),\n }}\n />\n );\n};\n\nAccessExpirationAlert.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default AccessExpirationAlert;\n"],"mappings":"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","ignoreList":[]}
@@ -11,15 +11,27 @@ var _i18n = require("@edx/frontend-platform/i18n");
11
11
  var _optimizely = require("../data/optimizely");
12
12
  var _jsxRuntime = require("react/jsx-runtime");
13
13
  const _excluded = ["defaultComponent", "experimentalComponent", "defaultVariationKey", "experimentKey"],
14
- _excluded2 = ["defaultComponent", "experimentalComponent"];
14
+ _excluded2 = ["defaultComponent", "experimentalComponent", "userAttributes"];
15
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
17
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
16
18
  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; }
17
19
  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; }
18
20
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
19
21
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
20
22
  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); }
21
- function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
22
- function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
23
+ const getOptimizelyUser = function () {
24
+ let userAttributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
+ const {
26
+ userId
27
+ } = (0, _auth.getAuthenticatedUser)();
28
+ return {
29
+ id: userId.toString(),
30
+ attributes: _objectSpread({
31
+ lms_language_preference: (0, _i18n.getLocale)()
32
+ }, userAttributes)
33
+ };
34
+ };
23
35
  const OptimizelyExperimentController = (// Use defaultVariationKey if your experiment is set to target less than 100% of traffic
24
36
  // and you have a variation for users not included in the experiment.
25
37
  _ref) => {
@@ -57,29 +69,23 @@ OptimizelyExperimentController.defaultProps = {
57
69
  */
58
70
  const OptimizelyExperiment = props => {
59
71
  const {
60
- userId
61
- } = (0, _auth.getAuthenticatedUser)();
62
- const {
63
- defaultComponent: DefaultComponent
72
+ defaultComponent: DefaultComponent,
73
+ userAttributes
64
74
  } = props;
65
75
  const optimizely = (0, _optimizely.getOptimizely)();
66
- return optimizely ?
67
- /*#__PURE__*/
68
- // The Optimizely SDK requires the user ID to be a string.
69
- (0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
76
+ return optimizely ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
70
77
  optimizely: optimizely,
71
- user: {
72
- id: userId.toString(),
73
- attributes: {
74
- lms_language_preference: (0, _i18n.getLocale)()
75
- }
76
- },
78
+ user: getOptimizelyUser(userAttributes),
77
79
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(OptimizelyExperimentController, _objectSpread({}, props))
78
80
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(DefaultComponent, _objectSpread({}, props));
79
81
  };
80
82
  exports.OptimizelyExperiment = OptimizelyExperiment;
81
83
  OptimizelyExperiment.propTypes = {
82
- defaultComponent: _propTypes.default.elementType.isRequired
84
+ defaultComponent: _propTypes.default.elementType.isRequired,
85
+ userAttributes: _propTypes.default.object // eslint-disable-line react/forbid-prop-types
86
+ };
87
+ OptimizelyExperiment.defaultProps = {
88
+ userAttributes: {}
83
89
  };
84
90
 
85
91
  /**
@@ -92,31 +98,25 @@ OptimizelyExperiment.propTypes = {
92
98
  const OptimizelyProviderWrapper = _ref2 => {
93
99
  let {
94
100
  defaultComponent: DefaultComponent,
95
- experimentalComponent: ExperimentalComponent
101
+ experimentalComponent: ExperimentalComponent,
102
+ userAttributes
96
103
  } = _ref2,
97
104
  props = _objectWithoutProperties(_ref2, _excluded2);
98
- const {
99
- userId
100
- } = (0, _auth.getAuthenticatedUser)();
101
105
  const optimizely = (0, _optimizely.getOptimizely)();
102
- return optimizely ?
103
- /*#__PURE__*/
104
- // The Optimizely SDK requires the user ID to be a string.
105
- (0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
106
+ return optimizely ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
106
107
  optimizely: optimizely,
107
- user: {
108
- id: userId.toString(),
109
- attributes: {
110
- lms_language_preference: (0, _i18n.getLocale)()
111
- }
112
- },
108
+ user: getOptimizelyUser(userAttributes),
113
109
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ExperimentalComponent, _objectSpread({}, props))
114
110
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(DefaultComponent, _objectSpread({}, props));
115
111
  };
116
112
  exports.OptimizelyProviderWrapper = OptimizelyProviderWrapper;
117
113
  OptimizelyProviderWrapper.propTypes = {
118
114
  experimentalComponent: _propTypes.default.elementType.isRequired,
119
- defaultComponent: _propTypes.default.elementType.isRequired
115
+ defaultComponent: _propTypes.default.elementType.isRequired,
116
+ userAttributes: _propTypes.default.object // eslint-disable-line react/forbid-prop-types
117
+ };
118
+ OptimizelyProviderWrapper.defaultProps = {
119
+ userAttributes: {}
120
120
  };
121
121
  var _default = exports.default = OptimizelyExperiment;
122
122
  //# sourceMappingURL=Optimizely.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Optimizely.js","names":["_propTypes","_interopRequireDefault","require","_auth","_reactSdk","_i18n","_optimizely","_jsxRuntime","_excluded","_excluded2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","_objectWithoutProperties","_objectWithoutPropertiesLoose","n","indexOf","propertyIsEnumerable","hasOwnProperty","OptimizelyExperimentController","_ref","defaultComponent","DefaultComponent","experimentalComponent","ExperimentalComponent","defaultVariationKey","experimentKey","props","decision","useDecision","enabled","variationKey","showDefault","jsx","children","propTypes","PropTypes","elementType","isRequired","string","defaultProps","OptimizelyExperiment","userId","getAuthenticatedUser","optimizely","getOptimizely","OptimizelyProvider","user","id","toString","attributes","lms_language_preference","getLocale","exports","OptimizelyProviderWrapper","_ref2","_default"],"sources":["../../src/optimizely/Optimizely.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { OptimizelyProvider, useDecision } from '@optimizely/react-sdk';\n\nimport { getLocale } from '@edx/frontend-platform/i18n';\nimport { getOptimizely } from '../data/optimizely';\n\nconst OptimizelyExperimentController = (\n // Use defaultVariationKey if your experiment is set to target less than 100% of traffic\n // and you have a variation for users not included in the experiment.\n {\n defaultComponent: DefaultComponent,\n experimentalComponent: ExperimentalComponent,\n defaultVariationKey,\n experimentKey,\n ...props\n },\n) => {\n const [decision] = useDecision(experimentKey);\n const { enabled, variationKey } = decision;\n\n const showDefault = !enabled || (defaultVariationKey && defaultVariationKey === variationKey);\n\n return (\n <div>\n {showDefault ? <DefaultComponent {...props} /> : <ExperimentalComponent {...props} />}\n </div>\n );\n};\n\nOptimizelyExperimentController.propTypes = {\n defaultComponent: PropTypes.elementType.isRequired,\n experimentalComponent: PropTypes.elementType.isRequired,\n defaultVariationKey: PropTypes.string,\n experimentKey: PropTypes.string.isRequired,\n};\n\nOptimizelyExperimentController.defaultProps = {\n defaultVariationKey: null,\n};\n\n/**\n * An optimizely helper:\n * Creates an OptimizelyProvider context for the given user and renders either experimentalComponent or\n * defaultCompoment based on the decision returned by optimizely.\n */\nconst OptimizelyExperiment = (props) => {\n const { userId } = getAuthenticatedUser();\n const { defaultComponent: DefaultComponent } = props;\n\n const optimizely = getOptimizely();\n\n return (\n optimizely\n ? (\n // The Optimizely SDK requires the user ID to be a string.\n <OptimizelyProvider\n optimizely={optimizely}\n user={{\n id: userId.toString(),\n attributes: { lms_language_preference: getLocale() },\n }}\n >\n <OptimizelyExperimentController {...props} />\n </OptimizelyProvider>\n )\n : (<DefaultComponent {...props} />)\n );\n};\n\nOptimizelyExperiment.propTypes = {\n defaultComponent: PropTypes.elementType.isRequired,\n};\n\n/**\n * An optimizely helper:\n * Creates an OptimizelyProvider context for the given user, but does not call decide to bucket the learner immediately.\n * Used if you need an optimizely context but don't want to immediately bucket the user.\n *\n * DefaultComponent is only rendered in the case that optimizely cannot be loaded.\n */\nconst OptimizelyProviderWrapper = ({\n defaultComponent: DefaultComponent,\n experimentalComponent: ExperimentalComponent,\n ...props\n}) => {\n const { userId } = getAuthenticatedUser();\n const optimizely = getOptimizely();\n\n return (\n optimizely\n ? (\n // The Optimizely SDK requires the user ID to be a string.\n <OptimizelyProvider\n optimizely={optimizely}\n user={{\n id: userId.toString(),\n attributes: { lms_language_preference: getLocale() },\n }}\n >\n <ExperimentalComponent {...props} />\n </OptimizelyProvider>\n ) : <DefaultComponent {...props} />\n );\n};\n\nOptimizelyProviderWrapper.propTypes = {\n experimentalComponent: PropTypes.elementType.isRequired,\n defaultComponent: PropTypes.elementType.isRequired,\n};\n\nexport default OptimizelyExperiment;\n\nexport {\n OptimizelyExperiment,\n OptimizelyProviderWrapper,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Optimizely.js","names":["_propTypes","_interopRequireDefault","require","_auth","_reactSdk","_i18n","_optimizely","_jsxRuntime","_excluded","_excluded2","e","__esModule","default","_objectWithoutProperties","t","o","r","i","_objectWithoutPropertiesLoose","Object","getOwnPropertySymbols","n","length","indexOf","propertyIsEnumerable","call","hasOwnProperty","ownKeys","keys","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","getOptimizelyUser","userAttributes","undefined","userId","getAuthenticatedUser","id","toString","attributes","lms_language_preference","getLocale","OptimizelyExperimentController","_ref","defaultComponent","DefaultComponent","experimentalComponent","ExperimentalComponent","defaultVariationKey","experimentKey","props","decision","useDecision","enabled","variationKey","showDefault","jsx","children","propTypes","PropTypes","elementType","isRequired","string","defaultProps","OptimizelyExperiment","optimizely","getOptimizely","OptimizelyProvider","user","exports","object","OptimizelyProviderWrapper","_ref2","_default"],"sources":["../../src/optimizely/Optimizely.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { OptimizelyProvider, useDecision } from '@optimizely/react-sdk';\n\nimport { getLocale } from '@edx/frontend-platform/i18n';\nimport { getOptimizely } from '../data/optimizely';\n\nconst getOptimizelyUser = (userAttributes = {}) => {\n const { userId } = getAuthenticatedUser();\n\n return {\n id: userId.toString(),\n attributes: {\n lms_language_preference: getLocale(),\n ...userAttributes,\n },\n };\n};\n\nconst OptimizelyExperimentController = (\n // Use defaultVariationKey if your experiment is set to target less than 100% of traffic\n // and you have a variation for users not included in the experiment.\n {\n defaultComponent: DefaultComponent,\n experimentalComponent: ExperimentalComponent,\n defaultVariationKey,\n experimentKey,\n ...props\n },\n) => {\n const [decision] = useDecision(experimentKey);\n const { enabled, variationKey } = decision;\n\n const showDefault = !enabled || (defaultVariationKey && defaultVariationKey === variationKey);\n\n return (\n <div>\n {showDefault ? <DefaultComponent {...props} /> : <ExperimentalComponent {...props} />}\n </div>\n );\n};\n\nOptimizelyExperimentController.propTypes = {\n defaultComponent: PropTypes.elementType.isRequired,\n experimentalComponent: PropTypes.elementType.isRequired,\n defaultVariationKey: PropTypes.string,\n experimentKey: PropTypes.string.isRequired,\n};\n\nOptimizelyExperimentController.defaultProps = {\n defaultVariationKey: null,\n};\n\n/**\n * An optimizely helper:\n * Creates an OptimizelyProvider context for the given user and renders either experimentalComponent or\n * defaultCompoment based on the decision returned by optimizely.\n */\nconst OptimizelyExperiment = (props) => {\n const {\n defaultComponent: DefaultComponent,\n userAttributes,\n } = props;\n\n const optimizely = getOptimizely();\n\n return (\n optimizely\n ? (\n <OptimizelyProvider\n optimizely={optimizely}\n user={getOptimizelyUser(userAttributes)}\n >\n <OptimizelyExperimentController {...props} />\n </OptimizelyProvider>\n )\n : (<DefaultComponent {...props} />)\n );\n};\n\nOptimizelyExperiment.propTypes = {\n defaultComponent: PropTypes.elementType.isRequired,\n userAttributes: PropTypes.object, // eslint-disable-line react/forbid-prop-types\n};\n\nOptimizelyExperiment.defaultProps = {\n userAttributes: {},\n};\n\n/**\n * An optimizely helper:\n * Creates an OptimizelyProvider context for the given user, but does not call decide to bucket the learner immediately.\n * Used if you need an optimizely context but don't want to immediately bucket the user.\n *\n * DefaultComponent is only rendered in the case that optimizely cannot be loaded.\n */\nconst OptimizelyProviderWrapper = ({\n defaultComponent: DefaultComponent,\n experimentalComponent: ExperimentalComponent,\n userAttributes,\n ...props\n}) => {\n const optimizely = getOptimizely();\n\n return (\n optimizely\n ? (\n <OptimizelyProvider\n optimizely={optimizely}\n user={getOptimizelyUser(userAttributes)}\n >\n <ExperimentalComponent {...props} />\n </OptimizelyProvider>\n ) : <DefaultComponent {...props} />\n );\n};\n\nOptimizelyProviderWrapper.propTypes = {\n experimentalComponent: PropTypes.elementType.isRequired,\n defaultComponent: PropTypes.elementType.isRequired,\n userAttributes: PropTypes.object, // eslint-disable-line react/forbid-prop-types\n};\n\nOptimizelyProviderWrapper.defaultProps = {\n userAttributes: {},\n};\n\nexport default OptimizelyExperiment;\n\nexport {\n OptimizelyExperiment,\n OptimizelyProviderWrapper,\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-plugin-advertisements",
3
- "version": "2.21.0",
3
+ "version": "2.23.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "main": "dist/index.js",
6
6
  "repository": {