Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 37 additions & 35 deletions packages/diffs/src/components/CodeView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,37 @@ import { VirtualizedFile } from './VirtualizedFile';
import { VirtualizedFileDiff } from './VirtualizedFileDiff';
import type { VirtualizerConfig } from './Virtualizer';

function getSlotItems<LAnnotation>(
renderedItems: CodeViewRenderedItem<LAnnotation>[],
{
hasHeaderRenderers,
hasAnnotationRenderer,
hasGutterRenderer,
}: CodeViewCoordinator<LAnnotation>
): CodeViewRenderedItem<LAnnotation>[] | undefined {
if (renderedItems.length === 0) {
return undefined;
}

if (hasHeaderRenderers || hasGutterRenderer) {
return renderedItems;
}

if (!hasAnnotationRenderer) {
return undefined;
}

const slotSnapshot: CodeViewRenderedItem<LAnnotation>[] = [];

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
Expand All @@ -69,15 +100,15 @@ interface ItemAnchor {
viewportOffset: number;
}

interface LineAnchor {
interface LineAnchorAlt {
type: 'line';
id: string;
lineNumber: number;
side: SelectionSide | undefined;
viewportOffset: number;
}

type ScrollAnchor = ItemAnchor | LineAnchor;
type ScrollAnchor = ItemAnchor | LineAnchorAlt;

interface LineScrollPosition {
top: number;
Expand Down Expand Up @@ -4211,8 +4242,8 @@ function renderItem<LAnnotation>(
* before rendering updates.
*/
function syncRenderedItemOrder(
container: HTMLElement,
element: HTMLElement,
container: HTMLElement,
prevElement: HTMLElement | undefined
): void {
if (prevElement == null) {
Expand All @@ -4227,37 +4258,8 @@ function syncRenderedItemOrder(
}
}

function hasAnnotations<LAnnotation>(item: CodeViewItem<LAnnotation>): boolean {
function hasAnnotationsAlt<LAnnotation>(
item: CodeViewItem<LAnnotation>
): boolean {
return (item.annotations?.length ?? 0) > 0;
}

function getSlotItems<LAnnotation>(
renderedItems: CodeViewRenderedItem<LAnnotation>[],
{
hasHeaderRenderers,
hasAnnotationRenderer,
hasGutterRenderer,
}: CodeViewCoordinator<LAnnotation>
): CodeViewRenderedItem<LAnnotation>[] | undefined {
if (renderedItems.length === 0) {
return undefined;
}

if (hasHeaderRenderers || hasGutterRenderer) {
return renderedItems;
}

if (!hasAnnotationRenderer) {
return undefined;
}

const slotSnapshot: CodeViewRenderedItem<LAnnotation>[] = [];

for (const renderedItem of renderedItems) {
if (hasAnnotations(renderedItem.item)) {
slotSnapshot.push(renderedItem);
}
}

return slotSnapshot.length > 0 ? slotSnapshot : undefined;
}
Loading