1
- import React , { useEffect } from 'react' ;
1
+ import React , { useEffect , useState } from 'react' ;
2
2
import { useSelector } from 'react-redux' ;
3
3
4
4
import { getConfig } from '@edx/frontend-platform' ;
5
+ import { getAuthenticatedUser } from '@edx/frontend-platform/auth' ;
5
6
import { useIntl } from '@edx/frontend-platform/i18n' ;
6
7
import {
7
8
breakpoints ,
@@ -21,18 +22,35 @@ import RecommendationsLargeLayout from './RecommendationsPageLayouts/LargeLayout
21
22
import RecommendationsSmallLayout from './RecommendationsPageLayouts/SmallLayout' ;
22
23
import { LINK_TIMEOUT , trackRecommendationsViewed , trackSkipButtonClicked } from './track' ;
23
24
import { DEFAULT_REDIRECT_URL } from '../data/constants' ;
25
+ import { getAllPossibleQueryParams } from '../data/utils' ;
24
26
25
27
const RecommendationsPage = ( ) => {
26
28
const { formatMessage } = useIntl ( ) ;
29
+ const DASHBOARD_URL = getConfig ( ) . LMS_BASE_URL . concat ( DEFAULT_REDIRECT_URL ) ;
27
30
const isExtraSmall = useMediaQuery ( { maxWidth : breakpoints . extraSmall . maxWidth - 1 } ) ;
28
31
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 ) ;
29
36
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 ] ) ;
34
53
35
- const userCountry = useSelector ( ( state ) => state . register . backendCountryCode ) ;
36
54
const {
37
55
recommendations : algoliaRecommendations ,
38
56
isLoading,
@@ -46,8 +64,8 @@ const RecommendationsPage = () => {
46
64
47
65
const handleSkipRecommendationPage = ( ) => {
48
66
window . history . replaceState ( location . state , null , '' ) ;
49
- if ( registrationResponse ) {
50
- window . location . href = registrationResponse . redirectUrl ;
67
+ if ( redirectUrl ) {
68
+ window . location . href = redirectUrl ;
51
69
} else {
52
70
window . location . href = DASHBOARD_URL ;
53
71
}
@@ -59,7 +77,7 @@ const RecommendationsPage = () => {
59
77
setTimeout ( ( ) => { handleSkipRecommendationPage ( ) ; } , LINK_TIMEOUT ) ;
60
78
} ;
61
79
62
- if ( ! registrationResponse ) {
80
+ if ( ! redirectUrl && ! showRecommendations ) {
63
81
window . location . href = DASHBOARD_URL ;
64
82
return null ;
65
83
}
0 commit comments