import { connectionAccountIdentityLabel } from "@opengeni/contracts/connection-account-label"; import type { ConnectionMetadata } from "@opengeni/sdk"; import { DropdownMenuItem } from "../../../ui/dropdown-menu"; import { ComposerMenuSwitchIndicator } from "../../../ui/composer-menu"; import type { ConnectedAccountGroup, ConnectionAccountChoices, } from "./session-connection-accounts"; export function connectionAccountLabel(account: ConnectionMetadata, fallback: string): string { return connectionAccountIdentityLabel(account.metadata, fallback); } export type ConnectionAccountPickerProps = { groups: ConnectedAccountGroup[]; choices: ConnectionAccountChoices; onChoose: (serverId: string, connectionIds: string[]) => void; disabled?: boolean | undefined; presentation?: "menu" | "dialog" | undefined; emptySelectionHint?: string | undefined; }; export type ConnectionAccountControls = ConnectionAccountPickerProps & { loading?: boolean | undefined; error?: string | null | undefined; accessDenied?: boolean | undefined; onRefresh?: (() => void) | undefined; }; export function ConnectionAccountPicker(props: ConnectionAccountPickerProps) { return props.groups.map((group) => { const chosen = props.choices[group.serverId] ?? group.accounts.map((account) => account.id); const missing = chosen.filter((id) => !group.accounts.some((account) => account.id === id)); return (
{group.name} accounts
) : null} {group.accounts.map((account, index) => { const checked = chosen.includes(account.id); const label = connectionAccountLabel(account, `${group.name} account ${index + 1}`); const ownership = account.subjectId === null ? "This workspace" : "Only me"; const onToggle = () => props.onChoose( group.serverId, checked ? chosen.filter((id) => id !== account.id) : [...chosen, account.id], ); const content = ( <> {label} {ownership}Connect an account in Capabilities.
) : null} {!chosen.length && group.accounts.length > 0 ? ({props.emptySelectionHint ?? "No accounts selected."}
) : null}