2022-02-13 21:25:00 +01:00
|
|
|
import type { User, Team } from "@prisma/client";
|
2022-02-10 10:44:44 +01:00
|
|
|
import type { LinksFunction, LoaderFunction } from "remix";
|
2022-02-13 21:25:00 +01:00
|
|
|
import { Outlet, useLoaderData, Form, redirect, useCatch } from "remix";
|
2022-02-10 10:44:44 +01:00
|
|
|
import { getUser } from "~/utils/session.server";
|
2022-02-13 21:25:00 +01:00
|
|
|
import Header from "../components/Header";
|
2022-02-10 10:44:44 +01:00
|
|
|
|
|
|
|
|
export const links: LinksFunction = () => {
|
|
|
|
|
return [];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type LoaderData = {
|
2022-02-13 21:25:00 +01:00
|
|
|
user: (User & { team: Team & { members: User[] } }) | null;
|
2022-02-10 10:44:44 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const loader: LoaderFunction = async ({ request }) => {
|
|
|
|
|
const user = await getUser(request);
|
2022-02-13 21:25:00 +01:00
|
|
|
if (!user?.id) {
|
|
|
|
|
return redirect("/login");
|
2022-02-10 10:44:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const data: LoaderData = {
|
|
|
|
|
user,
|
|
|
|
|
};
|
|
|
|
|
return data;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default function ExpensesRoute() {
|
|
|
|
|
const data = useLoaderData<LoaderData>();
|
|
|
|
|
|
|
|
|
|
return (
|
2022-02-13 21:25:00 +01:00
|
|
|
<>
|
|
|
|
|
<Header user={data.user} route="/expenses" />
|
|
|
|
|
<main>
|
|
|
|
|
<Outlet />
|
2022-02-10 10:44:44 +01:00
|
|
|
</main>
|
2022-02-13 21:25:00 +01:00
|
|
|
</>
|
2022-02-10 10:44:44 +01:00
|
|
|
);
|
|
|
|
|
}
|
2022-02-13 21:25:00 +01:00
|
|
|
|
|
|
|
|
export function CatchBoundary() {
|
|
|
|
|
const caught = useCatch();
|
|
|
|
|
|
|
|
|
|
if (caught.status === 401) {
|
|
|
|
|
return redirect("/login");
|
|
|
|
|
}
|
|
|
|
|
if (caught.status === 404) {
|
|
|
|
|
return (
|
|
|
|
|
<div className="error-container">There are no expenses to display.</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
throw new Error(`Unexpected caught response with status: ${caught.status}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function ErrorBoundary() {
|
|
|
|
|
return <div className="error-container">I did a whoopsies.</div>;
|
|
|
|
|
}
|