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 (

{process.values.name}

{person} · {t(`processes.${process.values.kind}`)} ·{" "} {t(`processes.${process.values.state}`)}

{t("processes.progress", { resolved, total: process.values.tasks.length })}

{open && (
{process.values.kind !== "onboarding" && ( )}
)}

{t("processes.resolutionHelp")}

{process.values.notes &&

{process.values.notes}

} {process.values.tasks.map((task) => { const recorded = Boolean( task.reference && process.review.some( (ref) => ref.kind === task.reference?.kind && ref.id === task.reference?.id ) ); return (

{processTaskTitle(task, t)}

{t(`processes.${task.status}`)}

{task.reference && (

{t(recorded ? "processes.stillRecorded" : "processes.notInReview")}

)} {task.notes &&

{task.notes}

}
); })}
{t("processes.currentReview", { count: process.review.length })}

{t("processes.currentReviewHelp")}

    {process.review.map((ref) => (
  1. {processReferenceTitle(ref, t)}
  2. ))}
{t("processes.history")}
    {[...process.history].reverse().map((r) => (
  1. {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}

    }
      {r.values.tasks.map((task) => (
    1. {processTaskTitle(task, t)} · {t(`processes.${task.status}`)} {task.notes &&

      {task.notes}

      }
    2. ))}
  2. ))}
setEdit(false)} open={edit} process={process} />
); }