diff --git a/packages/side-nav/src/SideNavGroup/SideNavGroup.tsx b/packages/side-nav/src/SideNavGroup/SideNavGroup.tsx index 8dcc827482..5b0bcf78f9 100644 --- a/packages/side-nav/src/SideNavGroup/SideNavGroup.tsx +++ b/packages/side-nav/src/SideNavGroup/SideNavGroup.tsx @@ -49,6 +49,11 @@ function SideNavGroup({ const renderedChildren = useMemo(() => { const checkForNestedGroups = (children: React.ReactNode) => { return React.Children.map(children, child => { + if ((child as React.ReactElement)?.props?.children) { + checkForNestedGroups((child as React.ReactElement).props.children); + return child; + } + if ( isComponentType(child, 'SideNavGroup') || isComponentType(child, 'SideNavItem') @@ -56,12 +61,9 @@ function SideNavGroup({ return React.cloneElement(child, { indentLevel: indentLevel + 1, }); - } else if ((child as React.ReactElement)?.props?.children) { - checkForNestedGroups((child as React.ReactElement).props.children); - return child; - } else { - return child; } + + return child; }); }; @@ -96,7 +98,7 @@ function SideNavGroup({ // render the provided glyph with appropriate aria roles const accessibleGlyph = - glyph && isComponentGlyph(glyph) + glyph && isComponentGlyph(glyph as React.ReactElement) ? React.cloneElement(glyph, { className: glyph.props.className, role: 'presentation', diff --git a/packages/side-nav/src/SideNavGroup/SideNavGroup.types.ts b/packages/side-nav/src/SideNavGroup/SideNavGroup.types.ts index 6ed5d00c98..812b00843b 100644 --- a/packages/side-nav/src/SideNavGroup/SideNavGroup.types.ts +++ b/packages/side-nav/src/SideNavGroup/SideNavGroup.types.ts @@ -19,7 +19,7 @@ interface SideNavGroupBaseProps extends HTMLElementProps<'li'> { * * @type `` */ - glyph?: React.ReactNode; + glyph?: React.ReactElement; /** * Manually overrides automatic detection of whether a group contains an active item. diff --git a/packages/side-nav/src/SideNavItem/SideNavItem.tsx b/packages/side-nav/src/SideNavItem/SideNavItem.tsx index e322fdf904..acfd62a47e 100644 --- a/packages/side-nav/src/SideNavItem/SideNavItem.tsx +++ b/packages/side-nav/src/SideNavItem/SideNavItem.tsx @@ -84,7 +84,7 @@ const SideNavItem: ExtendableBox< }; const accessibleGlyph = - glyph && isComponentGlyph(glyph) + glyph && isComponentGlyph(glyph as React.ReactElement) ? React.cloneElement(glyph, { 'aria-hidden': true }) : null; diff --git a/packages/side-nav/src/SideNavItem/SideNavItem.types.ts b/packages/side-nav/src/SideNavItem/SideNavItem.types.ts index 25551f1f8b..1e71c8dff7 100644 --- a/packages/side-nav/src/SideNavItem/SideNavItem.types.ts +++ b/packages/side-nav/src/SideNavItem/SideNavItem.types.ts @@ -47,7 +47,7 @@ export interface SideNavItemProps { * * @type `` */ - glyph?: React.ReactNode; + glyph?: React.ReactElement; /** * Changes the indentation. Will not work if `` is a child of ``.