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 { Label } from "@repo/shadcn-ui/components/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@repo/shadcn-ui/components/table"; import { useQuery } from "@tanstack/react-query"; import type { ColumnDef } from "@tanstack/react-table"; import { getCoreRowModel, getFilteredRowModel, useReactTable } from "@tanstack/react-table"; import { useId, useState } from "react"; import { useTranslation } from "react-i18next"; import type { CompanySummaryDTO } from "../../common"; import { companyApi, companyKeys } from "../api/company-api"; import { CompanyDetail } from "./company-detail"; import { CompanyFeedback } from "./company-feedback"; import { CompanyForm } from "./company-form"; const EMPTY_COMPANIES: CompanySummaryDTO[] = []; const COMPANY_COLUMNS: ColumnDef[] = [ { accessorKey: "name" }, { accessorKey: "active", enableGlobalFilter: false }, ]; export function CompaniesPage({ csrfToken, onSelectCompany, }: { csrfToken: string; onSelectCompany?: (id: string) => void; }) { const { t } = useTranslation("companies"); const query = useQuery({ queryKey: companyKeys.list, queryFn: companyApi.list }); const [selectedId, setSelectedId] = useState(); const [createOpen, setCreateOpen] = useState(false); const [search, setSearch] = useState(""); const id = useId(); const table = useReactTable({ data: query.data?.companies ?? EMPTY_COMPANIES, columns: COMPANY_COLUMNS, getCoreRowModel: getCoreRowModel(), getFilteredRowModel: getFilteredRowModel(), state: { globalFilter: search.trim() }, globalFilterFn: "includesString", }); const selectCompany = onSelectCompany ?? setSelectedId; if (selectedId && !onSelectCompany) { return ( setSelectedId(undefined)} /> ); } const companies = table.getRowModel().rows.map((row) => row.original); return (

{t("title")}

{t("help")}

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

{t("loading")}

} {query.isError && ( )} {query.data && ( {companies.length === 0 ? (

{t(search ? "noResults" : "empty")}

) : ( {t("name")} {t("status")} {t("actions")} {companies.map((company) => ( {company.name} {t(company.active ? "active" : "inactive")} ))}
)}
)} { setCreateOpen(false); selectCompany(companyId); }} showTitle={false} />
); }