Update UI support for boolean to null in grid

This commit is contained in:
Joshen Lim committed 2023-03-10 17:12:24 +08:00
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