Skip to content

Commit 5531ef3

Browse files
authored
feat: SideNav improvements & fixes for X migration (#2523)
* feat: remove overflowY if L1 sidenav is collapsed * Create itchy-pans-hunt.md * fix: onLevelChange callback not firing when clicking nested nav * Create proud-squids-clean.md * chore: update
1 parent 90dabcb commit 5531ef3

File tree

6 files changed

+29
-2
lines changed

6 files changed

+29
-2
lines changed

.changeset/itchy-pans-hunt.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@razorpay/blade": patch
3+
---
4+
5+
feat: remove overflowY if L1 sidenav is collapsed

.changeset/proud-squids-clean.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@razorpay/blade": patch
3+
---
4+
5+
feat: SideNav improvements & fixes for X migration
6+
7+
1. Removed overflowY if L1 sidenav is collapsed
8+
2. Fixed onVisibleLevelChange not getting called when clicking on a nested submenu

packages/blade/src/components/SideNav/SideNav.web.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ const _SideNav = (
223223
closeMobileNav,
224224
isL1Collapsed: isMobile ? isMobileL2Open : isL1Collapsed,
225225
setIsL1Collapsed,
226+
isL1Hovered,
226227
}),
227228
// eslint-disable-next-line react-hooks/exhaustive-deps
228229
[isL1Collapsed, isMobile, isMobileL2Open, isL1Hovered],
@@ -354,6 +355,11 @@ const _SideNav = (
354355
onVisibleLevelChange?.({ visibleLevel: 2 });
355356
}, L1_EXIT_HOVER_DELAY);
356357
}
358+
// If L1 is collapsed and not hovered we want to change visible level to 2
359+
// This state/edgecase happens when user clicks on a nested nav and it collapses the L1 causing isL1Hovered to be false
360+
if (isL1Collapsed && !isL1Hovered) {
361+
onVisibleLevelChange?.({ visibleLevel: 2 });
362+
}
357363
}}
358364
>
359365
<SkipNavLink id={SKIP_NAV_ID} _hasBackground={true} />

packages/blade/src/components/SideNav/SideNavBody.web.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
import { classes } from './tokens';
22
import type { SideNavBodyProps } from './types';
3+
import { useSideNav } from './SideNavContext';
34
import BaseBox from '~components/Box/BaseBox';
45

56
const SideNavBody = ({ children }: SideNavBodyProps): React.ReactElement => {
7+
const { isL1Collapsed, isL1Hovered } = useSideNav();
8+
69
return (
7-
<BaseBox className={classes.L1_ITEM_WRAPPER} overflowY="auto" overflowX="hidden">
10+
<BaseBox
11+
className={classes.L1_ITEM_WRAPPER}
12+
overflowY={isL1Collapsed && !isL1Hovered ? 'hidden' : 'auto'}
13+
overflowX="hidden"
14+
>
815
{children}
916
</BaseBox>
1017
);

packages/blade/src/components/SideNav/docs/SideNav.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ const SideNavExample = ({
373373
{...args}
374374
isOpen={isMobileOpen}
375375
onDismiss={() => setIsMobileOpen(false)}
376-
onVisibleLevelChange={({ visibleLevel }) => console.log({ visibleLevel })}
376+
onVisibleLevelChange={({ visibleLevel }) => console.log(visibleLevel)}
377377
>
378378
<SideNavBody>
379379
{navItemsJSON.map((l1Sections) => {

packages/blade/src/components/SideNav/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ type OnLinkActiveChangeArgs = {
174174
};
175175

176176
type SideNavContextType = {
177+
isL1Hovered?: boolean;
177178
isL1Collapsed?: boolean;
178179
setIsL1Collapsed?: (isL1Collapsed: boolean) => void;
179180
l2PortalContainerRef?: React.RefObject<HTMLDivElement>;

0 commit comments

Comments
 (0)