From f390c23ac24b54fc59357cb670cecc2e39c7f229 Mon Sep 17 00:00:00 2001 From: alejandrobailo Date: Tue, 24 Feb 2026 12:04:38 +0100 Subject: [PATCH] fix(ui): remove as-any casts and fix type safety --- .../organizations/organizations.adapter.ts | 14 +++++++---- .../table/data-table-row-actions.tsx | 23 ++++++++----------- ui/types/organizations.ts | 2 +- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/ui/actions/organizations/organizations.adapter.ts b/ui/actions/organizations/organizations.adapter.ts index 8bd0ce1d6d..e3a1c0a58f 100644 --- a/ui/actions/organizations/organizations.adapter.ts +++ b/ui/actions/organizations/organizations.adapter.ts @@ -79,14 +79,20 @@ export function buildOrgTreeData(result: DiscoveryResult): TreeDataItem[] { } /** - * Returns IDs of accounts that can be selected (apply_status === "ready"). + * Returns IDs of accounts that can be selected. + * Accounts are selectable when registration is READY or not yet present. + * Accounts with explicit non-ready states are excluded. * Used to pre-select all selectable accounts in the tree. */ export function getSelectableAccountIds(result: DiscoveryResult): string[] { return result.accounts - .filter( - (account) => account.registration?.apply_status === APPLY_STATUS.READY, - ) + .filter((account) => { + const applyStatus = account.registration?.apply_status; + if (!applyStatus) { + return true; + } + return applyStatus === APPLY_STATUS.READY; + }) .map((account) => account.id); } diff --git a/ui/components/providers/table/data-table-row-actions.tsx b/ui/components/providers/table/data-table-row-actions.tsx index 20ef734ff8..adbb5f0e9d 100644 --- a/ui/components/providers/table/data-table-row-actions.tsx +++ b/ui/components/providers/table/data-table-row-actions.tsx @@ -15,29 +15,26 @@ import { } from "@/components/shadcn/dropdown"; import { Modal } from "@/components/shadcn/modal"; import { PROVIDER_WIZARD_MODE } from "@/types/provider-wizard"; -import { ProviderType } from "@/types/providers"; +import { ProviderProps } from "@/types/providers"; import { EditForm } from "../forms"; import { DeleteForm } from "../forms/delete-form"; -interface DataTableRowActionsProps { +interface DataTableRowActionsProps { row: Row; } -export function DataTableRowActions({ - row, -}: DataTableRowActionsProps) { +export function DataTableRowActions({ row }: DataTableRowActionsProps) { const [isEditOpen, setIsEditOpen] = useState(false); const [isDeleteOpen, setIsDeleteOpen] = useState(false); const [isWizardOpen, setIsWizardOpen] = useState(false); const [loading, setLoading] = useState(false); - const providerId = (row.original as { id: string }).id; - const providerType = (row.original as any).attributes - ?.provider as ProviderType; - const providerUid = (row.original as any).attributes?.uid || ""; - const providerAlias = (row.original as any).attributes?.alias || null; - const providerSecretId = - (row.original as any).relationships?.secret?.data?.id || null; + const provider = row.original; + const providerId = provider.id; + const providerType = provider.attributes.provider; + const providerUid = provider.attributes.uid; + const providerAlias = provider.attributes.alias ?? null; + const providerSecretId = provider.relationships.secret.data?.id ?? null; const handleTestConnection = async () => { setLoading(true); @@ -47,7 +44,7 @@ export function DataTableRowActions({ setLoading(false); }; - const hasSecret = (row.original as any).relationships?.secret?.data; + const hasSecret = Boolean(provider.relationships.secret.data); return ( <> diff --git a/ui/types/organizations.ts b/ui/types/organizations.ts index 7d9d73e7f0..3f02356f7d 100644 --- a/ui/types/organizations.ts +++ b/ui/types/organizations.ts @@ -81,7 +81,7 @@ export interface DiscoveredAccount { joined_method: "INVITED" | "CREATED"; joined_timestamp: string; parent_id: string; - registration: AccountRegistration; + registration?: AccountRegistration; } export interface DiscoveredOu {