Buttons
React-Admin provides button components for all the common uses.
Navigation Buttons
These buttons allow users to navigate between the various react-admin views.
<EditButton>
Opens the Edit view of a given record:
import { EditButton } from 'react-admin';
const CommentEditButton = ({ record }) => (
    <EditButton basePath="/comments" label="Edit comment" record={record} />
);

<EditButton> is based on react-adminâs base <Button>, so itâs responsive, accessible, and the label is translatable.
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| basePath | Required | string | - | Base path to resource, e.g. â/postsâ | 
| record | Required | Object | - | Record to link to, e.g. { id: 12, foo: 'bar' } | 
| label | Optional | string | âra.action.editâ | Label or translation message to use | 
| icon | Optional | ReactElement | - | Icon element, e.g. <CommentIcon /> | 
| scrollToTop | Optional | boolean | true | Scroll to top after link | 
It also supports all the other <Button> props.
Tip: You can use it as <Datagrid> child with no props, since <Datagrid> injects record and basePath to its children. However, you should use the <Datagrid rowClick="edit"> prop instead to avoid using one column for the Edit button.
Tip: If you want to link to the Edit view manually, use the /{resource}/{record.id} location.
<ShowButton>
Opens the Show view of a given record:
import { ShowButton } from 'react-admin';
const CommentShowButton = ({ record }) => (
    <ShowButton basePath="/comments" label="Show comment" record={record} />
);

<ShowButton> is based on react-adminâs base <Button>, so itâs responsive, accessible, and the label is translatable.
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| basePath | Required | string | - | Base path to resource, e.g. â/postsâ | 
| record | Required | Object | - | Record to link to, e.g. { id: 12, foo: 'bar' } | 
| component | Optional | ReactElement | - | Base path to resource, e.g. â/postsâ | 
| label | Optional | string | âra.action.showâ | Label or translation message to use | 
| icon | Optional | ReactElement | - | Icon element, e.g. <CommentIcon /> | 
| scrollToTop | Optional | boolean | true | Scroll to top after link | 
It also supports all the other <Button> props.
Tip: You can use it as <Datagrid> child with no props, since <Datagrid> injects record and basePath to its children. However, you should use the <Datagrid rowClick="show"> prop instead to avoid using one column for the Edit button.
Tip: If you want to link to the Show view manually, use the /{resource}/{record.id}/show location.
<CreateButton>
Opens the Create view of a given resource:
import { CreateButton } from 'react-admin';
const CommentCreateButton = () => (
    <CreateButton basePath="/comments" label="Create comment" />
);

<CreateButton> is based on react-adminâs base <Button>, so itâs responsive, accessible, and the label is translatable. On mobile, it turns into a âFloating Action Buttonâ.

| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| basePath | Required | string | - | base path to resource, e.g. â/postsâ | 
| label | Optional | string | âra.action.createâ | label or translation message to use | 
| icon | Optional | ReactElement | - | iconElement, e.g. <CommentIcon /> | 
| scrollToTop | Optional | boolean | true | Scroll to top after link | 
It also supports all the other <Button> props.
Tip: If you want to link to the Create view manually, use the /{resource}/create location.
CSS API
| Rule name | Description | 
|---|---|
| floating | Applied to the underlying MuiFabcomponent used in small screens | 
To override the style of all instances of <CreateButton> using the material-ui style overrides, use the RaCreateButton key.
<ListButton>
Opens the List view of a given resource:
import { ListButton } from 'react-admin';
const CommentListButton = () => (
    <ListButton basePath="/comments" label="Comments" />
);

<ListButton> is based on react-adminâs base <Button>, so itâs responsive, accessible, and the label is translatable.
By default, react-admin doesnât display a <ListButton> in Edit and Show views action toolbar. This saves visual clutter, and users can always use the back button. You can add it by specifying your own actions:
// linking back to the list from the Edit view
import { TopToolbar, ListButton, ShowButton, Edit } from 'react-admin';
const PostEditActions = ({ basePath, record, resource }) => (
    <TopToolbar>
        <ListButton basePath={basePath} />
        <ShowButton basePath={basePath} record={record} />
    </TopToolbar>
);
export const PostEdit = (props) => (
    <Edit actions={<PostEditActions />} {...props}>
        ...
    </Edit>
);
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| basePath | Required | string | - | base path to resource, e.g. â/postsâ | 
| label | Optional | string | âra.action.listâ | label or translation message to use | 
| icon | Optional | ReactElement | - | iconElement, e.g. <CommentIcon /> | 
It also supports all the other <Button> props.
Tip: If you want to link to the List view manually, use the /{resource} location.
List Buttons
The following buttons are designed to be used in List views.
<ExportButton>
Exports the current list, with filters applied, but without pagination. It relies on the exporter function passed to the <List> component, via the ListContext. Itâs disabled for empty lists.
By default, the <ExportButton> is included in the List actions.
import { CreateButton, ExportButton, TopToolbar } from 'react-admin';
const PostListActions = ({ basePath }) => (
    <TopToolbar>
        <PostFilter context="button" />
        <CreateButton basePath={basePath} />
        <ExportButton />
    </TopToolbar>
);
export const PostList = (props) => (
    <List actions={<PostListActions />} {...props}>
        ...
    </List>
);

| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| maxResults | Optional | number | 1000 | Maximum number of records to export | 
| label | Optional | string | âra.action.exportâ | label or translation message to use | 
| icon | Optional | ReactElement | <DownloadIcon> | iconElement, e.g. <CommentIcon /> | 
| exporter | Optional | Function | - | Override the List exporter function | 
<BulkExportButton>
Same as <ExportButton>, except it only exports the selected rows instead of the entire list. To be used inside the <List bulkActionButtons> prop.
import * as React from 'react';
import { Fragment } from 'react';
import { BulkDeleteButton, BulkExportButton } from 'react-admin';
const PostBulkActionButtons = ({ basePath }) => (
    <Fragment>
        <BulkExportButton />
        <BulkDeleteButton basePath={basePath} />
    </Fragment>
);
export const PostList = (props) => (
    <List {...props} bulkActionButtons={<PostBulkActionButtons />}>
        ...
    </List>
);

| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| label | Optional | string | âra.action.exportâ | label or translation message to use | 
| icon | Optional | ReactElement | <DownloadIcon> | iconElement, e.g. <CommentIcon /> | 
| exporter | Optional | Function | - | Override the List exporter function | 
<BulkDeleteButton>
Deletes the selected rows. To be used inside the <List bulkActionButtons> prop (where itâs enabled by default).
import * as React from 'react';
import { Fragment } from 'react';
import { BulkDeleteButton, BulkExportButton } from 'react-admin';
const PostBulkActionButtons = ({ basePath }) => (
    <Fragment>
        <BulkExportButton />
        <BulkDeleteButton basePath={basePath} />
    </Fragment>
);
export const PostList = (props) => (
    <List {...props} bulkActionButtons={<PostBulkActionButtons />}>
        ...
    </List>
);

| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| label | Optional | string | âra.action.deleteâ | label or translation message to use | 
| icon | Optional | ReactElement | <DeleteIcon> | iconElement, e.g. <CommentIcon /> | 
| exporter | Optional | Function | - | Override the List exporter function | 
| undoable | Optional | boolean | true | Allow users to cancel the deletion | 
<FilterButton>
This button is an internal component used by react-admin in the Filter button/form combo.

CSS API
| Rule name | Description | 
|---|---|
| root | Alternative to using className. Applied to the root element | 
To override the style of all instances of <FilterButton> using the material-ui style overrides, use the RaFilterButton key.
<SortButton>
Some List views donât have a natural UI for sorting - e.g. the <SimpleList>, or a list of images, donât have column headers like the <Datagrid>. For these cases, react-admin offers the <SortButton>, which displays a dropdown list of fields that the user can choose to sort on.

<SortButton> expects one prop: fields, the list of fields it should allow to sort on. For instance, here is how to offer a button to sort on the reference, sales, and stock fields:
import * as React from 'react';
import { TopToolbar, SortButton, CreateButton, ExportButton } from 'react-admin';
const ListActions = () => (
    <TopToolbar>
        <SortButton fields={['reference', 'sales', 'stock']} />
        <CreateButton basePath="/products" />
        <ExportButton />
    </TopToolbar>
);
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| fields | Required | string[] | - | List of fields to offer sort on | 
| icon | Optional | ReactElement | <DeleteIcon> | iconElement, e.g. <CommentIcon /> | 
| label | Optional | string | âra.action.deleteâ | label or translation message to use | 
Record Buttons
<DeleteButton>
<CloneButton>
<SaveButton>
Miscellaneous
<Button>
Base component for most react-admin buttons. Responsive (displays only the icon with a tooltip on mobile) and accessible.
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| alignIcon | Optional | 'left' | 'right | 'left' | Icon position relative to the label | 
| children | Optional | ReactElement | - | icon to use | 
| className | Optional | string | - | path to link to, e.g. â/postsâ | 
| color | Optional | 'default' | 'inherit'| 'primary' | 'secondary' | 'primary' | Label and icon color | 
| disabled | Optional | boolean | false | If true, the button will be disabled | 
| size | Optional | 'large' | 'medium' | 'small' | 'small' | Button size | 
Other props are passed down to the underlying material-ui <Button>.
CSS API
| Rule name | Description | 
|---|---|
| button | Applied to the underlying MuiButtoncomponent | 
| label | Applied to the Buttonâs label when alignIconprop is âleftâ | 
| labelRightIcon | Applied to the Buttonâs label when alignIconprop is âleftâ | 
| smallIcon | Applied to the Buttonâs childrenwhensizeprop issmallandalignIconprop is ârightâ | 
| mediumIcon | Applied to the Buttonâs childrenwhensizeprop ismediumandalignIconprop is ârightâ | 
| largeIcon | Applied to the Buttonâs childrenwhensizeprop islargeandalignIconprop is ârightâ | 
To override the style of all instances of <Button> using the material-ui style overrides, use the RaButton key.
<RefreshButton>
<SkipNavigationButton>
CSS API
| Rule name | Description | 
|---|---|
| skipToContentButton | Applied to the underlying MuiButtoncomponent | 
To override the style of all instances of <SkipNavigationButton> using the material-ui style overrides, use the RaSkipNavigationButton key.
<MenuItemLink>
The <MenuItemLink> 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.

| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| to | Required | string | location | - | The menu itemâs target. It is passed to a React Router NavLink component. | 
| primaryText | Required | ReactNode | - | The menu content, displayed when the menu isnât minimized. | 
| leftIcon | Optional | ReactNode | - | The menu icon | 
Additional props are passed down to the underling material-ui <MenuItem> component.
You can create a custom menu component using the <DashboardMenuItem> and <MenuItemLink> components:
// in src/Menu.js
import * as React from 'react';
import { DashboardMenuItem, Menu, MenuItemLink } from 'react-admin';
import BookIcon from '@material-ui/icons/Book';
import ChatBubbleIcon from '@material-ui/icons/ChatBubble';
import PeopleIcon from '@material-ui/icons/People';
import LabelIcon from '@material-ui/icons/Label';
export const Menu = (props) => (
    <Menu {...props}>
        <DashboardMenuItem />
        <MenuItemLink to="/posts" primaryText="Posts" leftIcon={<BookIcon />}/>
        <MenuItemLink to="/comments" primaryText="Comments" leftIcon={<ChatBubbleIcon />}/>
        <MenuItemLink to="/users" primaryText="Users" leftIcon={<PeopleIcon />}/>
        <MenuItemLink to="/custom-route" primaryText="Miscellaneous" leftIcon={<LabelIcon />}/>
    </Menu>
);
To use this custom menu component, pass it to a custom Layout:
// in src/Layout.js
import { Layout } from 'react-admin';
import { Menu } from './Menu';
export const Layout = (props) => <Layout {...props} menu={Menu} />;
Then, use this layout in the <Admin> layout prop:
// in src/App.js
import { Layout }  from './Layout';
const App = () => (
    <Admin layout={Layout} dataProvider={simpleRestProvider('http://path.to.my.api')}>
        // ...
    </Admin>
);
See The theming documentation for more details.
Tip: If you need a multi-level menu, or a Mega Menu opening panels with custom content, check out the ra-navigation module (part of the Enterprise Edition)


CSS API
| Rule name | Description | 
|---|---|
| root | Alternative to using className. Applied to the root element | 
| active | Applied to the underlying MuiMenuItemâsactiveClassNameprop | 
| icon | Applied to the ListItemIconcomponent whenleftIconprop is set | 
To override the style of all instances of <MenuItemLink> using the material-ui style overrides, use the RaMenuItemLink key.
<UserMenu>
| Prop | Required | Type | Default | Description | 
|---|---|---|---|---|
| children | Optional | ReactElement | - | elements to use as menu items | 
| label | Required | string | âra.auth.user_menuâ | label or translation message to use | 
| logout | Optional | ReactElement | - | logout component | 
| icon | Optional | ReactElement | <AccountCircle> | iconElement, e.g. <CommentIcon /> | 
CSS API
| Rule name | Description | 
|---|---|
| user | Alternative to using className. Applied to the root element | 
| userButton | Applied to the underlying MuiButtoncomponent whenuseGetIdentity().loadedistrueanduseGetIdentity().identity.fullNameis set | 
| avatar | Applied to the underlying MuiAvatarcomponent whenuseGetIdentity().avataristrue | 
To override the style of all instances of <UserMenu> using the material-ui style overrides, use the RaUserMenu key.
