Skip to content

Commit 8e0dd05

Browse files
committed
Improve memory footprint of useCanAccess when it targets a record
1 parent 5cd8c5a commit 8e0dd05

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

packages/ra-core/src/auth/CanAccess.stories.tsx

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import * as React from 'react';
22
import { Location } from 'react-router';
33
import { QueryClient } from '@tanstack/react-query';
44
import { AuthProvider } from '../types';
5-
import { CoreAdminContext } from '../core';
5+
import { CoreAdminContext } from '../core/CoreAdminContext';
66
import { CanAccess } from './CanAccess';
7-
import { TestMemoryRouter } from '..';
7+
import { TestMemoryRouter } from '../routing/TestMemoryRouter';
88

99
export default {
1010
title: 'ra-core/auth/CanAccess',
@@ -109,3 +109,45 @@ export const NoAuthProvider = () => (
109109
</CoreAdminContext>
110110
</TestMemoryRouter>
111111
);
112+
113+
const data = Array.from({ length: 1000 }, (_, i) => {
114+
const post = {
115+
id: i + 1,
116+
title: `Post ${i + 1}`,
117+
body: `This is the body of post ${i + 1}`,
118+
};
119+
120+
Array.from({ length: 100 }, (_, i) => {
121+
post[`property${i + 1}`] = `Another very long property ${i + 1}`;
122+
});
123+
124+
return post;
125+
});
126+
127+
export const ManyCalls = ({
128+
authProvider = defaultAuthProvider,
129+
queryClient,
130+
}: {
131+
authProvider?: AuthProvider | null;
132+
queryClient?: QueryClient;
133+
}) => (
134+
<TestMemoryRouter>
135+
<CoreAdminContext
136+
authProvider={authProvider != null ? authProvider : undefined}
137+
queryClient={queryClient}
138+
>
139+
<div>
140+
{data.map(post => (
141+
<CanAccess
142+
key={post.id}
143+
action="read"
144+
resource="posts"
145+
record={post}
146+
>
147+
<div>{post.title}</div>
148+
</CanAccess>
149+
))}
150+
</div>
151+
</CoreAdminContext>
152+
</TestMemoryRouter>
153+
);

packages/ra-core/src/auth/useCanAccess.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,15 @@ export const useCanAccess = <
6262
);
6363
}
6464
const record = useRecordContext<RecordType>(params);
65-
65+
const { record: _record, ...restParams } = params;
6666
const authProviderHasCanAccess = !!authProvider?.canAccess;
6767

6868
const queryResult = useQuery({
69-
queryKey: ['auth', 'canAccess', { ...params, record, resource }],
69+
queryKey: [
70+
'auth',
71+
'canAccess',
72+
{ ...restParams, recordId: record?.id, resource },
73+
],
7074
queryFn: async ({ signal }) => {
7175
if (!authProvider || !authProvider.canAccess) {
7276
return true;

0 commit comments

Comments
 (0)