Skip to content

feat(apollo-wind): add ConnectionPicker - #1246

Open
andreea-ene wants to merge 1 commit into
feat/resource-pickerfrom
feat/connection-picker
Open

andreea-ene wants to merge 1 commit into
feat/resource-pickerfrom
feat/connection-picker

Conversation

@andreea-ene

@andreea-ene andreea-ene commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Replaces #1212, which was opened from a fork so the required checks couldn't run.

Stacked on #1244. This PR targets feat/resource-picker, so the diff shows only its own changes. Once #1244 merges, retarget this PR to main.

Adds ConnectionPicker, a field and popover for choosing the connection an activity runs with.

Depends on #1244. This branch is stacked on ResourcePicker, so until #1244 merges the diff includes its commit too. Review the last two commits: add row actions, subtitles and field status to ResourcePicker and add ConnectionPicker.

Why a separate component

ConnectionPicker is built on ResourcePicker rather than being a variant of it. The search, folders, keyboard model, empty states and footer are shared. What a connection adds is its own domain: a health, repair and edit actions, a message under the field and a schema refresh. As a variant prop, most of that would be props that only mean something for connections.

ResourcePicker additions

Generic extension points, useful to any picker built on it:

  • subtitle: a second line under a row's label
  • keywords: extra search terms for detail a row does not print
  • renderItemActions: trailing controls on a row, revealed under the cursor; clicking them does not commit the row
  • status: an error or warning state on the field, with aria-invalid for errors, plus aria-describedby for the consumer's message

The field's classes are exported as resourcePickerTriggerClassName so pickers built on it match. The trailing padding now also applies in the Future themes, where future:px-4 used to override it and let the value run under the clear control. The row icon slot grows from 14px to 16px so image logos keep their detail.

ConnectionPicker

  • Health. A connection is connected, warning (usable but degraded, such as missing scopes) or broken. Rows show it as a second line. The field shows it as its leading dot, its border and, when unhealthy, a message underneath with the first sentence of statusReason (the whole reason on hover).
  • Order. Broken connections sort to the end of their folder. They stay choosable and repairable, but the list does not open on dead ends.
  • Naming. Rows and the field show the account, falling back to the connection name: a node bound to the wrong account is the mistake worth catching. The name stays searchable.
  • Logos. logo takes an image URL for the connector, such as the third-party SVGs in @uipath/apollo-ui-icons. icon remains for a glyph.
  • Actions. onFix adds Fix to broken rows and to the message under the field. onEdit adds Edit to every row. onAddConnection adds a footer link, and with no connections at all the field itself starts a new one. onRefreshSchema adds a field menu while a connection is chosen, showing progress until its promise settles.
  • Validation. error puts the field in its error state with the message underneath, taking the place of the health message.

Row actions are pointer shortcuts. A listbox option is atomic to assistive technology, so Fix is always also offered under the field once the broken connection is chosen.

Screenshots

Every health, with row actions under the cursor A chosen connection, with the schema menu
Connection picker open on Outlook connections in two folders, rows showing Connected, Missing scopes and Broken, with Fix and Edit on the broken row under the pointer Connection picker with jane.doe chosen on a cyan tint, a green dot in the field and a more menu at its trailing edge
Another connector Future Light
Connection picker listing Slack connections with Slack logos The Outlook list in the Future Light theme

Field states: broken, missing scopes, required and no connections.

Field with a red dot and border, and Token expired with a Fix link underneath Field with an amber dot and border, and Missing scopes: Mail.Send with a Fix link underneath
Empty field with a red border and Connection is required underneath Field reading Add connection with a plus icon

Stories

Components/Core/Connection Picker: Default, WithValue, Broken, MissingScopes, Slack, Required, NoConnections, SelectOnly, Disabled.

Checks

Run locally:

Check Result
biome format pass, 405 files
biome check (changed files) pass
tsc --noEmit pass
vitest run (connection-picker, resource-picker) 46 passed
npm run build pass

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

Dependency License Review

  • ✅ 1937 package(s) scanned
  • ✅ No license issues found
  • ⚠️ 2 package(s) excluded (see details below)
License distribution
License Packages
MIT 1708
ISC 88
Apache-2.0 55
BSD-3-Clause 27
BSD-2-Clause 23
BlueOak-1.0.0 8
MPL-2.0 4
MIT-0 3
CC0-1.0 3
MIT OR Apache-2.0 2
(MIT OR Apache-2.0) 2
Unlicense 2
LGPL-3.0-or-later 1
Python-2.0 1
CC-BY-4.0 1
(MPL-2.0 OR Apache-2.0) 1
Unknown 1
Artistic-2.0 1
(WTFPL OR MIT) 1
(BSD-2-Clause OR MIT OR Apache-2.0) 1
CC-BY-3.0 1
0BSD 1
(MIT OR CC0-1.0) 1
MIT AND ISC 1
Excluded packages
Package Version License Reason
@img/sharp-libvips-linux-x64 1.3.3 LGPL-3.0-or-later LGPL pre-built binary, not linked
khroma 2.1.0 Unknown MIT per GitHub repo, missing license field in package.json

@andreea-ene andreea-ene added the size:XXL 1,000+ changed lines. label Sep 30, 2026
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 895f2ce to 72a9cd2 Compare October 1, 2026 12:03
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from c0e0590 to 847ee0c Compare October 1, 2026 12:43
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 72a9cd2 to 23c4179 Compare October 1, 2026 12:45
@andreea-ene
andreea-ene requested a balanced review from Copilot October 5, 2026 12:01
@andreea-ene
andreea-ene marked this pull request as draft October 5, 2026 12:01
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 4a1d8a3 to aa0695e Compare October 5, 2026 12:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Accessibility gaps, incomplete public exports, and an active action on disabled pickers must be addressed.

Review effort: Balanced
Findings: 6 Medium severity

Open (6)
What changed in this PR

Adds ConnectionPicker to Apollo Wind, built on enhanced ResourcePicker extension points.

Changes:

  • Adds connection health, grouping, search, actions, and schema refresh.
  • Extends resource rows with subtitles, keywords, actions, and field status.
  • Adds stories and unit tests.
File Description
src/​index.ts Exports ConnectionPicker API.
resource-picker/​types.ts Adds extension-point types.
resource-picker/​resource-picker.tsx Adds actions and field status.
resource-picker/​resource-picker.test.tsx Tests new behavior.
resource-picker/​components/​resource-row.tsx Renders subtitles and actions.
connection-picker/​types.ts Defines public API.
connection-picker/​index.ts Adds component barrel.
connection-picker/​connection-picker.tsx Implements the picker.
connection-picker/​connection-picker.test.tsx Tests picker behavior.
connection-picker/​connection-picker.stories.tsx Documents states and usage.
connection-picker/​components/​connection-status.tsx Renders health indicators.
connection-picker/​components/​connection-actions-menu.tsx Implements schema refresh menu.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/apollo-wind/src/components/ui/connection-picker/connection-picker.tsx Outdated
Comment thread packages/apollo-wind/src/components/ui/connection-picker/types.ts
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 5b21e54 to a581ace Compare October 5, 2026 12:26
@andreea-ene
andreea-ene marked this pull request as ready for review October 5, 2026 12:40

@dbacomputer dbacomputer left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the changes against feat/resource-picker, including the earlier review fixes. The 63 existing ConnectionPicker/ResourcePicker tests pass locally. Two additional interaction regressions reproduced in targeted tests are noted inline; I recommend fixing these before approval.

@andreea-ene
andreea-ene marked this pull request as draft October 6, 2026 09:56
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from a581ace to b9aea5c Compare October 6, 2026 09:58
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from aa0695e to 22d7212 Compare October 6, 2026 09:59
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from b9aea5c to 5b75539 Compare October 6, 2026 10:45
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 22d7212 to a041670 Compare October 6, 2026 10:47
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 5b75539 to 8edf3af Compare October 6, 2026 10:48
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from a041670 to d822ff7 Compare October 6, 2026 10:53
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 8edf3af to f123a1d Compare October 6, 2026 10:55
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from d822ff7 to ce4e3af Compare October 6, 2026 10:57
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from f123a1d to ae9db56 Compare October 6, 2026 11:30
@andreea-ene
andreea-ene marked this pull request as ready for review October 6, 2026 12:33
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from ce4e3af to 97bfb4e Compare October 6, 2026 15:48
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from ae9db56 to 3ca22c4 Compare October 6, 2026 15:49
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 38b54c7 to 6557097 Compare October 6, 2026 15:59
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 3ca22c4 to 92f55e0 Compare October 6, 2026 16:00
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 6557097 to cec8f17 Compare October 6, 2026 16:05
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 92f55e0 to c75e596 Compare October 6, 2026 16:07
@andreea-ene
andreea-ene marked this pull request as draft October 6, 2026 16:07
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from cec8f17 to 7552b53 Compare October 6, 2026 16:33
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from c75e596 to cc941a6 Compare October 6, 2026 16:34
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 7552b53 to 509ee2c Compare October 6, 2026 16:58
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from cc941a6 to 7be253d Compare October 6, 2026 16:59
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 509ee2c to e6394fc Compare October 6, 2026 17:25
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 7be253d to 40328fb Compare October 6, 2026 17:26
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from e6394fc to ebb848f Compare October 6, 2026 17:48
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 40328fb to bd6ce2c Compare October 6, 2026 17:49
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch 2 times, most recently from 87d7b51 to 59d6cc2 Compare October 6, 2026 19:05
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from bd6ce2c to 55d7873 Compare October 6, 2026 19:37
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from 59d6cc2 to d0ffe2b Compare October 7, 2026 00:09
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 55d7873 to 3f10044 Compare October 7, 2026 00:09
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from d0ffe2b to c50fc4a Compare October 7, 2026 09:39
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 3f10044 to 19a6950 Compare October 7, 2026 09:40
@andreea-ene
andreea-ene force-pushed the feat/resource-picker branch from c50fc4a to 65a222a Compare October 7, 2026 10:08
A field and popover for choosing the connection an activity runs with,
built on ResourcePicker for the search, folders, keyboard model and
footer.

ResourcePicker gains what the connection picker needs from it: a row
subtitle, with a text form joined into the row's accessible name, search
keywords the row does not print, trailing row actions revealed under the
cursor, and an error/warning field status. Its trigger classes are
exported so pickers built on it read as a pair.

What ConnectionPicker adds is what only a connection has:

- health on every row and on the field, as its leading dot, its border
  and a message underneath. A warning is named by its own reason's
  headline, falling back to "Needs attention"
- broken connections sorted to the end of their folder
- Fix on broken rows and under the field, Edit on every row and in the
  field menu, so both are reachable from the keyboard
- an Add connection footer link, and with no connections at all the
  field itself starts one
- a field menu to refresh the chosen connection's schema, showing
  progress while the returned promise is pending
- an `error` message for validation, and the field's id and ARIA
  labelling forwarded to either trigger

Rows and the field show the account, falling back to the connection
name, since a node bound to the wrong account is the mistake worth
catching. The name stays searchable.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@andreea-ene
andreea-ene force-pushed the feat/connection-picker branch from 19a6950 to 629bf26 Compare October 7, 2026 10:09
@andreea-ene
andreea-ene marked this pull request as ready for review October 7, 2026 13:57

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg:apollo-wind size:XXL 1,000+ changed lines.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants