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))" `) }