@edx/frontend-plugin-advertisements 1.15.2 → 1.16.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/README.rst
CHANGED
|
@@ -35,6 +35,128 @@ documented in the repository README.
|
|
|
35
35
|
|
|
36
36
|
.. _Learning MFE: https://github.com/openedx/frontend-app-learning
|
|
37
37
|
|
|
38
|
+
Local Setup and Installation
|
|
39
|
+
----------------------------
|
|
40
|
+
|
|
41
|
+
- Navigate to whichever parent folder holds your edx devstack folders
|
|
42
|
+
- Navigate to the src folder, and clone this repo by running: `git clone git@github.com:edx/frontend-plugin-advertisements.git`
|
|
43
|
+
- In `frontend-app-learning`, Add these lines to your `env.config.js` file:
|
|
44
|
+
```
|
|
45
|
+
import { UpgradeNotification, LockPaywall } from '@edx/frontend-plugin-advertisements';
|
|
46
|
+
import { PLUGIN_OPERATIONS, DIRECT_PLUGIN } from '@openedx/frontend-plugin-framework';
|
|
47
|
+
|
|
48
|
+
// Insert any other imports here
|
|
49
|
+
|
|
50
|
+
// Load environment variables from .env file
|
|
51
|
+
const config = {
|
|
52
|
+
pluginSlots: {
|
|
53
|
+
|
|
54
|
+
// Insert any other plugins here
|
|
55
|
+
|
|
56
|
+
notification_widget_plugin: {
|
|
57
|
+
plugins: [
|
|
58
|
+
{
|
|
59
|
+
op: PLUGIN_OPERATIONS.Insert,
|
|
60
|
+
widget: {
|
|
61
|
+
id: 'notification_widget_plugin',
|
|
62
|
+
type: DIRECT_PLUGIN,
|
|
63
|
+
RenderWidget: UpgradeNotification,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
notification_tray_plugin: {
|
|
69
|
+
plugins: [
|
|
70
|
+
{
|
|
71
|
+
op: PLUGIN_OPERATIONS.Insert,
|
|
72
|
+
widget: {
|
|
73
|
+
id: 'notification_tray_plugin',
|
|
74
|
+
type: DIRECT_PLUGIN,
|
|
75
|
+
RenderWidget: UpgradeNotification,
|
|
76
|
+
// RenderWidget: DefaultUpgradeNotification,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
outline_tab_notifications_plugin: {
|
|
82
|
+
keepDefault: false,
|
|
83
|
+
plugins: [
|
|
84
|
+
{
|
|
85
|
+
op: PLUGIN_OPERATIONS.Insert,
|
|
86
|
+
widget: {
|
|
87
|
+
id: 'outline_tab_notifications_plugin',
|
|
88
|
+
type: DIRECT_PLUGIN,
|
|
89
|
+
RenderWidget: UpgradeNotification,
|
|
90
|
+
// RenderWidget: DefaultUpgradeNotification,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
fbe_message_plugin: { // plugin slot id
|
|
96
|
+
keepDefault: false,
|
|
97
|
+
plugins: [
|
|
98
|
+
{
|
|
99
|
+
op: PLUGIN_OPERATIONS.Insert,
|
|
100
|
+
widget: {
|
|
101
|
+
id: 'fbe_message_plugin',
|
|
102
|
+
type: DIRECT_PLUGIN,
|
|
103
|
+
priority: 10,
|
|
104
|
+
RenderWidget: LockPaywall,
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
OPTIMIZELY_FULL_STACK_SDK_KEY: 'vtr_upgrade',
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export default config;
|
|
114
|
+
```
|
|
115
|
+
- Restart frontend-app-learning
|
|
116
|
+
|
|
117
|
+
Experiments
|
|
118
|
+
-----------
|
|
119
|
+
- In order to view experiments locally:
|
|
120
|
+
- Make sure your devstack is up and running.
|
|
121
|
+
- Sign into the LMS using your audit account (username: `audit@example.com`, password: `edx`).
|
|
122
|
+
- Navigate to the demo course: http://localhost:2000/course/course-v1:edX+DemoX+Demo_Course/home
|
|
123
|
+
- The demo course already has a paywall for the verified track enabled
|
|
124
|
+
|
|
125
|
+
- The experiments present in this repo as of 05-29-2025 can be tested as such:
|
|
126
|
+
- In mocks/optimizely/index.jsx, switch enabled to "true" and variationKey to your desired variationKey
|
|
127
|
+
- These variationKeys can be found in data/optimizely.js:
|
|
128
|
+
|
|
129
|
+
- NOTE: Please update this whenever an experiment is created or modified.
|
|
130
|
+
```
|
|
131
|
+
OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS
|
|
132
|
+
WHY_NOT_SURVEY: 'why_not_survey',
|
|
133
|
+
- A survey to ask what would motivate you to upgrade if you say no
|
|
134
|
+
- NOTE: This experimental feature only appears in-sequence within graded sequences.
|
|
135
|
+
CERTIFICATE_PREVIEW: 'certificate_preview',
|
|
136
|
+
- Preview a mockup of the certificate that you will receive at the end of the course in the upgrade notification
|
|
137
|
+
PARTNER_BRANDING: 'partner_branding',
|
|
138
|
+
- Show the logo of the partner associated with the course (e.g. Harvard, MIT)
|
|
139
|
+
CONTROL: 'control',
|
|
140
|
+
- The default user experience
|
|
141
|
+
OFF: 'off',
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
- Note that incourse paywall = in squenece
|
|
145
|
+
- upgrade notification = in sidebar notification
|
|
146
|
+
|
|
147
|
+
Example:
|
|
148
|
+
- Say we want to view the certificate preview. We'd go to mocks/optimizely/index.jsx and do this:
|
|
149
|
+
```
|
|
150
|
+
const useDecision = (experimentKey) => (
|
|
151
|
+
// To mock optimizely for local smoke testing, set the value of "enabled" to "true" and
|
|
152
|
+
// replace "replace_me" with the desired value from OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS
|
|
153
|
+
// which can be found in src/data/optimizely.js
|
|
154
|
+
[{ enabled: true, variationKey: 'certificate_preview' }]
|
|
155
|
+
);
|
|
156
|
+
```
|
|
157
|
+
- The experimental feature should then appear in the Demo Course.
|
|
158
|
+
|
|
159
|
+
|
|
38
160
|
Development
|
|
39
161
|
-----------
|
|
40
162
|
This plugin is intended for use with the `Learning MFE`_, specifically with several plugin slots defined in the MFE.
|
|
@@ -147,7 +147,7 @@ const ExperimentalLockPaywall = _ref => {
|
|
|
147
147
|
}),
|
|
148
148
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_upgradeButton.UpgradeButton, {
|
|
149
149
|
offer: offer,
|
|
150
|
-
onClick: logClick(eventProperties, userId),
|
|
150
|
+
onClick: () => logClick(eventProperties, userId),
|
|
151
151
|
verifiedMode: verifiedMode,
|
|
152
152
|
style: {
|
|
153
153
|
whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExperimentalLockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_UpsellBullets","_auth","_analytics","_reactSdk","_data","_utils","_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","ExperimentalLockPaywall","_ref","intl","courseId","optimizely","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","decision","useDecision","OPTIMIZELY_VTR_EXPERIMENT_KEY","variationKey","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","experiment_key","variation_key","userId","getAuthenticatedUser","logClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","track","OPTIMIZELY_EVENT_KEYS","UPGRADE_BUTTON_CLICK","logClickPastExpiration","jsx","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS","WHY_NOT_SURVEY","Button","DECLINE_UPGRADE_BUTTON_CLICK","showSurvey","propTypes","intlShape","isRequired","PropTypes","string","node","_default","exports","injectIntl","withOptimizely"],"sources":["../../src/paywall/ExperimentalLockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Button, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '@src/generic/upsell-bullets/UpsellBullets';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { useDecision, withOptimizely } from '@optimizely/react-sdk';\nimport {\n OPTIMIZELY_EVENT_KEYS,\n OPTIMIZELY_VTR_EXPERIMENT_KEY,\n OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS,\n} from '../data';\nimport showSurvey from './utils';\n\nconst ExperimentalLockPaywall = ({\n intl,\n courseId,\n optimizely,\n}) => {\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const [decision] = useDecision(OPTIMIZELY_VTR_EXPERIMENT_KEY);\n const { variationKey } = decision;\n\n // the following variables are set and used for resposive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n experiment_key: OPTIMIZELY_VTR_EXPERIMENT_KEY,\n variation_key: variationKey,\n };\n\n const { userId } = getAuthenticatedUser();\n\n const logClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n optimizely.track(OPTIMIZELY_EVENT_KEYS.UPGRADE_BUTTON_CLICK);\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testId=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testId=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink destination={marketingUrl} onClick={logClickPastExpiration(eventProperties)} target=\"_blank\" data-testId=\"lock-paywall-past-expiration-link\">{intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}</Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={logClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testId=\"upgrade-button\"\n />\n {variationKey === OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.WHY_NOT_SURVEY\n ? (\n <Button\n variant=\"link\"\n className=\"mt-3\"\n onClick={() => {\n optimizely.track(OPTIMIZELY_EVENT_KEYS.DECLINE_UPGRADE_BUTTON_CLICK);\n showSurvey();\n }}\n data-testId=\"lock-paywall-upgrade-decline-button\"\n >\n Take our 1-question survey\n </Button>\n )\n : null}\n </div>\n )}\n </div>\n </Alert>\n );\n};\nExperimentalLockPaywall.propTypes = {\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n optimizely: PropTypes.node.isRequired,\n};\n\nexport default injectIntl(withOptimizely(ExperimentalLockPaywall));\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ExperimentalLockPaywall.js","names":["_react","_interopRequireDefault","require","_propTypes","_classnames","_i18n","_paragon","_icons","_messages","_edX_locked_certificate","_modelStore","_upgradeButton","_UpsellBullets","_auth","_analytics","_reactSdk","_data","_utils","_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","ExperimentalLockPaywall","_ref","intl","courseId","optimizely","course","useModel","accessExpiration","marketingUrl","offer","org","verifiedMode","decision","useDecision","OPTIMIZELY_VTR_EXPERIMENT_KEY","variationKey","shouldDisplayGatedContentTwoColumnsHalf","useWindowSize","width","breakpoints","large","minWidth","shouldWrapTextOnButton","extraSmall","accessExpirationDate","Date","expirationDate","pastExpirationDeadline","now","eventProperties","org_key","courserun_key","experiment_key","variation_key","userId","getAuthenticatedUser","logClick","sendTrackEvent","linkCategory","linkName","linkType","pageName","track","OPTIMIZELY_EVENT_KEYS","UPGRADE_BUTTON_CLICK","logClickPastExpiration","jsx","Alert","variant","icon","Locked","className","children","jsxs","formatMessage","messages","Hyperlink","destination","onClick","target","classNames","style","float","alt","src","certificateLocked","height","VerifiedCertBullet","UnlockGradedBullet","FullAccessBullet","SupportMissionBullet","UpgradeButton","whiteSpace","OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS","WHY_NOT_SURVEY","Button","DECLINE_UPGRADE_BUTTON_CLICK","showSurvey","propTypes","intlShape","isRequired","PropTypes","string","node","_default","exports","injectIntl","withOptimizely"],"sources":["../../src/paywall/ExperimentalLockPaywall.jsx"],"sourcesContent":["/* eslint import/no-unresolved: 0 */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport {\n Alert, breakpoints, Button, Hyperlink, useWindowSize,\n} from '@openedx/paragon';\nimport { Locked } from '@openedx/paragon/icons';\nimport messages from '@src/courseware/course/sequence/lock-paywall/messages';\nimport certificateLocked from '@src/generic/assets/edX_locked_certificate.png';\nimport { useModel } from '@src/generic/model-store';\nimport { UpgradeButton } from '@src/generic/upgrade-button';\nimport {\n VerifiedCertBullet,\n UnlockGradedBullet,\n FullAccessBullet,\n SupportMissionBullet,\n} from '@src/generic/upsell-bullets/UpsellBullets';\nimport { getAuthenticatedUser } from '@edx/frontend-platform/auth';\nimport { sendTrackEvent } from '@edx/frontend-platform/analytics';\nimport { useDecision, withOptimizely } from '@optimizely/react-sdk';\nimport {\n OPTIMIZELY_EVENT_KEYS,\n OPTIMIZELY_VTR_EXPERIMENT_KEY,\n OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS,\n} from '../data';\nimport showSurvey from './utils';\n\nconst ExperimentalLockPaywall = ({\n intl,\n courseId,\n optimizely,\n}) => {\n const course = useModel('coursewareMeta', courseId);\n const {\n accessExpiration,\n marketingUrl,\n offer,\n } = course;\n\n const {\n org, verifiedMode,\n } = useModel('courseHomeMeta', courseId);\n\n const [decision] = useDecision(OPTIMIZELY_VTR_EXPERIMENT_KEY);\n const { variationKey } = decision;\n\n // the following variables are set and used for resposive layout to work with\n // whether the NotificationTray is open or not and if there's an offer with longer text\n const shouldDisplayGatedContentTwoColumnsHalf = useWindowSize().width <= breakpoints.large.minWidth;\n const shouldWrapTextOnButton = useWindowSize().width > breakpoints.extraSmall.minWidth;\n\n const accessExpirationDate = accessExpiration ? new Date(accessExpiration.expirationDate) : null;\n const pastExpirationDeadline = accessExpiration ? new Date(Date.now()) > accessExpirationDate : false;\n\n if (!verifiedMode) {\n return null;\n }\n\n const eventProperties = {\n org_key: org,\n courserun_key: courseId,\n experiment_key: OPTIMIZELY_VTR_EXPERIMENT_KEY,\n variation_key: variationKey,\n };\n\n const { userId } = getAuthenticatedUser();\n\n const logClick = () => {\n sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', {\n ...eventProperties,\n linkCategory: '(none)',\n linkName: 'in_course_upgrade',\n linkType: 'link',\n pageName: 'in_course',\n });\n optimizely.track(OPTIMIZELY_EVENT_KEYS.UPGRADE_BUTTON_CLICK);\n };\n\n const logClickPastExpiration = () => {\n sendTrackEvent('edx.bi.ecommerce.gated_content.past_expiration.link_clicked', {\n ...eventProperties,\n linkCategory: 'gated_content',\n linkName: 'course_details',\n linkType: 'link',\n pageName: 'in_course',\n });\n };\n\n return (\n <Alert variant=\"light\" aria-live=\"off\" icon={Locked} className=\"lock-paywall-container\" data-testId=\"lock-paywall-lock-paywall-test-id\">\n <div className=\"row\">\n <div className=\"col\">\n <h4 aria-level=\"3\">\n <span>{intl.formatMessage(messages['learn.lockPaywall.title'])}</span>\n </h4>\n {pastExpirationDeadline ? (\n <div className=\"mb-2 upgrade-intro\" data-testId=\"lock-paywall-past-expiration\">\n {intl.formatMessage(messages['learn.lockPaywall.content.pastExpiration'])}\n <Hyperlink destination={marketingUrl} onClick={logClickPastExpiration(eventProperties)} target=\"_blank\" data-testId=\"lock-paywall-past-expiration-link\">{intl.formatMessage(messages['learn.lockPaywall.courseDetails'])}</Hyperlink>\n </div>\n ) : (\n <div className=\"mb-2 upgrade-intro\">\n {intl.formatMessage(messages['learn.lockPaywall.content'])}\n </div>\n )}\n\n <div className={classNames('d-inline-flex flex-row', { 'flex-wrap': shouldDisplayGatedContentTwoColumnsHalf })}>\n <div style={{ float: 'left' }} className=\"mr-3 mb-2\">\n <img\n alt={intl.formatMessage(messages['learn.lockPaywall.example.alt'])}\n src={certificateLocked}\n className=\"border-0 certificate-image-banner\"\n style={{ height: '128px', width: '175px' }}\n />\n </div>\n\n <div className=\"mw-xs list-div\">\n <div className=\"mb-2\">\n {intl.formatMessage(messages['learn.lockPaywall.list.intro'])}\n </div>\n <ul className=\"fa-ul ml-4 pl-2\">\n <VerifiedCertBullet />\n <UnlockGradedBullet />\n <FullAccessBullet />\n <SupportMissionBullet />\n </ul>\n </div>\n </div>\n </div>\n\n {pastExpirationDeadline\n ? null\n : (\n <div\n className={\n classNames('d-flex flex-column align-items-md-center text-right justify-content-center', {\n 'col-md-4 mx-md-3': !shouldDisplayGatedContentTwoColumnsHalf, 'col-md-6': shouldDisplayGatedContentTwoColumnsHalf,\n })\n }\n >\n <UpgradeButton\n offer={offer}\n onClick={() => logClick(eventProperties, userId)}\n verifiedMode={verifiedMode}\n style={{ whiteSpace: shouldWrapTextOnButton ? 'nowrap' : null }}\n data-testId=\"upgrade-button\"\n />\n {variationKey === OPTIMIZELY_VTR_EXPERIMENT_VARIATION_KEYS.WHY_NOT_SURVEY\n ? (\n <Button\n variant=\"link\"\n className=\"mt-3\"\n onClick={() => {\n optimizely.track(OPTIMIZELY_EVENT_KEYS.DECLINE_UPGRADE_BUTTON_CLICK);\n showSurvey();\n }}\n data-testId=\"lock-paywall-upgrade-decline-button\"\n >\n Take our 1-question survey\n </Button>\n )\n : null}\n </div>\n )}\n </div>\n </Alert>\n );\n};\nExperimentalLockPaywall.propTypes = {\n intl: intlShape.isRequired,\n courseId: PropTypes.string.isRequired,\n optimizely: PropTypes.node.isRequired,\n};\n\nexport default injectIntl(withOptimizely(ExperimentalLockPaywall));\n"],"mappings":"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","ignoreList":[]}
|