diff --git a/packages/diffs/src/components/CodeView.ts b/packages/diffs/src/components/CodeView.ts index db35c8083..9a7678a6d 100644 --- a/packages/diffs/src/components/CodeView.ts +++ b/packages/diffs/src/components/CodeView.ts @@ -57,6 +57,37 @@ import { VirtualizedFile } from './VirtualizedFile'; import { VirtualizedFileDiff } from './VirtualizedFileDiff'; import type { VirtualizerConfig } from './Virtualizer'; +function getSlotItems( + renderedItems: CodeViewRenderedItem[], + { + hasHeaderRenderers, + hasAnnotationRenderer, + hasGutterRenderer, + }: CodeViewCoordinator +): CodeViewRenderedItem[] | undefined { + if (renderedItems.length === 0) { + return undefined; + } + + if (hasHeaderRenderers || hasGutterRenderer) { + return renderedItems; + } + + if (!hasAnnotationRenderer) { + return undefined; + } + + const slotSnapshot: CodeViewRenderedItem[] = []; + + for (const renderedItem of renderedItems) { + if (hasAnnotationsAlt(renderedItem.item)) { + slotSnapshot.push(renderedItem); + } + } + + return slotSnapshot.length > 0 ? slotSnapshot : undefined; +} + // When re-rendering content of the virtualizer, it's important that we // maintain a visual anchor, usually this is the first fully visible element, // whether it's an Item (a file or diff header), or a specific line. If the @@ -69,7 +100,7 @@ interface ItemAnchor { viewportOffset: number; } -interface LineAnchor { +interface LineAnchorAlt { type: 'line'; id: string; lineNumber: number; @@ -77,7 +108,7 @@ interface LineAnchor { viewportOffset: number; } -type ScrollAnchor = ItemAnchor | LineAnchor; +type ScrollAnchor = ItemAnchor | LineAnchorAlt; interface LineScrollPosition { top: number; @@ -4211,8 +4242,8 @@ function renderItem( * before rendering updates. */ function syncRenderedItemOrder( - container: HTMLElement, element: HTMLElement, + container: HTMLElement, prevElement: HTMLElement | undefined ): void { if (prevElement == null) { @@ -4227,37 +4258,8 @@ function syncRenderedItemOrder( } } -function hasAnnotations(item: CodeViewItem): boolean { +function hasAnnotationsAlt( + item: CodeViewItem +): boolean { return (item.annotations?.length ?? 0) > 0; } - -function getSlotItems( - renderedItems: CodeViewRenderedItem[], - { - hasHeaderRenderers, - hasAnnotationRenderer, - hasGutterRenderer, - }: CodeViewCoordinator -): CodeViewRenderedItem[] | undefined { - if (renderedItems.length === 0) { - return undefined; - } - - if (hasHeaderRenderers || hasGutterRenderer) { - return renderedItems; - } - - if (!hasAnnotationRenderer) { - return undefined; - } - - const slotSnapshot: CodeViewRenderedItem[] = []; - - for (const renderedItem of renderedItems) { - if (hasAnnotations(renderedItem.item)) { - slotSnapshot.push(renderedItem); - } - } - - return slotSnapshot.length > 0 ? slotSnapshot : undefined; -}