Skip to content

Commit 023915e

Browse files
improve performance
1 parent 7834bf0 commit 023915e

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

packages/react/src/components/DiffSplitView.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ export const DiffSplitView = memo(({ diffFile }: { diffFile: DiffFile }) => {
2525
const widgetLineNumber = ref<number>(undefined);
2626

2727
const setWidget = ({ side, lineNumber }: { side?: SplitSide; lineNumber?: number }) => {
28+
const { renderWidgetLine } = useDiffContext.getReadonlyState();
29+
30+
if (typeof renderWidgetLine !== "function") return;
31+
2832
widgetSide.value = side;
33+
2934
widgetLineNumber.value = lineNumber;
3035
};
3136

3237
return { widgetSide, widgetLineNumber, setWidget };
3338
}),
34-
[]
39+
[useDiffContext]
3540
);
3641

3742
const contextValue = useMemo(() => ({ useWidget }), [useWidget]);

packages/react/src/components/DiffUnifiedView.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import { Fragment, memo, useEffect, useMemo } from "react";
44
import { createStore, ref } from "reactivity-store";
55
import { useSyncExternalStore } from "use-sync-external-store/shim";
66

7+
import { useDiffViewContext, type SplitSide } from "..";
8+
79
import { DiffUnifiedExtendLine } from "./DiffUnifiedExtendLine";
810
import { DiffUnifiedHunkLine } from "./DiffUnifiedHunkLine";
911
import { DiffUnifiedLine } from "./DiffUnifiedLine";
1012
import { DiffUnifiedWidgetLine } from "./DiffUnifiedWidgetLine";
1113
import { DiffWidgetContext } from "./DiffWidgetContext";
1214
import { removeAllSelection } from "./tools";
1315

14-
import type { SplitSide } from "..";
1516
import type { DiffFile } from "@git-diff-view/core";
1617
import type { MouseEventHandler } from "react";
1718

@@ -26,6 +27,8 @@ const onMouseDown: MouseEventHandler<HTMLTableSectionElement> = (e) => {
2627
};
2728

2829
export const DiffUnifiedView = memo(({ diffFile }: { diffFile: DiffFile }) => {
30+
const { useDiffContext } = useDiffViewContext();
31+
2932
// performance optimization
3033
const useWidget = useMemo(
3134
() =>
@@ -35,13 +38,18 @@ export const DiffUnifiedView = memo(({ diffFile }: { diffFile: DiffFile }) => {
3538
const widgetLineNumber = ref<number>(undefined);
3639

3740
const setWidget = ({ side, lineNumber }: { side?: SplitSide; lineNumber?: number }) => {
41+
const { renderWidgetLine } = useDiffContext.getReadonlyState();
42+
43+
if (typeof renderWidgetLine !== "function") return;
44+
3845
widgetSide.value = side;
46+
3947
widgetLineNumber.value = lineNumber;
4048
};
4149

4250
return { widgetSide, widgetLineNumber, setWidget };
4351
}),
44-
[]
52+
[useDiffContext]
4553
);
4654

4755
const contextValue = useMemo(() => ({ useWidget }), [useWidget]);

packages/vue/src/components/DiffView.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ export const DiffView = defineComponent<
9292

9393
const widgetState = ref<{ side?: SplitSide; lineNumber?: number }>({});
9494

95-
const setWidget = (v: { side?: SplitSide; lineNumber?: number }) => (widgetState.value = v);
95+
const setWidget = (v: { side?: SplitSide; lineNumber?: number }) => {
96+
typeof options.slots.widget === "function" && (widgetState.value = v);
97+
};
9698

9799
const enableHighlight = computed(() => props.diffViewHighlight ?? true);
98100

0 commit comments

Comments
 (0)