import { Button } from "@repo/shadcn-ui/components/button"; import { EntityAction, EntityListHeader, EntityRowActions, EntityStatus, EntityTable, } from "@repo/shadcn-ui/components/entity-list"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import type { InventoryLookups } from "./asset-form"; import { inventoryApi, inventoryKeys } from "./inventory-api"; import { InventoryFeedback } from "./inventory-feedback"; import { WorkstationEditorDialog } from "./workstation-editor-dialog"; import { WorkstationHistoryDialog } from "./workstation-history-dialog"; export function WorkstationsPage({ companyId, csrfToken, lookups, }: { companyId: string; csrfToken: string; lookups: InventoryLookups; }) { const { t, i18n } = useTranslation("assets"); const [search, setSearch] = useState(""); const [editor, setEditor] = useState(); const [view, setView] = useState(); const query = useQuery({ queryKey: inventoryKeys.company(companyId), queryFn: () => inventoryApi.get(companyId), }); const stations = query.data?.workstations ?? []; const assets = query.data?.assets ?? []; const edited = stations.find((item) => item.id === editor); const viewed = stations.find((item) => item.id === view); const personName = (id: string | null) => lookups.people.find((item) => item.id === id)?.name ?? t("noAssignment"); const siteName = (id: string | null) => lookups.sites.find((item) => item.id === id)?.name ?? t("noAssignment"); const members = (ids: readonly string[], empty = "noWorkstationAssets") => ids.map((id) => assets.find((item) => item.id === id)?.values.name ?? id).join(" ยท ") || t(empty); const filtered = stations.filter((item) => [item.values.name, personName(item.values.personId), siteName(item.values.siteId)].some( (value) => value.toLocaleLowerCase().includes(search.trim().toLocaleLowerCase()) ) ); return (
{" "} {" "} } locale={i18n.language} title={t("workstations")} /> {query.isPending &&

{t("loading")}

} {query.isError && ( )} {query.data && ( item.values.name, hideable: false, render: (item) => ( ), }, { id: "site", label: t("site"), value: (item) => siteName(item.values.siteId), render: (item) => <>{siteName(item.values.siteId)}, }, { id: "person", label: t("person"), value: (item) => personName(item.values.personId), render: (item) => <>{personName(item.values.personId)}, }, { id: "state", label: t("status"), value: (item) => t(item.values.active ? "active" : "inactive"), render: (item) => ( {t(item.values.active ? "active" : "inactive")} ), }, { id: "exclusive", label: t("exclusiveWorkstationAssets"), render: (item) => <>{members(item.values.assetIds)}, }, { id: "shared", label: t("sharedWorkstationAssets"), render: (item) => ( <>{members(item.values.sharedAssetIds, "noSharedWorkstationAssets")} ), }, { id: "count", label: t("characteristics"), value: (item) => item.values.assetIds.length + item.values.sharedAssetIds.length, render: (item) => ( <> {t("workstationCount", { count: item.values.assetIds.length + item.values.sharedAssetIds.length, })} ), }, { id: "actions", label: t("actions"), hideable: false, render: (item) => ( {" "}
setView(item.id)}> {t("workstationHistory")} setEditor(item.id)}>{t("edit")}
{" "}
), }, ]} emptyMessage={t("noWorkstations")} items={filtered} locale={i18n.language} onSearchChange={setSearch} search={search} searchPlaceholder={t("search")} title={t("workstations")} /> )} {editor && ( setEditor(undefined)} workstation={edited} /> )} {viewed && ( setView(undefined)} personName={personName} siteName={siteName} workstation={viewed} /> )}
); }