import { AssetCatalogPage } from "@metis/assets/client"; import { ResourceCatalogPage, ResourcesPage } from "@metis/resources/client"; 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 { BoxIcon, BriefcaseIcon, KeyRoundIcon, LayersIcon, LayoutTemplateIcon, MailIcon, MapPinIcon, UsersIcon, } from "@repo/shadcn-ui/lib/icons"; import { useQuery } from "@tanstack/react-query"; import type { ReactNode } from "react"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { CompanyDTO } from "../../common"; import { AccessWorkspacePage } from "../access/access-workspace"; import { companyApi, companyKeys } from "../api/company-api"; import { ApplicationConfigurationsPage } from "../applications/application-configurations-page"; import { CertificateConfigurationsPage } from "../certificates/certificate-configurations-page"; import { FolderMappingsPage } from "../folders/folder-mappings-page"; import { MailConfigurationsPage } from "../mail/mail-configurations-page"; import { MailboxRelations } from "../mail/mailbox-relations"; import { PrinterConfigurationsPage } from "../printers/printer-configurations-page"; import { ProcessesPage } from "../processes/processes-page"; import { WorkProfilesPage } from "../profiles/work-profiles-page"; import { RemoteConnectionsPage } from "../remote/remote-connections-page"; import { TeleworkAuthorizationsPage } from "../telework/telework-authorizations-page"; import { CompanyFeedback } from "./company-feedback"; import { CompanyForm } from "./company-form"; import { CompanyInventory } from "./company-inventory"; import { DepartmentSection } from "./department-section"; import { PeopleSection } from "./people-section"; import { SiteForm } from "./site-form"; 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} /> )}
); } type CompanyTab = | "processes" | "remote" | "telework" | "people" | "departments" | "sites" | "access" | "resource-catalog" | "resources" | "assets" | "inventory" | "workstations" | "certificates" | "applications" | "printers" | "folders" | "mail" | "profiles"; export function CompanyDetail({ id, csrfToken, onBack, embedded = false, accountNavigation, }: { id: string; csrfToken: string; onBack: () => void; embedded?: boolean; accountNavigation?: ReactNode; }) { const { t } = useTranslation("companies"); const { t: resourceTranslation } = useTranslation("resources"); const { t: assetTranslation } = useTranslation("assets"); const { t: accessTranslation } = useTranslation("access"); const query = useQuery({ queryKey: companyKeys.detail(id), queryFn: () => companyApi.get(id) }); const [editOpen, setEditOpen] = useState(false); const [tab, setTab] = useState(embedded ? "inventory" : "people"); const company = query.data?.company; const layout = embedded ? { root: "company-space", heading: "company-space-heading", navigation: "company-space-navigation", main: "company-space-main", } : { root: "space-y-6", heading: "flex flex-wrap items-start justify-between gap-4", navigation: "flex flex-wrap gap-2", main: undefined, }; return (
{!embedded && ( )} {query.isPending &&

{t("loading")}

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

{company.name}

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

setEditOpen(false)} showTitle={false} />
{embedded &&
{company.name}
}
)}
); } function CompanySection({ company, csrfToken, tab, }: { company: CompanyDTO; csrfToken: string; tab: CompanyTab; }) { switch (tab) { case "processes": return ; case "remote": return ; case "telework": return ; case "people": return ; case "departments": return ; case "sites": return ; case "access": return ( ); case "profiles": return ; case "certificates": return ; case "applications": return ; case "printers": return ; case "folders": return ; case "mail": return ; case "workstations": return ; case "inventory": return ; case "resources": return ( resource.values.integration?.kind === "mailbox" ? ( ) : null } /> ); case "resource-catalog": return ; case "assets": return ; } }