Skip to content

Commit d5f1860

Browse files
committed
[Fix] Update BulkActionsToolbar to accept a Component Type as selectAllButton prop
1 parent 45453b4 commit d5f1860

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

packages/ra-ui-materialui/src/list/BulkActionsToolbar.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
isValidElement,
44
type ReactElement,
55
type ReactNode,
6+
type ElementType,
67
useCallback,
78
} from 'react';
89
import {
@@ -80,7 +81,9 @@ export const BulkActionsToolbar = (inProps: BulkActionsToolbarProps) => {
8081
{selectAllButton !== false
8182
? isValidElement(selectAllButton)
8283
? selectAllButton
83-
: defaultSelectAllButton
84+
: typeof selectAllButton === 'function'
85+
? React.createElement(selectAllButton)
86+
: defaultSelectAllButton
8487
: null}
8588
</div>
8689
<TopToolbar className={BulkActionsToolbarClasses.topToolbar}>
@@ -95,7 +98,7 @@ export interface BulkActionsToolbarProps {
9598
children?: ReactNode;
9699
label?: string;
97100
className?: string;
98-
selectAllButton?: ReactElement | false;
101+
selectAllButton?: ReactElement | ElementType | false;
99102
}
100103

101104
const PREFIX = 'RaBulkActionsToolbar';

packages/ra-ui-materialui/src/list/List.stories.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ import { Link } from 'react-router-dom';
3030
import { BulkDeleteButton, ListButton, SelectAllButton } from '../button';
3131
import { ShowGuesser } from '../detail';
3232
import TopToolbar from '../layout/TopToolbar';
33-
import { BulkActionsToolbar } from './BulkActionsToolbar';
33+
import {
34+
BulkActionsToolbar,
35+
BulkActionsToolbarProps,
36+
} from './BulkActionsToolbar';
3437
import { defaultLightTheme } from '../theme';
3538
import { onlineManager } from '@tanstack/react-query';
3639
import { deepmerge } from '@mui/utils';
@@ -543,7 +546,7 @@ export const Default = ({
543546
}: {
544547
dataProvider?: DataProvider;
545548
children?: React.ReactNode;
546-
selectAllButton?: React.ReactElement;
549+
selectAllButton?: BulkActionsToolbarProps['selectAllButton'];
547550
}) => (
548551
<TestMemoryRouter initialEntries={['/books']}>
549552
<Admin dataProvider={dataProvider}>
@@ -590,6 +593,20 @@ export const SelectAllLimit = ({
590593
</Default>
591594
);
592595

596+
const MySelectAllButton = () => <SelectAllButton limit={11} />;
597+
598+
export const SelectAllAsComponent = ({
599+
dataProvider,
600+
children,
601+
}: {
602+
dataProvider?: DataProvider;
603+
children?: React.ReactNode;
604+
}) => (
605+
<Default selectAllButton={MySelectAllButton} dataProvider={dataProvider}>
606+
{children}
607+
</Default>
608+
);
609+
593610
const NewerBooks = () => (
594611
<List
595612
resource="books"

0 commit comments

Comments
 (0)