mirror of
https://github.com/supabase/supabase.git
synced 2026-10-08 10:55:06 +03:00
* new home top * misc clean ups * branching truncate * revert to button * fixes * Add comments + small style nudges * Add comment * nit * Use Timestampinfo * final final final v4 * I swear last nit i found * FIX --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { useSortable } from '@dnd-kit/sortable'
|
|
import { GripVertical } from 'lucide-react'
|
|
import type { CSSProperties, ReactNode } from 'react'
|
|
import { cn } from 'ui'
|
|
|
|
type SortableSectionProps = {
|
|
id: string
|
|
children: ReactNode
|
|
}
|
|
|
|
export const SortableSection = ({ id, children }: SortableSectionProps) => {
|
|
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
id,
|
|
})
|
|
|
|
const style: CSSProperties = {
|
|
transform: transform
|
|
? `translate3d(${Math.round(transform.x)}px, ${Math.round(transform.y)}px, 0)`
|
|
: undefined,
|
|
transition,
|
|
}
|
|
|
|
return (
|
|
<div ref={setNodeRef} style={style} className="relative will-change-transform">
|
|
<button
|
|
aria-label="Drag to reorder section"
|
|
className="absolute -left-6 top-2 text-foreground-muted hover:text-foreground focus:outline-none cursor-grab active:cursor-grabbing"
|
|
{...attributes}
|
|
{...listeners}
|
|
>
|
|
<GripVertical size={14} />
|
|
</button>
|
|
<div className={cn(isDragging && 'opacity-70')}>{children}</div>
|
|
</div>
|
|
)
|
|
}
|