Skip to content

Conversation

@TkDodo
Copy link
Collaborator

@TkDodo TkDodo commented Nov 3, 2025

This PR adds preloading to internal links. To do this, we:

  • expose a new preload function from makeLazyLoadComponent
  • attach this method to the route’s handle
  • invoke the preload method on hover / focus of our <Link> component if the Link would go to a route

Note:

  • we attach the hover / focus event handlers to all Links, but they will trigger the promise only once because it’s cached.
  • if a route was made without makeLazyLoadComponent, it won’t have a preload function so nothing happens.
  • only static assets are preloaded - not data calls

This should ensure that navigations between routes, when going there the first time, are faster and we don’t have to show loading spinners that often. Combined with deferring the fallback for lazy loaded files, we should get a smooth ux for first navigations.

before (notice the big spinner in the middle of the page on each navigation):
after (notice the big spinner in the middle of the page is gone):

@github-actions github-actions bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Nov 3, 2025
@codecov
Copy link

codecov bot commented Nov 3, 2025

❌ 17 Tests Failed:

Tests completed Failed Passed Skipped
6729 17 6712 4
View the top 3 failed test(s) by shortest run time
EventFeatureFlagList renders empty state if project has flags
Stack Traces | 0.014s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:208:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders empty state if event.contexts.flags is not set - flags already sent
Stack Traces | 0.015s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:225:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders a sort dropdown which affects the granular sort dropdown
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:118:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders nothing if event.contexts.flags is not set - wrong platform
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:244:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList toggles the drawer when `view n flags` is clicked
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:81:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer allows search to affect displayed flags
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:80:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer renders a sort dropdown which affects the granular sort dropdown
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:153:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer renders a sort dropdown which hides the invalid options
Stack Traces | 0.019s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:171:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList allows sort dropdown to affect displayed flags
Stack Traces | 0.02s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:158:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders a sort dropdown with Evaluation Order as the default
Stack Traces | 0.02s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:108:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders a sort dropdown which hides the invalid options
Stack Traces | 0.027s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:135:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
Chart Utils findGranularityIntervalForMinutes() handles negative intervals
Stack Traces | 0.029s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at Object.getInterval (.../components/charts/utils.spec.tsx:112:21)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer allows sort dropdown to affect displayed flags
Stack Traces | 0.03s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:96:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList opens the drawer and focuses search when the search button is pressed
Stack Traces | 0.031s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:92:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer renders a sort dropdown with Evaluation Order as the default
Stack Traces | 0.044s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:139:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
EventFeatureFlagList renders a list of feature flags with a button to view more flags
Stack Traces | 0.097s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at Object.<anonymous> (.../events/featureFlags/eventFeatureFlagSection.spec.tsx:60:11)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)
FeatureFlagDrawer renders the drawer as expected
Stack Traces | 0.108s run time
TypeError: fmt is not a function
    at GranularityLadder.getInterval (.../components/charts/utils.tsx:106:12)
    at getInterval (.../components/charts/utils.tsx:142:15)
    at useIssueDetailsEventView (.../streamline/hooks/useIssueDetailsDiscoverQuery.tsx:45:31)
    at BaseEventFeatureFlagList (.../events/featureFlags/eventFeatureFlagSection.tsx:95:45)
    at Object.react_stack_bottom_frame (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:25904:20)
    at renderWithHooks (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:7662:22)
    at updateFunctionComponent (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:10166:19)
    at beginWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:11778:18)
    at runWithFiberInDEV (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:874:13)
    at performUnitOfWork (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17641:22)
    at workLoopSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17469:41)
    at renderRootSync (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:17450:11)
    at performWorkOnRoot (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:16583:35)
    at performWorkOnRootViaSchedulerTask (.../sentry/node_modules/.pnpm/react-dom@19.2.0_react@19.2..../react-dom/cjs/react-dom-client.development.js:18957:7)
    at flushActQueue (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:590:34)
    at process.env.NODE_ENV.exports.act (.../sentry/node_modules/.pnpm/react@19.2..../react/cjs/react.development.js:884:10)
    at .../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/act-compat.js:47:25
    at renderRoot (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:188:26)
    at Object.render (.../sentry/node_modules/.pnpm/@testing-library+react@16.2.0_@testing-library+dom@10.4.0_@types+react-dom@19.2.0_@type_011f94990cdc27509fa142ae9e3c3bf5/node_modules/@.../react/dist/pure.js:287:10)
    at render (.../js/sentry-test/reactTestingLibrary.tsx:429:28)
    at renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:27:9)
    at Object.renderFlagDrawer (.../events/featureFlags/eventFeatureFlagDrawer.spec.tsx:48:32)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/jest-circus@30.0.4_babel-plugin-macros@3.1..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/jest-runner@30.0..../jest-runner/build/testWorker.js:494:12)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

}

// Add preload method that triggers the same shared promise as lazy()
RouteLazyLoad[PRELOAD_HANDLE] = getSharedPromise;
Copy link
Member

Choose a reason for hiding this comment

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

Should we only set this if(!RouteLazyLoad[PRELOAD_HANDLE])?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

the RouteLazyLoad function is created in line 43, so here in line 48, it can never have a PPRELOAD_HANDLE assigned.

Comment on lines 25 to 31
const getSharedPromise = async () => {
if (!sharedPromise) {
sharedPromise = retryableImport(resolve);
loadedComponent = (await sharedPromise).default;
}
return sharedPromise;
};
Copy link
Member

Choose a reason for hiding this comment

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

A little bike shedding, but we can just early return and flatten the flow

Suggested change
const getSharedPromise = async () => {
if (!sharedPromise) {
sharedPromise = retryableImport(resolve);
loadedComponent = (await sharedPromise).default;
}
return sharedPromise;
};
const getSharedPromise = async () => {
if(sharedPromise) return sharedPromise;
sharedPromise = retryableImport(resolve);
loadedComponent = (await sharedPromise).default;
return sharedPromise;
};

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I had to refactor this to .then().catch() because an async function always returns a new Promise, so calling getSharedPromise() multiple times does in fact not return the same promise (which is necessary for react.lazy to work)

I should know because I wrote an article about that OVER 4 YEARS AGO on that 😂

https://tkdodo.eu/blog/about-async-functions#they-always-return-a-new-promise

regarding early return, I usually agree, but the situation here is a bit different - it’s the “initialize-cache-if-not-yet-initialized” pattern. An example with useRef would be:

const ref = useRef(null)
if (!ref.current) {
  ref.current = myInitializer()
}

return ref.current

Here, we’re doing the same thing, and swapping the order and having two return sharedPromise calls hides that a bit.

const ref = useRef(null)
if (ref.current) return ref.current

ref.current = myInitializer()
return ref.current

this isn’t something we would write I guess (the react compiler also wouldn’t like that, while it’s fine with the lazy init pattern)

Copy link
Member

Choose a reason for hiding this comment

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

Interesting, but I didn't have the reaction to read it like that... Maybe it was because of the await side effect there too.

{...props}
LazyComponent={LazyComponent}
// If the component is already loaded, render it directly to avoid Suspense
LazyComponent={loadedComponent ?? LazyComponent}
Copy link
Member

Choose a reason for hiding this comment

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

This is great, and now I wonder if the tiny loader flickers on the already loaded routes were happening because we were always returning a promise here, meaning this would always resolve in the next micro task

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

no, once react.lazy has loaded things, it returns the promise “synchronously”. React attaches a .status=“fulfilled” and .value property on the thenable and reads that. So, even in prod right now, once you’ve loaded all the assets, there shouldn’t be a flash.

@scttcper
Copy link
Member

scttcper commented Nov 3, 2025

looks really good

TkDodo added a commit that referenced this pull request Nov 4, 2025
This PR introduces a `LinkBehaviorContext` that allows us to decouple
sentry specific code from our design-system `scraps`.

In this first iteration, the only sentry specific things were:

- `locationDescriptorToTo`
- a call to `useLocation` to fall-back to anchor rendering if there is
no location. Honestly, I don’t know why / if we need that because when
would have no `useLocation` ?

I do plan to add more sentry specific link behavior, like [intent
prefetching](#102574), but this
de-coupling is pre-requisite for that.
shashjar pushed a commit that referenced this pull request Nov 4, 2025
This PR introduces a `LinkBehaviorContext` that allows us to decouple
sentry specific code from our design-system `scraps`.

In this first iteration, the only sentry specific things were:

- `locationDescriptorToTo`
- a call to `useLocation` to fall-back to anchor rendering if there is
no location. Honestly, I don’t know why / if we need that because when
would have no `useLocation` ?

I do plan to add more sentry specific link behavior, like [intent
prefetching](#102574), but this
de-coupling is pre-requisite for that.
priscilawebdev pushed a commit that referenced this pull request Nov 6, 2025
This PR introduces a `LinkBehaviorContext` that allows us to decouple
sentry specific code from our design-system `scraps`.

In this first iteration, the only sentry specific things were:

- `locationDescriptorToTo`
- a call to `useLocation` to fall-back to anchor rendering if there is
no location. Honestly, I don’t know why / if we need that because when
would have no `useLocation` ?

I do plan to add more sentry specific link behavior, like [intent
prefetching](#102574), but this
de-coupling is pre-requisite for that.
# Conflicts:
#	static/app/components/core/link/link.tsx
# Conflicts:
#	static/app/utils/reactRouter6Compat/router.tsx
Comment on lines +33 to +35
<RouteConfigProvider value={router.routes}>
<RouterProvider router={router} />
</RouteConfigProvider>
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

note: react-router does not expose a hook that gives us access to all the routes; the recommended way is to just export your routs (“it’s just config”), but that ties it to a specific implementation and makes it hard to test.

instead, I’ve opted for another provider that allows access to the route config of the router that gets passed to RouterProvider.

This is the only place where we add this. linkBehavior reads the context to enable intent prefetching, and if there is no context, we simply don’t prefetch anything. That means we don’t need to add this provider everywhere.

Comment on lines +18 to +19
const {organization} = useLegacyStore(OrganizationStore);
const intentPreloading = organization?.features?.includes('route-intent-preloading');
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

note: I had to useLegacyStore here because the OrganizationProvider is added further down the tree, so useOrganization({ allowNull: true}) always returns null :/

Comment on lines 20 to 31
Sentry.withScope(scope => {
scope.setLevel('warning');
Sentry.captureException(error, {
tags: {
component: 'Link',
operation: 'preload',
},
extra: {
to,
route: match.route.path,
},
});
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

lmk if this should be logs instead

Copy link
Member

Choose a reason for hiding this comment

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

I would add logs instead. Async stack traces are poorly implemented in JS, so you won't see much of a gain here by using exceptions.

@TkDodo
Copy link
Collaborator Author

TkDodo commented Nov 7, 2025

@JonasBa I updated the tests

Comment on lines 20 to 31
Sentry.withScope(scope => {
scope.setLevel('warning');
Sentry.captureException(error, {
tags: {
component: 'Link',
operation: 'preload',
},
extra: {
to,
route: match.route.path,
},
});
Copy link
Member

Choose a reason for hiding this comment

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

I would add logs instead. Async stack traces are poorly implemented in JS, so you won't see much of a gain here by using exceptions.

@TkDodo
Copy link
Collaborator Author

TkDodo commented Nov 7, 2025

@JonasBa switched to logs here: 2cc9f13

Comment on lines 222 to 229
logger: {
warn: jest.fn(),
error: jest.fn(),
fatal: jest.fn(),
info: jest.fn(),
debug: jest.fn(),
trace: jest.fn(),
},
Copy link
Member

Choose a reason for hiding this comment

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

Why did we need this change?

Copy link
Member

Choose a reason for hiding this comment

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

probably haven't hit logs in a test before 🤷 wouldn't surprise me

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yeah this is generally missing. Could also extract to a separate PR?

@TkDodo TkDodo merged commit ffb785d into master Nov 10, 2025
47 checks passed
@TkDodo TkDodo deleted the tkdodo/feat/intent-preload branch November 10, 2025 09:54
@sentry
Copy link

sentry bot commented Nov 10, 2025

Issues attributed to commits in this pull request

This pull request was merged and Sentry observed the following issues:

TkDodo added a commit that referenced this pull request Nov 11, 2025
with [route intent
preloading](#102574), we show
way fewer loaders for lazy-loading assets. However, the loader still
shows up when you hard reload a page, or navigate there for the first
time. this still leads to cascading loaders, with the first loader (the
vertically centered one) being from lazy-loading the static asset:


https://github.com/user-attachments/assets/5a85bf86-74ee-4d1d-b2a9-10121bc7160f

since lazy-loading static assets is usually fast, by deferring the
loader by 300ms, we get a better experience for those cases, while still
showing a loader should it really take some time:


https://github.com/user-attachments/assets/35945187-d594-43b1-8f79-1b8bef4354c7
Jesse-Box pushed a commit that referenced this pull request Nov 12, 2025
This PR introduces a `LinkBehaviorContext` that allows us to decouple
sentry specific code from our design-system `scraps`.

In this first iteration, the only sentry specific things were:

- `locationDescriptorToTo`
- a call to `useLocation` to fall-back to anchor rendering if there is
no location. Honestly, I don’t know why / if we need that because when
would have no `useLocation` ?

I do plan to add more sentry specific link behavior, like [intent
prefetching](#102574), but this
de-coupling is pre-requisite for that.
Jesse-Box pushed a commit that referenced this pull request Nov 12, 2025
This PR adds preloading to internal links. To do this, we:

- expose a new `preload` function from `makeLazyLoadComponent`
- attach this method to the route’s `handle`
- invoke the `preload` method on hover / focus of our `<Link>` component
if the Link would go to a route

Note:

- we attach the hover / focus event handlers to _all_ Links, but they
will trigger the promise only once because it’s cached.
- if a route was made without `makeLazyLoadComponent`, it won’t have a
preload function so nothing happens.
- only static assets are preloaded - not data calls

This should ensure that navigations between routes, when going there the
first time, are faster and we don’t have to show loading spinners that
often. Combined with [deferring the fallback for lazy loaded
files](#102031), we should get a
smooth ux for first navigations.

before (notice the big spinner in the middle of the page on each
navigation):
after (notice the big spinner in the middle of the page is gone):
Jesse-Box pushed a commit that referenced this pull request Nov 12, 2025
with [route intent
preloading](#102574), we show
way fewer loaders for lazy-loading assets. However, the loader still
shows up when you hard reload a page, or navigate there for the first
time. this still leads to cascading loaders, with the first loader (the
vertically centered one) being from lazy-loading the static asset:


https://github.com/user-attachments/assets/5a85bf86-74ee-4d1d-b2a9-10121bc7160f

since lazy-loading static assets is usually fast, by deferring the
loader by 300ms, we get a better experience for those cases, while still
showing a loader should it really take some time:


https://github.com/user-attachments/assets/35945187-d594-43b1-8f79-1b8bef4354c7
andrewshie-sentry pushed a commit that referenced this pull request Nov 13, 2025
This PR introduces a `LinkBehaviorContext` that allows us to decouple
sentry specific code from our design-system `scraps`.

In this first iteration, the only sentry specific things were:

- `locationDescriptorToTo`
- a call to `useLocation` to fall-back to anchor rendering if there is
no location. Honestly, I don’t know why / if we need that because when
would have no `useLocation` ?

I do plan to add more sentry specific link behavior, like [intent
prefetching](#102574), but this
de-coupling is pre-requisite for that.
andrewshie-sentry pushed a commit that referenced this pull request Nov 13, 2025
This PR adds preloading to internal links. To do this, we:

- expose a new `preload` function from `makeLazyLoadComponent`
- attach this method to the route’s `handle`
- invoke the `preload` method on hover / focus of our `<Link>` component
if the Link would go to a route

Note:

- we attach the hover / focus event handlers to _all_ Links, but they
will trigger the promise only once because it’s cached.
- if a route was made without `makeLazyLoadComponent`, it won’t have a
preload function so nothing happens.
- only static assets are preloaded - not data calls

This should ensure that navigations between routes, when going there the
first time, are faster and we don’t have to show loading spinners that
often. Combined with [deferring the fallback for lazy loaded
files](#102031), we should get a
smooth ux for first navigations.

before (notice the big spinner in the middle of the page on each
navigation):
after (notice the big spinner in the middle of the page is gone):
andrewshie-sentry pushed a commit that referenced this pull request Nov 13, 2025
with [route intent
preloading](#102574), we show
way fewer loaders for lazy-loading assets. However, the loader still
shows up when you hard reload a page, or navigate there for the first
time. this still leads to cascading loaders, with the first loader (the
vertically centered one) being from lazy-loading the static asset:


https://github.com/user-attachments/assets/5a85bf86-74ee-4d1d-b2a9-10121bc7160f

since lazy-loading static assets is usually fast, by deferring the
loader by 300ms, we get a better experience for those cases, while still
showing a loader should it really take some time:


https://github.com/user-attachments/assets/35945187-d594-43b1-8f79-1b8bef4354c7
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants