Files
twenty/packages
Charles Bochet 0df83eceb2 fix(front): restore loading state on third-party app command menu actions (#22073)
## Problem

Headless command-menu actions provided by third-party applications (e.g.
the "Twenty Eng" app actions like *Fetch Pull Requests*, *Recompute
Build Tasks*) no longer show a loading/progress indicator while they
run, so users can't see that the action is in progress.

## Root cause

In `CommandMenuItemSelectableRenderer`,
[#21020](https://github.com/twentyhq/twenty/pull/21020) added an
early-return branch for third-party application actions that renders
`AppMenuItem`:

```tsx
if (isThirdPartyApp) {
  return (
    <SelectableListItem ...>
      <AppMenuItem ... />   // no loader passed
    </SelectableListItem>
  );
}
```

This branch returns **before** the `listItem` path that builds the
`loaderComponent` (spinner + progress %), and `AppMenuItem` had no way
to render a right-side loader. So `progress` / `showDisabledLoader` from
`useCommandMenuItemClick` were computed but dropped for third-party app
actions. Native (non third-party) actions kept their loader because they
go through the `listItem` path.

## Fix

- Add an optional `RightComponent` prop to `AppMenuItem`, forwarded to
the underlying `MenuItem` (which already renders it).
- Hoist the `loaderComponent` computation in
`CommandMenuItemSelectableRenderer` above the branches and pass it to
both the third-party `AppMenuItem` path and the existing `listItem` path
(no behavior change for the latter).

The loader now appears for third-party app actions exactly as it does
for native ones — `<CommandListItemLoader progress={progress} />` once
progress is reported, falling back to a `<Loader />` spinner before the
first progress update.

## Verification

- `oxlint --type-aware` clean on both changed files.
- `typecheck` clean for the changed files.
- Manual browser repro requires a third-party application with a
progress-reporting headless action installed in the workspace (as in the
reported screenshot), which isn't available in a stock dev workspace.
The fix mirrors the already-working native `listItem` loader path.

<!-- This is an auto-generated description by cubic. -->
<a
href="https://cubic.dev/pr/twentyhq/twenty/pull/22073?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
2026-06-24 15:05:28 +02:00
..