Skip to content

Commit 2d38577

Browse files
committed
use navigationMenuOpen instead of sidebarCollapsed
1 parent ef5d362 commit 2d38577

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
@@ -124,7 +124,7 @@ The layout sidebar can be hidden if needed with the `hideNavigation` prop.
124124

125125
### Toggle sidebar
126126

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

129129
{{"demo": "DashboardLayoutSidebarCollapsedProp.js", "height": 400, "iframe": true}}
130130

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
"defaultSidebarCollapsed": { "type": { "name": "bool" }, "default": "false" },
99
"disableCollapsibleSidebar": { "type": { "name": "bool" }, "default": "false" },
1010
"hideNavigation": { "type": { "name": "bool" }, "default": "false" },
11-
"onToggleSidebar": { "type": { "name": "func" } },
12-
"sidebarCollapsed": { "type": { "name": "bool" }, "default": "false" },
11+
"navigationMenuOpen": { "type": { "name": "bool" }, "default": "false" },
12+
"onNavigationMenuClose": { "type": { "name": "func" } },
13+
"onNavigationMenuOpen": { "type": { "name": "func" } },
1314
"sidebarExpandedWidth": {
1415
"type": { "name": "union", "description": "number<br>&#124;&nbsp;string" },
1516
"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
@@ -97,11 +97,15 @@ export interface DashboardLayoutProps {
9797
/** A prop that controls the collapsed state of the sidebar.
9898
* @default false
9999
*/
100-
sidebarCollapsed?: boolean;
100+
navigationMenuOpen?: boolean;
101101
/**
102-
* Callback function to be executed on sidebarCollased state change
102+
* Callback function to be executed on navigation menu state changes to open
103103
*/
104-
onToggleSidebar?: (sidebarCollapsed: boolean) => void;
104+
onNavigationMenuOpen?: () => void;
105+
/**
106+
* Callback function to be executed on navigation menu state changes to closed
107+
*/
108+
onNavigationMenuClose?: () => void;
105109
/**
106110
* Width of the sidebar when expanded.
107111
* @default 320
@@ -144,8 +148,9 @@ function DashboardLayout(props: DashboardLayoutProps) {
144148
slots,
145149
slotProps,
146150
sx,
147-
sidebarCollapsed,
148-
onToggleSidebar,
151+
navigationMenuOpen,
152+
onNavigationMenuOpen,
153+
onNavigationMenuClose,
149154
} = props;
150155

151156
const theme = useTheme();
@@ -193,13 +198,15 @@ function DashboardLayout(props: DashboardLayoutProps) {
193198
React.useState(isNavigationExpanded);
194199

195200
React.useEffect(() => {
196-
if (typeof sidebarCollapsed === 'boolean') {
197-
setIsNavigationExpanded(!sidebarCollapsed);
198-
if (onToggleSidebar) {
199-
onToggleSidebar(sidebarCollapsed);
201+
if (typeof navigationMenuOpen === 'boolean') {
202+
setIsNavigationExpanded(navigationMenuOpen);
203+
if (navigationMenuOpen) {
204+
onNavigationMenuOpen?.();
205+
} else {
206+
onNavigationMenuClose?.();
200207
}
201208
}
202-
}, [sidebarCollapsed, setIsNavigationExpanded, onToggleSidebar]);
209+
}, [navigationMenuOpen, setIsNavigationExpanded, onNavigationMenuOpen, onNavigationMenuClose]);
203210

204211
React.useEffect(() => {
205212
if (isNavigationExpanded) {
@@ -513,15 +520,19 @@ DashboardLayout.propTypes /* remove-proptypes */ = {
513520
* @default false
514521
*/
515522
hideNavigation: PropTypes.bool,
516-
/**
517-
* Callback function to be executed on sidebarCollased state change
518-
*/
519-
onToggleSidebar: PropTypes.func,
520523
/**
521524
* A prop that controls the collapsed state of the sidebar.
522525
* @default false
523526
*/
524-
sidebarCollapsed: PropTypes.bool,
527+
navigationMenuOpen: PropTypes.bool,
528+
/**
529+
* Callback function to be executed on navigation menu state changes to closed
530+
*/
531+
onNavigationMenuClose: PropTypes.func,
532+
/**
533+
* Callback function to be executed on navigation menu state changes to open
534+
*/
535+
onNavigationMenuOpen: PropTypes.func,
525536
/**
526537
* Width of the sidebar when expanded.
527538
* @default 320

0 commit comments

Comments
 (0)