import { BrowserLink } from "@metis/core/client"; import { CursorPagination } from "@repo/rdx-ui/components/cursor-pagination"; import { DetailPanel } from "@repo/rdx-ui/components/detail-panel"; import { EntityStatus } from "@repo/rdx-ui/components/entity-list"; import { KeyRoundIcon } from "@repo/rdx-ui/lib/icons"; import { Button } from "@repo/shadcn-ui/components/button"; import { useQuery } from "@tanstack/react-query"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { getAccess } from "../../../access/list/api"; import { accessKeys } from "../../../access/shared/queries"; import type { LocalIdentityOperation } from "../../manage/ui/local-identity-editor"; import { LocalIdentityEditor } from "../../manage/ui/local-identity-editor"; import { localIdentityApi, localIdentityKeys } from "../../shared/api/local-identity-api"; export function AssetLocalIdentities({ companyId, asset, }: { companyId: string; asset: { id: string; name: string }; }) { const { t } = useTranslation("companies"); const [cursors, setCursors] = useState([]); const cursor = cursors.at(-1); const [operation, setOperation] = useState(); const query = useQuery({ queryKey: localIdentityKeys.page(companyId, asset.id, cursor), queryFn: () => localIdentityApi.get(companyId, asset.id, cursor), }); const access = useQuery({ queryKey: accessKeys.scope(companyId), queryFn: () => getAccess(companyId), }); const label = (id: string) => { const value = access.data?.items.find((item) => item.id === id)?.values; return value && "name" in value ? value.name : "—"; }; return ( } icon={} title={t("localIdentity.title")} >

{t("localIdentity.description")}

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

{t("loading")}

} {(query.isError || access.isError) && (

{t("localIdentity.error")}

)} {!(query.isError || access.isError) && query.data && ( <> {query.data.environments.length ? (
    {query.data.environments.map((item) => (
  • {label(item.environmentId)}

    {label(item.systemId)}

    {t(item.endedAt ? "localIdentity.ended" : "localIdentity.current")}

    ·{" "} {item.endedAt ?? "—"}

    {!item.endedAt && ( )}
  • ))}
) : (

{t("localIdentity.empty")}

)} )} 0} nextLabel={t("localIdentity.next")} onNext={() => { const next = query.data?.nextAfterId; if (next) { setCursors((values) => [...values, next]); } }} onPrevious={() => setCursors((values) => values.slice(0, -1))} onRestart={() => { setCursors([]); query.refetch().catch(() => undefined); }} pending={query.isFetching} previousLabel={t("localIdentity.previous")} restartLabel={t("retry")} /> {operation && ( setOperation(undefined)} operation={operation} /> )}
); }