diff --git a/src/alerts/access-expiration-alert/AccessExpirationAlert.jsx b/src/alerts/access-expiration-alert/AccessExpirationAlert.jsx index b3a46bc3..0f47df91 100644 --- a/src/alerts/access-expiration-alert/AccessExpirationAlert.jsx +++ b/src/alerts/access-expiration-alert/AccessExpirationAlert.jsx @@ -1,4 +1,3 @@ -import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { sendTrackEvent } from '@edx/frontend-platform/analytics'; import { @@ -8,18 +7,8 @@ import { Alert, Hyperlink } from '@edx/paragon'; import { Info } from '@edx/paragon/icons'; import messages from './messages'; -import AccessExpirationAlertMMP2P from './AccessExpirationAlertMMP2P'; function AccessExpirationAlert({ intl, payload }) { - /** [MM-P2P] Experiment */ - const [showMMP2P, setShowMMP2P] = useState(!!window.experiment__home_alert_bShowMMP2P); - if (window.experiment__home_alert_showMMP2P === undefined) { - window.experiment__home_alert_showMMP2P = (val) => { - window.experiment__home_alert_bShowMMP2P = !!val; - setShowMMP2P(!!val); - }; - } - const { accessExpiration, courseId, @@ -39,13 +28,6 @@ function AccessExpirationAlert({ intl, payload }) { upgradeUrl, } = accessExpiration; - /** [MM-P2P] Experiment */ - if (showMMP2P) { - return ( - - ); - } - const logClick = () => { sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', { org_key: org, diff --git a/src/alerts/access-expiration-alert/AccessExpirationAlertMMP2P.jsx b/src/alerts/access-expiration-alert/AccessExpirationAlertMMP2P.jsx deleted file mode 100644 index e6f06078..00000000 --- a/src/alerts/access-expiration-alert/AccessExpirationAlertMMP2P.jsx +++ /dev/null @@ -1,80 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { FormattedDate, injectIntl } from '@edx/frontend-platform/i18n'; -import { Alert, Hyperlink } from '@edx/paragon'; -import { Info } from '@edx/paragon/icons'; - -import messages from './messages'; - -function AccessExpirationAlertMMP2P({ payload }) { - const { - accessExpiration, - userTimezone, - } = payload; - const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {}; - - if (!accessExpiration) { - return null; - } - - const { - expirationDate, - upgradeDeadline, - upgradeUrl, - } = accessExpiration; - - let deadlineMessage = null; - const formatDate = (val, key) => ( - - ); - - if (upgradeDeadline && upgradeUrl) { - deadlineMessage = ( - <> - Upgrade by {formatDate(upgradeDeadline, 'upgradeDesc')} to unlock unlimited access to all course activities, including graded assignments. -   - - {messages.upgradeNow.defaultMessage} - - - ); - } - - return ( - - - Unlock full course content by {formatDate(upgradeDeadline, 'upgradeTitle')} - -
- {deadlineMessage} -
- You lose all access to the first two weeks of scheduled content - on {formatDate(expirationDate, 'expirationBody')}. -
- ); -} - -AccessExpirationAlertMMP2P.propTypes = { - payload: PropTypes.shape({ - accessExpiration: PropTypes.shape({ - expirationDate: PropTypes.string.isRequired, - masqueradingExpiredCourse: PropTypes.bool.isRequired, - upgradeDeadline: PropTypes.string, - upgradeUrl: PropTypes.string, - }).isRequired, - userTimezone: PropTypes.string.isRequired, - }).isRequired, -}; - -export default injectIntl(AccessExpirationAlertMMP2P); diff --git a/src/course-home/dates-tab/DatesTab.jsx b/src/course-home/dates-tab/DatesTab.jsx index dee70d1f..23e157cd 100644 --- a/src/course-home/dates-tab/DatesTab.jsx +++ b/src/course-home/dates-tab/DatesTab.jsx @@ -9,8 +9,6 @@ import Timeline from './timeline/Timeline'; import { fetchDatesTab } from '../data'; import { useModel } from '../../generic/model-store'; -/** [MM-P2P] Experiment */ -import { initDatesMMP2P } from '../../experiments/mm-p2p'; import SuggestedScheduleHeader from '../suggested-schedule-messaging/SuggestedScheduleHeader'; import ShiftDatesAlert from '../suggested-schedule-messaging/ShiftDatesAlert'; import UpgradeToCompleteAlert from '../suggested-schedule-messaging/UpgradeToCompleteAlert'; @@ -30,9 +28,6 @@ function DatesTab({ intl }) { courseDateBlocks, } = useModel('dates', courseId); - /** [MM-P2P] Experiment */ - const mmp2p = initDatesMMP2P(courseId); - const hasDeadlines = courseDateBlocks && courseDateBlocks.some(x => x.dateType === 'assignment-due-date'); const logUpgradeLinkClick = () => { @@ -51,8 +46,7 @@ function DatesTab({ intl }) {
{intl.formatMessage(messages.title)}
- { /** [MM-P2P] Experiment */ } - {isSelfPaced && hasDeadlines && !mmp2p.state.isEnabled && ( + {isSelfPaced && hasDeadlines && ( <> @@ -60,7 +54,7 @@ function DatesTab({ intl }) { )} - + ); } diff --git a/src/course-home/dates-tab/timeline/Day.jsx b/src/course-home/dates-tab/timeline/Day.jsx index c68080b5..ad893165 100644 --- a/src/course-home/dates-tab/timeline/Day.jsx +++ b/src/course-home/dates-tab/timeline/Day.jsx @@ -23,8 +23,6 @@ function Day({ intl, items, last, - /** [MM-P2P] Example */ - mmp2p, }) { const { courseId, @@ -37,11 +35,6 @@ function Day({ const { color, badges } = getBadgeListAndColor(date, intl, null, items); - /** [MM-P2P] Experiment */ - const mmp2pOverride = ( - mmp2p.state.isEnabled - && items.some((item) => item.dateType === 'verified-upgrade-deadline') - ); return (
  • {/* Top Line */} @@ -57,8 +50,7 @@ function Day({
    {items.map((item) => { - /** [MM-P2P] Experiment (conditional) */ - const { badges: itemBadges } = mmp2pOverride - ? getBadgeListAndColor(new Date(mmp2p.state.upgradeDeadline), intl, item, items) - : getBadgeListAndColor(date, intl, item, items); + const { badges: itemBadges } = getBadgeListAndColor(date, intl, item, items); const showDueDateTime = item.dateType === 'assignment-due-date'; const showLink = item.link && isLearnerAssignment(item); @@ -107,15 +96,7 @@ function Day({ )}
    - { /** [MM-P2P] Experiment (conditional) */ } - { mmp2pOverride - ? ( -
    - You are still eligible to upgrade to a Verified Certificate! -   Unlock full course access and highlight the knowledge you'll gain. -
    - ) - : (item.description &&
    {item.description}
    )} + {item.description &&
    {item.description}
    }
    ); })} @@ -138,25 +119,11 @@ Day.propTypes = { title: PropTypes.string, })).isRequired, last: PropTypes.bool, - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({ - state: PropTypes.shape({ - isEnabled: PropTypes.bool.isRequired, - upgradeDeadline: PropTypes.string, - }), - }), }; Day.defaultProps = { first: false, last: false, - /** [MM-P2P] Experiment */ - mmp2p: { - state: { - isEnabled: false, - upgradeDeadline: '', - }, - }, }; export default injectIntl(Day); diff --git a/src/course-home/dates-tab/timeline/Timeline.jsx b/src/course-home/dates-tab/timeline/Timeline.jsx index c8e6e350..e9f6868a 100644 --- a/src/course-home/dates-tab/timeline/Timeline.jsx +++ b/src/course-home/dates-tab/timeline/Timeline.jsx @@ -1,6 +1,4 @@ import React from 'react'; -/** [MM-P2P] Experiment (import) */ -import PropTypes from 'prop-types'; import { useSelector } from 'react-redux'; import { useModel } from '../../../generic/model-store'; @@ -8,8 +6,7 @@ import { useModel } from '../../../generic/model-store'; import Day from './Day'; import { daycmp, isLearnerAssignment } from '../utils'; -/** [MM-P2P] Experiment (argument) */ -export default function Timeline({ mmp2p }) { +export default function Timeline() { const { courseId, } = useSelector(state => state.courseHome); @@ -66,17 +63,8 @@ export default function Timeline({ mmp2p }) { return (
      {groupedDates.map((groupedDate) => ( - + ))}
    ); } - -/** [MM-P2P] Experiment */ -Timeline.propTypes = { - mmp2p: PropTypes.shape({}), -}; - -Timeline.defaultProps = { - mmp2p: {}, -}; diff --git a/src/course-home/outline-tab/DateSummary.jsx b/src/course-home/outline-tab/DateSummary.jsx index 490721d1..abf5be05 100644 --- a/src/course-home/outline-tab/DateSummary.jsx +++ b/src/course-home/outline-tab/DateSummary.jsx @@ -12,8 +12,6 @@ import './DateSummary.scss'; export default function DateSummary({ dateBlock, userTimezone, - /** [MM-P2P] Experiment */ - mmp2p, }) { const { courseId, @@ -25,9 +23,6 @@ export default function DateSummary({ const linkedTitle = dateBlock.link && isLearnerAssignment(dateBlock); const timezoneFormatArgs = userTimezone ? { timeZone: userTimezone } : {}; - /** [MM-P2P] Experiment */ - const showMMP2P = mmp2p.state.isEnabled && (dateBlock.dateType === 'verified-upgrade-deadline'); - const logVerifiedUpgradeClick = () => { sendTrackEvent('edx.bi.ecommerce.upsell_links_clicked', { org_key: org, @@ -45,8 +40,7 @@ export default function DateSummary({
    - {/** [MM-P2P] Experiment (conditional) */} - { showMMP2P ? ( -
    -
    +
    +
    + {linkedTitle && (
    - Last chance to upgrade + {dateBlock.title}
    -
    -
    - You are still eligible to upgrade to a Verified Certificate! -   Unlock full course access and highlight the knowledge you'll gain. -
    -
    - ) : ( -
    -
    - {linkedTitle && ( - - )} - {!linkedTitle && ( -
    {dateBlock.title}
    - )} -
    - {dateBlock.description && ( -
    {dateBlock.description}
    )} - {!linkedTitle && dateBlock.link && ( - {}} - className="description-link" - > - {dateBlock.linkText} - + {!linkedTitle && ( +
    {dateBlock.title}
    )}
    - )} + {dateBlock.description && ( +
    {dateBlock.description}
    + )} + {!linkedTitle && dateBlock.link && ( + {}} + className="description-link" + > + {dateBlock.linkText} + + )} +
  • ); } @@ -109,22 +88,8 @@ DateSummary.propTypes = { learnerHasAccess: PropTypes.bool, }).isRequired, userTimezone: PropTypes.string, - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({ - state: PropTypes.shape({ - isEnabled: PropTypes.bool.isRequired, - upgradeDeadline: PropTypes.string, - }), - }), }; DateSummary.defaultProps = { userTimezone: null, - /** [MM-P2P] Experiment */ - mmp2p: { - state: { - isEnabled: false, - upgradeDeadline: '', - }, - }, }; diff --git a/src/course-home/outline-tab/OutlineTab.jsx b/src/course-home/outline-tab/OutlineTab.jsx index 5f9b2783..1c75f73d 100644 --- a/src/course-home/outline-tab/OutlineTab.jsx +++ b/src/course-home/outline-tab/OutlineTab.jsx @@ -29,9 +29,6 @@ import WelcomeMessage from './widgets/WelcomeMessage'; import ProctoringInfoPanel from './widgets/ProctoringInfoPanel'; import AccountActivationAlert from '../../alerts/logistration-alert/AccountActivationAlert'; -/** [MM-P2P] Experiment */ -import { initHomeMMP2P, MMP2PFlyover } from '../../experiments/mm-p2p'; - function OutlineTab({ intl }) { const { courseId, @@ -104,9 +101,6 @@ function OutlineTab({ intl }) { return userRoleNames.includes('enterprise_learner'); }; - /** [[MM-P2P] Experiment */ - const MMP2P = initHomeMMP2P(courseId); - /** show post enrolment survey to only B2C learners */ const learnerType = isEnterpriseUser() ? 'enterprise_learner' : 'b2c_learner'; @@ -134,7 +128,6 @@ function OutlineTab({ intl }) {
    {title}
    - {/** [MM-P2P] Experiment (className for optimizely trigger) */}
    @@ -146,21 +139,17 @@ function OutlineTab({ intl }) { />
    - { /** [MM-P2P] Experiment (the conditional) */ } - { !MMP2P.state.isEnabled - && ( - - )} - {isSelfPaced && hasDeadlines && !MMP2P.state.isEnabled && ( + + {isSelfPaced && hasDeadlines && ( <> @@ -203,28 +192,20 @@ function OutlineTab({ intl }) { /> )} - { /** [MM-P2P] Experiment (conditional) */ } - { MMP2P.state.isEnabled - ? - : ( - - )} - +
    )} diff --git a/src/course-home/outline-tab/widgets/CourseDates.jsx b/src/course-home/outline-tab/widgets/CourseDates.jsx index fbce0955..5604e00a 100644 --- a/src/course-home/outline-tab/widgets/CourseDates.jsx +++ b/src/course-home/outline-tab/widgets/CourseDates.jsx @@ -1,6 +1,5 @@ import React from 'react'; import { useSelector } from 'react-redux'; -import PropTypes from 'prop-types'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; @@ -10,8 +9,6 @@ import { useModel } from '../../../generic/model-store'; function CourseDates({ intl, - /** [MM-P2P] Experiment */ - mmp2p, }) { const { courseId, @@ -40,8 +37,6 @@ function CourseDates({ key={courseDateBlock.title + courseDateBlock.date} dateBlock={courseDateBlock} userTimezone={userTimezone} - /** [MM-P2P] Experiment */ - mmp2p={mmp2p} /> ))} @@ -55,13 +50,6 @@ function CourseDates({ CourseDates.propTypes = { intl: intlShape.isRequired, - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({}), -}; - -CourseDates.defaultProps = { - /** [MM-P2P] Experiment */ - mmp2p: {}, }; export default injectIntl(CourseDates); diff --git a/src/courseware/course/Course.jsx b/src/courseware/course/Course.jsx index ed8cec28..480bf8a5 100644 --- a/src/courseware/course/Course.jsx +++ b/src/courseware/course/Course.jsx @@ -18,9 +18,6 @@ import SidebarTriggers from './sidebar/SidebarTriggers'; import { useModel } from '../../generic/model-store'; import { getSessionStorage, setSessionStorage } from '../../data/sessionStorage'; -/** [MM-P2P] Experiment */ -import { initCoursewareMMP2P, MMP2PBlockModal } from '../../experiments/mm-p2p'; - function Course({ courseId, sequenceId, @@ -71,9 +68,6 @@ function Course({ } } - /** [MM-P2P] Experiment */ - const MMP2P = initCoursewareMMP2P(courseId, sequenceId, unitId); - return ( @@ -86,8 +80,6 @@ function Course({ sequenceId={sequenceId} isStaff={isStaff} unitId={unitId} - //* * [MM-P2P] Experiment */ - mmp2p={MMP2P} /> {shouldDisplayTriggers && ( @@ -102,8 +94,6 @@ function Course({ unitNavigationHandler={unitNavigationHandler} nextSequenceHandler={nextSequenceHandler} previousSequenceHandler={previousSequenceHandler} - //* * [MM-P2P] Experiment */ - mmp2p={MMP2P} /> setWeeklyGoalCelebrationOpen(false)} /> - { /** [MM-P2P] Experiment */ } - { MMP2P.meta.modalLock && } ); } diff --git a/src/courseware/course/CourseBreadcrumbs.jsx b/src/courseware/course/CourseBreadcrumbs.jsx index 3e30be12..a90aff5f 100644 --- a/src/courseware/course/CourseBreadcrumbs.jsx +++ b/src/courseware/course/CourseBreadcrumbs.jsx @@ -8,8 +8,6 @@ import { useSelector } from 'react-redux'; import { SelectMenu } from '@edx/paragon'; import { Link } from 'react-router-dom'; import { useModel, useModels } from '../../generic/model-store'; -/** [MM-P2P] Experiment */ -import { MMP2PFlyoverTrigger } from '../../experiments/mm-p2p'; import JumpNavMenuItem from './JumpNavMenuItem'; function CourseBreadcrumb({ @@ -87,8 +85,6 @@ export default function CourseBreadcrumbs({ sequenceId, unitId, isStaff, - /** [MM-P2P] Experiment */ - mmp2p, }) { const course = useModel('coursewareMeta', courseId); const courseStatus = useSelector(state => state.courseware.courseStatus); @@ -152,10 +148,6 @@ export default function CourseBreadcrumbs({ isStaff={isStaff} /> ))} - {/** [MM-P2P] Experiment */} - {mmp2p.state && mmp2p.state.isEnabled && ( - - )} ); @@ -167,12 +159,6 @@ CourseBreadcrumbs.propTypes = { sequenceId: PropTypes.string, unitId: PropTypes.string, isStaff: PropTypes.bool, - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({ - state: PropTypes.shape({ - isEnabled: PropTypes.bool.isRequired, - }), - }), }; CourseBreadcrumbs.defaultProps = { @@ -180,6 +166,4 @@ CourseBreadcrumbs.defaultProps = { sequenceId: null, unitId: null, isStaff: null, - /** [MM-P2P] Experiment */ - mmp2p: {}, }; diff --git a/src/courseware/course/sequence/Sequence.jsx b/src/courseware/course/sequence/Sequence.jsx index b326c463..73738256 100644 --- a/src/courseware/course/sequence/Sequence.jsx +++ b/src/courseware/course/sequence/Sequence.jsx @@ -26,10 +26,6 @@ import HiddenAfterDue from './hidden-after-due'; import { SequenceNavigation, UnitNavigation } from './sequence-navigation'; import SequenceContent from './SequenceContent'; -/** [MM-P2P] Experiment */ -import { isMobile } from '../../../experiments/mm-p2p/utils'; -import { MMP2PFlyover, MMP2PFlyoverMobile } from '../../../experiments/mm-p2p'; - function Sequence({ unitId, sequenceId, @@ -38,7 +34,6 @@ function Sequence({ nextSequenceHandler, previousSequenceHandler, intl, - mmp2p, }) { const course = useModel('coursewareMeta', courseId); const { @@ -155,8 +150,6 @@ function Sequence({ sequenceId={sequenceId} unitId={unitId} className="mb-4" - /** [MM-P2P] Experiment */ - mmp2p={mmp2p} nextSequenceHandler={() => { logEvent('edx.ui.lms.sequence.next_selected', 'top'); handleNext(); @@ -180,8 +173,6 @@ function Sequence({ sequenceId={sequenceId} unitId={unitId} unitLoadedHandler={handleUnitLoaded} - /** [MM-P2P] Experiment */ - mmp2p={mmp2p} /> {unitHasLoaded && (
    - - {/** [MM-P2P] Experiment */} - {(mmp2p.state.isEnabled && mmp2p.flyover.isVisible) && ( - isMobile() - ? - : - )} ); @@ -244,30 +228,11 @@ Sequence.propTypes = { nextSequenceHandler: PropTypes.func.isRequired, previousSequenceHandler: PropTypes.func.isRequired, intl: intlShape.isRequired, - - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({ - flyover: PropTypes.shape({ - isVisible: PropTypes.bool.isRequired, - }), - meta: PropTypes.shape({ - showLock: PropTypes.bool, - }), - state: PropTypes.shape({ - isEnabled: PropTypes.bool.isRequired, - }), - }), }; Sequence.defaultProps = { sequenceId: null, unitId: null, - /** [MM-P2P] Experiment */ - mmp2p: { - flyover: { isVisible: false }, - meta: { showLock: false }, - state: { isEnabled: false }, - }, }; export default injectIntl(Sequence); diff --git a/src/courseware/course/sequence/SequenceContent.jsx b/src/courseware/course/sequence/SequenceContent.jsx index 4807ddde..9f78d59b 100644 --- a/src/courseware/course/sequence/SequenceContent.jsx +++ b/src/courseware/course/sequence/SequenceContent.jsx @@ -16,8 +16,6 @@ function SequenceContent({ sequenceId, unitId, unitLoadedHandler, - /** [MM-P2P] Experiment */ - mmp2p, }) { const sequence = useModel('sequences', sequenceId); @@ -61,8 +59,6 @@ function SequenceContent({ key={unitId} id={unitId} onLoaded={unitLoadedHandler} - /** [MM-P2P] Experiment */ - mmp2p={mmp2p} /> ); } @@ -74,28 +70,10 @@ SequenceContent.propTypes = { unitId: PropTypes.string, unitLoadedHandler: PropTypes.func.isRequired, intl: intlShape.isRequired, - /** [MM-P2P] Experiment */ - mmp2p: PropTypes.shape({ - flyover: PropTypes.shape({ - isVisible: PropTypes.bool.isRequired, - }), - meta: PropTypes.shape({ - showLock: PropTypes.bool, - }), - state: PropTypes.shape({ - isEnabled: PropTypes.bool.isRequired, - }), - }), }; SequenceContent.defaultProps = { unitId: null, - /** [MM-P2P] Experiment */ - mmp2p: { - flyover: { isVisible: false }, - meta: { showLock: false }, - state: { isEnabled: false }, - }, }; export default injectIntl(SequenceContent); diff --git a/src/courseware/course/sequence/Unit.jsx b/src/courseware/course/sequence/Unit.jsx index f01975cb..75fb7ee4 100644 --- a/src/courseware/course/sequence/Unit.jsx +++ b/src/courseware/course/sequence/Unit.jsx @@ -8,8 +8,6 @@ import React, { } from 'react'; import { useDispatch } from 'react-redux'; import { processEvent } from '../../../course-home/data/thunks'; -/** [MM-P2P] Experiment */ -import { MMP2PLockPaywall } from '../../../experiments/mm-p2p'; import { useEventListener } from '../../../generic/hooks'; import { useModel } from '../../../generic/model-store'; import PageLoading from '../../../generic/PageLoading'; @@ -82,8 +80,6 @@ function Unit({ onLoaded, id, intl, - /** [MM-P2P] Experiment */ - mmp2p, }) { const { authenticatedUser } = useContext(AppContext); const view = authenticatedUser ? 'student_view' : 'public_view'; @@ -155,7 +151,7 @@ function Unit({ /> {/* TODO: social share exp. Need to remove later */} {window.expSocialShareEnabled && } - { !mmp2p.state.isEnabled && contentTypeGatingEnabled && unit.containsContentTypeGatedContent && ( + {contentTypeGatingEnabled && unit.containsContentTypeGatedContent && ( )} - { /** [MM-P2P] Experiment */ } - { mmp2p.meta.showLock && ( - - )} - {!mmp2p.meta.blockContent && shouldDisplayHonorCode && ( + {shouldDisplayHonorCode && ( )} - { /** [MM-P2P] Experiment (conditional) */ } - {!mmp2p.meta.blockContent && !shouldDisplayHonorCode && !hasLoaded && !showError && ( + {!shouldDisplayHonorCode && !hasLoaded && !showError && ( )} - {!mmp2p.meta.blockContent && !shouldDisplayHonorCode && !hasLoaded && showError && ( + {!shouldDisplayHonorCode && !hasLoaded && showError && ( )} {modalOptions.open && ( @@ -215,8 +206,7 @@ function Unit({ dialogClassName="modal-lti" /> )} - { /** [MM-P2P] Experiment (conditional) */ } - { !mmp2p.meta.blockContent && !shouldDisplayHonorCode && ( + {!shouldDisplayHonorCode && (