1- import React , { useEffect } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { useSelector } from 'react-redux' ;
33
44import { getConfig } from '@edx/frontend-platform' ;
5+ import { getAuthenticatedUser } from '@edx/frontend-platform/auth' ;
56import { useIntl } from '@edx/frontend-platform/i18n' ;
67import {
78 breakpoints ,
@@ -21,18 +22,36 @@ import RecommendationsLargeLayout from './RecommendationsPageLayouts/LargeLayout
2122import RecommendationsSmallLayout from './RecommendationsPageLayouts/SmallLayout' ;
2223import { LINK_TIMEOUT , trackRecommendationsViewed , trackSkipButtonClicked } from './track' ;
2324import { DEFAULT_REDIRECT_URL } from '../data/constants' ;
25+ import { getAllPossibleQueryParams } from '../data/utils' ;
2426
2527const 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
35+ || ( ! ! queryParams ?. finalRedirectUrl && ! ! queryParams ?. country ) ;
36+ const backendCountryCode = useSelector ( ( state ) => state . register . backendCountryCode ) ;
2937
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 ;
38+ const [ redirectUrl , setRedirectUrl ] = useState ( location . state ?. registrationResult ?. redirectUrl ) ;
39+ const [ educationLevel , setEducationLevel ] = useState ( EDUCATION_LEVEL_MAPPING [ location . state ?. educationLevel ] ) ;
40+ const [ userId , setUserId ] = useState ( location . state ?. userId || - 1 ) ;
41+ const [ userCountry , setUserCountry ] = useState ( backendCountryCode ) ;
42+
43+ useEffect ( ( ) => {
44+ if ( showRecommendations ) {
45+ const authenticatedUser = getAuthenticatedUser ( ) ;
46+ if ( authenticatedUser ) {
47+ setRedirectUrl ( queryParams . finalRedirectUrl ) ;
48+ setEducationLevel ( EDUCATION_LEVEL_MAPPING [ queryParams . levelOfEducation ] ) ;
49+ setUserCountry ( queryParams . country ) ;
50+ setUserId ( authenticatedUser ?. userId ) ;
51+ }
52+ }
53+ } , [ showRecommendations , queryParams ] ) ;
3454
35- const userCountry = useSelector ( ( state ) => state . register . backendCountryCode ) ;
3655 const {
3756 recommendations : algoliaRecommendations ,
3857 isLoading,
@@ -46,8 +65,8 @@ const RecommendationsPage = () => {
4665
4766 const handleSkipRecommendationPage = ( ) => {
4867 window . history . replaceState ( location . state , null , '' ) ;
49- if ( registrationResponse ) {
50- window . location . href = registrationResponse . redirectUrl ;
68+ if ( redirectUrl ) {
69+ window . location . href = redirectUrl ;
5170 } else {
5271 window . location . href = DASHBOARD_URL ;
5372 }
@@ -59,7 +78,7 @@ const RecommendationsPage = () => {
5978 setTimeout ( ( ) => { handleSkipRecommendationPage ( ) ; } , LINK_TIMEOUT ) ;
6079 } ;
6180
62- if ( ! registrationResponse ) {
81+ if ( ! redirectUrl && ! showRecommendations ) {
6382 window . location . href = DASHBOARD_URL ;
6483 return null ;
6584 }
0 commit comments