import type { LoaderFunction } from "remix"; import { useLoaderData, Link, useCatch, redirect } from "remix"; import type { Expense, User } from "@prisma/client"; import { db } from "~/utils/db.server"; import { getUser } from "~/utils/session.server"; import Group from "~/icons/Group"; type LoaderData = { lastExpenses: (Expense & { user: User })[]; user: User }; export const loader: LoaderFunction = async ({ request }) => { const user = await getUser(request); if (!user) { return redirect("/login"); } const lastExpenses = await db.expense.findMany({ include: { user: true, }, take: 6, orderBy: { createdAt: "desc" }, where: { teamId: user.teamId }, }); const data: LoaderData = { lastExpenses, user }; return data; }; export default function JokesIndexRoute() { const data = useLoaderData(); return (

Last expenses

    {data.lastExpenses?.map((exp) => (
  • {exp.user.icon ?? exp.user.username[0]}
    0 ? "text-error" : "text-success" }`} > {-exp.amount} €
    {new Intl.DateTimeFormat("it", { dateStyle: "short", timeStyle: "short", }).format(new Date(exp.createdAt))} {exp.description}
  • ))}
See all

Who needs to pay who

New
Trasfer
); } export function CatchBoundary() { const caught = useCatch(); if (caught.status === 404) { return (
There are no expenses to display.
); } throw new Error(`Unexpected caught response with status: ${caught.status}`); } export function ErrorBoundary() { return
I did a whoopsies.
; }