import { Button } from "@minmon/ui/components/button"; import { useForm } from "@tanstack/react-form"; import { useMutation, useQuery } from "@tanstack/react-query"; import { createFileRoute, useNavigate } from "@tanstack/react-router"; import { toast } from "sonner"; import { FormCard, PageSection, QueryStateCard, SelectField, TextAreaField, TextField } from "@/components/dashboard-ui"; import { queryClient, trpc, trpcClient } from "@/utils/trpc"; export const Route = createFileRoute("/dashboard/notes_/new")({ component: RouteComponent, }); type NoteFormValues = { serverId: string; title: string; category: string; content: string; }; function RouteComponent() { const navigate = useNavigate(); const servers = useQuery(trpc.servers.list.queryOptions()); const createNote = useMutation({ mutationFn: async (values: NoteFormValues) => trpcClient.notes.create.mutate({ serverId: values.serverId, title: values.title, category: values.category || null, content: values.content, }), onSuccess: async (created) => { toast.success("Note created"); await queryClient.invalidateQueries(); navigate({ to: "/dashboard/notes/$noteId", params: { noteId: created.id } }); }, onError: (error) => toast.error(error.message), }); const defaultValues: NoteFormValues = { serverId: "", title: "", category: "general", content: "", }; const form = useForm({ defaultValues, onSubmit: async ({ value }) => { await createNote.mutateAsync(value); }, }); if (servers.isLoading) { return ; } if (servers.isError || !servers.data) { return ; } const serverOptions = servers.data.map((item) => ({ value: item.id, label: `${item.name} (${item.id})`, })); return (
{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} > ({ isSubmitting: state.isSubmitting })}> {({ isSubmitting }) => } } > {(field) => ( )}
{(field) => field.handleChange(e.target.value)} />} {(field) => field.handleChange(e.target.value)} />}
{(field) => field.handleChange(e.target.value)} className="min-h-40" />}
); }