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 { createTranslation } from "~/models/translation.server"; import { requireUserId } from "~/session.server"; export const action = async ({ request }: ActionArgs) => { const userId = await requireUserId(request); const formData = await request.formData(); const lang = formData.get("lang"); const text = formData.get("text"); if (typeof lang !== "string" || lang.length === 0) { return json( { errors: { text: null, lang: "Lang is required" } }, { status: 400 } ); } if (typeof text !== "string" || text.length === 0) { return json( { errors: { text: "Text is required", lang: null } }, { status: 400 } ); } const result = "test"; const t = await createTranslation({ lang, text, result, userId }); return redirect(`/t/${t.id}`); }; export default function NewTranslationPage() { const actionData = useActionData(); const langRef = useRef(null); const textRef = useRef(null); useEffect(() => { if (actionData?.errors?.lang) { langRef.current?.focus(); } else if (actionData?.errors?.text) { textRef.current?.focus(); } }, [actionData]); return (
{actionData?.errors?.lang ? (
{actionData.errors.lang}
) : null}