"use client"; import { useState } from "react"; import { ArrowDown, ArrowUp, Eye, EyeOff, GripVertical, Save, } from "lucide-react"; import { FormActions, FormShell, PrimaryButton, } from "@/components/admin/form"; import { saveNavMenu } from "@/lib/admin-actions"; import { serializeNavItems, type NavItem } from "@/lib/nav"; export function MenuForm({ initial }: { initial: NavItem[] }) { const [items, setItems] = useState(initial); function move(index: number, dir: -1 | 1) { const target = index + dir; if (target < 0 || target >= items.length) return; setItems((prev) => { const next = [...prev]; [next[index], next[target]] = [next[target], next[index]]; return next; }); } function toggleVisible(index: number) { setItems((prev) => prev.map((it, i) => i === index ? { ...it, visible: !it.visible } : it, ), ); } function setLabel(index: number, value: string) { setItems((prev) => prev.map((it, i) => (i === index ? { ...it, label: value } : it)), ); } const payload = serializeNavItems( items.map((i) => ({ key: i.key, visible: i.visible, label: i.label })), ); return (
    {items.map((item, i) => (
  • setLabel(i, e.target.value)} className="min-w-0 flex-1 rounded-lg border border-[var(--border)] bg-white px-3 py-1.5 text-sm outline-none transition focus:border-[var(--sky)] focus:ring-2 focus:ring-[var(--sky)]/20" /> {item.href} {item.mega && ( Mega menü )}
  • ))}

Sıralama ok tuşlarıyla değişir. Göz simgesiyle bir öğeyi menüden gizleyebilirsiniz. “Hizmetler” öğesi mega menü olarak açılır.

Menüyü kaydet
); }