Skip to content

Commit c395af5

Browse files
committed
Refactor to call useResource hook in components rather than other hooks
1 parent ee0edf2 commit c395af5

20 files changed

+115
-57
lines changed

packages/ra-core/src/controller/ListController.tsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import useListController, {
44
} from './useListController';
55
import { useTranslate } from '../i18n';
66
import { Translate } from '../types';
7+
import { useResourceContext, useResourceDefinition } from '../core';
78

89
interface ListControllerComponentProps extends ListControllerProps {
910
translate: Translate;
@@ -27,8 +28,16 @@ interface Props extends ListProps {
2728
* )
2829
*/
2930
const ListController = ({ children, ...props }: Props) => {
30-
const controllerProps = useListController(props);
31-
const translate = useTranslate(); // injected for backwards compatibility
31+
const { resource } = useResourceContext(props);
32+
const { hasCreate } = useResourceDefinition(resource, props);
33+
// @deprecated. hasCreate is injected for backward compatibility
34+
const controllerProps = useListController({
35+
resource,
36+
hasCreate,
37+
...props,
38+
});
39+
// @deprecated. injected for backward compatibility
40+
const translate = useTranslate();
3241
return children({ translate, ...controllerProps });
3342
};
3443

packages/ra-core/src/controller/button/useDeleteWithConfirmController.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
} from '../../sideEffect';
1515
import { Record } from '../../types';
1616
import { OnFailure, OnSuccess } from '../saveModifiers';
17-
import { useResourceContext } from '../../core';
1817

1918
/**
2019
* Prepare a set of callbacks for a delete button guarded by confirmation dialog
@@ -74,12 +73,12 @@ const useDeleteWithConfirmController = (
7473
const {
7574
record,
7675
redirect: redirectTo,
76+
resource,
7777
basePath,
7878
onClick,
7979
onSuccess,
8080
onFailure,
8181
} = props;
82-
const { resource } = useResourceContext(props);
8382
const [open, setOpen] = useState(false);
8483
const notify = useNotify();
8584
const redirect = useRedirect();

packages/ra-core/src/controller/button/useDeleteWithUndoController.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
} from '../../sideEffect';
1010
import { Record } from '../../types';
1111
import { OnFailure, OnSuccess } from '../saveModifiers';
12-
import { useResourceContext } from '../../core';
1312

1413
/**
1514
* Prepare callback for a Delete button with undo support
@@ -55,11 +54,11 @@ const useDeleteWithUndoController = (
5554
record,
5655
basePath,
5756
redirect: redirectTo = 'list',
57+
resource,
5858
onClick,
5959
onSuccess,
6060
onFailure,
6161
} = props;
62-
const { resource } = useResourceContext(props);
6362
const notify = useNotify();
6463
const redirect = useRedirect();
6564
const refresh = useRefresh();

packages/ra-core/src/controller/details/CreateController.tsx

+12-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
CreateProps,
66
CreateControllerProps,
77
} from './useCreateController';
8+
import { useResourceContext, useResourceDefinition } from '../../core';
89

910
interface CreateControllerComponentProps extends CreateControllerProps {
1011
translate: Translate;
@@ -28,7 +29,16 @@ interface Props extends CreateProps {
2829
* );
2930
*/
3031
export const CreateController = ({ children, ...props }: Props) => {
31-
const controllerProps = useCreateController(props);
32-
const translate = useTranslate(); // injected for backwards compatibility
32+
const { resource } = useResourceContext(props);
33+
const { hasEdit, hasShow } = useResourceDefinition(resource, props);
34+
// @deprecated. hasEdit and hasShow are injected for backward compatibility
35+
const controllerProps = useCreateController({
36+
resource,
37+
hasEdit,
38+
hasShow,
39+
...props,
40+
});
41+
// @deprecated. injected for backward compatibility
42+
const translate = useTranslate();
3343
return children({ translate, ...controllerProps });
3444
};

packages/ra-core/src/controller/details/EditController.tsx

+17-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
EditProps,
66
EditControllerProps,
77
} from './useEditController';
8+
import { useResourceContext, useResourceDefinition } from '../../core';
89

910
interface EditControllerComponentProps extends EditControllerProps {
1011
translate: Translate;
@@ -28,7 +29,21 @@ interface Props extends EditProps {
2829
* );
2930
*/
3031
export const EditController = ({ children, ...props }: Props) => {
31-
const controllerProps = useEditController(props);
32-
const translate = useTranslate(); // injected for backwards compatibility
32+
const { resource } = useResourceContext(props);
33+
const { hasCreate, hasEdit, hasList, hasShow } = useResourceDefinition(
34+
resource,
35+
props
36+
);
37+
// @deprecated. hasCreate, hasEdit, hasList and hasShow are injected for backward compatibility
38+
const controllerProps = useEditController({
39+
resource,
40+
hasCreate,
41+
hasEdit,
42+
hasList,
43+
hasShow,
44+
...props,
45+
});
46+
// @deprecated. injected for backward compatibility
47+
const translate = useTranslate();
3348
return children({ translate, ...controllerProps });
3449
};

packages/ra-core/src/controller/details/ShowController.tsx

+17-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
} from './useShowController';
66
import { Translate } from '../../types';
77
import { useTranslate } from '../../i18n';
8+
import { useResourceContext, useResourceDefinition } from '../../core';
89

910
interface ShowControllerComponentProps extends ShowControllerProps {
1011
translate: Translate;
@@ -28,7 +29,21 @@ interface Props extends ShowProps {
2829
* );
2930
*/
3031
export const ShowController = ({ children, ...props }: Props) => {
31-
const controllerProps = useShowController(props);
32-
const translate = useTranslate(); // injected for backwards compatibility
32+
const { resource } = useResourceContext(props);
33+
const { hasCreate, hasEdit, hasList, hasShow } = useResourceDefinition(
34+
resource,
35+
props
36+
);
37+
// @deprecated. hasCreate, hasEdit, hasList and hasShow are injected for backward compatibility
38+
const controllerProps = useShowController({
39+
resource,
40+
hasCreate,
41+
hasEdit,
42+
hasList,
43+
hasShow,
44+
...props,
45+
});
46+
// @deprecated. injected for backward compatibility
47+
const translate = useTranslate();
3348
return children({ translate, ...controllerProps });
3449
};

packages/ra-core/src/controller/details/useCreateController.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import { useTranslate } from '../../i18n';
2525
import useVersion from '../useVersion';
2626
import { CRUD_CREATE } from '../../actions';
2727
import { Record } from '../../types';
28-
import { useResourceContext, useResourceDefinition } from '../../core';
2928

3029
export interface CreateProps<RecordType extends Omit<Record, 'id'> = Record> {
3130
basePath?: string;
@@ -102,15 +101,16 @@ export const useCreateController = <
102101
useCheckMinimumRequiredProps('Create', ['basePath', 'resource'], props);
103102
const {
104103
basePath,
104+
hasEdit,
105+
hasShow,
105106
record = {},
107+
resource,
106108
successMessage,
107109
onSuccess,
108110
onFailure,
109111
transform,
110112
} = props;
111113

112-
const { resource } = useResourceContext(props);
113-
const { hasEdit, hasShow } = useResourceDefinition(resource, props);
114114
const location = useLocation();
115115
const translate = useTranslate();
116116
const notify = useNotify();

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
SetTransformData,
2323
useSaveModifiers,
2424
} from '../saveModifiers';
25-
import { useResourceContext, useResourceDefinition } from '../../core';
2625

2726
export interface EditProps {
2827
basePath?: string;
@@ -95,18 +94,18 @@ export const useEditController = <RecordType extends Record = Record>(
9594
const {
9695
basePath,
9796
hasCreate,
97+
hasEdit,
98+
hasList,
99+
hasShow,
98100
id,
101+
resource,
99102
successMessage,
100103
undoable = true,
101104
onSuccess,
102105
onFailure,
103106
transform,
104107
} = props;
105-
const { resource } = useResourceContext(props);
106-
const { hasEdit, hasList, hasShow } = useResourceDefinition(
107-
resource,
108-
props
109-
);
108+
110109
const translate = useTranslate();
111110
const notify = useNotify();
112111
const redirect = useRedirect();

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

+9-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { useGetOne } from '../../dataProvider';
77
import { useTranslate } from '../../i18n';
88
import { useNotify, useRedirect, useRefresh } from '../../sideEffect';
99
import { CRUD_GET_ONE } from '../../actions';
10-
import { useResourceContext, useResourceDefinition } from '../../core';
1110

1211
export interface ShowProps {
1312
basePath?: string;
@@ -58,12 +57,16 @@ export const useShowController = <RecordType extends Record = Record>(
5857
props: ShowProps
5958
): ShowControllerProps<RecordType> => {
6059
useCheckMinimumRequiredProps('Show', ['basePath', 'resource'], props);
61-
const { basePath, id } = props;
62-
const { resource } = useResourceContext(props);
63-
const { hasCreate, hasEdit, hasList, hasShow } = useResourceDefinition(
60+
const {
61+
basePath,
62+
hasCreate,
63+
hasEdit,
64+
hasList,
65+
hasShow,
66+
id,
6467
resource,
65-
props
66-
);
68+
} = props;
69+
6770
const translate = useTranslate();
6871
const notify = useNotify();
6972
const redirect = useRedirect();

packages/ra-core/src/controller/field/ReferenceArrayFieldController.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { FunctionComponent, ReactElement } from 'react';
33
import useReferenceArrayFieldController from './useReferenceArrayFieldController';
44
import { ListControllerProps } from '../useListController';
55
import { Record, SortPayload } from '../../types';
6+
import { useResourceContext } from '../../core';
67

78
interface Props {
89
basePath: string;
@@ -24,7 +25,9 @@ interface Props {
2425
*/
2526
const ReferenceArrayFieldController: FunctionComponent<Props> = props => {
2627
const { children, ...rest } = props;
28+
const { resource } = useResourceContext(props);
2729
const controllerProps = useReferenceArrayFieldController({
30+
resource,
2831
sort: {
2932
field: 'id',
3033
order: 'ASC',

packages/ra-core/src/controller/field/ReferenceManyFieldController.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { ReactElement, FunctionComponent } from 'react';
33
import { Record, SortPayload } from '../../types';
44
import useReferenceManyFieldController from './useReferenceManyFieldController';
55
import { ListControllerProps } from '../useListController';
6+
import { useResourceContext } from '../../core';
67

78
interface Props {
89
basePath: string;
@@ -26,9 +27,11 @@ interface Props {
2627
*/
2728
export const ReferenceManyFieldController: FunctionComponent<Props> = props => {
2829
const { children, page = 1, perPage = 25, ...rest } = props;
30+
const { resource } = useResourceContext(props);
2931
const controllerProps = useReferenceManyFieldController({
3032
page,
3133
perPage,
34+
resource,
3235
...rest,
3336
});
3437
return children(controllerProps);

packages/ra-core/src/controller/field/useReferenceArrayFieldController.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { useNotify } from '../../sideEffect';
1010
import usePaginationState from '../usePaginationState';
1111
import useSelectionState from '../useSelectionState';
1212
import useSortState from '../useSortState';
13-
import { useResourceContext } from '../../core';
1413

1514
interface Option {
1615
basePath: string;
@@ -60,10 +59,10 @@ const useReferenceArrayFieldController = (
6059
perPage: initialPerPage = 1000,
6160
record,
6261
reference,
62+
resource,
6363
sort: initialSort = defaultSort,
6464
source,
6565
} = props;
66-
const { resource } = useResourceContext(props);
6766
const notify = useNotify();
6867
const ids = get(record, source) || [];
6968
const { data, error, loading, loaded } = useGetMany(reference, ids, {

packages/ra-core/src/controller/field/useReferenceManyFieldController.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { ListControllerProps } from '../useListController';
1010
import usePaginationState from '../usePaginationState';
1111
import useSelectionState from '../useSelectionState';
1212
import useSortState from '../useSortState';
13-
import { useResourceContext } from '../../core';
1413

1514
interface Options {
1615
basePath: string;
@@ -70,17 +69,17 @@ const useReferenceManyFieldController = (
7069
props: Options
7170
): ListControllerProps => {
7271
const {
73-
reference,
74-
record,
75-
target,
76-
filter = defaultFilter,
77-
source,
7872
basePath,
73+
filter = defaultFilter,
7974
page: initialPage,
8075
perPage: initialPerPage,
76+
record,
77+
reference,
78+
resource,
8179
sort: initialSort = { field: 'id', order: 'DESC' },
80+
source,
81+
target,
8282
} = props;
83-
const { resource } = useResourceContext(props);
8483
const notify = useNotify();
8584

8685
// pagination logic

packages/ra-core/src/controller/input/ReferenceArrayInputController.tsx

+14-12
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import debounce from 'lodash/debounce';
88

99
import { Record, SortPayload, PaginationPayload } from '../../types';
1010
import useReferenceArrayInputController from './useReferenceArrayInputController';
11+
import { useResourceContext } from '../../core';
1112

1213
interface ChildrenFuncParams {
1314
choices: Record[];
@@ -114,18 +115,19 @@ interface Props {
114115
* <SelectArrayInput optionText="name" />
115116
* </ReferenceArrayInput>
116117
*/
117-
const ReferenceArrayInputController: FunctionComponent<Props> = ({
118-
basePath,
119-
children,
120-
filter = {},
121-
input,
122-
filterToQuery = searchText => ({ q: searchText }),
123-
perPage = 25,
124-
reference,
125-
resource,
126-
sort = { field: 'id', order: 'DESC' },
127-
source,
128-
}) => {
118+
const ReferenceArrayInputController: FunctionComponent<Props> = props => {
119+
const {
120+
basePath,
121+
children,
122+
filter = {},
123+
input,
124+
filterToQuery = searchText => ({ q: searchText }),
125+
perPage = 25,
126+
reference,
127+
sort = { field: 'id', order: 'DESC' },
128+
source,
129+
} = props;
130+
const { resource } = useResourceContext(props);
129131
const {
130132
choices,
131133
error,

packages/ra-core/src/controller/input/ReferenceInputController.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
FunctionComponent,
55
ReactElement,
66
} from 'react';
7+
import { useResourceContext } from '../../core';
78

89
import { SortPayload, Record } from '../../types';
910
import {
@@ -37,7 +38,10 @@ export const ReferenceInputController: FunctionComponent<Props> = ({
3738
children,
3839
...props
3940
}) => {
40-
return children(useReferenceInputController(props)) as ReactElement;
41+
const { resource } = useResourceContext(props);
42+
return children(
43+
useReferenceInputController({ resource, ...props })
44+
) as ReactElement;
4145
};
4246

4347
export default ReferenceInputController as ComponentType<Props>;

0 commit comments

Comments
 (0)