Files
EpicNext-Cms/src/components/admin/studio/furniture-jobs.tsx
T
Simo afea80708c
CI / check (push) Successful in 3m7s
CI / deploy (push) Successful in 1m2s
CI / publish-container (push) Successful in 1m8s
perf(studio): defer import history and Nitro scale tools until opened
2026-09-13 18:29:24 +02:00

50 lines
1.3 KiB
TypeScript

"use client";
import { useTranslations } from "next-intl";
import { lazy, Suspense, useState } from "react";
import type { useFurnitureJobs } from "./use-furniture-jobs";
const HistoryBody = lazy(() =>
import("./furniture-job-history-body").then((module) => ({
default: module.FurnitureJobHistoryBody,
})),
);
export function FurnitureJobHistory({
state,
expanded = false,
}: {
state: ReturnType<typeof useFurnitureJobs>;
expanded?: boolean;
}) {
const t = useTranslations("pages.admin.importHistory");
const common = useTranslations("pages.admin.housekeeping");
const [opened, setOpened] = useState(expanded);
return (
<details
open={expanded || undefined}
onToggle={(event) => {
if (event.currentTarget.open) setOpened(true);
}}
className="shrink-0 border-b border-[var(--admin-border)] bg-[var(--admin-surface)] px-4 py-2 text-sm"
>
<summary className="cursor-pointer">
{t("summary", {
count: state.jobs.filter(
(job) => job.state === "queued" || job.state === "running",
).length,
})}
</summary>
{(opened || expanded) && (
<Suspense
fallback={
<p role="status" className="py-2">
{common("loading")}
</p>
}
>
<HistoryBody state={state} expanded={expanded} />
</Suspense>
)}
</details>
);
}