@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("../
|
|
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-
|
|
27
|
-
const
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
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 \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 \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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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":[]}
|