From 76332fb6f657ee046b7309f36be643f513ae09f5 Mon Sep 17 00:00:00 2001 From: fzaninotto Date: Tue, 22 Aug 2023 18:09:08 +0200 Subject: [PATCH] Add `` to facilitate custom menus --- docs/Menu.md | 130 +++++++++++++----- docs/img/menu-with-children.png | Bin 0 -> 62131 bytes examples/simple/src/posts/PostList.tsx | 2 +- packages/ra-ui-materialui/src/layout/Menu.tsx | 21 +-- .../src/layout/ResourceMenuItems.tsx | 17 +++ packages/ra-ui-materialui/src/layout/index.ts | 1 + 6 files changed, 125 insertions(+), 46 deletions(-) create mode 100644 docs/img/menu-with-children.png create mode 100644 packages/ra-ui-materialui/src/layout/ResourceMenuItems.tsx diff --git a/docs/Menu.md b/docs/Menu.md index 307e4b95e63..e77dc6773ca 100644 --- a/docs/Menu.md +++ b/docs/Menu.md @@ -11,7 +11,7 @@ This component renders a menu, with one menu item per resource by default. You c ## Usage -You can create a custom menu component using react-admin's ``, ``, and `` components: +Create a custom menu component using react-admin's `` as the root component, and a combination of ``, ``, ``, and `` as children: ```jsx // in src/MyMenu.js @@ -68,6 +68,8 @@ Additional props are passed down to the root component (the Material UI [`` without children renders one menu item per resource, in the same order as they are declared in ``, using the `` prop as menu icon. The menu target is the `list` route of the resource. If you define a `` component, react-admin adds a dashboard menu item at the top of the menu. +So the following example of `` used without children: + ```jsx import { Admin, Resource, Layout, Menu } from 'react-admin'; import BookIcon from '@mui/icons-material/Book'; @@ -89,9 +91,20 @@ const App = () => ( ); ``` +Renders the following menu: + ![standard menu with dashboard](./img/menu-with-dashboard.webp) -If you pass children to ``, they will override the default menu items. Use `` to add a menu item for the dashboard, `` to add menu items for a resource list, and `` to add custom menu items. +If you pass children to ``, they will override the default menu items. The children should be a combination of: + +- [``](#menudashboarditem) to add a menu item for the dashboard, +- [``](#menuresourceitems) to add menu items for the list views of all resources, +- [``](#menuresourceitem) to add menu items for the list view of one resource, +- [``](#menuitem) to add custom menu items. + +`` will render its children in the order they are declared. + +So the following example of `` used with children: ```jsx // in src/MyMenu.js @@ -109,6 +122,10 @@ export const MyMenu = () => ( ); ``` +Renders the following menu: + +![custom menu children](./img/menu-with-children.png) + Check [the `` section](#menuitem) for more information. ## `sx`: CSS API @@ -141,17 +158,35 @@ To override the style of `` using the [Material UI style overrides](https: The `` component displays a menu item with a label and an icon - or only the icon with a tooltip when the sidebar is minimized. It also handles the automatic closing of the menu on tap on mobile. +```jsx +// in src/MyMenu.js +import { Menu } from 'react-admin'; +import LabelIcon from '@mui/icons-material/Label'; + +export const MyMenu = () => ( + + ... + }/> + +); +``` + The `primaryText` prop accepts a string or a React node. You can use it e.g. to display a badge on top of the menu item: ```jsx import Badge from '@mui/material/Badge'; - - Notifications - -} /> -``` +export const MyMenu = () => ( + + ... + + Notifications + + } /> + +); +``` The `letfIcon` prop allows setting the menu left icon. @@ -192,24 +227,54 @@ The `` component displays a menu item for the dashboard. // in src/MyMenu.js import { Menu } from 'react-admin'; -import BookIcon from '@mui/icons-material/Book'; -import ChatBubbleIcon from '@mui/icons-material/ChatBubble'; -import PeopleIcon from '@mui/icons-material/People'; -import LabelIcon from '@mui/icons-material/Label'; - export const MyMenu = () => ( - }/> - }/> - }/> - }/> + ... ); ``` Clicking on the dashboard menu item leads to the `/` route and renders the component defined in [the `` prop](./Admin.md#dashboard). +## `` + +The `` component displays one menu item for each resource, using the resource label and icon defined in the `` components, and in the order in which they were declared in ``. + +```jsx +import { Menu } from 'react-admin'; + +export const MyMenu = () => ( + + ... + + ... + +); +``` + +So with the following `` component: + +```jsx +const App = () => ( + + + + + + +); +``` + +`` renders the following menu items: + +```jsx + + + + +``` + ## `` The `` component displays a menu item for the list page of a resource, based on the resource name. @@ -229,19 +294,19 @@ export const MyMenu = () => ( `` renders a menu item for a resource based on its name, using the resource label and icon defined in the corresponding `` component. -So the following code: +So using the following resource definition: ```jsx - + ``` -uses the following resource definition: +the following code: ```jsx - + ``` -and translates to: +translates to: ```jsx }/> @@ -265,24 +330,19 @@ export const MyMenu = () => ( ); ``` -Passing `children` to `` actually *replaces* the default menu items. If you want to render a custom menu item **in addition to** the default resource menu items, use the `useResourceDefinitions` hook to retrieve the list of resources, and the `` component to create one menu item per resource. +Passing `children` to `` actually *replaces* the default menu items. If you want to render a custom menu item **in addition to** the default resource menu items, use the [``](#menuresourceitems) component to render one menu item per resource. ```jsx // in src/MyMenu.js -import { Menu, useResourceDefinitions } from 'react-admin'; +import { Menu } from 'react-admin'; import LabelIcon from '@mui/icons-material/Label'; -export const MyMenu = () => { - const resources = useResourceDefinitions(); - return ( - - {Object.keys(resources).map(name => ( - - ))} - } /> - - ); -}; +export const MyMenu = () => ( + + + } /> + +); ``` ## Adding A Menu To A Filtered List diff --git a/docs/img/menu-with-children.png b/docs/img/menu-with-children.png new file mode 100644 index 0000000000000000000000000000000000000000..18109868d2d13571c419f1922f4126db918ddb3c GIT binary patch literal 62131 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 literal 0 HcmV?d00001 diff --git a/examples/simple/src/posts/PostList.tsx b/examples/simple/src/posts/PostList.tsx index ead7c0bae8b..a5336151eed 100644 --- a/examples/simple/src/posts/PostList.tsx +++ b/examples/simple/src/posts/PostList.tsx @@ -94,7 +94,7 @@ const PostListMobile = () => ( const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .title': { - maxWidth: '20em', + maxWidth: '16em', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', diff --git a/packages/ra-ui-materialui/src/layout/Menu.tsx b/packages/ra-ui-materialui/src/layout/Menu.tsx index 29e31f426ea..6f558efe567 100644 --- a/packages/ra-ui-materialui/src/layout/Menu.tsx +++ b/packages/ra-ui-materialui/src/layout/Menu.tsx @@ -5,13 +5,13 @@ import { styled } from '@mui/material/styles'; import PropTypes from 'prop-types'; import lodashGet from 'lodash/get'; import clsx from 'clsx'; -import { useResourceDefinitions } from 'ra-core'; import { DRAWER_WIDTH, CLOSED_DRAWER_WIDTH } from './Sidebar'; import { useSidebarState } from './useSidebarState'; import { DashboardMenuItem } from './DashboardMenuItem'; import { MenuItemLink } from './MenuItemLink'; import { ResourceMenuItem } from './ResourceMenuItem'; +import { ResourceMenuItems } from './ResourceMenuItems'; /** * Renders a menu with one menu item per resource by default. You can also set menu items by hand. @@ -36,17 +36,17 @@ import { ResourceMenuItem } from './ResourceMenuItem'; * ); */ export const Menu = (props: MenuProps) => { - const resources = useResourceDefinitions(); const { hasDashboard, - children = [ - hasDashboard ? ( - - ) : null, - ...Object.keys(resources) - .filter(name => resources[name].hasList) - .map(name => ), - ], + children = hasDashboard ? ( + [ + , + , + ] + ) : ( + + ), + className, ...rest } = props; @@ -88,6 +88,7 @@ Menu.propTypes = { Menu.Item = MenuItemLink; Menu.DashboardItem = DashboardMenuItem; Menu.ResourceItem = ResourceMenuItem; +Menu.ResourceItems = ResourceMenuItems; const PREFIX = 'RaMenu'; diff --git a/packages/ra-ui-materialui/src/layout/ResourceMenuItems.tsx b/packages/ra-ui-materialui/src/layout/ResourceMenuItems.tsx new file mode 100644 index 00000000000..d510437bd41 --- /dev/null +++ b/packages/ra-ui-materialui/src/layout/ResourceMenuItems.tsx @@ -0,0 +1,17 @@ +import * as React from 'react'; +import { useResourceDefinitions } from 'ra-core'; + +import { ResourceMenuItem } from './ResourceMenuItem'; + +export const ResourceMenuItems = () => { + const resources = useResourceDefinitions(); + return ( + <> + {Object.keys(resources) + .filter(name => resources[name].hasList) + .map(name => ( + + ))} + + ); +}; diff --git a/packages/ra-ui-materialui/src/layout/index.ts b/packages/ra-ui-materialui/src/layout/index.ts index 69559f9f5ad..980cba31b9f 100644 --- a/packages/ra-ui-materialui/src/layout/index.ts +++ b/packages/ra-ui-materialui/src/layout/index.ts @@ -18,6 +18,7 @@ export * from './NotFound'; export * from './Notification'; export * from './PageTitleConfigurable'; export * from './ResourceMenuItem'; +export * from './ResourceMenuItems'; export * from './Sidebar'; export * from './SidebarToggleButton'; export * from './Theme';