@edx/frontend-plugin-advertisements 2.17.0 → 2.18.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.
|
@@ -9,6 +9,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
9
9
|
var _analytics = require("@edx/frontend-platform/analytics");
|
|
10
10
|
var _auth = require("@edx/frontend-platform/auth");
|
|
11
11
|
var _i18n = require("@edx/frontend-platform/i18n");
|
|
12
|
+
var _logging = require("@edx/frontend-platform/logging");
|
|
12
13
|
var _paragon = require("@openedx/paragon");
|
|
13
14
|
var _icons = require("@openedx/paragon/icons");
|
|
14
15
|
var _modelStore = require("@src/generic/model-store");
|
|
@@ -23,16 +24,40 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
23
24
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
24
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 */
|
|
25
26
|
const trackOptimizelyEventWhenReady = async (optimizely, eventKey, userId, eventTags) => {
|
|
27
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady start', {
|
|
28
|
+
eventKey,
|
|
29
|
+
userId,
|
|
30
|
+
hasOptimizely: Boolean(optimizely),
|
|
31
|
+
eventTags
|
|
32
|
+
});
|
|
26
33
|
if (!optimizely) {
|
|
34
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady no optimizely', {
|
|
35
|
+
eventKey
|
|
36
|
+
});
|
|
27
37
|
return false;
|
|
28
38
|
}
|
|
29
39
|
if (typeof optimizely.onReady === 'function') {
|
|
40
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady waiting onReady', {
|
|
41
|
+
eventKey
|
|
42
|
+
});
|
|
30
43
|
const readyResult = await optimizely.onReady();
|
|
44
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady onReady result', {
|
|
45
|
+
eventKey,
|
|
46
|
+
readyResult
|
|
47
|
+
});
|
|
31
48
|
if (!readyResult?.success) {
|
|
32
49
|
return false;
|
|
33
50
|
}
|
|
34
51
|
}
|
|
52
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady calling track', {
|
|
53
|
+
eventKey,
|
|
54
|
+
userId,
|
|
55
|
+
eventTags
|
|
56
|
+
});
|
|
35
57
|
optimizely.track(eventKey, userId, eventTags);
|
|
58
|
+
(0, _logging.logInfo)('AuditExpiry trackOptimizelyEventWhenReady track called', {
|
|
59
|
+
eventKey
|
|
60
|
+
});
|
|
36
61
|
return true;
|
|
37
62
|
};
|
|
38
63
|
|
|
@@ -63,20 +88,49 @@ const AccessExpirationAlert = _ref => {
|
|
|
63
88
|
const experimentKey = accessExpiration?.experimentKey;
|
|
64
89
|
const expiryDays = accessExpiration?.expiryDays;
|
|
65
90
|
const variant = accessExpiration?.variant;
|
|
91
|
+
(0, _logging.logInfo)('AuditExpiry render', {
|
|
92
|
+
courseId,
|
|
93
|
+
hasAccessExpiration: Boolean(accessExpiration),
|
|
94
|
+
experimentKey,
|
|
95
|
+
variant,
|
|
96
|
+
expiryDays,
|
|
97
|
+
masqueradingExpiredCourse: accessExpiration?.masqueradingExpiredCourse
|
|
98
|
+
});
|
|
66
99
|
(0, _react.useEffect)(() => {
|
|
100
|
+
(0, _logging.logInfo)('AuditExpiry useEffect entered', {
|
|
101
|
+
courseId,
|
|
102
|
+
experimentKey,
|
|
103
|
+
variant,
|
|
104
|
+
expiryDays,
|
|
105
|
+
alreadyTracked: hasTrackedBannerView.current
|
|
106
|
+
});
|
|
67
107
|
if (!experimentKey || !variant || hasTrackedBannerView.current) {
|
|
108
|
+
(0, _logging.logInfo)('AuditExpiry useEffect skipped', {
|
|
109
|
+
courseId,
|
|
110
|
+
experimentKey,
|
|
111
|
+
variant,
|
|
112
|
+
alreadyTracked: hasTrackedBannerView.current
|
|
113
|
+
});
|
|
68
114
|
return undefined;
|
|
69
115
|
}
|
|
70
116
|
let isMounted = true;
|
|
71
117
|
const trackBannerShown = async () => {
|
|
72
118
|
try {
|
|
73
119
|
const optimizely = (0, _optimizely.getOptimizely)();
|
|
120
|
+
(0, _logging.logInfo)('AuditExpiry trackBannerShown getOptimizely', {
|
|
121
|
+
hasOptimizely: Boolean(optimizely),
|
|
122
|
+
hasOnReady: typeof optimizely?.onReady === 'function',
|
|
123
|
+
hasTrack: typeof optimizely?.track === 'function'
|
|
124
|
+
});
|
|
74
125
|
if (!optimizely) {
|
|
75
126
|
return;
|
|
76
127
|
}
|
|
77
128
|
const {
|
|
78
129
|
userId
|
|
79
130
|
} = (0, _auth.getAuthenticatedUser)();
|
|
131
|
+
(0, _logging.logInfo)('AuditExpiry trackBannerShown user', {
|
|
132
|
+
userId
|
|
133
|
+
});
|
|
80
134
|
const didTrack = await trackOptimizelyEventWhenReady(optimizely, 'audit_expiry_urgency_banner_shown', userId.toString(), {
|
|
81
135
|
experimentKey,
|
|
82
136
|
variant,
|
|
@@ -85,14 +139,28 @@ const AccessExpirationAlert = _ref => {
|
|
|
85
139
|
});
|
|
86
140
|
if (didTrack && isMounted) {
|
|
87
141
|
hasTrackedBannerView.current = true;
|
|
142
|
+
(0, _logging.logInfo)('AuditExpiry trackBannerShown marked tracked', {
|
|
143
|
+
courseId,
|
|
144
|
+
experimentKey,
|
|
145
|
+
variant
|
|
146
|
+
});
|
|
88
147
|
}
|
|
89
148
|
} catch (error) {
|
|
149
|
+
(0, _logging.logError)(error, {
|
|
150
|
+
source: 'AuditExpiry trackBannerShown',
|
|
151
|
+
courseId,
|
|
152
|
+
experimentKey,
|
|
153
|
+
variant
|
|
154
|
+
});
|
|
90
155
|
// Never break the banner experience if analytics fails.
|
|
91
156
|
}
|
|
92
157
|
};
|
|
93
158
|
trackBannerShown();
|
|
94
159
|
return () => {
|
|
95
160
|
isMounted = false;
|
|
161
|
+
(0, _logging.logInfo)('AuditExpiry useEffect cleanup', {
|
|
162
|
+
courseId
|
|
163
|
+
});
|
|
96
164
|
};
|
|
97
165
|
}, [courseId, experimentKey, expiryDays, variant]);
|
|
98
166
|
|
|
@@ -106,6 +174,12 @@ const AccessExpirationAlert = _ref => {
|
|
|
106
174
|
upgradeUrl
|
|
107
175
|
} = accessExpiration;
|
|
108
176
|
const logClick = () => {
|
|
177
|
+
(0, _logging.logInfo)('AuditExpiry logClick entered', {
|
|
178
|
+
courseId,
|
|
179
|
+
experimentKey,
|
|
180
|
+
variant,
|
|
181
|
+
expiryDays
|
|
182
|
+
});
|
|
109
183
|
// Keep analytics identical to the temporary in-course wiring:
|
|
110
184
|
// analyticsPageName === 'in_course'
|
|
111
185
|
const analyticsPageName = 'in_course';
|
|
@@ -120,10 +194,18 @@ const AccessExpirationAlert = _ref => {
|
|
|
120
194
|
if (experimentKey && variant) {
|
|
121
195
|
try {
|
|
122
196
|
const optimizely = (0, _optimizely.getOptimizely)();
|
|
197
|
+
(0, _logging.logInfo)('AuditExpiry logClick getOptimizely', {
|
|
198
|
+
hasOptimizely: Boolean(optimizely),
|
|
199
|
+
hasOnReady: typeof optimizely?.onReady === 'function',
|
|
200
|
+
hasTrack: typeof optimizely?.track === 'function'
|
|
201
|
+
});
|
|
123
202
|
if (optimizely) {
|
|
124
203
|
const {
|
|
125
204
|
userId
|
|
126
205
|
} = (0, _auth.getAuthenticatedUser)();
|
|
206
|
+
(0, _logging.logInfo)('AuditExpiry logClick user', {
|
|
207
|
+
userId
|
|
208
|
+
});
|
|
127
209
|
trackOptimizelyEventWhenReady(optimizely, 'audit_expiry_urgency_upgrade_clicked', userId.toString(), {
|
|
128
210
|
experimentKey,
|
|
129
211
|
variant,
|
|
@@ -132,6 +214,12 @@ const AccessExpirationAlert = _ref => {
|
|
|
132
214
|
});
|
|
133
215
|
}
|
|
134
216
|
} catch (error) {
|
|
217
|
+
(0, _logging.logError)(error, {
|
|
218
|
+
source: 'AuditExpiry logClick',
|
|
219
|
+
courseId,
|
|
220
|
+
experimentKey,
|
|
221
|
+
variant
|
|
222
|
+
});
|
|
135
223
|
// Never block the click-through path if analytics fails.
|
|
136
224
|
}
|
|
137
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessExpirationAlert.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_analytics","_auth","_i18n","_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","trackOptimizelyEventWhenReady","optimizely","eventKey","userId","eventTags","onReady","readyResult","success","track","AccessExpirationAlert","_ref","courseId","intl","useIntl","hasTrackedBannerView","useRef","org","userTimezone","useModel","accessExpiration","timezoneFormatArgs","timeZone","experimentKey","expiryDays","variant","useEffect","current","undefined","isMounted","trackBannerShown","getOptimizely","getAuthenticatedUser","didTrack","toString","error","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 { 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 trackOptimizelyEventWhenReady = async (optimizely, eventKey, userId, eventTags) => {\n if (!optimizely) {\n return false;\n }\n\n if (typeof optimizely.onReady === 'function') {\n const readyResult = await optimizely.onReady();\n if (!readyResult?.success) {\n return false;\n }\n }\n\n optimizely.track(eventKey, userId, eventTags);\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 if (!experimentKey || !variant || hasTrackedBannerView.current) {\n return undefined;\n }\n\n let isMounted = true;\n\n const trackBannerShown = async () => {\n try {\n const optimizely = getOptimizely();\n if (!optimizely) {\n return;\n }\n\n const { userId } = getAuthenticatedUser();\n const didTrack = await trackOptimizelyEventWhenReady(\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 }\n } catch (error) {\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 // 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 if (optimizely) {\n const { userId } = getAuthenticatedUser();\n trackOptimizelyEventWhenReady(\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 // 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","_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","trackOptimizelyEventWhenReady","optimizely","eventKey","userId","eventTags","logInfo","hasOptimizely","Boolean","onReady","readyResult","success","track","AccessExpirationAlert","_ref","courseId","intl","useIntl","hasTrackedBannerView","useRef","org","userTimezone","useModel","accessExpiration","timezoneFormatArgs","timeZone","experimentKey","expiryDays","variant","hasAccessExpiration","masqueradingExpiredCourse","useEffect","alreadyTracked","current","undefined","isMounted","trackBannerShown","getOptimizely","hasOnReady","hasTrack","getAuthenticatedUser","didTrack","toString","error","logError","source","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 trackOptimizelyEventWhenReady = async (optimizely, eventKey, userId, eventTags) => {\n logInfo('AuditExpiry trackOptimizelyEventWhenReady start', {\n eventKey,\n userId,\n hasOptimizely: Boolean(optimizely),\n eventTags,\n });\n\n if (!optimizely) {\n logInfo('AuditExpiry trackOptimizelyEventWhenReady no optimizely', { eventKey });\n return false;\n }\n\n if (typeof optimizely.onReady === 'function') {\n logInfo('AuditExpiry trackOptimizelyEventWhenReady waiting onReady', { eventKey });\n const readyResult = await optimizely.onReady();\n logInfo('AuditExpiry trackOptimizelyEventWhenReady onReady result', {\n eventKey,\n readyResult,\n });\n if (!readyResult?.success) {\n return false;\n }\n }\n\n logInfo('AuditExpiry trackOptimizelyEventWhenReady calling track', {\n eventKey,\n userId,\n eventTags,\n });\n optimizely.track(eventKey, userId, eventTags);\n logInfo('AuditExpiry trackOptimizelyEventWhenReady track called', { eventKey });\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 logInfo('AuditExpiry render', {\n courseId,\n hasAccessExpiration: Boolean(accessExpiration),\n experimentKey,\n variant,\n expiryDays,\n masqueradingExpiredCourse: accessExpiration?.masqueradingExpiredCourse,\n });\n\n useEffect(() => {\n logInfo('AuditExpiry useEffect entered', {\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 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 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', { userId });\n const didTrack = await trackOptimizelyEventWhenReady(\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 courseId,\n experimentKey,\n variant,\n });\n }\n } catch (error) {\n logError(error, {\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 logInfo('AuditExpiry useEffect cleanup', { courseId });\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 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 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', { userId });\n trackOptimizelyEventWhenReady(\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 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":[]}
|