import data from '@emoji-mart/data'; import EmojiPicker from '@emoji-mart/react'; import { useSortable } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { type MenuConfigItem } from '@common/services/authApi'; // ─── 메뉴 항목 (Sortable) ──────────────────────────────────── export interface SortableMenuItemProps { menu: MenuConfigItem; idx: number; totalCount: number; isEditing: boolean; emojiPickerId: string | null; emojiPickerRef: React.RefObject; onToggle: (id: string) => void; onMove: (idx: number, direction: -1 | 1) => void; onEditStart: (id: string) => void; onEditEnd: () => void; onEmojiPickerToggle: (id: string | null) => void; onLabelChange: (id: string, value: string) => void; onEmojiSelect: (emoji: { native: string }) => void; } function SortableMenuItem({ menu, idx, totalCount, isEditing, emojiPickerId, emojiPickerRef, onToggle, onMove, onEditStart, onEditEnd, onEmojiPickerToggle, onLabelChange, onEmojiSelect, }: SortableMenuItemProps) { const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: menu.id, }); const style = { transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.4 : 1, zIndex: isDragging ? 50 : undefined, }; return (
{idx + 1} {isEditing ? ( <>
{emojiPickerId === menu.id && (
)}
onLabelChange(menu.id, e.target.value)} className="w-full h-8 text-title-4 font-semibold font-korean bg-bg-elevated border border-stroke rounded px-2 text-fg focus:border-color-accent focus:outline-none" />
{menu.id}
) : ( <> {menu.icon}
{menu.label}
{menu.id}
)}
); } export default SortableMenuItem;