@edx/frontend-plugin-advertisements 1.21.0 → 1.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.
- package/dist/data/__factories__/defaultUpgradeNotificationData.factory.js +18 -0
- package/dist/data/__factories__/defaultUpgradeNotificationData.factory.js.map +1 -0
- package/dist/data/__factories__/index.js +1 -0
- package/dist/data/__factories__/index.js.map +1 -1
- package/dist/index.scss +4 -0
- package/dist/paywall/ExperimentalLockPaywall.js +2 -2
- package/dist/paywall/ExperimentalLockPaywall.js.map +1 -1
- package/dist/upgrade-notification/DefaultUpgradeNotification.js +463 -37
- package/dist/upgrade-notification/DefaultUpgradeNotification.js.map +1 -1
- package/dist/upgrade-notification/ExperimentalUpgradeNotification.js +7 -9
- package/dist/upgrade-notification/ExperimentalUpgradeNotification.js.map +1 -1
- package/dist/upsell-bullets/ExperimentalUpsellBullets.js +39 -0
- package/dist/upsell-bullets/ExperimentalUpsellBullets.js.map +1 -0
- package/dist/upsell-bullets/UpsellBullets.js +101 -16
- package/dist/upsell-bullets/UpsellBullets.js.map +1 -1
- package/dist/upsell-bullets/UpsellBullets.scss +11 -0
- package/dist/upsell-bullets/index.js +50 -0
- package/dist/upsell-bullets/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -4,36 +4,271 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
7
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
+
var _i18n = require("@edx/frontend-platform/i18n");
|
|
11
|
+
var _analytics = require("@edx/frontend-platform/analytics");
|
|
12
|
+
var _paragon = require("@openedx/paragon");
|
|
13
|
+
var _icons = require("@openedx/paragon/icons");
|
|
14
|
+
var _localStorage = require("@src/data/localStorage");
|
|
15
|
+
var _upgradeButton = require("@src/generic/upgrade-button");
|
|
8
16
|
var _modelStore = require("@src/generic/model-store");
|
|
9
|
-
var
|
|
17
|
+
var _upsellBullets = require("../upsell-bullets");
|
|
18
|
+
var _certificatePreview = _interopRequireDefault(require("./certificate-preview"));
|
|
10
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
22
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
23
|
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; }
|
|
13
24
|
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; }
|
|
14
25
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
26
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
16
|
-
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
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
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 */
|
|
28
|
+
const UpsellNoFBECardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
|
|
29
|
+
className: "fa-ul upgrade-notification-ul pt-0",
|
|
30
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.SupportMissionBullet, {})]
|
|
31
|
+
});
|
|
32
|
+
const UpsellFBEFarAwayCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)("ul", {
|
|
33
|
+
className: "fa-ul upgrade-notification-ul",
|
|
34
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.VerifiedCertBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.UnlockGradedBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.FullAccessBullet, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_upsellBullets.SupportMissionBullet, {})]
|
|
35
|
+
});
|
|
36
|
+
const UpsellFBESoonCardContent = _ref => {
|
|
37
|
+
let {
|
|
38
|
+
accessExpirationDate,
|
|
39
|
+
timezoneFormatArgs
|
|
40
|
+
} = _ref;
|
|
41
|
+
const includingAnyProgress = /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
42
|
+
className: "font-weight-bold",
|
|
43
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
44
|
+
id: "advertisements.upgradeNotification.expirationAccessLoss.progress",
|
|
45
|
+
defaultMessage: "including any progress"
|
|
46
|
+
})
|
|
47
|
+
});
|
|
48
|
+
const date = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
|
|
49
|
+
day: "numeric",
|
|
50
|
+
month: "long",
|
|
51
|
+
value: new Date(accessExpirationDate)
|
|
52
|
+
}, timezoneFormatArgs), "accessDate");
|
|
53
|
+
const benefitsOfUpgrading = /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
|
|
54
|
+
className: "inline-link-underline font-weight-bold",
|
|
55
|
+
rel: "noopener noreferrer",
|
|
56
|
+
target: "_blank",
|
|
57
|
+
href: "https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-",
|
|
58
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
59
|
+
id: "advertisements.upgradeNotification.expirationVerifiedCert.benefits",
|
|
60
|
+
defaultMessage: "benefits of upgrading"
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
64
|
+
className: "upgrade-notification-text",
|
|
65
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
66
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
67
|
+
id: "advertisements.upgradeNotification.expirationAccessLoss",
|
|
68
|
+
defaultMessage: "You will lose all access to this course, {includingAnyProgress}, on {date}.",
|
|
69
|
+
values: {
|
|
70
|
+
includingAnyProgress,
|
|
71
|
+
date
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
75
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
76
|
+
id: "advertisements.upgradeNotification.expirationVerifiedCert",
|
|
77
|
+
defaultMessage: "Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.",
|
|
78
|
+
values: {
|
|
79
|
+
benefitsOfUpgrading
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
})]
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
UpsellFBESoonCardContent.propTypes = {
|
|
86
|
+
accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
|
|
87
|
+
timezoneFormatArgs: _propTypes.default.shape({
|
|
88
|
+
timeZone: _propTypes.default.string
|
|
89
|
+
})
|
|
90
|
+
};
|
|
91
|
+
UpsellFBESoonCardContent.defaultProps = {
|
|
92
|
+
timezoneFormatArgs: {}
|
|
93
|
+
};
|
|
94
|
+
const PastExpirationCardContent = () => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
95
|
+
className: "upgrade-notification-text",
|
|
96
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
97
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
98
|
+
id: "advertisements.upgradeNotification.pastExpiration.content",
|
|
99
|
+
defaultMessage: "The upgrade deadline for this course passed. To upgrade, enroll in the next available session."
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
});
|
|
103
|
+
const ExpirationCountdown = _ref2 => {
|
|
104
|
+
let {
|
|
105
|
+
courseId,
|
|
106
|
+
hoursToExpiration,
|
|
107
|
+
setupgradeNotificationCurrentState,
|
|
108
|
+
type
|
|
109
|
+
} = _ref2;
|
|
110
|
+
let expirationText;
|
|
111
|
+
if (hoursToExpiration >= 24) {
|
|
112
|
+
// More than 1 day left
|
|
113
|
+
// setupgradeNotificationCurrentState is available in NotificationTray (not course home)
|
|
114
|
+
if (setupgradeNotificationCurrentState) {
|
|
115
|
+
if (type === 'access') {
|
|
116
|
+
setupgradeNotificationCurrentState('accessDaysLeft');
|
|
117
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');
|
|
118
|
+
}
|
|
119
|
+
if (type === 'offer') {
|
|
120
|
+
setupgradeNotificationCurrentState('FPDdaysLeft');
|
|
121
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
125
|
+
id: "advertisements.upgradeNotification.expirationDays",
|
|
126
|
+
defaultMessage: `{dayCount, number} {dayCount, plural,
|
|
127
|
+
one {day}
|
|
128
|
+
other {days}} left`,
|
|
129
|
+
values: {
|
|
130
|
+
dayCount: Math.floor(hoursToExpiration / 24)
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
} else if (hoursToExpiration >= 1) {
|
|
134
|
+
// More than 1 hour left
|
|
135
|
+
// setupgradeNotificationCurrentState is available in NotificationTray (not course home)
|
|
136
|
+
if (setupgradeNotificationCurrentState) {
|
|
137
|
+
if (type === 'access') {
|
|
138
|
+
setupgradeNotificationCurrentState('accessHoursLeft');
|
|
139
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');
|
|
140
|
+
}
|
|
141
|
+
if (type === 'offer') {
|
|
142
|
+
setupgradeNotificationCurrentState('FPDHoursLeft');
|
|
143
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
147
|
+
id: "advertisements.upgradeNotification.expirationHours",
|
|
148
|
+
defaultMessage: `{hourCount, number} {hourCount, plural,
|
|
149
|
+
one {hour}
|
|
150
|
+
other {hours}} left`,
|
|
151
|
+
values: {
|
|
152
|
+
hourCount: hoursToExpiration
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
} else {
|
|
156
|
+
// Less than 1 hour
|
|
157
|
+
// setupgradeNotificationCurrentState is available in NotificationTray (not course home)
|
|
158
|
+
if (setupgradeNotificationCurrentState) {
|
|
159
|
+
if (type === 'access') {
|
|
160
|
+
setupgradeNotificationCurrentState('accessLastHour');
|
|
161
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');
|
|
162
|
+
}
|
|
163
|
+
if (type === 'offer') {
|
|
164
|
+
setupgradeNotificationCurrentState('FPDLastHour');
|
|
165
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
expirationText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
169
|
+
id: "advertisements.upgradeNotification.expirationMinutes",
|
|
170
|
+
defaultMessage: "Less than 1 hour left"
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
174
|
+
className: "upsell-warning",
|
|
175
|
+
children: expirationText
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
ExpirationCountdown.propTypes = {
|
|
179
|
+
courseId: _propTypes.default.string.isRequired,
|
|
180
|
+
hoursToExpiration: _propTypes.default.number.isRequired,
|
|
181
|
+
setupgradeNotificationCurrentState: _propTypes.default.func,
|
|
182
|
+
type: _propTypes.default.string
|
|
183
|
+
};
|
|
184
|
+
ExpirationCountdown.defaultProps = {
|
|
185
|
+
setupgradeNotificationCurrentState: null,
|
|
186
|
+
type: null
|
|
187
|
+
};
|
|
188
|
+
const AccessExpirationDateBanner = _ref3 => {
|
|
189
|
+
let {
|
|
190
|
+
courseId,
|
|
191
|
+
accessExpirationDate,
|
|
192
|
+
timezoneFormatArgs,
|
|
193
|
+
setupgradeNotificationCurrentState
|
|
194
|
+
} = _ref3;
|
|
195
|
+
if (setupgradeNotificationCurrentState) {
|
|
196
|
+
setupgradeNotificationCurrentState('accessDateView');
|
|
197
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');
|
|
198
|
+
}
|
|
199
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
200
|
+
className: "upsell-warning-light",
|
|
201
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
202
|
+
id: "advertisements.upgradeNotification.expiration",
|
|
203
|
+
defaultMessage: "Course access will expire {date}",
|
|
204
|
+
values: {
|
|
205
|
+
date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
|
|
206
|
+
day: "numeric",
|
|
207
|
+
month: "long",
|
|
208
|
+
value: accessExpirationDate
|
|
209
|
+
}, timezoneFormatArgs), "accessExpireDate")
|
|
210
|
+
}
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
AccessExpirationDateBanner.propTypes = {
|
|
215
|
+
courseId: _propTypes.default.string.isRequired,
|
|
216
|
+
accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
|
|
217
|
+
timezoneFormatArgs: _propTypes.default.shape({
|
|
218
|
+
timeZone: _propTypes.default.string
|
|
219
|
+
}),
|
|
220
|
+
setupgradeNotificationCurrentState: _propTypes.default.func
|
|
221
|
+
};
|
|
222
|
+
AccessExpirationDateBanner.defaultProps = {
|
|
223
|
+
timezoneFormatArgs: {},
|
|
224
|
+
setupgradeNotificationCurrentState: null
|
|
225
|
+
};
|
|
226
|
+
const PastExpirationDateBanner = _ref4 => {
|
|
227
|
+
let {
|
|
34
228
|
courseId,
|
|
35
|
-
|
|
36
|
-
|
|
229
|
+
accessExpirationDate,
|
|
230
|
+
timezoneFormatArgs,
|
|
231
|
+
setupgradeNotificationCurrentState
|
|
232
|
+
} = _ref4;
|
|
233
|
+
if (setupgradeNotificationCurrentState) {
|
|
234
|
+
setupgradeNotificationCurrentState('PastExpirationDate');
|
|
235
|
+
(0, _localStorage.setLocalStorage)(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');
|
|
236
|
+
}
|
|
237
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
238
|
+
className: "upsell-warning",
|
|
239
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
240
|
+
id: "advertisements.upgradeNotification.pastExpiration.banner",
|
|
241
|
+
defaultMessage: "Upgrade deadline passed on {date}",
|
|
242
|
+
values: {
|
|
243
|
+
date: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedDate, _objectSpread({
|
|
244
|
+
day: "numeric",
|
|
245
|
+
month: "long",
|
|
246
|
+
value: accessExpirationDate
|
|
247
|
+
}, timezoneFormatArgs), "accessExpireDate")
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
PastExpirationDateBanner.propTypes = {
|
|
253
|
+
courseId: _propTypes.default.string.isRequired,
|
|
254
|
+
accessExpirationDate: _propTypes.default.PropTypes.instanceOf(Date).isRequired,
|
|
255
|
+
timezoneFormatArgs: _propTypes.default.shape({
|
|
256
|
+
timeZone: _propTypes.default.string
|
|
257
|
+
}),
|
|
258
|
+
setupgradeNotificationCurrentState: _propTypes.default.func
|
|
259
|
+
};
|
|
260
|
+
PastExpirationDateBanner.defaultProps = {
|
|
261
|
+
timezoneFormatArgs: {},
|
|
262
|
+
setupgradeNotificationCurrentState: null
|
|
263
|
+
};
|
|
264
|
+
const DefaultUpgradeNotification = _ref5 => {
|
|
265
|
+
let {
|
|
266
|
+
id,
|
|
267
|
+
courseId,
|
|
268
|
+
setNotificationCurrentState,
|
|
269
|
+
toggleSidebar
|
|
270
|
+
} = _ref5;
|
|
271
|
+
const pluginLocationId = id;
|
|
37
272
|
const {
|
|
38
273
|
org,
|
|
39
274
|
userTimezone,
|
|
@@ -46,27 +281,218 @@ const DefaultUpgradeNotification = props => {
|
|
|
46
281
|
offer,
|
|
47
282
|
timeOffsetMillis
|
|
48
283
|
} = (0, _modelStore.useModel)('coursewareMeta', courseId);
|
|
284
|
+
const dateNow = Date.now();
|
|
285
|
+
const timezoneFormatArgs = userTimezone ? {
|
|
286
|
+
timeZone: userTimezone
|
|
287
|
+
} : {};
|
|
288
|
+
const correctedTime = new Date(dateNow + timeOffsetMillis);
|
|
289
|
+
const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;
|
|
290
|
+
const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;
|
|
49
291
|
const shouldDisplayBorder = pluginLocationId !== 'outline_tab_notifications';
|
|
50
292
|
const upsellPageName = pluginLocationId === 'outline_tab_notifications' ? 'course_home' : 'in_course';
|
|
293
|
+
const setupgradeNotificationCurrentState = setNotificationCurrentState;
|
|
294
|
+
const eventProperties = {
|
|
295
|
+
org_key: org,
|
|
296
|
+
courserun_key: courseId
|
|
297
|
+
};
|
|
298
|
+
const promotionEventProperties = _objectSpread({
|
|
299
|
+
creative: 'sidebarupsell',
|
|
300
|
+
name: 'In-Course Verification Prompt',
|
|
301
|
+
position: 'sidebar-message',
|
|
302
|
+
promotion_id: 'courseware_verified_certificate_upsell'
|
|
303
|
+
}, eventProperties);
|
|
304
|
+
(0, _react.useEffect)(() => {
|
|
305
|
+
(0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);
|
|
306
|
+
(0, _analytics.sendTrackEvent)('Promotion Viewed', promotionEventProperties);
|
|
307
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
308
|
+
}, []);
|
|
309
|
+
if (!verifiedMode) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
const logClick = () => {
|
|
313
|
+
(0, _analytics.sendTrackingLogEvent)('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);
|
|
314
|
+
(0, _analytics.sendTrackingLogEvent)('edx.course.enrollment.upgrade.clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
315
|
+
location: 'sidebar-message'
|
|
316
|
+
}));
|
|
317
|
+
(0, _analytics.sendTrackEvent)('Promotion Clicked', promotionEventProperties);
|
|
318
|
+
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upsell_links_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
319
|
+
linkCategory: 'green_upgrade',
|
|
320
|
+
linkName: `${upsellPageName}_green`,
|
|
321
|
+
linkType: 'button',
|
|
322
|
+
pageName: upsellPageName
|
|
323
|
+
}));
|
|
324
|
+
};
|
|
325
|
+
const logClickPastExpiration = () => {
|
|
326
|
+
(0, _analytics.sendTrackEvent)('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', _objectSpread(_objectSpread({}, eventProperties), {}, {
|
|
327
|
+
linkCategory: 'upgrade_notification',
|
|
328
|
+
linkName: `${upsellPageName}_course_details`,
|
|
329
|
+
linkType: 'button',
|
|
330
|
+
pageName: upsellPageName
|
|
331
|
+
}));
|
|
332
|
+
};
|
|
51
333
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
334
|
+
/*
|
|
335
|
+
There are 5 parts that change in the upgrade card:
|
|
336
|
+
upgradeNotificationHeaderText
|
|
337
|
+
expirationBanner
|
|
338
|
+
upsellMessage
|
|
339
|
+
callToActionButton
|
|
340
|
+
offerCode
|
|
341
|
+
*/
|
|
342
|
+
let upgradeNotificationHeaderText;
|
|
343
|
+
let expirationBanner;
|
|
344
|
+
let upsellMessage;
|
|
345
|
+
let callToActionButton;
|
|
346
|
+
let offerCode;
|
|
347
|
+
if (!!accessExpiration && !!contentTypeGatingEnabled) {
|
|
348
|
+
const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);
|
|
349
|
+
if (hoursToAccessExpiration >= 7 * 24) {
|
|
350
|
+
if (offer) {
|
|
351
|
+
// countdown to the first purchase discount if there is one
|
|
352
|
+
const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);
|
|
353
|
+
upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
354
|
+
id: "advertisements.upgradeNotification.firstTimeLearnerDiscount",
|
|
355
|
+
defaultMessage: "{percentage}% First-Time Learner Discount",
|
|
356
|
+
values: {
|
|
357
|
+
percentage: offer.percentage
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
|
|
361
|
+
courseId: courseId,
|
|
362
|
+
hoursToExpiration: hoursToDiscountExpiration,
|
|
363
|
+
setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
|
|
364
|
+
type: "offer"
|
|
365
|
+
});
|
|
366
|
+
} else {
|
|
367
|
+
upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
368
|
+
id: "advertisements.upgradeNotification.accessExpiration",
|
|
369
|
+
defaultMessage: "Upgrade your course today"
|
|
370
|
+
});
|
|
371
|
+
expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(AccessExpirationDateBanner, {
|
|
372
|
+
courseId: courseId,
|
|
373
|
+
accessExpirationDate: accessExpirationDate,
|
|
374
|
+
timezoneFormatArgs: timezoneFormatArgs,
|
|
375
|
+
setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBEFarAwayCardContent, {});
|
|
379
|
+
} else if (hoursToAccessExpiration < 7 * 24 && hoursToAccessExpiration >= 0) {
|
|
380
|
+
// more urgent messaging if there's less than 7 days left to access expiration
|
|
381
|
+
upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
382
|
+
id: "advertisements.upgradeNotification.accessExpirationUrgent",
|
|
383
|
+
defaultMessage: "Course Access Expiration"
|
|
384
|
+
});
|
|
385
|
+
expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpirationCountdown, {
|
|
386
|
+
courseId: courseId,
|
|
387
|
+
hoursToExpiration: hoursToAccessExpiration,
|
|
388
|
+
setupgradeNotificationCurrentState: setupgradeNotificationCurrentState,
|
|
389
|
+
type: "access"
|
|
390
|
+
});
|
|
391
|
+
upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellFBESoonCardContent, {
|
|
392
|
+
accessExpirationDate: accessExpirationDate,
|
|
393
|
+
timezoneFormatArgs: timezoneFormatArgs
|
|
394
|
+
});
|
|
395
|
+
} else {
|
|
396
|
+
// access expiration deadline has passed
|
|
397
|
+
upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
398
|
+
id: "advertisements.upgradeNotification.accessExpirationPast",
|
|
399
|
+
defaultMessage: "Course Access Expiration"
|
|
400
|
+
});
|
|
401
|
+
expirationBanner = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationDateBanner, {
|
|
402
|
+
courseId: courseId,
|
|
403
|
+
accessExpirationDate: accessExpirationDate,
|
|
404
|
+
timezoneFormatArgs: timezoneFormatArgs,
|
|
405
|
+
setupgradeNotificationCurrentState: setupgradeNotificationCurrentState
|
|
406
|
+
});
|
|
407
|
+
upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(PastExpirationCardContent, {});
|
|
408
|
+
}
|
|
409
|
+
} else {
|
|
410
|
+
// FBE is turned off
|
|
411
|
+
upgradeNotificationHeaderText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
412
|
+
id: "advertisements.upgradeNotification.pursueAverifiedCertificate",
|
|
413
|
+
defaultMessage: "Pursue a verified certificate"
|
|
414
|
+
});
|
|
415
|
+
upsellMessage = /*#__PURE__*/(0, _jsxRuntime.jsx)(UpsellNoFBECardContent, {});
|
|
416
|
+
}
|
|
417
|
+
if (pastExpirationDeadline) {
|
|
418
|
+
callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Button, {
|
|
419
|
+
variant: "primary",
|
|
420
|
+
onClick: logClickPastExpiration,
|
|
421
|
+
href: marketingUrl,
|
|
422
|
+
block: true,
|
|
423
|
+
children: "View Course Details"
|
|
424
|
+
});
|
|
425
|
+
} else {
|
|
426
|
+
callToActionButton = /*#__PURE__*/(0, _jsxRuntime.jsx)(_upgradeButton.UpgradeButton, {
|
|
427
|
+
offer: offer,
|
|
428
|
+
onClick: logClick,
|
|
429
|
+
verifiedMode: verifiedMode,
|
|
430
|
+
block: true
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
if (offer) {
|
|
434
|
+
// if there's a first purchase discount, message the code at the bottom
|
|
435
|
+
offerCode = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
436
|
+
className: "text-center discount-info",
|
|
437
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
438
|
+
id: "advertisements.upgradeNotification.code",
|
|
439
|
+
defaultMessage: "Use code {code} at checkout",
|
|
440
|
+
values: {
|
|
441
|
+
code: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
442
|
+
className: "font-weight-bold",
|
|
443
|
+
children: offer.code
|
|
444
|
+
})
|
|
445
|
+
}
|
|
446
|
+
})
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
const closeAltText = /*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.FormattedMessage, {
|
|
450
|
+
id: "advertisements.close",
|
|
451
|
+
defaultMessage: "Close"
|
|
452
|
+
});
|
|
453
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("section", {
|
|
454
|
+
className: (0, _classnames.default)('upgrade-notification small', {
|
|
455
|
+
'card mb-4': shouldDisplayBorder
|
|
456
|
+
}),
|
|
457
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
458
|
+
id: "courseHome-upgradeNotification",
|
|
459
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_certificatePreview.default, {
|
|
460
|
+
courseId: courseId
|
|
461
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("h2", {
|
|
462
|
+
className: (0, _classnames.default)('h5 upgrade-notification-header', {
|
|
463
|
+
'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar
|
|
464
|
+
}),
|
|
465
|
+
id: "outline-sidebar-upgrade-header",
|
|
466
|
+
children: [upgradeNotificationHeaderText, !!toggleSidebar && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
467
|
+
className: "d-inline-flex ml-auto",
|
|
468
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.IconButton, {
|
|
469
|
+
src: _icons.Close,
|
|
470
|
+
size: "sm",
|
|
471
|
+
iconAs: _paragon.Icon,
|
|
472
|
+
onClick: toggleSidebar,
|
|
473
|
+
className: "icon-hover",
|
|
474
|
+
alt: closeAltText
|
|
475
|
+
})
|
|
476
|
+
})]
|
|
477
|
+
}), expirationBanner, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
478
|
+
className: "upgrade-notification-message",
|
|
479
|
+
children: upsellMessage
|
|
480
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
481
|
+
className: "upgrade-notification-button",
|
|
482
|
+
children: callToActionButton
|
|
483
|
+
}), offerCode]
|
|
484
|
+
})
|
|
485
|
+
});
|
|
66
486
|
};
|
|
67
487
|
DefaultUpgradeNotification.propTypes = {
|
|
68
488
|
id: _propTypes.default.string.isRequired,
|
|
69
|
-
courseId: _propTypes.default.string.isRequired
|
|
489
|
+
courseId: _propTypes.default.string.isRequired,
|
|
490
|
+
setNotificationCurrentState: _propTypes.default.func,
|
|
491
|
+
toggleSidebar: _propTypes.default.func
|
|
492
|
+
};
|
|
493
|
+
DefaultUpgradeNotification.defaultProps = {
|
|
494
|
+
setNotificationCurrentState: null,
|
|
495
|
+
toggleSidebar: null
|
|
70
496
|
};
|
|
71
|
-
var _default = exports.default = DefaultUpgradeNotification;
|
|
497
|
+
var _default = exports.default = (0, _i18n.injectIntl)(DefaultUpgradeNotification);
|
|
72
498
|
//# sourceMappingURL=DefaultUpgradeNotification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultUpgradeNotification.js","names":["_propTypes","_interopRequireDefault","require","_modelStore","_UpgradeNotification","_jsxRuntime","obj","__esModule","default","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","key","value","_toPropertyKey","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DefaultUpgradeNotification","props","courseId","id","pluginLocationId","org","userTimezone","verifiedMode","useModel","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","timeOffsetMillis","shouldDisplayBorder","upsellPageName","jsx","propTypes","PropTypes","string","isRequired","_default","exports"],"sources":["../../src/upgrade-notification/DefaultUpgradeNotification.jsx"],"sourcesContent":["/* eslint-disable import/no-unresolved */\nimport PropTypes from 'prop-types';\n\nimport { useModel } from '@src/generic/model-store';\nimport UpgradeNotification from '@src/generic/upgrade-notification/UpgradeNotification';\n\nconst DefaultUpgradeNotification = (props) => {\n /*\n NOTE: The following props are expected to be passed in from the parent.\n - courseId\n - from all PluginSlots\n - notificationCurrentState\n - from notification_widget_slot and notification_tray_plugin PluginSlots but not\n outline_tab_notifications_plugin PluginSlot\n - NOTE: not currently in use by these widgets\n - setNotificationCurrentState\n - from notification_widget_slot and notification_tray_plugin PluginSlots but not\n outline_tab_notifications_plugin PluginSlot\n - toggleSidebar\n - from notification_widget_slot PluginSlot but not notification_tray_plugin and\n outline_tab_notifications_plugin PluginSlots\n */\n const { courseId, id: pluginLocationId } = props;\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n offer,\n timeOffsetMillis,\n } = useModel('coursewareMeta', courseId);\n\n const shouldDisplayBorder = pluginLocationId !== 'outline_tab_notifications';\n const upsellPageName = pluginLocationId === 'outline_tab_notifications' ? 'course_home' : 'in_course';\n\n // WARNING: This component renders the default UpgradeNotification feature. Do not modify the render function\n // without considering the impact to this experience.\n return (\n <UpgradeNotification\n {...props}\n accessExpiration={accessExpiration}\n contentTypeGatingEnabled={contentTypeGatingEnabled}\n marketingUrl={marketingUrl}\n offer={offer}\n org={org}\n shouldDisplayBorder={shouldDisplayBorder}\n timeOffsetMillis={timeOffsetMillis}\n upsellPageName={upsellPageName}\n userTimezone={userTimezone}\n verifiedMode={verifiedMode}\n />\n );\n};\n\nDefaultUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n};\n\nexport default DefaultUpgradeNotification;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DefaultUpgradeNotification.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_classnames","_i18n","_analytics","_paragon","_icons","_localStorage","_upgradeButton","_modelStore","_upsellBullets","_certificatePreview","_jsxRuntime","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","ownKeys","keys","getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","key","value","_toPropertyKey","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","UpsellNoFBECardContent","jsxs","className","children","jsx","VerifiedCertBullet","SupportMissionBullet","UpsellFBEFarAwayCardContent","UnlockGradedBullet","FullAccessBullet","UpsellFBESoonCardContent","_ref","accessExpirationDate","timezoneFormatArgs","includingAnyProgress","FormattedMessage","id","defaultMessage","date","FormattedDate","day","month","Date","benefitsOfUpgrading","rel","target","href","values","propTypes","PropTypes","instanceOf","isRequired","shape","timeZone","string","defaultProps","PastExpirationCardContent","ExpirationCountdown","_ref2","courseId","hoursToExpiration","setupgradeNotificationCurrentState","type","expirationText","setLocalStorage","dayCount","Math","floor","hourCount","number","func","AccessExpirationDateBanner","_ref3","PastExpirationDateBanner","_ref4","DefaultUpgradeNotification","_ref5","setNotificationCurrentState","toggleSidebar","pluginLocationId","org","userTimezone","verifiedMode","useModel","accessExpiration","contentTypeGatingEnabled","marketingUrl","offer","timeOffsetMillis","dateNow","now","correctedTime","expirationDate","pastExpirationDeadline","shouldDisplayBorder","upsellPageName","eventProperties","org_key","courserun_key","promotionEventProperties","creative","name","position","promotion_id","useEffect","sendTrackingLogEvent","sendTrackEvent","logClick","location","linkCategory","linkName","linkType","pageName","logClickPastExpiration","upgradeNotificationHeaderText","expirationBanner","upsellMessage","callToActionButton","offerCode","hoursToAccessExpiration","hoursToDiscountExpiration","percentage","Button","variant","onClick","block","UpgradeButton","code","closeAltText","classNames","IconButton","src","Close","size","iconAs","Icon","alt","_default","exports","injectIntl"],"sources":["../../src/upgrade-notification/DefaultUpgradeNotification.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n FormattedDate, FormattedMessage, injectIntl,\n} from '@edx/frontend-platform/i18n';\nimport { sendTrackEvent, sendTrackingLogEvent } from '@edx/frontend-platform/analytics';\nimport { Button, Icon, IconButton } from '@openedx/paragon';\nimport { Close } from '@openedx/paragon/icons';\nimport { setLocalStorage } from '@src/data/localStorage';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport { useModel } from '@src/generic/model-store';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '../upsell-bullets';\n\nimport CertificatePreview from './certificate-preview';\n\nconst UpsellNoFBECardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul pt-0\">\n <VerifiedCertBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBEFarAwayCardContent = () => (\n <ul className=\"fa-ul upgrade-notification-ul\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n);\n\nconst UpsellFBESoonCardContent = ({ accessExpirationDate, timezoneFormatArgs }) => {\n const includingAnyProgress = (\n <span className=\"font-weight-bold\">\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationAccessLoss.progress\"\n defaultMessage=\"including any progress\"\n />\n </span>\n );\n\n const date = (\n <FormattedDate\n key=\"accessDate\"\n day=\"numeric\"\n month=\"long\"\n value={new Date(accessExpirationDate)}\n {...timezoneFormatArgs}\n />\n );\n\n const benefitsOfUpgrading = (\n <a className=\"inline-link-underline font-weight-bold\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://support.edx.org/hc/en-us/articles/360013426573-What-are-the-differences-between-audit-free-and-verified-paid-courses-\">\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationVerifiedCert.benefits\"\n defaultMessage=\"benefits of upgrading\"\n />\n </a>\n );\n\n return (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationAccessLoss\"\n defaultMessage=\"You will lose all access to this course, {includingAnyProgress}, on {date}.\"\n values={{\n includingAnyProgress,\n date,\n }}\n />\n </p>\n <p>\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationVerifiedCert\"\n defaultMessage=\"Upgrading your course enables you to pursue a verified certificate and unlocks numerous features. Learn more about the {benefitsOfUpgrading}.\"\n values={{ benefitsOfUpgrading }}\n />\n </p>\n </div>\n );\n};\n\nUpsellFBESoonCardContent.propTypes = {\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n};\n\nUpsellFBESoonCardContent.defaultProps = {\n timezoneFormatArgs: {},\n};\n\nconst PastExpirationCardContent = () => (\n <div className=\"upgrade-notification-text\">\n <p>\n <FormattedMessage\n id=\"advertisements.upgradeNotification.pastExpiration.content\"\n defaultMessage=\"The upgrade deadline for this course passed. To upgrade, enroll in the next available session.\"\n />\n </p>\n </div>\n);\n\nconst ExpirationCountdown = ({\n courseId, hoursToExpiration, setupgradeNotificationCurrentState, type,\n}) => {\n let expirationText;\n if (hoursToExpiration >= 24) { // More than 1 day left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessDaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDaysLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDdaysLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDdaysLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationDays\"\n defaultMessage={`{dayCount, number} {dayCount, plural,\n one {day}\n other {days}} left`}\n values={{\n dayCount: (Math.floor(hoursToExpiration / 24)),\n }}\n />\n );\n } else if (hoursToExpiration >= 1) { // More than 1 hour left\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessHoursLeft');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDHoursLeft');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDHoursLeft');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationHours\"\n defaultMessage={`{hourCount, number} {hourCount, plural,\n one {hour}\n other {hours}} left`}\n values={{\n hourCount: (hoursToExpiration),\n }}\n />\n );\n } else { // Less than 1 hour\n // setupgradeNotificationCurrentState is available in NotificationTray (not course home)\n if (setupgradeNotificationCurrentState) {\n if (type === 'access') {\n setupgradeNotificationCurrentState('accessLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessLastHour');\n }\n if (type === 'offer') {\n setupgradeNotificationCurrentState('FPDLastHour');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'FPDLastHour');\n }\n }\n expirationText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expirationMinutes\"\n defaultMessage=\"Less than 1 hour left\"\n />\n );\n }\n return (<div className=\"upsell-warning\">{expirationText}</div>);\n};\n\nExpirationCountdown.propTypes = {\n courseId: PropTypes.string.isRequired,\n hoursToExpiration: PropTypes.number.isRequired,\n setupgradeNotificationCurrentState: PropTypes.func,\n type: PropTypes.string,\n};\nExpirationCountdown.defaultProps = {\n setupgradeNotificationCurrentState: null,\n type: null,\n};\n\nconst AccessExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('accessDateView');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'accessDateView');\n }\n return (\n <div className=\"upsell-warning-light\">\n <FormattedMessage\n id=\"advertisements.upgradeNotification.expiration\"\n defaultMessage=\"Course access will expire {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nAccessExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nAccessExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst PastExpirationDateBanner = ({\n courseId, accessExpirationDate, timezoneFormatArgs, setupgradeNotificationCurrentState,\n}) => {\n if (setupgradeNotificationCurrentState) {\n setupgradeNotificationCurrentState('PastExpirationDate');\n setLocalStorage(`upgradeNotificationCurrentState.${courseId}`, 'PastExpirationDate');\n }\n return (\n <div className=\"upsell-warning\">\n <FormattedMessage\n id=\"advertisements.upgradeNotification.pastExpiration.banner\"\n defaultMessage=\"Upgrade deadline passed on {date}\"\n values={{\n date: (\n <FormattedDate\n key=\"accessExpireDate\"\n day=\"numeric\"\n month=\"long\"\n value={accessExpirationDate}\n {...timezoneFormatArgs}\n />\n ),\n }}\n />\n </div>\n );\n};\n\nPastExpirationDateBanner.propTypes = {\n courseId: PropTypes.string.isRequired,\n accessExpirationDate: PropTypes.PropTypes.instanceOf(Date).isRequired,\n timezoneFormatArgs: PropTypes.shape({\n timeZone: PropTypes.string,\n }),\n setupgradeNotificationCurrentState: PropTypes.func,\n};\n\nPastExpirationDateBanner.defaultProps = {\n timezoneFormatArgs: {},\n setupgradeNotificationCurrentState: null,\n};\n\nconst DefaultUpgradeNotification = ({\n id,\n courseId,\n setNotificationCurrentState,\n toggleSidebar,\n}) => {\n const pluginLocationId = id;\n\n const {\n org,\n userTimezone,\n verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const {\n accessExpiration,\n contentTypeGatingEnabled,\n marketingUrl,\n offer,\n timeOffsetMillis,\n } = useModel('coursewareMeta', courseId);\n\n const dateNow = Date.now();\n const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {};\n const correctedTime = new Date(dateNow + timeOffsetMillis);\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(dateNow) > accessExpirationDate : false;\n const shouldDisplayBorder = pluginLocationId !== 'outline_tab_notifications';\n const upsellPageName = pluginLocationId === 'outline_tab_notifications' ? 'course_home' : 'in_course';\n const setupgradeNotificationCurrentState = setNotificationCurrentState;\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n };\n\n const promotionEventProperties = {\n creative: 'sidebarupsell',\n name: 'In-Course Verification Prompt',\n position: 'sidebar-message',\n promotion_id: 'courseware_verified_certificate_upsell',\n ...eventProperties,\n };\n\n useEffect(() => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.displayed', eventProperties);\n sendTrackEvent('Promotion Viewed', promotionEventProperties);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!verifiedMode) {\n return null;\n }\n\n const logClick = () => {\n sendTrackingLogEvent('edx.bi.course.upgrade.sidebarupsell.clicked', eventProperties);\n sendTrackingLogEvent('edx.course.enrollment.upgrade.clicked', {\n ...eventProperties,\n location: 'sidebar-message',\n });\n sendTrackEvent('Promotion Clicked', promotionEventProperties);\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: 'green_upgrade',\n linkName: `${upsellPageName}_green`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.upgrade_notification.past_expiration.button_clicked', {\n ...eventProperties,\n linkCategory: 'upgrade_notification',\n linkName: `${upsellPageName}_course_details`,\n linkType: 'button',\n pageName: upsellPageName,\n });\n };\n\n /*\n There are 5 parts that change in the upgrade card:\n upgradeNotificationHeaderText\n expirationBanner\n upsellMessage\n callToActionButton\n offerCode\n */\n let upgradeNotificationHeaderText;\n let expirationBanner;\n let upsellMessage;\n let callToActionButton;\n let offerCode;\n\n if (!!accessExpiration && !!contentTypeGatingEnabled) {\n const hoursToAccessExpiration = Math.floor((accessExpirationDate - correctedTime) / 1000 / 60 / 60);\n\n if (hoursToAccessExpiration >= (7 * 24)) {\n if (offer) { // countdown to the first purchase discount if there is one\n const hoursToDiscountExpiration = Math.floor((new Date(offer.expirationDate) - correctedTime) / 1000 / 60 / 60);\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.firstTimeLearnerDiscount\"\n defaultMessage=\"{percentage}% First-Time Learner Discount\"\n values={{\n percentage: (offer.percentage),\n }}\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToDiscountExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"offer\"\n />\n );\n } else {\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.accessExpiration\"\n defaultMessage=\"Upgrade your course today\"\n />\n );\n expirationBanner = (\n <AccessExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n }\n upsellMessage = <UpsellFBEFarAwayCardContent />;\n } else if (hoursToAccessExpiration < (7 * 24) && hoursToAccessExpiration >= 0) {\n // more urgent messaging if there's less than 7 days left to access expiration\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.accessExpirationUrgent\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\n expirationBanner = (\n <ExpirationCountdown\n courseId={courseId}\n hoursToExpiration={hoursToAccessExpiration}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n type=\"access\"\n />\n );\n upsellMessage = (\n <UpsellFBESoonCardContent\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n />\n );\n } else { // access expiration deadline has passed\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.accessExpirationPast\"\n defaultMessage=\"Course Access Expiration\"\n />\n );\n expirationBanner = (\n <PastExpirationDateBanner\n courseId={courseId}\n accessExpirationDate={accessExpirationDate}\n timezoneFormatArgs={timezoneFormatArgs}\n setupgradeNotificationCurrentState={setupgradeNotificationCurrentState}\n />\n );\n upsellMessage = (\n <PastExpirationCardContent />\n );\n }\n } else { // FBE is turned off\n upgradeNotificationHeaderText = (\n <FormattedMessage\n id=\"advertisements.upgradeNotification.pursueAverifiedCertificate\"\n defaultMessage=\"Pursue a verified certificate\"\n />\n );\n upsellMessage = (<UpsellNoFBECardContent />);\n }\n\n if (pastExpirationDeadline) {\n callToActionButton = (\n <Button\n variant=\"primary\"\n onClick={logClickPastExpiration}\n href={marketingUrl}\n block\n >\n View Course Details\n </Button>\n );\n } else {\n callToActionButton = (\n <UpgradeButton\n offer={offer}\n onClick={logClick}\n verifiedMode={verifiedMode}\n block\n />\n );\n }\n\n if (offer) { // if there's a first purchase discount, message the code at the bottom\n offerCode = (\n <div className=\"text-center discount-info\">\n <FormattedMessage\n id=\"advertisements.upgradeNotification.code\"\n defaultMessage=\"Use code {code} at checkout\"\n values={{\n code: (<span className=\"font-weight-bold\">{offer.code}</span>),\n }}\n />\n </div>\n );\n }\n\n const closeAltText = (\n <FormattedMessage\n id=\"advertisements.close\"\n defaultMessage=\"Close\"\n />\n );\n\n return (\n <section className={classNames('upgrade-notification small', { 'card mb-4': shouldDisplayBorder })}>\n <div id=\"courseHome-upgradeNotification\">\n <CertificatePreview courseId={courseId} />\n <h2\n className={classNames('h5 upgrade-notification-header', {\n 'd-flex align-items-center mr-2 ml-4 my-1.5 font-size-18': !!toggleSidebar,\n })}\n id=\"outline-sidebar-upgrade-header\"\n >\n {upgradeNotificationHeaderText}\n {!!toggleSidebar && (\n <div className=\"d-inline-flex ml-auto\">\n <IconButton\n src={Close}\n size=\"sm\"\n iconAs={Icon}\n onClick={toggleSidebar}\n className=\"icon-hover\"\n alt={closeAltText}\n />\n </div>\n )}\n </h2>\n {expirationBanner}\n <div className=\"upgrade-notification-message\">\n {upsellMessage}\n </div>\n <div className=\"upgrade-notification-button\">\n {callToActionButton}\n </div>\n {offerCode}\n </div>\n </section>\n );\n};\n\nDefaultUpgradeNotification.propTypes = {\n id: PropTypes.string.isRequired,\n courseId: PropTypes.string.isRequired,\n setNotificationCurrentState: PropTypes.func,\n toggleSidebar: PropTypes.func,\n};\n\nDefaultUpgradeNotification.defaultProps = {\n setNotificationCurrentState: null,\n toggleSidebar: null,\n};\n\nexport default injectIntl(DefaultUpgradeNotification);\n"],"mappings":"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","ignoreList":[]}
|