Skip to content

Commit a52c56a

Browse files
authored
Merge pull request #11060 from marmelab/fix-SelectAllButton-storeKey
Fix `<SelectAllButton>` ignores the `storeKey`
2 parents e147dc6 + 51f4432 commit a52c56a

File tree

5 files changed

+51
-3
lines changed

5 files changed

+51
-3
lines changed

packages/ra-core/src/controller/list/useListController.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ export const useListController = <
199199
resource,
200200
sort: { field: query.sort, order: query.order },
201201
filter: { ...query.filter, ...filter },
202+
disableSyncWithStore: storeKey === false,
203+
storeKey: storeKey === false ? undefined : storeKey,
202204
});
203205

204206
return {

packages/ra-core/src/controller/list/useSelectAll.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
defaultDataProvider,
77
Limit,
88
QueryOptions,
9+
StoreKey,
910
} from './useSelectAll.stories';
1011

1112
describe('useSelectAll', () => {

packages/ra-core/src/controller/list/useSelectAll.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import type { FilterPayload, RaRecord, SortPayload } from '../../types';
4343
export const useSelectAll = (
4444
params: UseSelectAllParams
4545
): UseSelectAllResult => {
46-
const { sort, filter } = params;
46+
const { sort, filter, storeKey, disableSyncWithStore } = params;
4747
const resource = useResourceContext(params);
4848
if (!resource) {
4949
throw new Error(
@@ -52,7 +52,11 @@ export const useSelectAll = (
5252
}
5353
const dataProvider = useDataProvider();
5454
const queryClient = useQueryClient();
55-
const [, { select }] = useRecordSelection({ resource });
55+
const [, { select }] = useRecordSelection({
56+
resource,
57+
storeKey,
58+
disableSyncWithStore,
59+
});
5660
const notify = useNotify();
5761

5862
const handleSelectAll = useEvent(
@@ -117,6 +121,8 @@ export interface UseSelectAllParams {
117121
resource?: string;
118122
sort?: SortPayload;
119123
filter?: FilterPayload;
124+
storeKey?: string;
125+
disableSyncWithStore?: boolean;
120126
}
121127

122128
export interface HandleSelectAllParams<RecordType extends RaRecord = any> {

packages/ra-ui-materialui/src/button/SelectAllButton.spec.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { fireEvent, render, screen } from '@testing-library/react';
3-
import { Basic, Label, Limit } from './SelectAllButton.stories';
3+
import { Basic, Label, Limit, StoreKey } from './SelectAllButton.stories';
44

55
describe('<SelectAllButton />', () => {
66
it('should render a "Select All" button', async () => {
@@ -75,4 +75,13 @@ describe('<SelectAllButton />', () => {
7575
).toBeNull();
7676
});
7777
});
78+
79+
it('should select all items with a storeKey', async () => {
80+
render(<StoreKey />);
81+
await screen.findByText('War and Peace');
82+
fireEvent.click(screen.getAllByRole('checkbox')[0]);
83+
await screen.findByText('10 items selected');
84+
fireEvent.click(screen.getByRole('button', { name: 'Select all' }));
85+
await screen.findByText('17 items selected');
86+
});
7887
});

packages/ra-ui-materialui/src/button/SelectAllButton.stories.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,33 @@ export const Limit = () => (
171171
<SelectAllButton label="Select all books (max 15)" limit={15} />
172172
</Wrapper>
173173
);
174+
175+
export const StoreKey = () => (
176+
<TestMemoryRouter initialEntries={['/books']}>
177+
<AdminContext dataProvider={dataProvider} i18nProvider={i18nProvider}>
178+
<AdminUI>
179+
<Resource
180+
name="books"
181+
list={() => (
182+
<List storeKey="license_components.embedded">
183+
<DataTable
184+
bulkActionsToolbar={
185+
<BulkActionsToolbar
186+
selectAllButton={<SelectAllButton />}
187+
>
188+
<BulkDeleteButton />
189+
</BulkActionsToolbar>
190+
}
191+
>
192+
<DataTable.Col source="id" />
193+
<DataTable.Col source="title" />
194+
<DataTable.Col source="author" />
195+
<DataTable.NumberCol source="reads" />
196+
</DataTable>
197+
</List>
198+
)}
199+
/>
200+
</AdminUI>
201+
</AdminContext>
202+
</TestMemoryRouter>
203+
);

0 commit comments

Comments
 (0)