Dashboard Layout
The dashboard layout component provides a customizable out-of-the-box layout for a typical dashboard page.
The DashboardLayout
component is a quick, easy way to provide a standard full-screen layout with a header and sidebar to any dashboard page, as well as ready-to-use and easy to customize navigation and branding.
Many features of this component are configurable through the AppProvider component that must wrap it to provide the necessary context.
Demo
A DashboardLayout
brings in a header and sidebar with navigation, as well as a scrollable area for page content.
If application themes are defined for both light and dark mode, a theme switcher in the header allows for easy switching between the two modes.
Branding
Some elements of the DashboardLayout
can be configured to match your personalized brand.
This can be done via the branding
prop in the AppProvider, which allows for setting a custom logo
image or title
text in the page header.
Navigation
The navigation
prop in the AppProvider allows for setting any type of navigation structure in the DashboardLayout
sidebar by including different navigation elements as building blocks in any order.
The flexibility in composing and ordering these different elements allows for a great variety of navigation structures to fit your use case.
Navigation links
Navigation links can be placed in the sidebar as items with the format:
{ segment: 'home', title: 'Home', icon: <DescriptionIcon /> }
Navigation headings
Navigation headings can be placed in the sidebar as items with the format:
{ kind: 'header', title: 'Animals' }
Navigation dividers
Dividers can can be placed between items in the sidebar as items with the format:
{
kind: 'divider';
}
Nested navigation
Nested navigation structures can be placed in the sidebar as items with the format:
{ title: 'Movies', icon: <FolderIcon />, children: [ ... ] }
Navigation actions
Navigation links have an optional action
prop to render any content on the right-side of the respective list item, such as badges with numbers, or buttons to toggle a popover menu.
Navigation pattern matching
Navigation links have an optional pattern
prop to define a pattern to be matched for the item to be marked as selected.
This feature is built on top of the path-to-regexp library.
Some examples:
- Constant path:
orders
- Dynamic segment:
orders/:segment
- Optional segment:
orders{/:segment}?
- One or more segments:
orders{/:segment}+
- Zero or more segments:
orders{/:segment}*
Disable collapsible sidebar
The layout sidebar is collapsible to a mini-drawer (with icons only) in desktop and tablet viewports. This behavior can be disabled with the disableCollapsibleSidebar
prop.
Start with mini-drawer on desktop
The layout sidebar can default to a collapsed mini-drawer on desktop viewport sizes with the defaultSidebarCollapsed
prop.
Hide navigation
The layout sidebar can be hidden if needed with the hideNavigation
prop.
Full-size content
The layout content can take up the full available area with styles such as flex: 1
or height: 100%
.
Account
The DashboardLayout
comes integrated with the <Account />
component. It renders as an account management menu when a user is signed in – a session
object is present – and a button when not.
Customization
Slots
Certain areas of the layout can be replaced with custom components by using the slots
and slotProps
props.
Some possibly useful slots:
toolbarActions
: allows you to add new items to the toolbar in the header, such as a search bar or button. The defaultThemeSwitcher
component can be imported and used if you wish to do so, as shown in the example below.sidebarFooter
: allows you to add footer content in the sidebar.
Examples
User account in layout sidebar
Settings menu with custom theme switcher
The useColorScheme
hook can be used to create a custom theme switcher.
API
See the documentation below for a complete reference to all of the props and classes available to the components mentioned here.