Skip to content

Conversation

@seer-by-sentry
Copy link
Contributor

@seer-by-sentry seer-by-sentry bot commented Jan 22, 2026

This PR addresses a TypeError: Cannot read properties of undefined (reading 'kind') that occurred in the widget builder when attempting to update the sort field.

Root Cause:
The error happened in useWidgetBuilderState.tsx within the SET_FIELDS action handler. Specifically, when a user removed a group-by field from a chart widget, the logic to determine the new sort field could pass undefined to generateFieldAsString().

This occurred because:

  1. firstYAxisNotEquation would be undefined if the yAxis only contained fields of FieldValueKind.EQUATION.
  2. firstActionPayloadNotEquation would also be undefined if the remaining action.payload (fields) were empty or only contained equations.
  3. The code then attempted to call generateFieldAsString(undefined as QueryFieldValue), where the as QueryFieldValue cast silenced TypeScript but allowed undefined to be passed at runtime, leading to the TypeError when undefined.kind was accessed.

Solution:
The fix introduces explicit null checks before calling generateFieldAsString() or generateMetricAggregate().

  • The sortField variable is now initialized as string | undefined.
  • Conditional logic ensures that generateMetricAggregate() is called only if firstYAxisNotEquation is defined for TRACEMETRICS.
  • Similarly, generateFieldAsString() is called only if firstYAxisNotEquation or firstActionPayloadNotEquation are defined.
  • The setSort action is now guarded by an if (sortField) check, preventing a sort update (and thus the crash) if no valid field can be determined for sorting.

Closes JAVASCRIPT-35PG

Legal Boilerplate

Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms.

@github-actions github-actions bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Jan 22, 2026
@Zylphrex Zylphrex self-assigned this Jan 22, 2026
@Zylphrex Zylphrex added the Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests label Jan 22, 2026
@Zylphrex Zylphrex marked this pull request as ready for review January 22, 2026 22:42
@Zylphrex Zylphrex requested a review from a team as a code owner January 22, 2026 22:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Frontend Automatically applied to PRs that change frontend components Trigger: getsentry tests Once code is reviewed: apply label to PR to trigger getsentry tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants