Skip to content

Commit

Permalink
Merge pull request #5502 from marmelab/Change-RecordContext-in-Refere…
Browse files Browse the repository at this point in the history
…nce-elements

Change RecordContext in Reference elements
  • Loading branch information
djhi authored Nov 9, 2020
2 parents 3e44ce5 + 0a641d4 commit 4333666
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ const useReferenceArrayFieldController = (
onUnselectItems,
page,
perPage,
resource,
resource: reference,
selectedIds,
setFilters,
setPage,
Expand Down
20 changes: 15 additions & 5 deletions packages/ra-ui-materialui/src/field/ReferenceArrayField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
useReferenceArrayFieldController,
SortPayload,
FilterPayload,
ResourceContextProvider,
} from 'ra-core';

import { fieldPropTypes, PublicFieldProps, InjectedFieldProps } from './types';
Expand Down Expand Up @@ -103,9 +104,11 @@ const ReferenceArrayField: FC<ReferenceArrayFieldProps> = props => {
source,
});
return (
<ListContextProvider value={controllerProps}>
<PureReferenceArrayFieldView {...props} {...controllerProps} />
</ListContextProvider>
<ResourceContextProvider value={reference}>
<ListContextProvider value={controllerProps}>
<PureReferenceArrayFieldView {...props} {...controllerProps} />
</ListContextProvider>
</ResourceContextProvider>
);
};

Expand Down Expand Up @@ -160,7 +163,14 @@ export interface ReferenceArrayFieldViewProps
}

export const ReferenceArrayFieldView: FC<ReferenceArrayFieldViewProps> = props => {
const { children, pagination, className, reference, ...rest } = props;
const {
children,
pagination,
className,
resource,
reference,
...rest
} = props;
const classes = useStyles(props);
const { loaded } = useListContext(props);

Expand All @@ -173,7 +183,7 @@ export const ReferenceArrayFieldView: FC<ReferenceArrayFieldViewProps> = props =
{cloneElement(Children.only(children), {
...sanitizeFieldRestProps(rest),
className,
resource: reference,
resource,
})}{' '}
{pagination &&
props.total !== undefined &&
Expand Down
23 changes: 13 additions & 10 deletions packages/ra-ui-materialui/src/field/ReferenceField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
UseReferenceProps,
getResourceLinkPath,
LinkToType,
ResourceContextProvider,
} from 'ra-core';

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

return (
<PureReferenceFieldView
{...props}
{...useReference({
reference: props.reference,
id: get(record, source),
})}
resourceLinkPath={resourceLinkPath}
>
{children}
</PureReferenceFieldView>
<ResourceContextProvider value={props.reference}>
<PureReferenceFieldView
{...props}
{...useReference({
reference: props.reference,
id: get(record, source),
})}
resourceLinkPath={resourceLinkPath}
>
{children}
</PureReferenceFieldView>
</ResourceContextProvider>
);
};

Expand Down
9 changes: 6 additions & 3 deletions packages/ra-ui-materialui/src/field/ReferenceManyField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
useReferenceManyFieldController,
ListContextProvider,
ListControllerProps,
ResourceContextProvider,
} from 'ra-core';

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

return (
<ListContextProvider value={controllerProps}>
<ReferenceManyFieldView {...props} {...controllerProps} />
</ListContextProvider>
<ResourceContextProvider value={reference}>
<ListContextProvider value={controllerProps}>
<ReferenceManyFieldView {...props} {...controllerProps} />
</ListContextProvider>
</ResourceContextProvider>
);
};

Expand Down
56 changes: 31 additions & 25 deletions packages/ra-ui-materialui/src/input/ReferenceArrayInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
SortPayload,
PaginationPayload,
Translate,
ResourceContextProvider,
} from 'ra-core';

import sanitizeInputRestProps from './sanitizeInputRestProps';
Expand Down Expand Up @@ -232,6 +233,7 @@ export const ReferenceArrayInputView = ({
meta,
onChange,
options,
reference,
resource,
setFilter,
setPagination,
Expand Down Expand Up @@ -264,31 +266,35 @@ export const ReferenceArrayInputView = ({
return <ReferenceError label={translatedLabel} error={error} />;
}

return React.cloneElement(children, {
allowEmpty,
basePath,
choices,
className,
error,
input,
isRequired,
label: translatedLabel,
meta: {
...meta,
helperText: warning || false,
},
onChange,
options,
resource,
setFilter,
setPagination,
setSort,
source,
translateChoice: false,
limitChoicesToValue: true,
...sanitizeRestProps(rest),
...children.props,
});
return (
<ResourceContextProvider value={reference}>
{React.cloneElement(children, {
allowEmpty,
basePath,
choices,
className,
error,
input,
isRequired,
label: translatedLabel,
meta: {
...meta,
helperText: warning || false,
},
onChange,
options,
resource,
setFilter,
setPagination,
setSort,
source,
translateChoice: false,
limitChoicesToValue: true,
...sanitizeRestProps(rest),
...children.props,
})}
</ResourceContextProvider>
);
};

ReferenceArrayInputView.propTypes = {
Expand Down
46 changes: 25 additions & 21 deletions packages/ra-ui-materialui/src/input/ReferenceInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
ListContextProvider,
ReferenceInputValue,
UseInputValue,
ResourceContextProvider,
} from 'ra-core';

import sanitizeInputRestProps from './sanitizeInputRestProps';
Expand Down Expand Up @@ -206,6 +207,7 @@ export const ReferenceInputView: FunctionComponent<ReferenceInputViewProps> = ({
meta,
possibleValues,
resource,
reference,
setFilter,
setPagination,
setSort,
Expand Down Expand Up @@ -260,27 +262,29 @@ export const ReferenceInputView: FunctionComponent<ReferenceInputViewProps> = ({
const disabledHelperText = helperText === false ? { helperText } : {};

return (
<ListContextProvider value={possibleValues}>
{cloneElement(children, {
allowEmpty,
classes,
className,
input,
isRequired,
label,
resource,
meta: finalMeta,
source,
choices,
basePath,
setFilter,
setPagination,
setSort,
translateChoice: false,
...disabledHelperText,
...sanitizeRestProps(rest),
})}
</ListContextProvider>
<ResourceContextProvider value={reference}>
<ListContextProvider value={possibleValues}>
{cloneElement(children, {
allowEmpty,
classes,
className,
input,
isRequired,
label,
resource,
meta: finalMeta,
source,
choices,
basePath,
setFilter,
setPagination,
setSort,
translateChoice: false,
...disabledHelperText,
...sanitizeRestProps(rest),
})}
</ListContextProvider>
</ResourceContextProvider>
);
};

Expand Down
1 change: 0 additions & 1 deletion packages/ra-ui-materialui/src/list/datagrid/Datagrid.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {
useVersion,
Identifier,
Record,
useResourceContext,
} from 'ra-core';
import {
Checkbox,
Expand Down

0 comments on commit 4333666

Please sign in to comment.