"use client"; import { FormEvent, useState, useTransition } from "react"; import { createSocialLinkAction, deleteSocialLinkAction, moveSocialLinkAction, toggleSocialLinkAction } from "@/actions/social-links"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; type SocialLinksFormProps = { links: SocialLinkItem[]; }; type SocialLinkItem = { id: string; label: string; url: string; sortOrder: number; isVisible: boolean; }; export function SocialLinksForm({ links }: SocialLinksFormProps) { const [isPending, startTransition] = useTransition(); const [message, setMessage] = useState(null); const [isError, setIsError] = useState(false); const [label, setLabel] = useState(""); const [url, setUrl] = useState(""); const [isVisible, setIsVisible] = useState(true); function runAction(executor: () => Promise<{ success: boolean; message: string }>) { setMessage(null); startTransition(async () => { const result = await executor(); setMessage(result.message); setIsError(!result.success); if (result.success) { setLabel(""); setUrl(""); setIsVisible(true); } }); } function handleCreate(event: FormEvent) { event.preventDefault(); runAction(async () => { const formData = new FormData(); formData.set("label", label); formData.set("url", url); if (isVisible) { formData.set("isVisible", "on"); } return createSocialLinkAction(formData); }); } function handleDelete(id: string) { runAction(async () => { const formData = new FormData(); formData.set("id", id); return deleteSocialLinkAction(formData); }); } function handleToggle(id: string) { runAction(async () => { const formData = new FormData(); formData.set("id", id); return toggleSocialLinkAction(formData); }); } function handleMove(id: string, direction: "up" | "down") { runAction(async () => { const formData = new FormData(); formData.set("id", id); formData.set("direction", direction); return moveSocialLinkAction(formData); }); } return (

Add Social/Contact Link

{message ?

{message}

: null} {links.length === 0 ? (
No social links yet.
) : (
{links.map((link, index) => (

{link.label}

{link.url}

{!link.isVisible ?

Hidden on public profile

: null}
))}
)}
); }