@edx/frontend-plugin-advertisements 2.21.0 → 2.22.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,6 +6,7 @@ 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
11
  var _auth = require("@edx/frontend-platform/auth");
11
12
  var _i18n = require("@edx/frontend-platform/i18n");
@@ -23,12 +24,65 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
23
24
  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
25
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
25
26
  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) => {
27
+ const AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v9';
28
+ const initializeOptimizelyExperimentContext = async (optimizely, experimentKey, variant) => {
29
+ (0, _logging.logInfo)('AuditExpiry experimentContext start', {
30
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
31
+ experimentKey,
32
+ variant,
33
+ hasOptimizely: Boolean(optimizely)
34
+ });
35
+ if (!optimizely) {
36
+ (0, _logging.logInfo)('AuditExpiry experimentContext no optimizely', {
37
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
38
+ experimentKey,
39
+ variant
40
+ });
41
+ return false;
42
+ }
43
+ if (typeof optimizely.onReady === 'function') {
44
+ const readyResult = await optimizely.onReady();
45
+ (0, _logging.logInfo)('AuditExpiry experimentContext onReady result', {
46
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
47
+ experimentKey,
48
+ variant,
49
+ readySuccess: readyResult?.success,
50
+ readyReason: readyResult?.reason
51
+ });
52
+ }
53
+ if (typeof optimizely.setForcedVariation !== 'function') {
54
+ (0, _logging.logInfo)('AuditExpiry experimentContext missing setForcedVariation', {
55
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
56
+ experimentKey,
57
+ variant
58
+ });
59
+ return false;
60
+ }
61
+ const forced = optimizely.setForcedVariation(experimentKey, variant);
62
+ (0, _logging.logInfo)('AuditExpiry experimentContext forced variation result', {
63
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
64
+ experimentKey,
65
+ variant,
66
+ forced
67
+ });
68
+ if (!forced) {
69
+ return false;
70
+ }
71
+ if (typeof optimizely.activate === 'function') {
72
+ const activatedVariation = optimizely.activate(experimentKey);
73
+ (0, _logging.logInfo)('AuditExpiry experimentContext activate result', {
74
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
75
+ experimentKey,
76
+ variant,
77
+ activatedVariation
78
+ });
79
+ }
80
+ return true;
81
+ };
82
+ const trackOptimizelyEvent = (optimizely, eventKey, eventTags) => {
28
83
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent start', {
29
84
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
30
85
  eventKey,
31
- userId,
32
86
  hasOptimizely: Boolean(optimizely),
33
87
  eventTags
34
88
  });
@@ -51,32 +105,24 @@ const trackOptimizelyEvent = (optimizely, eventKey, userId, eventTags) => {
51
105
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent calling track', {
52
106
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
53
107
  eventKey,
54
- userId,
55
108
  eventTags,
56
109
  hasOnReady: typeof optimizely.onReady === 'function'
57
110
  });
58
- optimizely.track(eventKey, userId, undefined, eventTags);
111
+ optimizely.track(eventKey, undefined, undefined, eventTags);
59
112
  (0, _logging.logInfo)('AuditExpiry trackOptimizelyEvent track called', {
60
113
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
61
114
  eventKey
62
115
  });
63
116
  return true;
64
117
  };
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 => {
118
+ const AccessExpirationAlertInnerBase = _ref => {
75
119
  let {
76
- courseId
120
+ courseId,
121
+ optimizely
77
122
  } = _ref;
78
123
  const intl = (0, _i18n.useIntl)();
79
124
  const hasTrackedBannerView = (0, _react.useRef)(false);
125
+ const [isExperimentContextReady, setIsExperimentContextReady] = (0, _react.useState)(false);
80
126
  const {
81
127
  org,
82
128
  userTimezone
@@ -91,45 +137,75 @@ const AccessExpirationAlert = _ref => {
91
137
  const expiryDays = accessExpiration?.expiryDays;
92
138
  const variant = accessExpiration?.variant;
93
139
  (0, _react.useEffect)(() => {
94
- (0, _logging.logInfo)('AuditExpiry useEffect entered', {
140
+ let isMounted = true;
141
+ const setupExperimentContext = async () => {
142
+ if (!experimentKey || !variant || !optimizely) {
143
+ setIsExperimentContextReady(false);
144
+ (0, _logging.logInfo)('AuditExpiry experimentContext skipped', {
145
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
146
+ courseId,
147
+ experimentKey,
148
+ variant,
149
+ hasOptimizely: Boolean(optimizely)
150
+ });
151
+ return;
152
+ }
153
+ try {
154
+ const isReady = await initializeOptimizelyExperimentContext(optimizely, experimentKey, variant);
155
+ if (isMounted) {
156
+ setIsExperimentContextReady(isReady);
157
+ }
158
+ (0, _logging.logInfo)('AuditExpiry experimentContext ready state', {
159
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
160
+ courseId,
161
+ experimentKey,
162
+ variant,
163
+ isExperimentContextReady: isReady
164
+ });
165
+ } catch (error) {
166
+ if (isMounted) {
167
+ setIsExperimentContextReady(false);
168
+ }
169
+ (0, _logging.logError)(error, {
170
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
171
+ source: 'AuditExpiry experimentContext setup',
172
+ courseId,
173
+ experimentKey,
174
+ variant
175
+ });
176
+ }
177
+ };
178
+ setupExperimentContext();
179
+ return () => {
180
+ isMounted = false;
181
+ };
182
+ }, [courseId, experimentKey, optimizely, variant]);
183
+ (0, _react.useEffect)(() => {
184
+ (0, _logging.logInfo)('AuditExpiry bannerTrack effect entered', {
95
185
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
96
186
  courseId,
97
187
  experimentKey,
98
188
  variant,
99
189
  expiryDays,
100
- alreadyTracked: hasTrackedBannerView.current
190
+ alreadyTracked: hasTrackedBannerView.current,
191
+ hasOptimizely: Boolean(optimizely),
192
+ isExperimentContextReady
101
193
  });
102
- if (!experimentKey || !variant || hasTrackedBannerView.current) {
103
- (0, _logging.logInfo)('AuditExpiry useEffect skipped', {
194
+ if (!experimentKey || !variant || hasTrackedBannerView.current || !isExperimentContextReady) {
195
+ (0, _logging.logInfo)('AuditExpiry bannerTrack effect skipped', {
104
196
  debugVersion: AUDIT_EXPIRY_LOG_VERSION,
105
197
  courseId,
106
198
  experimentKey,
107
199
  variant,
108
- alreadyTracked: hasTrackedBannerView.current
200
+ alreadyTracked: hasTrackedBannerView.current,
201
+ isExperimentContextReady
109
202
  });
110
203
  return undefined;
111
204
  }
112
205
  let isMounted = true;
113
206
  const trackBannerShown = async () => {
114
207
  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(), {
208
+ const didTrack = trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_banner_shown', {
133
209
  experimentKey,
134
210
  variant,
135
211
  expiryDays,
@@ -152,16 +228,13 @@ const AccessExpirationAlert = _ref => {
152
228
  experimentKey,
153
229
  variant
154
230
  });
155
- // Never break the banner experience if analytics fails.
156
231
  }
157
232
  };
158
233
  trackBannerShown();
159
234
  return () => {
160
235
  isMounted = false;
161
236
  };
162
- }, [courseId, experimentKey, expiryDays, variant]);
163
-
164
- // Match original MFE logic.
237
+ }, [courseId, experimentKey, expiryDays, isExperimentContextReady, optimizely, variant]);
165
238
  if (!accessExpiration || accessExpiration.masqueradingExpiredCourse) {
166
239
  return null;
167
240
  }
@@ -176,10 +249,9 @@ const AccessExpirationAlert = _ref => {
176
249
  courseId,
177
250
  experimentKey,
178
251
  variant,
179
- expiryDays
252
+ expiryDays,
253
+ isExperimentContextReady
180
254
  });
181
- // Keep analytics identical to the temporary in-course wiring:
182
- // analyticsPageName === 'in_course'
183
255
  const analyticsPageName = 'in_course';
184
256
  (0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', {
185
257
  org_key: org,
@@ -189,40 +261,31 @@ const AccessExpirationAlert = _ref => {
189
261
  linkType: 'link',
190
262
  pageName: analyticsPageName
191
263
  });
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
- }
264
+ if (!experimentKey || !variant || !optimizely || !isExperimentContextReady) {
265
+ (0, _logging.logInfo)('AuditExpiry logClick skipped Optimizely track', {
266
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
267
+ courseId,
268
+ experimentKey,
269
+ variant,
270
+ isExperimentContextReady
271
+ });
272
+ return;
273
+ }
274
+ try {
275
+ trackOptimizelyEvent(optimizely, 'audit_expiry_urgency_upgrade_clicked', {
276
+ experimentKey,
277
+ variant,
278
+ expiryDays,
279
+ courseId
280
+ });
281
+ } catch (error) {
282
+ (0, _logging.logError)(error, {
283
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
284
+ source: 'AuditExpiry logClick',
285
+ courseId,
286
+ experimentKey,
287
+ variant
288
+ });
226
289
  }
227
290
  };
228
291
  let deadlineMessage = null;
@@ -284,6 +347,58 @@ const AccessExpirationAlert = _ref => {
284
347
  }), deadlineMessage]
285
348
  });
286
349
  };
350
+ const AccessExpirationAlertInner = (0, _reactSdk.withOptimizely)(AccessExpirationAlertInnerBase);
351
+ AccessExpirationAlertInnerBase.propTypes = {
352
+ courseId: _propTypes.default.string.isRequired,
353
+ optimizely: _propTypes.default.shape({
354
+ activate: _propTypes.default.func,
355
+ onReady: _propTypes.default.func,
356
+ setForcedVariation: _propTypes.default.func,
357
+ track: _propTypes.default.func
358
+ })
359
+ };
360
+ AccessExpirationAlertInnerBase.defaultProps = {
361
+ optimizely: null
362
+ };
363
+ const AccessExpirationAlert = _ref2 => {
364
+ let {
365
+ courseId
366
+ } = _ref2;
367
+ const optimizely = (0, _optimizely.getOptimizely)();
368
+ const {
369
+ userId
370
+ } = (0, _auth.getAuthenticatedUser)();
371
+ const {
372
+ enrollmentMode
373
+ } = (0, _modelStore.useModel)('coursewareMeta', courseId);
374
+ if (!optimizely) {
375
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(AccessExpirationAlertInnerBase, {
376
+ courseId: courseId,
377
+ optimizely: null
378
+ });
379
+ }
380
+ (0, _logging.logInfo)('AuditExpiry provider setup', {
381
+ debugVersion: AUDIT_EXPIRY_LOG_VERSION,
382
+ courseId,
383
+ hasOptimizely: true,
384
+ enrollmentMode,
385
+ userId
386
+ });
387
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSdk.OptimizelyProvider, {
388
+ optimizely: optimizely,
389
+ user: {
390
+ id: userId.toString(),
391
+ attributes: _objectSpread({
392
+ lms_language_preference: (0, _i18n.getLocale)()
393
+ }, enrollmentMode ? {
394
+ lms_enrollment_mode: enrollmentMode
395
+ } : {})
396
+ },
397
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(AccessExpirationAlertInner, {
398
+ courseId: courseId
399
+ })
400
+ });
401
+ };
287
402
  AccessExpirationAlert.propTypes = {
288
403
  courseId: _propTypes.default.string.isRequired
289
404
  };
@@ -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","_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","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","getOptimizely","userId","getAuthenticatedUser","enrollmentMode","OptimizelyProvider","user","toString","attributes","lms_language_preference","getLocale","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 { OptimizelyProvider, withOptimizely } from '@optimizely/react-sdk';\n\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport {\n FormattedMessage, FormattedDate, getLocale, 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 { getOptimizely } from '../data/optimizely';\n\nimport messages from './messages';\n\nconst AUDIT_EXPIRY_LOG_VERSION = 'audit-expiry-v9';\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 optimizely = getOptimizely();\n const { userId } = getAuthenticatedUser();\n const { enrollmentMode } = useModel('coursewareMeta', courseId);\n\n if (!optimizely) {\n return <AccessExpirationAlertInnerBase courseId={courseId} optimizely={null} />;\n }\n\n logInfo('AuditExpiry provider setup', {\n debugVersion: AUDIT_EXPIRY_LOG_VERSION,\n courseId,\n hasOptimizely: true,\n enrollmentMode,\n userId,\n });\n\n return (\n <OptimizelyProvider\n optimizely={optimizely}\n user={{\n id: userId.toString(),\n attributes: {\n lms_language_preference: getLocale(),\n ...(enrollmentMode ? { lms_enrollment_mode: enrollmentMode } : {}),\n },\n }}\n >\n <AccessExpirationAlertInner courseId={courseId} />\n </OptimizelyProvider>\n );\n};\n\nAccessExpirationAlert.propTypes = {\n courseId: PropTypes.string.isRequired,\n};\n\nexport default AccessExpirationAlert;\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.22.0",
4
4
  "description": "Frontend plugin for edX in course advertisements",
5
5
  "main": "dist/index.js",
6
6
  "repository": {