-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroot.tsx
77 lines (71 loc) · 1.87 KB
/
root.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import {
Form,
Links,
Meta,
Outlet,
Scripts,
ScrollRestoration,
useLoaderData,
} from "@remix-run/react";
import type {
LinksFunction,
LoaderFunctionArgs,
ActionFunctionArgs,
} from "@remix-run/node";
import { json, redirect } from "@remix-run/node";
import stylesHref from "./app.css?url";
import { SideBar } from "./components/Sidebar";
import { NotesList } from "./components/Notes";
import { db } from "./api/db.server";
import { createNewNote } from "./api/requests";
export const links: LinksFunction = () => [
{ rel: "preconnect", href: "https://fonts.googleapis.com" },
{
rel: "preconnect",
href: "https://fonts.gstatic.com",
crossOrigin: "anonymous",
},
{
rel: "stylesheet",
href: "https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap",
},
{ rel: "stylesheet", href: stylesHref },
];
export async function loader({ request }: LoaderFunctionArgs) {
const notes = await db.note.findMany({
orderBy: { createdAt: "desc" },
});
return json({ notes });
}
export async function action({ request }: ActionFunctionArgs) {
const newNote = await createNewNote();
return redirect(`notes/${newNote.id}/edit`);
}
export default function App() {
const { notes } = useLoaderData<typeof loader>();
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<SideBar>
<Form method="post" id="addForm">
<button type="submit" className="addNewNote">
New
</button>
</Form>
<NotesList notes={notes} />
</SideBar>
<main>
<Outlet />
<ScrollRestoration />
<Scripts />
</main>
</body>
</html>
);
}