Files
twenty/packages
Sonarly Claude Code fff0667c9b fix(command-menu): handle missing record store data in navigate commands
https://sonarly.com/issue/31631?type=bug

The "Navigate to next/previous record" command throws an unhandled error when the user clicks the navigation button before the current record's data has been loaded into the Jotai record store, resulting in an error snackbar and a failed navigation.

Fix: Changed `throw new Error(...)` to `return null` in both `NavigateToNextRecordSingleRecordCommand` and `NavigateToPreviousRecordSingleRecordCommand`.

**Why:** When the user rapidly clicks "Navigate to next/previous Person" after navigating to a new record page (especially during auth token renewal), the record data may not yet be loaded into `recordStoreFamilyState`. The `buildHeadlessCommandContextApi` reads the record store synchronously — if the record hasn't been loaded via GraphQL yet, `recordStoreFamilyState.atomFamily(id)` returns `null`, which gets filtered out by `isDefined`, leaving `selectedRecords` empty. The component then hits the guard and throws.

Throwing is the wrong behavior here because:
1. The error boundary (`CommandMenuItemErrorBoundary`) catches it, renders `null` as fallback, and shows an error snackbar to the user — but the error isn't actionable by the user
2. It fires a Sentry event for what is actually a transient data-loading race condition, not a true application error
3. The sibling command `SeeVersionWorkflowRunSingleRecordCommand` already uses `return null` for the same scenario (established in commit 6ce23a4115)

Returning `null` makes the command a silent no-op when data isn't ready, avoiding the error snackbar and Sentry noise. The `HeadlessEngineCommandWrapperEffect` that would have been rendered will simply not execute, and the user can retry the navigation once the page fully loads.
2026-04-27 12:12:40 +00:00
..
2026-04-27 11:51:42 +00:00