From 86f38f3a5181930c4d2cc15354b5aa6f1fadbff4 Mon Sep 17 00:00:00 2001
From: Sebastian Sebbie Silbermann
Date: Thu, 6 Mar 2025 11:50:29 +0100
Subject: [PATCH] [dev-overlay] Stop grouping callstack frames into ignored vs.
not ignored
---
.../errors/call-stack/call-stack.stories.tsx | 1 +
.../errors/call-stack/call-stack.tsx | 48 ++++---------------
.../error-ignored-frames.test.ts | 4 +-
3 files changed, 12 insertions(+), 41 deletions(-)
diff --git a/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.stories.tsx b/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.stories.tsx
index 1c18530ed4dcc..1d8f68618dba3 100644
--- a/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.stories.tsx
+++ b/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.stories.tsx
@@ -62,6 +62,7 @@ export const MultipleFrames: Story = {
lineNumber: 5,
},
},
+ ...Array(5).fill(ignoredFrame),
{
...frame,
originalStackFrame: {
diff --git a/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.tsx b/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.tsx
index 056bc050ff9eb..02b11fdf49e99 100644
--- a/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.tsx
+++ b/packages/next/src/client/components/react-dev-overlay/ui/components/errors/call-stack/call-stack.tsx
@@ -11,24 +11,8 @@ export function CallStack({ frames, dialogResizerRef }: CallStackProps) {
const initialDialogHeight = useRef(NaN)
const [isIgnoreListOpen, setIsIgnoreListOpen] = useState(false)
- const { visibleFrames, ignoredFrames, ignoreListLength } = useMemo(() => {
- const visible: OriginalStackFrame[] = []
- const ignored: OriginalStackFrame[] = []
-
- for (const frame of frames) {
- if (!frame.ignored) {
- visible.push(frame)
- }
- if (frame.ignored) {
- ignored.push(frame)
- }
- }
-
- return {
- visibleFrames: visible,
- ignoredFrames: ignored,
- ignoreListLength: ignored.length,
- }
+ const ignoredFramesTally = useMemo(() => {
+ return frames.reduce((tally, frame) => tally + (frame.ignored ? 1 : 0), 0)
}, [frames])
function onToggleIgnoreList() {
@@ -65,36 +49,22 @@ export function CallStack({ frames, dialogResizerRef }: CallStackProps) {
{frames.length}
- {ignoreListLength > 0 && (
+ {ignoredFramesTally > 0 && (
)}
- {visibleFrames.map((frame, frameIndex) => (
-
- ))}
-
- {isIgnoreListOpen && (
- <>
- {ignoredFrames.map((frame, frameIndex) => (
-
- ))}
- >
- )}
+ {frames.map((frame, frameIndex) => {
+ return !frame.ignored || isIgnoreListOpen ? (
+
+ ) : null
+ })}
)
}
diff --git a/test/development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts b/test/development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts
index eb5eb84993733..e49975a0b171c 100644
--- a/test/development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts
+++ b/test/development/app-dir/error-overlay/error-ignored-frames/error-ignored-frames.test.ts
@@ -99,15 +99,15 @@ describe('error-ignored-frames', () => {
if (isTurbopack) {
expect(expendedStack).toMatchInlineSnapshot(`
"at (app/interleaved/page.tsx (7:11))
- at Page (app/interleaved/page.tsx (6:35))
at invokeCallback ()
+ at Page (app/interleaved/page.tsx (6:35))
at ClientPageRoot ()"
`)
} else {
expect(expendedStack).toMatchInlineSnapshot(`
"at eval (app/interleaved/page.tsx (7:11))
- at Page (app/interleaved/page.tsx (6:36))
at invokeCallback (node_modules/interleave/index.js (2:1))
+ at Page (app/interleaved/page.tsx (6:36))
at ClientPageRoot (../src/client/components/client-page.tsx (60:12))"
`)
}