@@ -90,6 +90,7 @@ const TopNav = ({
90
90
const [ activeLevel1Id , setActiveLevel1Id ] = useState ( )
91
91
const [ activeLevel2Id , setActiveLevel2Id ] = useState ( )
92
92
const [ activeLevel3Id , setActiveLevel3Id ] = useState ( )
93
+ const [ level3Exact , setLevel3Exact ] = useState ( false )
93
94
const [ isResize , setResize ] = useState ( false )
94
95
const [ showLevel3 , setShowLevel3 ] = useState ( false )
95
96
const [ forceHideLevel3 , setforceHideLevel3 ] = useState ( false )
@@ -249,46 +250,6 @@ const TopNav = ({
249
250
}
250
251
} , [ activeLevel1Id , activeLevel2Id , path ] )
251
252
252
- const isLevel3ExactPath = ( menuWithId_ , path_ ) => {
253
- let found = { exact : false }
254
-
255
- // If haven't a path just return
256
- if ( ! path_ ) return found
257
-
258
- menuWithId_ . forEach ( level1 => {
259
- level1 . subMenu && level1 . subMenu . forEach ( level2 => {
260
- level2 . subMenu && level2 . subMenu . forEach ( level3 => {
261
- if ( level3 . href && path_ . indexOf ( level3 . href ) > - 1 ) {
262
- if ( found . exact ) {
263
- if ( level3 . href === path_ ) found = { exact : true }
264
- } else {
265
- found = { exact : path_ . endsWith ( level3 . href ) }
266
- }
267
- }
268
- } )
269
- } )
270
- level1 . secondaryMenu && level1 . secondaryMenu . forEach ( level3 => {
271
- if ( level3 . href ) {
272
- // Check if path have parameters
273
- const href = level3 . href . indexOf ( '?' ) > - 1 ? level3 . href . split ( '?' ) [ 0 ] : level3 . href
274
- if ( path_ . indexOf ( href ) > - 1 ) found = { exact : path_ . endsWith ( href ) }
275
- }
276
- } )
277
- } )
278
- return found
279
- }
280
-
281
- useEffect ( ( ) => {
282
- if ( ! path || ! menuWithId ) return
283
- // check if current path is an exact matches with level3 href
284
- const { exact } = isLevel3ExactPath ( menuWithId , path )
285
- if ( ! exact ) {
286
- setActiveLevel3Id ( undefined )
287
- setIconSelectPos ( undefined )
288
- setShowIconSelect ( false )
289
- }
290
- } , [ activeLevel3Id ] )
291
-
292
253
const createHandleClickLevel3 = menuId => ( ) => {
293
254
setActiveLevel3Id ( menuId )
294
255
setIconSelectPos ( menuId )
@@ -445,20 +406,19 @@ const TopNav = ({
445
406
if ( level2 . href && path_ . indexOf ( level2 . href ) > - 1 ) found = { m1 : level1 . id , m2 : level2 . id }
446
407
level2 . subMenu && level2 . subMenu . forEach ( level3 => {
447
408
if ( level3 . href && path_ . indexOf ( level3 . href ) > - 1 ) {
448
- if ( found . m3 ) {
449
- if ( level3 . href === path_ ) found = { m1 : level1 . id , m2 : level2 . id , m3 : level3 . id }
450
- } else {
409
+ if ( level3 . href && level3 . href === path_ ) {
410
+ found = { m1 : level1 . id , m2 : level2 . id , m3 : level3 . id }
411
+ setLevel3Exact ( true )
412
+ } else if ( ! found . m3 ) {
451
413
found = { m1 : level1 . id , m2 : level2 . id , m3 : level3 . id }
452
414
}
453
415
if ( ! activeLevel3Id && level3 . collapsed ) setforceHideLevel3 ( true )
454
416
}
455
417
} )
456
418
} )
457
419
level1 . secondaryMenu && level1 . secondaryMenu . forEach ( level3 => {
458
- if ( level3 . href ) {
459
- // Check if path have parameters
460
- const href = level3 . href . indexOf ( '?' ) > - 1 ? level3 . href . split ( '?' ) [ 0 ] : level3 . href
461
- if ( path_ . indexOf ( href ) > - 1 ) found = { m1 : level1 . id , m3 : level3 . id }
420
+ if ( level3 . href && level3 . href === path_ ) {
421
+ found = { m1 : level1 . id , m3 : level3 . id }
462
422
}
463
423
} )
464
424
} )
@@ -578,6 +538,7 @@ const TopNav = ({
578
538
isResize = { isResize }
579
539
isSecondaryMenu = { ! activeMenu2 }
580
540
activeChildId = { activeLevel3Id }
541
+ exact = { level3Exact }
581
542
showIndicator = { showIconSelect }
582
543
indicatorX = { iconSelectX }
583
544
createHandleClickItem = { createHandleClickLevel3 }
0 commit comments