Skip to content

Commit 85a0f72

Browse files
committed
feat: onboarding component recommendations on authn
1 parent 3272101 commit 85a0f72

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

src/data/constants.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ export const VALID_EMAIL_REGEX = '(^[-!#$%&\'*+/=?^_`{}|~0-9A-Z]+(\\.[-!#$%&\'*+
3535

3636
// Query string parameters that can be passed to LMS to manage
3737
// things like auto-enrollment upon login and registration.
38-
export const AUTH_PARAMS = ['course_id', 'enrollment_action', 'course_mode', 'email_opt_in', 'purchase_workflow', 'next', 'register_for_free', 'track', 'is_account_recovery', 'variant', 'host', 'cta'];
38+
export const AUTH_PARAMS = ['course_id', 'enrollment_action', 'course_mode', 'country', 'email_opt_in', 'purchase_workflow', 'next', 'register_for_free', 'track', 'is_account_recovery', 'variant', 'host', 'cta', 'levelOfEducation', 'finishAuthUrl'];
3939
export const REDIRECT = 'redirect';
4040
export const APP_NAME = 'authn_mfe';

src/recommendations/RecommendationsPage.jsx

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import React, { useEffect } from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import { useSelector } from 'react-redux';
33

44
import { getConfig } from '@edx/frontend-platform';
5+
import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
56
import { useIntl } from '@edx/frontend-platform/i18n';
67
import {
78
breakpoints,
@@ -21,18 +22,35 @@ import RecommendationsLargeLayout from './RecommendationsPageLayouts/LargeLayout
2122
import RecommendationsSmallLayout from './RecommendationsPageLayouts/SmallLayout';
2223
import { LINK_TIMEOUT, trackRecommendationsViewed, trackSkipButtonClicked } from './track';
2324
import { DEFAULT_REDIRECT_URL } from '../data/constants';
25+
import { getAllPossibleQueryParams } from '../data/utils';
2426

2527
const RecommendationsPage = () => {
2628
const { formatMessage } = useIntl();
29+
const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);
2730
const isExtraSmall = useMediaQuery({ maxWidth: breakpoints.extraSmall.maxWidth - 1 });
2831
const location = useLocation();
32+
const queryParams = getAllPossibleQueryParams();
33+
// flag to show recommendations for onboarding component experience
34+
const showRecommendations = !!queryParams?.levelOfEducation || (!!queryParams?.finalRedirectUrl && !!queryParams?.country);
35+
const backendCountryCode = useSelector((state) => state.register.backendCountryCode);
2936

30-
const registrationResponse = location.state?.registrationResult;
31-
const DASHBOARD_URL = getConfig().LMS_BASE_URL.concat(DEFAULT_REDIRECT_URL);
32-
const educationLevel = EDUCATION_LEVEL_MAPPING[location.state?.educationLevel];
33-
const userId = location.state?.userId;
37+
const [redirectUrl, setRedirectUrl] = useState(location.state?.registrationResult?.redirectUrl);
38+
const [educationLevel, setEducationLevel] = useState(EDUCATION_LEVEL_MAPPING[location.state?.educationLevel]);
39+
const [userId, setUserId] = useState(location.state?.userId || -1);
40+
const [userCountry, setUserCountry] = useState(backendCountryCode);
41+
42+
useEffect(() => {
43+
if (showRecommendations) {
44+
const authenticatedUser = getAuthenticatedUser();
45+
if (authenticatedUser) {
46+
setRedirectUrl(queryParams.finalRedirectUrl);
47+
setEducationLevel(EDUCATION_LEVEL_MAPPING[queryParams.levelOfEducation]);
48+
setUserCountry(queryParams.country);
49+
setUserId(authenticatedUser?.userId);
50+
}
51+
}
52+
}, [showRecommendations, queryParams]);
3453

35-
const userCountry = useSelector((state) => state.register.backendCountryCode);
3654
const {
3755
recommendations: algoliaRecommendations,
3856
isLoading,
@@ -46,8 +64,8 @@ const RecommendationsPage = () => {
4664

4765
const handleSkipRecommendationPage = () => {
4866
window.history.replaceState(location.state, null, '');
49-
if (registrationResponse) {
50-
window.location.href = registrationResponse.redirectUrl;
67+
if (redirectUrl) {
68+
window.location.href = redirectUrl;
5169
} else {
5270
window.location.href = DASHBOARD_URL;
5371
}
@@ -59,7 +77,7 @@ const RecommendationsPage = () => {
5977
setTimeout(() => { handleSkipRecommendationPage(); }, LINK_TIMEOUT);
6078
};
6179

62-
if (!registrationResponse) {
80+
if (!redirectUrl && !showRecommendations) {
6381
window.location.href = DASHBOARD_URL;
6482
return null;
6583
}

0 commit comments

Comments
 (0)