import { Button } from "@repo/shadcn-ui/components/button"; import { Card, CardContent } from "@repo/shadcn-ui/components/card"; import { FormDialog } from "@repo/shadcn-ui/components/form-dialog"; import { Input } from "@repo/shadcn-ui/components/input"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { CompanyDTO } from "../../common"; import { MailFeedback } from "./mail-feedback"; import { mailboxApi, mailboxKeys } from "./mailbox-api"; import { MailboxForm } from "./mailbox-form"; import { MailboxUseForm } from "./mailbox-use-form"; export function MailboxesPage({ company, csrfToken }: { company: CompanyDTO; csrfToken: string }) { const { t, i18n } = useTranslation("companies"); const [editor, setEditor] = useState(); const [useEditor, setUseEditor] = useState(); const [view, setView] = useState(); const [search, setSearch] = useState(""); const query = useQuery({ queryKey: mailboxKeys.company(company.id), queryFn: () => mailboxApi.request(company.id), }); const edited = query.data?.mailboxes.find((item) => item.id === editor); const use = query.data?.uses.find((item) => item.id === useEditor); const viewed = query.data?.mailboxes.find((item) => item.id === view); const name = (id: string) => company.people.find((person) => person.id === id)?.name ?? id; const boxes = query.data?.mailboxes ?? []; const filtered = boxes.filter((item) => [item.values.address, item.values.context ?? ""].some((value) => value.toLowerCase().includes(search.trim().toLowerCase()) ) ); return (

{t("mailbox.title")}

setSearch(event.target.value)} placeholder={t("mailbox.search")} value={search} /> {query.isPending &&

{t("loading")}

} {query.isError && ( )} {query.data && ( {!filtered.length && (

{t(boxes.length ? "noResults" : "mailbox.empty")}

)} {filtered.map((item) => (

{item.values.address}

{t(`mailbox.${item.values.kind}`)} ·{" "} {t(item.values.active ? "active" : "inactive")} {item.values.context ? ` · ${item.values.context}` : ""}

    {query.data?.uses .filter((use) => use.values.mailboxId === item.id) .map((use) => (
  • {name(use.values.personId)} · {use.values.startDate} →{" "} {use.values.endDate ?? t("mailbox.openPeriod")} {!use.values.endDate && ( )}
  • ))}
))}
)} {editor && ( { if (!open) { setEditor(undefined); } }} open title={t(edited ? "mailbox.edit" : "mailbox.new")} wide > setEditor(undefined)} /> )} {useEditor && ( { if (!open) { setUseEditor(undefined); } }} open title={t(use ? "mailbox.closeUse" : "mailbox.linkPerson")} wide > setUseEditor(undefined)} use={use} /> )} {viewed && ( { if (!open) { setView(undefined); } }} open title={t("mail.history")} wide >
    {[...viewed.history].reverse().map((revision) => (
  1. {new Intl.DateTimeFormat(i18n.language, { dateStyle: "medium", timeStyle: "short", }).format(new Date(revision.recordedAt))}{" "} · {revision.actorName}

    {revision.values.address} · {t(`mailbox.${revision.values.kind}`)} ·{" "} {t(revision.values.active ? "active" : "inactive")}

    {revision.values.context}

    {revision.values.notes}

  2. ))}
{query.data?.uses .filter((use) => use.values.mailboxId === viewed.id) .map((use) => (

{name(use.values.personId)}

{use.history.map((revision) => (

{revision.values.startDate} →{" "} {revision.values.endDate ?? t("mailbox.openPeriod")} · {revision.actorName} ·{" "} {revision.recordedAt}

))}
))}
)}
); }