@@ -106,6 +106,18 @@ export const SidebarItem = ({
106106 const isParentWithActiveChild =
107107 hasChildren && hasActiveChild && ! isRouteActive && ! isActive ;
108108
109+ const opensInNewTab = useMemo (
110+ ( ) =>
111+ Boolean (
112+ item . isOpenNewTab ||
113+ ( item . linkTo &&
114+ ( item . linkTo . startsWith ( "//" ) ||
115+ item . linkTo . startsWith ( "http://" ) ||
116+ item . linkTo . startsWith ( "https://" ) ) ) ,
117+ ) ,
118+ [ item . isOpenNewTab , item . linkTo ] ,
119+ ) ;
120+
109121 const handleClick = useCallback ( ( ) => {
110122 if ( hasChildren ) {
111123 setIsExpanded ( ( prev ) => ! prev ) ;
@@ -146,37 +158,19 @@ export const SidebarItem = ({
146158 const badgeCount = ( item . useBadgeCount ?? ( ( ) => 0 ) ) ( ) ;
147159 const showBadge = badgeCount > 0 ;
148160
149- // Check if link should open in new tab (isOpenNewTab flag or absolute URL)
150- const isExternalLink =
151- item . isOpenNewTab ||
152- ( item . linkTo &&
153- ( item . linkTo . startsWith ( "//" ) ||
154- item . linkTo . startsWith ( "http://" ) ||
155- item . linkTo . startsWith ( "https://" ) ) ) ;
161+ const isLeafLink = Boolean ( item . linkTo ) && item . linkTo !== "" && ! hasChildren ;
162+ // New-tab leaf: omit custom onClick so Link/anchor default is the only navigation
163+ // (ListItemButton + component="a" + onClick races with target="_blank" otherwise).
164+ const leafLinkClicksOpenNewTab = isLeafLink && opensInNewTab ;
156165
157166 const itemContent = (
158167 < ListItemButton
159168 id = { item . id }
160- component = {
161- item . linkTo && ! hasChildren && item . linkTo !== "" && ! isExternalLink
162- ? Link
163- : isExternalLink && item . linkTo && ! hasChildren && item . linkTo !== ""
164- ? "a"
165- : "div"
166- }
167- to = {
168- item . linkTo && ! hasChildren && item . linkTo !== "" && ! isExternalLink
169- ? item . linkTo
170- : undefined
171- }
172- href = {
173- isExternalLink && item . linkTo && ! hasChildren && item . linkTo !== ""
174- ? item . linkTo
175- : undefined
176- }
177- target = { isExternalLink ? "_blank" : undefined }
178- rel = { isExternalLink ? "noopener noreferrer" : undefined }
179- onClick = { handleClick }
169+ component = { isLeafLink ? Link : "div" }
170+ to = { isLeafLink ? item . linkTo : undefined }
171+ target = { opensInNewTab ? "_blank" : undefined }
172+ rel = { opensInNewTab ? "noopener noreferrer" : undefined }
173+ onClick = { leafLinkClicksOpenNewTab ? undefined : handleClick }
180174 onMouseEnter = {
181175 ! open && hasChildren && level === 0 ? onMouseEnter : undefined
182176 }
0 commit comments