Skip to content

Commit ec101ad

Browse files
authored
Merge pull request #7790 from marmelab/fix-edit-show-controllers-falsy-ids
Fix edit and show controllers do not handle falsy identifiers
2 parents 42bd49a + 0d49181 commit ec101ad

File tree

4 files changed

+79
-2
lines changed

4 files changed

+79
-2
lines changed

packages/ra-core/src/controller/edit/useEditController.spec.tsx

+38
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,44 @@ describe('useEditController', () => {
6969
await waitFor(() => {
7070
expect(getOne).toHaveBeenCalledWith('posts', { id: 'test?' });
7171
});
72+
await waitFor(() => {
73+
expect(screen.queryAllByText('hello')).toHaveLength(1);
74+
});
75+
});
76+
77+
it('should use the id provided through props if any', async () => {
78+
const getOne = jest
79+
.fn()
80+
.mockImplementationOnce(() =>
81+
Promise.resolve({ data: { id: 0, title: 'hello' } })
82+
);
83+
const dataProvider = ({ getOne } as unknown) as DataProvider;
84+
const history = createMemoryHistory({
85+
initialEntries: ['/posts/test%3F'],
86+
});
87+
88+
render(
89+
<CoreAdminContext dataProvider={dataProvider} history={history}>
90+
<Routes>
91+
<Route
92+
path="/posts/:id"
93+
element={
94+
<EditController id={0} resource="posts">
95+
{({ record }) => (
96+
<div>{record && record.title}</div>
97+
)}
98+
</EditController>
99+
}
100+
/>
101+
</Routes>
102+
</CoreAdminContext>
103+
);
104+
await waitFor(() => {
105+
expect(getOne).toHaveBeenCalledWith('posts', { id: 0 });
106+
});
107+
await waitFor(() => {
108+
expect(screen.queryAllByText('hello')).toHaveLength(1);
109+
});
72110
});
73111

74112
it('should accept custom client query options', async () => {

packages/ra-core/src/controller/edit/useEditController.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export const useEditController = <
6161
const redirect = useRedirect();
6262
const refresh = useRefresh();
6363
const { id: routeId } = useParams<'id'>();
64-
const id = propsId || decodeURIComponent(routeId);
64+
const id = propsId != null ? propsId : decodeURIComponent(routeId);
6565
const { onSuccess, onError, ...otherMutationOptions } = mutationOptions;
6666
const {
6767
registerMutationMiddleware,

packages/ra-core/src/controller/show/useShowController.spec.tsx

+39
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,45 @@ describe('useShowController', () => {
6666
await waitFor(() => {
6767
expect(getOne).toHaveBeenCalledWith('posts', { id: 'test?' });
6868
});
69+
await waitFor(() => {
70+
expect(screen.queryAllByText('hello')).toHaveLength(1);
71+
});
72+
});
73+
74+
it('should use the id provided through props if any', async () => {
75+
const getOne = jest
76+
.fn()
77+
.mockImplementationOnce(() =>
78+
Promise.resolve({ data: { id: 0, title: 'hello' } })
79+
);
80+
const dataProvider = ({ getOne } as unknown) as DataProvider;
81+
render(
82+
<CoreAdminContext
83+
dataProvider={dataProvider}
84+
history={createMemoryHistory({
85+
initialEntries: ['/posts/test%3F'],
86+
})}
87+
>
88+
<Routes>
89+
<Route
90+
path="posts/:id"
91+
element={
92+
<ShowController id={0} resource="posts">
93+
{({ record }) => (
94+
<div>{record && record.title}</div>
95+
)}
96+
</ShowController>
97+
}
98+
/>
99+
</Routes>
100+
</CoreAdminContext>
101+
);
102+
await waitFor(() => {
103+
expect(getOne).toHaveBeenCalledWith('posts', { id: 0 });
104+
});
105+
await waitFor(() => {
106+
expect(screen.queryAllByText('hello')).toHaveLength(1);
107+
});
69108
});
70109

71110
it('should accept custom client query options', async () => {

packages/ra-core/src/controller/show/useShowController.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export const useShowController = <RecordType extends RaRecord = any>(
5454
const redirect = useRedirect();
5555
const refresh = useRefresh();
5656
const { id: routeId } = useParams<'id'>();
57-
const id = propsId || decodeURIComponent(routeId);
57+
const id = propsId != null ? propsId : decodeURIComponent(routeId);
5858

5959
const { data: record, error, isLoading, isFetching, refetch } = useGetOne<
6060
RecordType

0 commit comments

Comments
 (0)