1
1
/* global tcUniNav */
2
- import React , { useEffect , useRef } from 'react' ;
2
+ import React , { useEffect , useMemo , useRef } from 'react' ;
3
3
import PT from 'prop-types' ;
4
4
import { connect } from 'react-redux' ;
5
5
import { config } from 'topcoder-react-utils' ;
6
6
import _ from 'lodash' ;
7
7
import { getInitials , getSubPageConfiguration } from '../utils/url' ;
8
8
9
- const headerElId = 'uninav-headerNav' ;
9
+ let counter = 0 ;
10
+ const headerElIdTmpl = 'uninav-headerNav' ;
10
11
11
12
const TopcoderHeader = ( { auth } ) => {
12
13
const uniNavInitialized = useRef ( false ) ;
@@ -15,6 +16,28 @@ const TopcoderHeader = ({ auth }) => {
15
16
const isAuthenticated = ! ! authToken ;
16
17
const authURLs = config . HEADER_AUTH_URLS ;
17
18
const headerRef = useRef ( ) ;
19
+ const headerElId = useRef ( `${ headerElIdTmpl } -${ counter } ` ) ;
20
+
21
+ const navType = useMemo ( ( ) => {
22
+ let { type } = getSubPageConfiguration ( ) ;
23
+
24
+ // If url contains navTool url parameter. Overwrite settings with parameter.
25
+ const url = new URL ( window . location . href ) ;
26
+ const urlParams = new URLSearchParams ( url . search ) ;
27
+ if ( urlParams . get ( 'navTool' ) ) {
28
+ type = urlParams . get ( 'navTool' ) ;
29
+ }
30
+
31
+ // if there's a stored nav type in session storage, retrieve it and overwrite type
32
+ const sessionNavType = sessionStorage . getItem ( 'uni-nav[navType]' ) ;
33
+ if ( sessionNavType && ( sessionNavType === 'tool' || sessionNavType === 'marketing' ) ) {
34
+ type = sessionNavType ;
35
+ }
36
+
37
+ // store nav type for current session
38
+ sessionStorage . setItem ( 'uni-nav[navType]' , type ) ;
39
+ return type ;
40
+ } , [ ] ) ;
18
41
19
42
const navigationUserInfo = {
20
43
...user ,
@@ -27,21 +50,13 @@ const TopcoderHeader = ({ auth }) => {
27
50
}
28
51
29
52
uniNavInitialized . current = true ;
53
+ counter += 1 ;
30
54
31
55
const regSource = window . location . pathname . split ( '/' ) [ 1 ] ;
32
56
const retUrl = encodeURIComponent ( window . location . href ) ;
33
57
34
- let { type } = getSubPageConfiguration ( ) ;
35
-
36
- // If url contains navTool url parameter. Overwrite settings with parameter.
37
- const url = new URL ( window . location . href ) ;
38
- const urlParams = new URLSearchParams ( url . search ) ;
39
- if ( urlParams . get ( 'navTool' ) ) {
40
- type = urlParams . get ( 'navTool' ) ;
41
- }
42
-
43
- tcUniNav ( 'init' , headerElId , {
44
- type,
58
+ tcUniNav ( 'init' , headerElId . current , {
59
+ type : navType ,
45
60
toolName : getSubPageConfiguration ( ) . toolName ,
46
61
toolRoot : getSubPageConfiguration ( ) . toolRoot ,
47
62
signOut : ( ) => {
@@ -54,15 +69,15 @@ const TopcoderHeader = ({ auth }) => {
54
69
window . location = `${ authURLs . location . replace ( '%S' , retUrl ) . replace ( 'member?' , '#!/member?' ) } &mode=signUp®Source=${ regSource } ` ;
55
70
} ,
56
71
} ) ;
57
- } , [ ] ) ;
72
+ } , [ navType ] ) ;
58
73
59
74
useEffect ( ( ) => {
60
- tcUniNav ( 'update' , headerElId , {
75
+ tcUniNav ( 'update' , headerElId . current , {
61
76
user : isAuthenticated ? navigationUserInfo : null ,
62
77
} ) ;
63
78
} , [ isAuthenticated , navigationUserInfo ] ) ;
64
79
65
- return < div id = { headerElId } ref = { headerRef } /> ;
80
+ return < div id = { headerElId . current } ref = { headerRef } /> ;
66
81
} ;
67
82
68
83
TopcoderHeader . defaultProps = {
0 commit comments