Initial commit from create-react-router
This commit is contained in:
60
app/routes/home.tsx
Normal file
60
app/routes/home.tsx
Normal file
@@ -0,0 +1,60 @@
|
||||
import { database } from "~/database/context";
|
||||
import * as schema from "~/database/schema";
|
||||
|
||||
import type { Route } from "./+types/home";
|
||||
import { Welcome } from "../welcome/welcome";
|
||||
|
||||
export function meta({}: Route.MetaArgs) {
|
||||
return [
|
||||
{ title: "New React Router App" },
|
||||
{ name: "description", content: "Welcome to React Router!" },
|
||||
];
|
||||
}
|
||||
|
||||
export async function action({ request }: Route.ActionArgs) {
|
||||
const formData = await request.formData();
|
||||
let name = formData.get("name");
|
||||
let email = formData.get("email");
|
||||
if (typeof name !== "string" || typeof email !== "string") {
|
||||
return { guestBookError: "Name and email are required" };
|
||||
}
|
||||
|
||||
name = name.trim();
|
||||
email = email.trim();
|
||||
if (!name || !email) {
|
||||
return { guestBookError: "Name and email are required" };
|
||||
}
|
||||
|
||||
const db = database();
|
||||
try {
|
||||
await db.insert(schema.guestBook).values({ name, email });
|
||||
} catch (error) {
|
||||
return { guestBookError: "Error adding to guest book" };
|
||||
}
|
||||
}
|
||||
|
||||
export async function loader({ context }: Route.LoaderArgs) {
|
||||
const db = database();
|
||||
|
||||
const guestBook = await db.query.guestBook.findMany({
|
||||
columns: {
|
||||
id: true,
|
||||
name: true,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
guestBook,
|
||||
message: context.VALUE_FROM_EXPRESS,
|
||||
};
|
||||
}
|
||||
|
||||
export default function Home({ actionData, loaderData }: Route.ComponentProps) {
|
||||
return (
|
||||
<Welcome
|
||||
guestBook={loaderData.guestBook}
|
||||
guestBookError={actionData?.guestBookError}
|
||||
message={loaderData.message}
|
||||
/>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user