(integration: Integration)
| 493 | const items = useMemo(() => groupIntegrations(props.integrations), [props.integrations]); |
| 494 | |
| 495 | const renderEntry = (integration: Integration) => { |
| 496 | const pluginKey = KIND_TO_PLUGIN_KEY[integration.kind] ?? integration.kind; |
| 497 | const plugin = pluginByKind.get(pluginKey); |
| 498 | const SummaryComponent = plugin?.summary; |
| 499 | const slug = String(integration.slug); |
| 500 | const name = integration.name || slug; |
| 501 | return ( |
| 502 | <CardStackEntry key={slug} asChild searchText={`${name} ${slug} ${integration.kind}`}> |
| 503 | <Link |
| 504 | to="/{-$orgSlug}/integrations/$namespace" |
| 505 | params={{ namespace: slug }} |
| 506 | data-testid={`integration-entry-${slug}`} |
| 507 | > |
| 508 | <IntegrationIconWithAccount |
| 509 | icon={integrationPresetIconUrl( |
| 510 | { id: slug, kind: integration.kind, name, url: integration.displayUrl }, |
| 511 | integrationPlugins, |
| 512 | )} |
| 513 | integrationId={slug} |
| 514 | url={integration.displayUrl ?? integrationInferredUrl({ id: slug, name }) ?? undefined} |
| 515 | /> |
| 516 | <CardStackEntryContent> |
| 517 | <CardStackEntryTitle>{name}</CardStackEntryTitle> |
| 518 | <CardStackEntryDescription>{slug}</CardStackEntryDescription> |
| 519 | </CardStackEntryContent> |
| 520 | <CardStackEntryActions> |
| 521 | {SummaryComponent && ( |
| 522 | <Suspense fallback={null}> |
| 523 | <SummaryComponent integrationId={slug} /> |
| 524 | </Suspense> |
| 525 | )} |
| 526 | <IntegrationHealthSummary integration={integration.slug} /> |
| 527 | </CardStackEntryActions> |
| 528 | </Link> |
| 529 | </CardStackEntry> |
| 530 | ); |
| 531 | }; |
| 532 | |
| 533 | const rendered: ReactNode[] = []; |
| 534 | let flatRun: Integration[] = []; |
nothing calls this directly
no test coverage detected