mirror of
https://github.com/supabase/supabase.git
synced 2026-05-23 10:21:37 +08:00
## Problem The `_Shadcn_` suffix isn't needed anymore on `Command` components ## Solution - Remove the `_Shadcn_` suffix - Simplify UI package exports - Apply prettier <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Simplified command component imports and exports across the UI library by removing internal naming aliases and adopting direct component references. Updated the public UI package barrel export to use wildcard re-exports for cleaner API surface. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46153?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
104 lines
3.7 KiB
TypeScript
104 lines
3.7 KiB
TypeScript
import { GripVertical, Settings2 } from 'lucide-react'
|
|
import { useId, useMemo, useState } from 'react'
|
|
import {
|
|
Checkbox,
|
|
Command,
|
|
CommandEmpty,
|
|
CommandGroup,
|
|
CommandInput,
|
|
CommandItem,
|
|
CommandList,
|
|
Popover,
|
|
PopoverContent,
|
|
PopoverTrigger,
|
|
} from 'ui'
|
|
|
|
import { ButtonTooltip } from '../ButtonTooltip'
|
|
import { Sortable, SortableDragHandle, SortableItem } from './primitives/Sortable'
|
|
import { useDataTable } from './providers/DataTableProvider'
|
|
|
|
export function DataTableViewOptions() {
|
|
const { table, enableColumnOrdering } = useDataTable()
|
|
const [open, setOpen] = useState(false)
|
|
const [drag, setDrag] = useState(false)
|
|
const [search, setSearch] = useState('')
|
|
const listboxId = useId()
|
|
|
|
const columnOrder = table.getState().columnOrder
|
|
|
|
const sortedColumns = useMemo(
|
|
() =>
|
|
table.getAllColumns().sort((a, b) => {
|
|
return columnOrder.indexOf(a.id) - columnOrder.indexOf(b.id)
|
|
}),
|
|
[columnOrder]
|
|
)
|
|
|
|
return (
|
|
<Popover open={open} onOpenChange={setOpen}>
|
|
<PopoverTrigger asChild>
|
|
<ButtonTooltip
|
|
type="default"
|
|
size="tiny"
|
|
role="combobox"
|
|
aria-expanded={open}
|
|
aria-controls={listboxId}
|
|
className="w-[26px]"
|
|
icon={<Settings2 className="text-foreground" />}
|
|
tooltip={{ content: { side: 'bottom', text: 'Toggle column visibility' } }}
|
|
/>
|
|
</PopoverTrigger>
|
|
<PopoverContent id={listboxId} side="bottom" align="end" className="w-[200px] p-0">
|
|
<Command>
|
|
<CommandInput
|
|
value={search}
|
|
onValueChange={setSearch}
|
|
placeholder="Search columns..."
|
|
className="text-xs"
|
|
/>
|
|
<CommandList>
|
|
<CommandEmpty>No option found.</CommandEmpty>
|
|
<CommandGroup>
|
|
<Sortable
|
|
value={sortedColumns.map((c) => ({ id: c.id }))}
|
|
onValueChange={(items) => table.setColumnOrder(items.map((c) => c.id))}
|
|
overlay={<div className="h-8 w-full rounded-md bg-muted/60" />}
|
|
onDragStart={() => setDrag(true)}
|
|
onDragEnd={() => setDrag(false)}
|
|
onDragCancel={() => setDrag(false)}
|
|
>
|
|
{sortedColumns
|
|
.filter(
|
|
(column) => typeof column.accessorFn !== 'undefined' && column.getCanHide()
|
|
)
|
|
.map((column) => (
|
|
<SortableItem key={column.id} value={column.id} asChild>
|
|
<CommandItem
|
|
value={column.id}
|
|
onSelect={() => column.toggleVisibility(!column.getIsVisible())}
|
|
className="capitalize p-1"
|
|
disabled={drag}
|
|
>
|
|
<Checkbox checked={column.getIsVisible()} className="mr-2" />
|
|
<span>{(column.columnDef.meta as any)?.label || column.id}</span>
|
|
{enableColumnOrdering && !search ? (
|
|
<SortableDragHandle
|
|
type="text"
|
|
size="tiny"
|
|
className="ml-auto size-5 text-muted-foreground hover:text-foreground focus:bg-muted focus:text-foreground"
|
|
>
|
|
<GripVertical className="size-4" aria-hidden="true" />
|
|
</SortableDragHandle>
|
|
) : null}
|
|
</CommandItem>
|
|
</SortableItem>
|
|
))}
|
|
</Sortable>
|
|
</CommandGroup>
|
|
</CommandList>
|
|
</Command>
|
|
</PopoverContent>
|
|
</Popover>
|
|
)
|
|
}
|