Skip to content

Commit f7f3397

Browse files
committed
use navigationMenuOpen instead of sidebarCollapsed
1 parent 9aaee1f commit f7f3397

File tree

8 files changed

+66
-44
lines changed

8 files changed

+66
-44
lines changed

docs/data/toolpad/core/components/dashboard-layout/DashboardLayoutSidebarCollapsedProp.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function DashboardLayoutSidebarCollapsedProp(props) {
7070
const { window } = props;
7171

7272
const [pathname, setPathname] = React.useState('/dashboard');
73-
const [sidebarCollapsed, toggleSidebar] = React.useState(true);
73+
const [navigationMenuOpen, toggleSidebar] = React.useState(true);
7474
const router = React.useMemo(() => {
7575
return {
7676
pathname,
@@ -89,10 +89,10 @@ function DashboardLayoutSidebarCollapsedProp(props) {
8989
theme={demoTheme}
9090
window={demoWindow}
9191
>
92-
<DashboardLayout sidebarCollapsed={sidebarCollapsed}>
92+
<DashboardLayout navigationMenuOpen={navigationMenuOpen}>
9393
<DemoPageContent
9494
pathname={pathname}
95-
toggleSidebar={() => toggleSidebar(!sidebarCollapsed)}
95+
toggleSidebar={() => toggleSidebar(!navigationMenuOpen)}
9696
/>
9797
</DashboardLayout>
9898
</AppProvider>

docs/data/toolpad/core/components/dashboard-layout/DashboardLayoutSidebarCollapsedProp.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export default function DashboardLayoutSidebarCollapsedProp(props: DemoProps) {
8282
const { window } = props;
8383

8484
const [pathname, setPathname] = React.useState('/dashboard');
85-
const [sidebarCollapsed, toggleSidebar] = React.useState<boolean>(true);
85+
const [navigationMenuOpen, toggleSidebar] = React.useState<boolean>(true);
8686
const router = React.useMemo<Router>(() => {
8787
return {
8888
pathname,
@@ -101,10 +101,10 @@ export default function DashboardLayoutSidebarCollapsedProp(props: DemoProps) {
101101
theme={demoTheme}
102102
window={demoWindow}
103103
>
104-
<DashboardLayout sidebarCollapsed={sidebarCollapsed}>
104+
<DashboardLayout navigationMenuOpen={navigationMenuOpen}>
105105
<DemoPageContent
106106
pathname={pathname}
107-
toggleSidebar={() => toggleSidebar(!sidebarCollapsed)}
107+
toggleSidebar={() => toggleSidebar(!navigationMenuOpen)}
108108
/>
109109
</DashboardLayout>
110110
</AppProvider>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
<DashboardLayout sidebarCollapsed={sidebarCollapsed}>
1+
<DashboardLayout navigationMenuOpen={navigationMenuOpen}>
22
<DemoPageContent
33
pathname={pathname}
4-
toggleSidebar={() => toggleSidebar(!sidebarCollapsed)}
4+
toggleSidebar={() => toggleSidebar(!navigationMenuOpen)}
55
/>
66
</DashboardLayout>

docs/data/toolpad/core/components/dashboard-layout/dashboard-layout.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ The layout sidebar can be hidden if needed with the `hideNavigation` prop.
128128

129129
### Toggle sidebar
130130

131-
The sidebar can be toggled if needed with the `sidebarCollapsed` prop.
131+
The sidebar can be toggled if needed with the `navigationMenuOpen` prop.
132132

133133
{{"demo": "DashboardLayoutSidebarCollapsedProp.js", "height": 400, "iframe": true}}
134134

docs/pages/toolpad/core/api/dashboard-layout.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
"defaultSidebarCollapsed": { "type": { "name": "bool" }, "default": "false" },
1212
"disableCollapsibleSidebar": { "type": { "name": "bool" }, "default": "false" },
1313
"hideNavigation": { "type": { "name": "bool" }, "default": "false" },
14-
"onToggleSidebar": { "type": { "name": "func" } },
15-
"sidebarCollapsed": { "type": { "name": "bool" }, "default": "false" },
14+
"navigationMenuOpen": { "type": { "name": "bool" }, "default": "false" },
15+
"onNavigationMenuClose": { "type": { "name": "func" } },
16+
"onNavigationMenuOpen": { "type": { "name": "func" } },
1617
"sidebarExpandedWidth": {
1718
"type": { "name": "union", "description": "number<br>&#124;&nbsp;string" },
1819
"default": "320"

docs/translations/api-docs/dashboard-layout/dashboard-layout.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@
1212
"hideNavigation": {
1313
"description": "Whether the navigation bar and menu icon should be hidden"
1414
},
15-
"onToggleSidebar": {
16-
"description": "Callback function to be executed on sidebarCollased state change"
17-
},
18-
"sidebarCollapsed": {
15+
"navigationMenuOpen": {
1916
"description": "A prop that controls the collapsed state of the sidebar."
2017
},
18+
"onNavigationMenuClose": {
19+
"description": "Callback function to be executed on navigation menu state changes to closed"
20+
},
21+
"onNavigationMenuOpen": {
22+
"description": "Callback function to be executed on navigation menu state changes to open"
23+
},
2124
"sidebarExpandedWidth": { "description": "Width of the sidebar when expanded." },
2225
"slotProps": { "description": "The props used for each slot inside." },
2326
"slots": { "description": "The components used for each slot inside." },

packages/toolpad-core/src/DashboardLayout/DashboardLayout.test.tsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -411,9 +411,9 @@ describe('DashboardLayout', () => {
411411
expect(screen.getByText('Hello world')).toBeTruthy();
412412
});
413413

414-
test('renders the sidebar in collapsed state when sidebarCollapsed is true', () => {
414+
test('renders the sidebar in collapsed state when navigationMenuOpen is false', () => {
415415
render(
416-
<DashboardLayout sidebarCollapsed>
416+
<DashboardLayout navigationMenuOpen={false}>
417417
<div>Test Content</div>
418418
</DashboardLayout>,
419419
);
@@ -423,42 +423,49 @@ describe('DashboardLayout', () => {
423423
expect(screen.queryByLabelText('Collapse menu')).toBeNull();
424424
});
425425

426-
test('renders the sidebar in expanded state when sidebarCollapsed is false', () => {
426+
test('renders the sidebar in expanded state when navigationMenuOpen is true', () => {
427427
render(
428-
<DashboardLayout sidebarCollapsed={false}>
428+
<DashboardLayout navigationMenuOpen>
429429
<div>Test Content</div>
430430
</DashboardLayout>,
431431
);
432432

433433
expect(screen.getAllByLabelText('Collapse menu')).toBeTruthy();
434434
});
435435

436-
test('calls onToggleSidebar callback when sidebarCollapsed state changes', () => {
436+
test('calls onNavigationMenuOpen callback when navigationMenuOpen state changes to open', () => {
437437
const mockToggleSidebar = vi.fn();
438438
const { rerender } = render(
439-
<DashboardLayout sidebarCollapsed={false} onToggleSidebar={mockToggleSidebar}>
439+
<DashboardLayout navigationMenuOpen={false} onNavigationMenuClose={mockToggleSidebar}>
440440
<div>Test Content</div>
441441
</DashboardLayout>,
442442
);
443443

444-
// Trigger sidebar toggle (simulate a collapse action)
444+
// Trigger sidebar open action
445445
rerender(
446-
<DashboardLayout sidebarCollapsed onToggleSidebar={mockToggleSidebar}>
446+
<DashboardLayout navigationMenuOpen onNavigationMenuClose={mockToggleSidebar}>
447447
<div>Test Content</div>
448448
</DashboardLayout>,
449449
);
450450

451-
// Assert the callback was called with the new state
452-
expect(mockToggleSidebar).toHaveBeenCalledWith(true);
451+
expect(mockToggleSidebar).toHaveBeenCalledOnce();
452+
});
453+
454+
test('calls onNavigationMenuClose callback when navigationMenuOpen state changes to close', () => {
455+
const mockToggleSidebar = vi.fn();
456+
const { rerender } = render(
457+
<DashboardLayout navigationMenuOpen onNavigationMenuClose={mockToggleSidebar}>
458+
<div>Test Content</div>
459+
</DashboardLayout>,
460+
);
453461

454-
// Trigger expand action
462+
// Trigger sidebar close action
455463
rerender(
456-
<DashboardLayout sidebarCollapsed={false} onToggleSidebar={mockToggleSidebar}>
464+
<DashboardLayout navigationMenuOpen={false} onNavigationMenuClose={mockToggleSidebar}>
457465
<div>Test Content</div>
458466
</DashboardLayout>,
459467
);
460468

461-
// Assert the callback was called again with the updated state
462-
expect(mockToggleSidebar).toHaveBeenCalledWith(false);
469+
expect(mockToggleSidebar).toHaveBeenCalledOnce();
463470
});
464471
});

packages/toolpad-core/src/DashboardLayout/DashboardLayout.tsx

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,15 @@ export interface DashboardLayoutProps {
9292
/** A prop that controls the collapsed state of the sidebar.
9393
* @default false
9494
*/
95-
sidebarCollapsed?: boolean;
95+
navigationMenuOpen?: boolean;
9696
/**
97-
* Callback function to be executed on sidebarCollased state change
97+
* Callback function to be executed on navigation menu state changes to open
9898
*/
99-
onToggleSidebar?: (sidebarCollapsed: boolean) => void;
99+
onNavigationMenuOpen?: () => void;
100+
/**
101+
* Callback function to be executed on navigation menu state changes to closed
102+
*/
103+
onNavigationMenuClose?: () => void;
100104
/**
101105
* Width of the sidebar when expanded.
102106
* @default 320
@@ -139,8 +143,9 @@ function DashboardLayout(props: DashboardLayoutProps) {
139143
slots,
140144
slotProps,
141145
sx,
142-
sidebarCollapsed,
143-
onToggleSidebar,
146+
navigationMenuOpen,
147+
onNavigationMenuOpen,
148+
onNavigationMenuClose,
144149
} = props;
145150

146151
const theme = useTheme();
@@ -185,13 +190,15 @@ function DashboardLayout(props: DashboardLayoutProps) {
185190
React.useState(isNavigationExpanded);
186191

187192
React.useEffect(() => {
188-
if (typeof sidebarCollapsed === 'boolean') {
189-
setIsNavigationExpanded(!sidebarCollapsed);
190-
if (onToggleSidebar) {
191-
onToggleSidebar(sidebarCollapsed);
193+
if (typeof navigationMenuOpen === 'boolean') {
194+
setIsNavigationExpanded(navigationMenuOpen);
195+
if (navigationMenuOpen) {
196+
onNavigationMenuOpen?.();
197+
} else {
198+
onNavigationMenuClose?.();
192199
}
193200
}
194-
}, [sidebarCollapsed, setIsNavigationExpanded, onToggleSidebar]);
201+
}, [navigationMenuOpen, setIsNavigationExpanded, onNavigationMenuOpen, onNavigationMenuClose]);
195202

196203
React.useEffect(() => {
197204
if (isNavigationExpanded) {
@@ -502,15 +509,19 @@ DashboardLayout.propTypes /* remove-proptypes */ = {
502509
* @default false
503510
*/
504511
hideNavigation: PropTypes.bool,
505-
/**
506-
* Callback function to be executed on sidebarCollased state change
507-
*/
508-
onToggleSidebar: PropTypes.func,
509512
/**
510513
* A prop that controls the collapsed state of the sidebar.
511514
* @default false
512515
*/
513-
sidebarCollapsed: PropTypes.bool,
516+
navigationMenuOpen: PropTypes.bool,
517+
/**
518+
* Callback function to be executed on navigation menu state changes to closed
519+
*/
520+
onNavigationMenuClose: PropTypes.func,
521+
/**
522+
* Callback function to be executed on navigation menu state changes to open
523+
*/
524+
onNavigationMenuOpen: PropTypes.func,
514525
/**
515526
* Width of the sidebar when expanded.
516527
* @default 320

0 commit comments

Comments
 (0)