import { Button } from "@repo/shadcn-ui/components/button"; import { Card, CardContent } from "@repo/shadcn-ui/components/card"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { PersonProcessDTO } from "../../common/processes"; import { processApi, processKeys } from "./process-api"; import { ProcessEditDialog } from "./process-edit-dialog"; import { ProcessFeedback } from "./process-feedback"; import { processReferenceTitle, processTaskTitle } from "./process-labels"; export function ProcessDetail({ process, person, csrfToken, }: { process: PersonProcessDTO; person: string; csrfToken: string; }) { const { t, i18n } = useTranslation("companies"); const [edit, setEdit] = useState(false); const client = useQueryClient(); const refresh = useMutation({ mutationFn: () => processApi.refresh( process.companyId, process.id, process.history.at(-1)?.id ?? "", csrfToken ), onSuccess: async () => { await client.invalidateQueries({ queryKey: processKeys.company(process.companyId) }); }, }); const open = process.values.state === "open"; const resolved = process.values.tasks.filter((task) => task.status !== "pending").length; return (
{person} · {t(`processes.${process.values.kind}`)} ·{" "} {t(`processes.${process.values.state}`)}
{t("processes.progress", { resolved, total: process.values.tasks.length })}
{t("processes.resolutionHelp")}
{process.values.notes}
}{t(`processes.${task.status}`)}
{task.reference && ({t(recorded ? "processes.stillRecorded" : "processes.notInReview")}
)} {task.notes &&{task.notes}
}{t("processes.currentReviewHelp")}
{new Intl.DateTimeFormat(i18n.language, { dateStyle: "medium", timeStyle: "short", }).format(new Date(r.recordedAt))}{" "} · {r.actorName}
{r.values.name} · {t(`processes.${r.values.state}`)}
{r.values.notes &&{r.values.notes}
}{task.notes}
}