mirror of
https://github.com/supabase/supabase.git
synced 2026-10-11 20:35:07 +03:00
Update UI support for boolean to null in grid
This commit is contained in:
1 parent
7d07ae8932
commit
efbf7cb0d2
4 files changed
+41
-40
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import * as React from 'react'
|
||||
import { EditorProps } from '@supabase/react-data-grid'
|
||||
import { Toggle } from 'ui'
|
||||
|
||||
export function BooleanEditor<TRow, TSummaryRow = unknown>({
|
||||
row,
|
||||
@@ -7,23 +8,17 @@ export function BooleanEditor<TRow, TSummaryRow = unknown>({
|
||||
onRowChange,
|
||||
onClose,
|
||||
}: EditorProps<TRow, TSummaryRow>) {
|
||||
function onChange(event: React.ChangeEvent<HTMLInputElement>) {
|
||||
onRowChange({ ...row, [column.key]: event.target.checked })
|
||||
}
|
||||
|
||||
function onBlur() {
|
||||
onClose(true)
|
||||
}
|
||||
const onBlur = () => onClose(true)
|
||||
const onChange = (value: boolean) => onRowChange({ ...row, [column.key]: value })
|
||||
|
||||
return (
|
||||
<div className="sb-grid-checkbox-editor">
|
||||
<input
|
||||
className="sb-grid-checkbox-editor__input"
|
||||
checked={row[column.key as keyof TRow] as unknown as boolean}
|
||||
<div className="sb-grid-checkbox-editor flex items-center">
|
||||
<Toggle
|
||||
// @ts-ignore
|
||||
onChange={onChange}
|
||||
onBlur={onBlur}
|
||||
type="checkbox"
|
||||
style={{ margin: 'auto' }}
|
||||
checked={row[column.key as keyof TRow] as unknown as boolean}
|
||||
className="mx-auto translate-y-[1px]"
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import React, { useEffect } from 'react'
|
||||
import * as Tooltip from '@radix-ui/react-tooltip'
|
||||
import { EditorProps } from '@supabase/react-data-grid'
|
||||
import { Button, IconX } from 'ui'
|
||||
import { Toggle, Button, IconX } from 'ui'
|
||||
|
||||
export function NullableBooleanEditor<TRow, TSummaryRow = unknown>({
|
||||
row,
|
||||
@@ -17,35 +18,41 @@ export function NullableBooleanEditor<TRow, TSummaryRow = unknown>({
|
||||
}
|
||||
}, [])
|
||||
|
||||
function onChange(event: React.ChangeEvent<HTMLInputElement>) {
|
||||
onRowChange({ ...row, [column.key]: event.target.checked })
|
||||
}
|
||||
|
||||
function onBlur() {
|
||||
onClose(true)
|
||||
}
|
||||
|
||||
function onClear() {
|
||||
onRowChange({ ...row, [column.key]: null }, true)
|
||||
}
|
||||
const onBlur = () => onClose(true)
|
||||
const onClear = () => onRowChange({ ...row, [column.key]: null }, true)
|
||||
const onChange = (value: boolean) => onRowChange({ ...row, [column.key]: value })
|
||||
|
||||
return (
|
||||
<div className="sb-grid-checkbox-editor">
|
||||
<input
|
||||
className="sb-grid-checkbox-editor__input"
|
||||
checked={value === null ? false : value}
|
||||
<div className="sb-grid-checkbox-editor flex items-center">
|
||||
<Toggle
|
||||
// @ts-ignore
|
||||
onChange={onChange}
|
||||
onBlur={onBlur}
|
||||
type="checkbox"
|
||||
style={{ margin: 'auto' }}
|
||||
/>
|
||||
<Button
|
||||
type="text"
|
||||
title="Clear"
|
||||
icon={<IconX size="tiny" strokeWidth={2} />}
|
||||
onClick={onClear}
|
||||
style={{ padding: '3px', margin: 'auto 5px auto auto' }}
|
||||
checked={row[column.key as keyof TRow] as unknown as boolean}
|
||||
className="mx-auto translate-y-[1px]"
|
||||
/>
|
||||
<Tooltip.Root delayDuration={0}>
|
||||
<Tooltip.Trigger className="flex items-center">
|
||||
<Button
|
||||
type="text"
|
||||
title="Set to NULL"
|
||||
icon={<IconX size="tiny" strokeWidth={2} />}
|
||||
className="px-1 mr-2"
|
||||
onClick={onClear}
|
||||
/>
|
||||
</Tooltip.Trigger>
|
||||
<Tooltip.Content side="bottom">
|
||||
<Tooltip.Arrow className="radix-tooltip-arrow" />
|
||||
<div
|
||||
className={[
|
||||
'rounded bg-scale-100 py-1 px-2 leading-none shadow',
|
||||
'border border-scale-200',
|
||||
].join(' ')}
|
||||
>
|
||||
<span className="text-xs text-scale-1200">Set to NULL</span>
|
||||
</div>
|
||||
</Tooltip.Content>
|
||||
</Tooltip.Root>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -6,5 +6,5 @@ import { NullValue } from '../common'
|
||||
export const BooleanFormatter = (p: React.PropsWithChildren<FormatterProps<SupaRow, unknown>>) => {
|
||||
const value = p.row[p.column.key] as boolean | null
|
||||
if (value === null) return <NullValue />
|
||||
return <>{value ? 'true' : 'false'}</>
|
||||
return <>{value ? 'TRUE' : 'FALSE'}</>
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import { GridProps, SupaRow } from '../../types'
|
||||
import { useDispatch, useTrackedState } from '../../store'
|
||||
import RowRenderer from './RowRenderer'
|
||||
import AwesomeDebouncePromise from 'awesome-debounce-promise'
|
||||
import { useTableRowUpdateMutation } from 'data/table-rows/table-row-update-mutation'
|
||||
|
||||
function rowKeyGetter(row: SupaRow) {
|
||||
return row?.idx ?? -1
|
||||
|
||||
Reference in new issue
Block a user