@@ -3,6 +3,7 @@ import React, {
3
3
ElementType ,
4
4
forwardRef ,
5
5
HTMLAttributes ,
6
+ ReactElement ,
6
7
ReactNode ,
7
8
useState ,
8
9
} from 'react'
@@ -31,31 +32,34 @@ interface ContextProps {
31
32
32
33
export const CNavContext = createContext ( { } as ContextProps )
33
34
34
- const recursiveClone = ( children : ReactNode , id ?: string ) : ReactNode => {
35
+ const recursiveClone = ( children : ReactNode , id ?: string , updateId ?: boolean ) : ReactNode => {
35
36
return React . Children . map ( children , ( child : ReactNode , index : number ) => {
36
- const _id = id ? `${ id } .${ index } ` : `${ index } `
37
-
38
37
if ( ! React . isValidElement ( child ) ) {
39
38
return child
40
39
}
41
40
41
+ const _id = id ? ( updateId ? `${ id } .${ index } ` : `${ id } ` ) : `${ index } `
42
+
42
43
if ( child . props && child . props . children ) {
43
44
child = React . cloneElement ( child , {
44
45
// @ts -expect-error the `displayName` exist in each component. TODO: resolve
45
46
...( ( child . type . displayName === 'CNavGroup' || child . type . displayName === 'CNavLink' ) && {
46
47
idx : _id ,
47
- test : _id ,
48
48
} ) ,
49
49
// @ts -expect-error the `children` exist in each component. TODO: resolve
50
- children : recursiveClone ( child . props . children , _id ) ,
50
+ children : recursiveClone (
51
+ child . props . children ,
52
+ _id ,
53
+ // @ts -expect-error the `displayName` exist in each component. TODO: resolve
54
+ child . type . displayName === 'CNavItem' ? false : true ,
55
+ ) ,
51
56
} )
52
57
}
53
58
54
- return React . cloneElement ( child as React . ReactElement < any > , {
59
+ return React . cloneElement ( child as ReactElement < any > , {
55
60
// @ts -expect-error the `displayName` exist in each component. TODO: resolve
56
61
...( ( child . type . displayName === 'CNavGroup' || child . type . displayName === 'CNavLink' ) && {
57
62
idx : _id ,
58
- test : _id ,
59
63
} ) ,
60
64
} )
61
65
} )
0 commit comments