Skip to content

fix(widget-builder): Prevent TypeError when sorting with equation-only yAxis#106834

Merged
Zylphrex merged 1 commit intomasterfrom
seer/fix/javascript-35pg
Jan 28, 2026
Merged

fix(widget-builder): Prevent TypeError when sorting with equation-only yAxis#106834
Zylphrex merged 1 commit intomasterfrom
seer/fix/javascript-35pg

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
@Zylphrex Zylphrex merged commit 841e5ba into master Jan 28, 2026
66 of 69 checks passed
@Zylphrex Zylphrex deleted the seer/fix/javascript-35pg branch January 28, 2026 16:41
priscilawebdev pushed a commit that referenced this pull request Feb 2, 2026
…y yAxis (#106834)

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

<!--

  Sentry employees and contractors can delete or ignore the following.

-->

### 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.

Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com>
@github-actions github-actions bot locked and limited conversation to collaborators Feb 13, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

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