11/* global tcUniNav */
2- import React , { useEffect , useRef } from 'react' ;
2+ import React , { useEffect , useMemo , useRef } from 'react' ;
33import PT from 'prop-types' ;
44import { connect } from 'react-redux' ;
55import { config } from 'topcoder-react-utils' ;
66import _ from 'lodash' ;
77import { getInitials , getSubPageConfiguration } from '../utils/url' ;
88
9- const headerElId = 'uninav-headerNav' ;
9+ let counter = 0 ;
10+ const headerElIdTmpl = 'uninav-headerNav' ;
1011
1112const TopcoderHeader = ( { auth } ) => {
1213 const uniNavInitialized = useRef ( false ) ;
@@ -15,6 +16,28 @@ const TopcoderHeader = ({ auth }) => {
1516 const isAuthenticated = ! ! authToken ;
1617 const authURLs = config . HEADER_AUTH_URLS ;
1718 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+ } , [ ] ) ;
1841
1942 const navigationUserInfo = {
2043 ...user ,
@@ -27,21 +50,13 @@ const TopcoderHeader = ({ auth }) => {
2750 }
2851
2952 uniNavInitialized . current = true ;
53+ counter += 1 ;
3054
3155 const regSource = window . location . pathname . split ( '/' ) [ 1 ] ;
3256 const retUrl = encodeURIComponent ( window . location . href ) ;
3357
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 ,
4560 toolName : getSubPageConfiguration ( ) . toolName ,
4661 toolRoot : getSubPageConfiguration ( ) . toolRoot ,
4762 signOut : ( ) => {
@@ -54,15 +69,15 @@ const TopcoderHeader = ({ auth }) => {
5469 window . location = `${ authURLs . location . replace ( '%S' , retUrl ) . replace ( 'member?' , '#!/member?' ) } &mode=signUp®Source=${ regSource } ` ;
5570 } ,
5671 } ) ;
57- } , [ ] ) ;
72+ } , [ navType ] ) ;
5873
5974 useEffect ( ( ) => {
60- tcUniNav ( 'update' , headerElId , {
75+ tcUniNav ( 'update' , headerElId . current , {
6176 user : isAuthenticated ? navigationUserInfo : null ,
6277 } ) ;
6378 } , [ isAuthenticated , navigationUserInfo ] ) ;
6479
65- return < div id = { headerElId } ref = { headerRef } /> ;
80+ return < div id = { headerElId . current } ref = { headerRef } /> ;
6681} ;
6782
6883TopcoderHeader . defaultProps = {
0 commit comments