diff --git a/packages/toolpad-studio-components/src/DataGrid.tsx b/packages/toolpad-studio-components/src/DataGrid.tsx index ce94983bc03..f14cecc55cd 100644 --- a/packages/toolpad-studio-components/src/DataGrid.tsx +++ b/packages/toolpad-studio-components/src/DataGrid.tsx @@ -483,7 +483,7 @@ export function parseColumns(columns: SerializableGridColumns): GridColDef[] { return columns.map(({ type: colType, ...column }) => { const isIdColumn = column.field === 'id'; - let baseColumn: Omit = { editable: true }; + let baseColumn: Omit = {}; if (isIdColumn) { baseColumn = { @@ -1134,6 +1134,9 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( setActionResult, ); + const useDataProvider = useNonNullableContext(UseDataProviderContext); + const { dataProvider } = useDataProvider(dataProviderId || null); + const nodeRuntime = useNode(); const handleResize = React.useMemo( @@ -1235,6 +1238,11 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( [selection?.id], ); + const isRowUpdateModelAvailable = React.useMemo( + () => !!dataProvider?.updateRecord, + [dataProviderProps], + ); + const columns: GridColDef[] = React.useMemo( () => (columnsProp ? parseColumns(columnsProp) : []), [columnsProp], @@ -1262,7 +1270,18 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( }, [nodeRuntime, rows]); const renderedColumns = React.useMemo(() => { - const result = [...columns]; + const mapEditableToColumns = columns.map((column) => { + // Don't touch the existing columns with `editable` value, example: `id` column + if (column.editable || column.editable === false) { + return column; + } + + column.editable = isRowUpdateModelAvailable; + + return column; + }); + + const result = [...mapEditableToColumns]; if (getProviderActions) { result.push({ @@ -1276,7 +1295,7 @@ const DataGridComponent = React.forwardRef(function DataGridComponent( } return result; - }, [columns, getProviderActions]); + }, [columns, getProviderActions, isRowUpdateModelAvailable]); const appHost = useAppHost(); const isProPlan = appHost.plan === 'pro';