remix-demo
react router (remix) demo
git clone https://9o.is/git/remix-demo.git
food-entries.tsx
(1231B)
1 import type {
2 ActionArgs,
3 LoaderArgs,
4 MetaFunction,
5 } from "@remix-run/server-runtime";
6 import { json } from "@remix-run/server-runtime";
7 import { Outlet, useLoaderData } from "@remix-run/react";
8 import FoodEntries from "~/components/FoodEntries";
9 import TwoColumnsLayout from "~/components/layouts/TwoColumnsLayout";
10 import foodEntryController from "~/controllers/foodEntry.server";
11 import SubHeading from "~/components/SubHeading";
12
13 export const meta: MetaFunction = () => ({
14 title: "Food Entries | Calories Counter",
15 });
16
17 export function loader({ request }: LoaderArgs) {
18 return foodEntryController.getAll(request);
19 }
20
21 export async function action({ request }: ActionArgs) {
22 const formData = await request.formData();
23 const id = formData.get("id");
24
25 if (typeof id !== "string") {
26 return json({ errors: "ID is missing" }, { status: 422 });
27 }
28
29 return foodEntryController.remove(request, { id });
30 }
31
32 export default function FoodEntriesIndex() {
33 const foodEntries = useLoaderData();
34
35 const history = (
36 <section>
37 <SubHeading>Food Entry History</SubHeading>
38 <FoodEntries foodEntries={foodEntries} />
39 </section>
40 );
41
42 return <TwoColumnsLayout first={<Outlet />} second={history} />;
43 }