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 { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@repo/shadcn-ui/components/table"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { CompanyDTO } from "../../common"; import { companyApi, companyKeys } from "../api/company-api"; import { CompanyFeedback } from "./company-feedback"; import { CompanyForm } from "./company-form"; import { ContactForm } from "./contact-form"; import { SiteForm } from "./site-form"; function ContactSection({ company, csrfToken }: { company: CompanyDTO; csrfToken: string }) { const { t } = useTranslation("companies"); const [createOpen, setCreateOpen] = useState(false); const [selectedId, setSelectedId] = useState(); const selected = company.contacts.find((contact) => contact.id === selectedId); return (

{t("contacts")}

{company.contacts.length === 0 ? (

{t("noContacts")}

) : ( {t("name")} {t("position")} {t("email")} {t("phone")} {t("status")} {t("actions")} {company.contacts.map((contact) => ( {contact.name} {contact.position} {contact.email} {contact.phone} {t(contact.active ? "active" : "inactive")} ))}
)}
setCreateOpen(false)} showTitle={false} /> { if (!open) { setSelectedId(undefined); } }} open={selected !== undefined} title={t("editContact")} > {selected && ( setSelectedId(undefined)} showTitle={false} /> )}
); } function SiteSection({ company, csrfToken }: { company: CompanyDTO; csrfToken: string }) { const { t } = useTranslation("companies"); const [createOpen, setCreateOpen] = useState(false); const [selectedId, setSelectedId] = useState(); const selected = company.sites.find((site) => site.id === selectedId); return (

{t("sites")}

{company.sites.length === 0 ? (

{t("noSites")}

) : (
{company.sites.map((site) => (

{site.name}

{site.address ?? t("noAddress")}

))}
)}
setCreateOpen(false)} showTitle={false} /> { if (!open) { setSelectedId(undefined); } }} open={selected !== undefined} title={t("editSite")} > {selected && ( setSelectedId(undefined)} showTitle={false} site={selected} /> )}
); } export function CompanyDetail({ id, csrfToken, onBack, }: { id: string; csrfToken: string; onBack: () => void; }) { const { t } = useTranslation("companies"); const query = useQuery({ queryKey: companyKeys.detail(id), queryFn: () => companyApi.get(id) }); const [editOpen, setEditOpen] = useState(false); const [tab, setTab] = useState<"contacts" | "sites">("contacts"); const company = query.data?.company; return (
{query.isPending &&

{t("loading")}

} {query.isError && ( )} {company && ( <>

{company.name}

{t(company.active ? "activeCompany" : "inactiveCompany")}

setEditOpen(false)} showTitle={false} /> {tab === "contacts" ? ( ) : ( )} )}
); }