From 339d81c7975f03a23ef699170c43e6925fce1560 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Fri, 9 Jun 2023 15:17:51 +0200 Subject: [PATCH 1/3] Fix `` `render` prop type --- packages/ra-core/src/controller/record/WithRecord.tsx | 4 ++-- packages/ra-core/src/types.ts | 4 ---- packages/ra-ui-materialui/src/field/FunctionField.tsx | 6 +++--- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/ra-core/src/controller/record/WithRecord.tsx b/packages/ra-core/src/controller/record/WithRecord.tsx index b726e31caaf..2a4c89143ae 100644 --- a/packages/ra-core/src/controller/record/WithRecord.tsx +++ b/packages/ra-core/src/controller/record/WithRecord.tsx @@ -1,4 +1,4 @@ -import { RenderRecordFunction } from '../../types'; +import { ReactElement } from 'react'; import { useRecordContext } from './useRecordContext'; /** @@ -23,6 +23,6 @@ export const WithRecord = = any>({ export interface WithRecordProps< RecordType extends Record = any > { - render: RenderRecordFunction; + render: (record: RecordType) => ReactElement; label?: string; } diff --git a/packages/ra-core/src/types.ts b/packages/ra-core/src/types.ts index 019a79e9ed6..ba366c09641 100644 --- a/packages/ra-core/src/types.ts +++ b/packages/ra-core/src/types.ts @@ -361,10 +361,6 @@ export interface ResourceProps { children?: ReactNode; } -export type RenderRecordFunction< - RecordType extends Record = any -> = (record: RecordType, source?: string) => ReactNode; - export type Exporter = ( data: any, fetchRelatedRecords: ( diff --git a/packages/ra-ui-materialui/src/field/FunctionField.tsx b/packages/ra-ui-materialui/src/field/FunctionField.tsx index 518d93ab475..fd674f626cf 100644 --- a/packages/ra-ui-materialui/src/field/FunctionField.tsx +++ b/packages/ra-ui-materialui/src/field/FunctionField.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { useMemo } from 'react'; -import { RenderRecordFunction, useRecordContext } from 'ra-core'; +import { useMemo, ReactNode } from 'react'; +import { useRecordContext } from 'ra-core'; import PropTypes from 'prop-types'; import Typography, { TypographyProps } from '@mui/material/Typography'; @@ -50,5 +50,5 @@ export interface FunctionFieldProps< RecordType extends Record = any > extends FieldProps, Omit { - render: RenderRecordFunction; + render: (record: RecordType, source?: string) => ReactNode; } From bae25ba576562410601b60cf8658edb6aa624c95 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Fri, 9 Jun 2023 15:41:54 +0200 Subject: [PATCH 2/3] fix demo --- examples/demo/src/orders/NbItemsField.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/demo/src/orders/NbItemsField.tsx b/examples/demo/src/orders/NbItemsField.tsx index 0894118c184..2888fad0354 100644 --- a/examples/demo/src/orders/NbItemsField.tsx +++ b/examples/demo/src/orders/NbItemsField.tsx @@ -1,8 +1,8 @@ import * as React from 'react'; -import { FunctionField, RenderRecordFunction } from 'react-admin'; +import { FunctionField } from 'react-admin'; import { Order } from '../types'; -const render: RenderRecordFunction = record => record.basket.length; +const render = (record: Order) => record.basket.length; const NbItemsField = () => render={render} />; From 7e099487a249a1c50edd129c4fb76871f7c89766 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kaiser Date: Fri, 9 Jun 2023 15:58:33 +0200 Subject: [PATCH 3/3] WithRecord sould actually support ReactNode --- packages/ra-core/src/controller/record/WithRecord.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/ra-core/src/controller/record/WithRecord.tsx b/packages/ra-core/src/controller/record/WithRecord.tsx index 2a4c89143ae..2b0b979b33a 100644 --- a/packages/ra-core/src/controller/record/WithRecord.tsx +++ b/packages/ra-core/src/controller/record/WithRecord.tsx @@ -1,4 +1,5 @@ -import { ReactElement } from 'react'; +import * as React from 'react'; +import { ReactNode } from 'react'; import { useRecordContext } from './useRecordContext'; /** @@ -17,12 +18,12 @@ export const WithRecord = = any>({ render, }: WithRecordProps) => { const record = useRecordContext(); - return record ? render(record) : null; + return record ? <>{render(record)} : null; }; export interface WithRecordProps< RecordType extends Record = any > { - render: (record: RecordType) => ReactElement; + render: (record: RecordType) => ReactNode; label?: string; }