import type { ActionArgs } from "@remix-run/node"; import { json, redirect } from "@remix-run/node"; import { Form, useActionData } from "@remix-run/react"; import { useEffect, useRef } from "react"; import { createNote } from "~/models/note.server"; import { requireUserId } from "~/session.server"; export const action = async ({ request }: ActionArgs) => { const userId = await requireUserId(request); const formData = await request.formData(); const title = formData.get("title"); const body = formData.get("body"); if (typeof title !== "string" || title.length === 0) { return json( { errors: { body: null, title: "Title is required" } }, { status: 400 } ); } if (typeof body !== "string" || body.length === 0) { return json( { errors: { body: "Body is required", title: null } }, { status: 400 } ); } const note = await createNote({ body, title, userId }); return redirect(`/notes/${note.id}`); }; export default function NewNotePage() { const actionData = useActionData(); const titleRef = useRef(null); const bodyRef = useRef(null); useEffect(() => { if (actionData?.errors?.title) { titleRef.current?.focus(); } else if (actionData?.errors?.body) { bodyRef.current?.focus(); } }, [actionData]); return (
{actionData?.errors?.title ? (
{actionData.errors.title}
) : null}