import type { LoaderFunctionArgs, ActionFunctionArgs } from "@remix-run/node"; import { Form, useLoaderData } from "@remix-run/react"; import invariant from "tiny-invariant"; import { getContact, updateContact } from "../data"; import { redirect } from "@remix-run/node"; export const loader = async ({ params, }: LoaderFunctionArgs) => { invariant(params.contactId, "Missing contactId param"); const contact = await getContact(params.contactId); if (!contact) { throw new Response("Not Found", { status: 404 }); } return { contact }; }; export const action = async ({ params, request, }: ActionFunctionArgs) => { invariant(params.contactId, "Missing contactId param"); const formData = await request.formData(); const updates = Object.fromEntries(formData); await updateContact(params.contactId, updates); return redirect(`/contacts/${params.contactId}`); }; export default function EditContact() { const { contact } = useLoaderData(); return (

Name