feat(dashboard): adiciona widgets movíveis e ocultáveis

- Cria SortableWidget com @dnd-kit para drag-and-drop
- Cria DashboardGridEditable com modo de edição
- Cria WidgetSettingsDialog para gerenciar visibilidade
- Cria server actions para persistir preferências
This commit is contained in:
Felipe Coutinho
2026-01-20 16:36:33 +00:00
parent d209b7401c
commit 540b250a47
4 changed files with 513 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
"use client";
import { cn } from "@/lib/utils";
import { useSortable } from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import type { ReactNode } from "react";
type SortableWidgetProps = {
id: string;
children: ReactNode;
isEditing: boolean;
};
export function SortableWidget({
id,
children,
isEditing,
}: SortableWidgetProps) {
const {
attributes,
listeners,
setNodeRef,
transform,
transition,
isDragging,
} = useSortable({ id, disabled: !isEditing });
const style = {
transform: CSS.Transform.toString(transform),
transition,
};
return (
<div
ref={setNodeRef}
style={style}
className={cn(
"relative",
isDragging && "z-50 opacity-90",
isEditing && "cursor-grab active:cursor-grabbing",
)}
{...(isEditing ? { ...attributes, ...listeners } : {})}
>
{children}
</div>
);
}