Skip to content

Commit 4333666

Browse files
authored
Merge pull request #5502 from marmelab/Change-RecordContext-in-Reference-elements
Change RecordContext in Reference elements
2 parents 3e44ce5 + 0a641d4 commit 4333666

File tree

7 files changed

+91
-66
lines changed

7 files changed

+91
-66
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ const useReferenceArrayFieldController = (
216216
onUnselectItems,
217217
page,
218218
perPage,
219-
resource,
219+
resource: reference,
220220
selectedIds,
221221
setFilters,
222222
setPage,

packages/ra-ui-materialui/src/field/ReferenceArrayField.tsx

+15-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
useReferenceArrayFieldController,
1111
SortPayload,
1212
FilterPayload,
13+
ResourceContextProvider,
1314
} from 'ra-core';
1415

1516
import { fieldPropTypes, PublicFieldProps, InjectedFieldProps } from './types';
@@ -103,9 +104,11 @@ const ReferenceArrayField: FC<ReferenceArrayFieldProps> = props => {
103104
source,
104105
});
105106
return (
106-
<ListContextProvider value={controllerProps}>
107-
<PureReferenceArrayFieldView {...props} {...controllerProps} />
108-
</ListContextProvider>
107+
<ResourceContextProvider value={reference}>
108+
<ListContextProvider value={controllerProps}>
109+
<PureReferenceArrayFieldView {...props} {...controllerProps} />
110+
</ListContextProvider>
111+
</ResourceContextProvider>
109112
);
110113
};
111114

@@ -160,7 +163,14 @@ export interface ReferenceArrayFieldViewProps
160163
}
161164

162165
export const ReferenceArrayFieldView: FC<ReferenceArrayFieldViewProps> = props => {
163-
const { children, pagination, className, reference, ...rest } = props;
166+
const {
167+
children,
168+
pagination,
169+
className,
170+
resource,
171+
reference,
172+
...rest
173+
} = props;
164174
const classes = useStyles(props);
165175
const { loaded } = useListContext(props);
166176

@@ -173,7 +183,7 @@ export const ReferenceArrayFieldView: FC<ReferenceArrayFieldViewProps> = props =
173183
{cloneElement(Children.only(children), {
174184
...sanitizeFieldRestProps(rest),
175185
className,
176-
resource: reference,
186+
resource,
177187
})}{' '}
178188
{pagination &&
179189
props.total !== undefined &&

packages/ra-ui-materialui/src/field/ReferenceField.tsx

+13-10
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
UseReferenceProps,
1111
getResourceLinkPath,
1212
LinkToType,
13+
ResourceContextProvider,
1314
} from 'ra-core';
1415

1516
import LinearProgress from '../layout/LinearProgress';
@@ -82,16 +83,18 @@ const ReferenceField: FC<ReferenceFieldProps> = ({
8283
});
8384

8485
return (
85-
<PureReferenceFieldView
86-
{...props}
87-
{...useReference({
88-
reference: props.reference,
89-
id: get(record, source),
90-
})}
91-
resourceLinkPath={resourceLinkPath}
92-
>
93-
{children}
94-
</PureReferenceFieldView>
86+
<ResourceContextProvider value={props.reference}>
87+
<PureReferenceFieldView
88+
{...props}
89+
{...useReference({
90+
reference: props.reference,
91+
id: get(record, source),
92+
})}
93+
resourceLinkPath={resourceLinkPath}
94+
>
95+
{children}
96+
</PureReferenceFieldView>
97+
</ResourceContextProvider>
9598
);
9699
};
97100

packages/ra-ui-materialui/src/field/ReferenceManyField.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
useReferenceManyFieldController,
77
ListContextProvider,
88
ListControllerProps,
9+
ResourceContextProvider,
910
} from 'ra-core';
1011

1112
import { PublicFieldProps, fieldPropTypes, InjectedFieldProps } from './types';
@@ -92,9 +93,11 @@ export const ReferenceManyField: FC<ReferenceManyFieldProps> = props => {
9293
});
9394

9495
return (
95-
<ListContextProvider value={controllerProps}>
96-
<ReferenceManyFieldView {...props} {...controllerProps} />
97-
</ListContextProvider>
96+
<ResourceContextProvider value={reference}>
97+
<ListContextProvider value={controllerProps}>
98+
<ReferenceManyFieldView {...props} {...controllerProps} />
99+
</ListContextProvider>
100+
</ResourceContextProvider>
98101
);
99102
};
100103

packages/ra-ui-materialui/src/input/ReferenceArrayInput.tsx

+31-25
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
SortPayload,
1010
PaginationPayload,
1111
Translate,
12+
ResourceContextProvider,
1213
} from 'ra-core';
1314

1415
import sanitizeInputRestProps from './sanitizeInputRestProps';
@@ -232,6 +233,7 @@ export const ReferenceArrayInputView = ({
232233
meta,
233234
onChange,
234235
options,
236+
reference,
235237
resource,
236238
setFilter,
237239
setPagination,
@@ -264,31 +266,35 @@ export const ReferenceArrayInputView = ({
264266
return <ReferenceError label={translatedLabel} error={error} />;
265267
}
266268

267-
return React.cloneElement(children, {
268-
allowEmpty,
269-
basePath,
270-
choices,
271-
className,
272-
error,
273-
input,
274-
isRequired,
275-
label: translatedLabel,
276-
meta: {
277-
...meta,
278-
helperText: warning || false,
279-
},
280-
onChange,
281-
options,
282-
resource,
283-
setFilter,
284-
setPagination,
285-
setSort,
286-
source,
287-
translateChoice: false,
288-
limitChoicesToValue: true,
289-
...sanitizeRestProps(rest),
290-
...children.props,
291-
});
269+
return (
270+
<ResourceContextProvider value={reference}>
271+
{React.cloneElement(children, {
272+
allowEmpty,
273+
basePath,
274+
choices,
275+
className,
276+
error,
277+
input,
278+
isRequired,
279+
label: translatedLabel,
280+
meta: {
281+
...meta,
282+
helperText: warning || false,
283+
},
284+
onChange,
285+
options,
286+
resource,
287+
setFilter,
288+
setPagination,
289+
setSort,
290+
source,
291+
translateChoice: false,
292+
limitChoicesToValue: true,
293+
...sanitizeRestProps(rest),
294+
...children.props,
295+
})}
296+
</ResourceContextProvider>
297+
);
292298
};
293299

294300
ReferenceArrayInputView.propTypes = {

packages/ra-ui-materialui/src/input/ReferenceInput.tsx

+25-21
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
ListContextProvider,
1414
ReferenceInputValue,
1515
UseInputValue,
16+
ResourceContextProvider,
1617
} from 'ra-core';
1718

1819
import sanitizeInputRestProps from './sanitizeInputRestProps';
@@ -206,6 +207,7 @@ export const ReferenceInputView: FunctionComponent<ReferenceInputViewProps> = ({
206207
meta,
207208
possibleValues,
208209
resource,
210+
reference,
209211
setFilter,
210212
setPagination,
211213
setSort,
@@ -260,27 +262,29 @@ export const ReferenceInputView: FunctionComponent<ReferenceInputViewProps> = ({
260262
const disabledHelperText = helperText === false ? { helperText } : {};
261263

262264
return (
263-
<ListContextProvider value={possibleValues}>
264-
{cloneElement(children, {
265-
allowEmpty,
266-
classes,
267-
className,
268-
input,
269-
isRequired,
270-
label,
271-
resource,
272-
meta: finalMeta,
273-
source,
274-
choices,
275-
basePath,
276-
setFilter,
277-
setPagination,
278-
setSort,
279-
translateChoice: false,
280-
...disabledHelperText,
281-
...sanitizeRestProps(rest),
282-
})}
283-
</ListContextProvider>
265+
<ResourceContextProvider value={reference}>
266+
<ListContextProvider value={possibleValues}>
267+
{cloneElement(children, {
268+
allowEmpty,
269+
classes,
270+
className,
271+
input,
272+
isRequired,
273+
label,
274+
resource,
275+
meta: finalMeta,
276+
source,
277+
choices,
278+
basePath,
279+
setFilter,
280+
setPagination,
281+
setSort,
282+
translateChoice: false,
283+
...disabledHelperText,
284+
...sanitizeRestProps(rest),
285+
})}
286+
</ListContextProvider>
287+
</ResourceContextProvider>
284288
);
285289
};
286290

packages/ra-ui-materialui/src/list/datagrid/Datagrid.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
useVersion,
1515
Identifier,
1616
Record,
17-
useResourceContext,
1817
} from 'ra-core';
1918
import {
2019
Checkbox,

0 commit comments

Comments
 (0)