diff --git a/studio/components/grid/components/editor/JsonEditor.tsx b/studio/components/grid/components/editor/JsonEditor.tsx index 93ea44dbc9a..43c688281f2 100644 --- a/studio/components/grid/components/editor/JsonEditor.tsx +++ b/studio/components/grid/components/editor/JsonEditor.tsx @@ -6,6 +6,7 @@ import { EditorProps } from '@supabase/react-data-grid' import { useTrackedState } from 'components/grid/store' import { BlockKeys, MonacoEditor, NullValue } from 'components/grid/components/common' import { tryParseJson } from 'lib/helpers' +import { isNil } from 'lodash' interface JsonEditorProps extends EditorProps { onExpandEditor: (column: string, row: TRow) => void @@ -21,7 +22,7 @@ export function JsonEditor({ const gridColumn = state.gridColumns.find((x) => x.name == column.key) const initialValue = row[column.key as keyof TRow] as unknown - const jsonString = prettifyJSON(initialValue ? JSON.stringify(initialValue) : '') + const jsonString = prettifyJSON(!isNil(initialValue) ? JSON.stringify(initialValue) : '') const [isPopoverOpen, setIsPopoverOpen] = useState(true) const [value, setValue] = useState(jsonString) diff --git a/studio/components/grid/components/formatter/JsonFormatter.tsx b/studio/components/grid/components/formatter/JsonFormatter.tsx new file mode 100644 index 00000000000..f53b0a49bfb --- /dev/null +++ b/studio/components/grid/components/formatter/JsonFormatter.tsx @@ -0,0 +1,16 @@ +import * as React from 'react' +import { FormatterProps } from '@supabase/react-data-grid' +import { SupaRow } from '../../types' +import { EmptyValue, NullValue } from '../common' + +export const JsonFormatter = (p: React.PropsWithChildren>) => { + let value = p.row[p.column.key] + + if (value === null) return + if (value === '') return + try { + value = JSON.stringify(value) + } catch (err) {} + + return <>{value} +} diff --git a/studio/components/grid/components/formatter/index.ts b/studio/components/grid/components/formatter/index.ts index 3a1f31f3b94..f53ab6cc653 100644 --- a/studio/components/grid/components/formatter/index.ts +++ b/studio/components/grid/components/formatter/index.ts @@ -1,3 +1,4 @@ export * from './BooleanFormatter' export * from './DefaultFormatter' export * from './ForeignKeyFormatter' +export * from './JsonFormatter' diff --git a/studio/components/grid/utils/gridColumns.tsx b/studio/components/grid/utils/gridColumns.tsx index e85da89d8d7..a6964bb8b04 100644 --- a/studio/components/grid/utils/gridColumns.tsx +++ b/studio/components/grid/utils/gridColumns.tsx @@ -31,6 +31,7 @@ import { BooleanFormatter, DefaultFormatter, ForeignKeyFormatter, + JsonFormatter, } from 'components/grid/components/formatter' export const ESTIMATED_CHARACTER_PIXEL_WIDTH = 9 @@ -149,6 +150,9 @@ function getColumnFormatter(columnDef: SupaColumn, columnType: ColumnType) { return ForeignKeyFormatter } } + case 'json': { + return JsonFormatter + } default: { return DefaultFormatter }