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 { useQuery } from "@tanstack/react-query"; import type { ReactNode } from "react"; import { useId, useState } from "react"; import { useTranslation } from "react-i18next"; import type { ResourceDTO } from "../common"; import { catalogApi, catalogKeys } from "./catalog-api"; import { inventoryApi, inventoryKeys } from "./inventory-api"; import { ResourceDetail } from "./resource-detail"; import { InventoryFeedback, ResourceForm } from "./resource-form"; export function ResourcesPage({ companyId, csrfToken, relatedContent, }: { companyId: string; csrfToken: string; relatedContent?: (resource: ResourceDTO) => ReactNode; }) { const { t } = useTranslation("resources"); const searchId = useId(); const [search, setSearch] = useState(""); const [editor, setEditor] = useState(); const [viewId, setViewId] = useState(); const query = useQuery({ queryKey: inventoryKeys.company(companyId), queryFn: () => inventoryApi.get(companyId), }); const catalog = useQuery({ queryKey: catalogKeys.scope(companyId), queryFn: () => catalogApi.get(companyId), }); const edited = query.data?.resources.find((item) => item.id === editor); const viewed = query.data?.resources.find((item) => item.id === viewId); const visible = query.data?.resources.filter((item) => `${item.values.name} ${item.specification.templateName}` .toLocaleLowerCase() .includes(search.toLocaleLowerCase()) ) ?? []; return (

{t("inventory")}

{t("resourceScope")}

{(query.isPending || catalog.isPending) &&

{t("loading")}

} {(query.isError || catalog.isError) && ( )} setSearch(event.target.value)} value={search} /> {query.data && (visible.length ? (
{visible.map((item) => (

{item.values.name}

{item.specification.templateName} ยท{" "} {t(item.values.active ? "active" : "inactive")}

))}
) : (

{t("empty")}

))}
{editor && catalog.data && ( { if (!open) { setEditor(undefined); } }} open title={t(edited ? "editResource" : "newResource")} wide > { setEditor(undefined); setViewId(id); }} resource={edited} /> )} {viewed && ( { if (!open) { setViewId(undefined); } }} open title={viewed.values.name} wide > {relatedContent?.(viewed)} )}
); }