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-[13px] font-semibold font-korean bg-bg-2 border border-border rounded px-2 text-text-1 focus:border-primary-cyan focus:outline-none" />
{menu.id}
) : ( <> {menu.icon}
{menu.label}
{menu.id}
)}
) } export default SortableMenuItem