diff --git a/packages/toolpad-core/src/Crud/Show.tsx b/packages/toolpad-core/src/Crud/Show.tsx index 4b2082e4d32..424338af59b 100644 --- a/packages/toolpad-core/src/Crud/Show.tsx +++ b/packages/toolpad-core/src/Crud/Show.tsx @@ -21,7 +21,7 @@ import { useLocaleText } from '../AppProvider/LocalizationProvider'; import { CrudContext } from '../shared/context'; import { DataSourceCache } from './cache'; import { useCachedDataSource } from './useCachedDataSource'; -import type { DataField, DataModel, DataModelId, DataSource } from './types'; +import type { DataField, DataFieldFormValue, DataModel, DataModelId, DataSource } from './types'; import { CRUD_DEFAULT_LOCALE_TEXT, type CRUDLocaleText } from './localeText'; import { PageContainer, type PageContainerProps } from '../PageContainer'; import { useActivePage } from '../useActivePage'; @@ -299,7 +299,15 @@ function Show(props: ShowProps) { {fields .filter(({ type }) => type !== 'actions' && type !== 'custom') .map((showField) => { - const { field, headerName } = showField; + const { field, headerName, renderShowField } = showField; + + if (renderShowField) { + return renderShowField({ + value: (data?.[field] ?? null) as DataFieldFormValue, + headerName, + data, + }); + } const renderedField = renderField(showField); diff --git a/packages/toolpad-core/src/Crud/types.ts b/packages/toolpad-core/src/Crud/types.ts index 248fc5fc94c..51355c24727 100644 --- a/packages/toolpad-core/src/Crud/types.ts +++ b/packages/toolpad-core/src/Crud/types.ts @@ -30,12 +30,23 @@ export type DataFieldRenderFormField React.ReactNode; +export type DataFieldRenderShowField = ({ + value, + headerName, + data, +}: { + value: F; + headerName?: string; + data: DataModel; +}) => React.ReactNode; + export type DataField = RemappedOmit< GridColDef, 'type' > & { type?: GridColType; renderFormField?: DataFieldRenderFormField; + renderShowField?: DataFieldRenderShowField; }; export interface DataSource {