Files
beer-inventory/app/routes/scan/layout.tsx
T
kennyboy55 36881293ed
Build dev docker image / build (push) Successful in 23s
Build dev docker image / build (push) Successful in 36s
Build dev docker image / release (push) Successful in 1s
AI Changes: scan page fix, filters improvements
2026-08-07 11:53:20 +02:00

59 lines
1.3 KiB
TypeScript

import { LoaderFunctionArgs } from "@remix-run/node";
import { Outlet, json, redirect, useFetcher, useLoaderData, useRevalidator } from "@remix-run/react";
import { useEffect, useState } from "react";
import { enhance } from "~/utils/db.server";
export async function loader({
request,
}: LoaderFunctionArgs) {
const { session } = await enhance(request);
if(!session.has("user_id")){
return redirect("/");
}
return null;
}
export default function InventoryLayout() {
useLoaderData<typeof loader>();
let revalidator = useRevalidator();
const [checkouts, setCheckouts] = useState(0);
let fetcher = useFetcher();
useEffect(() => {
const timer = setTimeout(() => {
fetcher.load("/resource/checkouts");
if(fetcher.state === "idle"){
if(!fetcher.data) return;
let newCheckouts = Number(fetcher.data.checkouts);
if(newCheckouts < checkouts){
if (revalidator.state === "idle") {
revalidator.revalidate();
}
}
setCheckouts(newCheckouts);
}
}, 30000);
return () => clearTimeout(timer);
});
return (
<>
<header>
</header>
<main>
<Outlet />
</main>
</>
);
}