"use client"; import { useRouter, useSearchParams } from "next/navigation"; import { useEffect, useState, useTransition } from "react"; import { LoaderCircleIcon, PlusIcon } from "lucide-react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Textarea } from "@/components/ui/textarea"; import { createRoleAction } from "@/server/actions"; export function NewRoleDialog() { const router = useRouter(); const params = useSearchParams(); const [open, setOpen] = useState(false); const [pending, startTransition] = useTransition(); const [form, setForm] = useState({ company: "", title: "", location: "", startDate: "", endDate: "", isCurrent: false, background: "", }); useEffect(() => { if (params.get("new") === "role") setOpen(true); }, [params]); const submit = () => { if (!form.company.trim() || !form.title.trim()) { toast.error("Company and title are required."); return; } startTransition(async () => { const id = await createRoleAction(form); setOpen(false); setForm({ company: "", title: "", location: "", startDate: "", endDate: "", isCurrent: false, background: "", }); toast.success("Role added"); router.push(`/me/${id}`); }); }; return ( Add a role Just the shell is fine — you can dump the detail in afterwards, or let Claude do it.
setForm({ ...form, company: event.target.value })} placeholder="Stripe" />
setForm({ ...form, title: event.target.value })} placeholder="Senior Software Engineer" />
setForm({ ...form, location: event.target.value })} placeholder="Remote" />
setForm({ ...form, isCurrent: checked })} />
setForm({ ...form, startDate: event.target.value })} />
setForm({ ...form, endDate: event.target.value })} />