diff --git a/src/course-home/outline-tab/OutlineTab.test.jsx b/src/course-home/outline-tab/OutlineTab.test.jsx index f36ac523..64e2c8f6 100644 --- a/src/course-home/outline-tab/OutlineTab.test.jsx +++ b/src/course-home/outline-tab/OutlineTab.test.jsx @@ -154,6 +154,21 @@ describe('Outline Tab', () => { const sequenceLink = screen.getByText('Title of Sequence'); expect(sequenceLink.getAttribute('href')).toContain(`/course/${courseId}`); }); + + it('set event property fromEmail true in case of from_email query param', async () => { + await fetchAndRender('http://localhost/?from_email=true'); + + const startCourseButton = screen.getByRole('link', { name: messages.start.defaultMessage }); + fireEvent.click(startCourseButton); + + expect(sendTrackingLogEvent).toHaveBeenCalledWith('edx.course.home.resume_course.clicked', { + org_key: 'edX', + courserun_key: courseId, + event_type: 'start', + from_email: true, + url: `${getConfig().LMS_BASE_URL}/courses/${courseId}/jump_to/block-v1:edX+Test+Block@12345abcde`, + }); + }); }); describe('Suggested schedule alerts', () => { diff --git a/src/course-home/outline-tab/widgets/StartOrResumeCourseCard.jsx b/src/course-home/outline-tab/widgets/StartOrResumeCourseCard.jsx index a668cff4..1eef4192 100644 --- a/src/course-home/outline-tab/widgets/StartOrResumeCourseCard.jsx +++ b/src/course-home/outline-tab/widgets/StartOrResumeCourseCard.jsx @@ -1,4 +1,6 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; +import { useLocation } from 'react-router-dom'; +import { history } from '@edx/frontend-platform'; import { Button, Card } from '@edx/paragon'; import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; @@ -16,6 +18,9 @@ function StartOrResumeCourseCard({ intl }) { org, } = useModel('courseHomeMeta', courseId); + const [fromEmail, setFromEmail] = useState(false); + const location = useLocation(); + const eventProperties = { org_key: org, courserun_key: courseId, @@ -37,9 +42,25 @@ function StartOrResumeCourseCard({ intl }) { ...eventProperties, event_type: hasVisitedCourse ? 'resume' : 'start', url: resumeCourseUrl, + from_email: fromEmail, }); }; + useEffect(() => { + const currentParams = new URLSearchParams(location.search); + const fromEmailQueryParam = Boolean(currentParams.get('from_email')); + if (fromEmailQueryParam) { + setFromEmail(true); + + // Deleting the from_email query param as it only needs to be set once + // whenever passed in query params. + currentParams.delete('from_email'); + history.replace({ + search: currentParams.toString(), + }); + } + }, [location.search]); + return (