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  ||  null ) ; 
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