Skip to content

Commit 9b04da7

Browse files
update
1 parent 3679231 commit 9b04da7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+744
-523
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@
4141
"dts-bundle-generator": "^9.5.1",
4242
"eslint": "^8.57.0",
4343
"husky": "^8.0.2",
44-
"postcss": "^8.5.1",
44+
"postcss": "^8.5.6",
4545
"postcss-cli": "^11.0.0",
4646
"postcss-import": "^16.1.0",
4747
"postcss-prefix-selector": "^2.1.0",
48-
"prettier": "^3.4.2",
48+
"prettier": "^3.6.2",
4949
"prettier-plugin-tailwindcss": "^0.6.11",
5050
"project-tool": "https://github.com/MrWangJustToDo/project-tool.git",
5151
"rollup-plugin-postcss": "^4.0.2",

packages/react/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
"devDependencies": {
7979
"@types/use-sync-external-store": "^0.0.6",
8080
"autoprefixer": "^10.4.20",
81-
"postcss": "^8.5.1",
81+
"postcss": "^8.5.6",
8282
"react": "^18.0.0",
8383
"tailwindcss": "^3.4.17"
8484
},

packages/react/src/components/DiffSplitViewNormal.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ export const DiffSplitViewNormal = memo(({ diffFile }: { diffFile: DiffFile }) =
8585

8686
const ref = useRef<HTMLStyleElement>();
8787

88+
const tempRef = useRef<SplitSide>();
89+
8890
const splitLineLength = Math.max(diffFile.splitLineLength, diffFile.fileLineLength);
8991

9092
const { useDiffContext } = useDiffViewContext();
@@ -139,13 +141,19 @@ export const DiffSplitViewNormal = memo(({ diffFile }: { diffFile: DiffFile }) =
139141
const state = ele.getAttribute("data-state");
140142
const side = ele.getAttribute("data-side");
141143
if (side) {
142-
setStyle(SplitSide[side]);
143-
removeAllSelection();
144+
if (tempRef.current !== SplitSide[side]) {
145+
tempRef.current = SplitSide[side];
146+
setStyle(SplitSide[side]);
147+
removeAllSelection();
148+
}
144149
}
145150
if (state) {
146151
if (state === "extend" || state === "hunk" || state === "widget") {
147-
setStyle(undefined);
148-
removeAllSelection();
152+
if (tempRef.current !== undefined) {
153+
tempRef.current = undefined;
154+
setStyle(undefined);
155+
removeAllSelection();
156+
}
149157
return;
150158
} else {
151159
return;

packages/react/src/components/DiffSplitViewWrap.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export const DiffSplitViewWrap = memo(({ diffFile }: { diffFile: DiffFile }) =>
2424

2525
const ref = useRef<HTMLStyleElement>(null);
2626

27+
const tempRef = useRef<SplitSide>();
28+
2729
const { fontSize, enableAddWidget, enableHighlight } = useDiffContext.useShallowStableSelector((s) => ({
2830
fontSize: s.fontSize,
2931
enableAddWidget: s.enableAddWidget,
@@ -67,13 +69,19 @@ export const DiffSplitViewWrap = memo(({ diffFile }: { diffFile: DiffFile }) =>
6769
const state = ele.getAttribute("data-state");
6870
const side = ele.getAttribute("data-side");
6971
if (side) {
70-
setStyle(SplitSide[side]);
71-
removeAllSelection();
72+
if (tempRef.current !== SplitSide[side]) {
73+
tempRef.current = SplitSide[side];
74+
setStyle(SplitSide[side]);
75+
removeAllSelection();
76+
}
7277
}
7378
if (state) {
7479
if (state === "extend" || state === "hunk" || state === "widget") {
75-
setStyle(undefined);
76-
removeAllSelection();
80+
if (tempRef.current !== undefined) {
81+
tempRef.current = undefined;
82+
setStyle(undefined);
83+
removeAllSelection();
84+
}
7785
return;
7886
} else {
7987
return;

packages/react/src/components/DiffSplitWidgetLineNormal.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const InternalDiffSplitWidgetLine = ({
2929

3030
const newLine = diffFile.getSplitRightLine(index);
3131

32-
const widgetSide = useWidget.getReadonlyState().widgetSide;
32+
const widgetSide = useWidget.useShallowStableSelector((s) => s.widgetSide);
3333

3434
const widgetLineNumber = useWidget.getReadonlyState().widgetLineNumber;
3535

@@ -134,13 +134,11 @@ export const DiffSplitWidgetLine = ({
134134
const newLineWidget =
135135
newLine.lineNumber && widgetSide === SplitSide.new && widgetLineNumber === newLine.lineNumber;
136136

137-
const currentLineWidget = side === SplitSide.old ? oldLineWidget : newLineWidget;
138-
139-
const currentIsShow = currentLineWidget;
137+
const currentIsShow = oldLineWidget || newLineWidget;
140138

141139
return currentIsShow;
142140
},
143-
[diffFile, index, side]
141+
[diffFile, index]
144142
),
145143
(p, c) => p === c
146144
);

packages/react/src/components/DiffUnifiedView.tsx

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ export const DiffUnifiedView = memo(({ diffFile }: { diffFile: DiffFile }) => {
2323

2424
const ref = useRef<HTMLStyleElement>(null);
2525

26+
const tempRef = useRef<SplitSide>();
27+
2628
const useDiffContextRef = useRef(useDiffContext);
2729

2830
useDiffContextRef.current = useDiffContext;
@@ -87,12 +89,18 @@ export const DiffUnifiedView = memo(({ diffFile }: { diffFile: DiffFile }) => {
8789
const state = ele.getAttribute("data-state");
8890
if (state) {
8991
if (state === "extend" || state === "hunk" || state === "widget") {
90-
setStyle(undefined);
91-
removeAllSelection();
92+
if (tempRef.current !== undefined) {
93+
tempRef.current = undefined;
94+
setStyle(undefined);
95+
removeAllSelection();
96+
}
9297
return;
9398
} else {
94-
setStyle(SplitSide.new);
95-
removeAllSelection();
99+
if (tempRef.current !== SplitSide.new) {
100+
tempRef.current = SplitSide.new;
101+
setStyle(SplitSide.new);
102+
removeAllSelection();
103+
}
96104
return;
97105
}
98106
}

packages/solid/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"vite-plugin-solid": "^2.11.0",
5454
"autoprefixer": "^10.4.20",
5555
"eslint-plugin-solid": "^0.14.5",
56-
"postcss": "^8.5.1",
56+
"postcss": "^8.5.6",
5757
"tailwindcss": "^3.4.17",
5858
"vite": "^5.4.19",
5959
"vite-plugin-dts": "^4.5.0"

packages/solid/src/components/DiffSplitViewNormal.tsx

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,20 @@ import { DiffSplitWidgetLine } from "./DiffSplitWidgetLineNormal";
1717

1818
import type { DiffFile } from "@git-diff-view/core";
1919

20-
const DiffSplitViewTable = (props: { side: SplitSide; diffFile: DiffFile; onSelect?: (side?: SplitSide) => void }) => {
20+
const DiffSplitViewTable = (props: {
21+
side: SplitSide;
22+
diffFile: DiffFile;
23+
onSelect?: (side?: SplitSide) => void;
24+
selectState: { current?: SplitSide };
25+
}) => {
2126
const className = createMemo(() => (props.side === SplitSide.new ? "new-diff-table" : "old-diff-table"));
2227

2328
const getAllLines = () => getSplitContentLines(props.diffFile);
2429

2530
const [lines, setLines] = createSignal(getAllLines());
2631

32+
const selectState = props.selectState;
33+
2734
createEffect(() => {
2835
const init = () => setLines(getAllLines);
2936

@@ -46,11 +53,17 @@ const DiffSplitViewTable = (props: { side: SplitSide; diffFile: DiffFile; onSele
4653
const state = ele.getAttribute("data-state");
4754
if (state) {
4855
if (state === "extend" || state === "hunk" || state === "widget") {
49-
props.onSelect?.(undefined);
50-
removeAllSelection();
56+
if (selectState.current !== undefined) {
57+
selectState.current = undefined;
58+
props.onSelect?.(undefined);
59+
removeAllSelection();
60+
}
5161
} else {
52-
props.onSelect?.(props.side);
53-
removeAllSelection();
62+
if (selectState.current !== props.side) {
63+
selectState.current = props.side;
64+
props.onSelect?.(props.side);
65+
removeAllSelection();
66+
}
5467
}
5568
return;
5669
}
@@ -134,6 +147,8 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
134147

135148
createEffect(initSyncScroll);
136149

150+
const selectState = { current: undefined as SplitSide | undefined };
151+
137152
const onSelect = (side?: SplitSide) => {
138153
const ele = styleRef();
139154

@@ -169,7 +184,12 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
169184
"font-size": `var(${diffFontSizeName})`,
170185
}}
171186
>
172-
<DiffSplitViewTable side={SplitSide.old} diffFile={props.diffFile} onSelect={onSelect} />
187+
<DiffSplitViewTable
188+
side={SplitSide.old}
189+
diffFile={props.diffFile}
190+
onSelect={onSelect}
191+
selectState={selectState}
192+
/>
173193
</div>
174194
<div class="diff-split-line w-[1.5px]" style={{ "background-color": `var(${borderColorName})` }} />
175195
<div
@@ -182,7 +202,12 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
182202
"font-size": `var(${diffFontSizeName})`,
183203
}}
184204
>
185-
<DiffSplitViewTable side={SplitSide.new} diffFile={props.diffFile} onSelect={onSelect} />
205+
<DiffSplitViewTable
206+
side={SplitSide.new}
207+
diffFile={props.diffFile}
208+
onSelect={onSelect}
209+
selectState={selectState}
210+
/>
186211
</div>
187212
</div>
188213
);

packages/solid/src/components/DiffSplitViewWrap.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable @typescript-eslint/ban-ts-comment */
12
import { getSplitContentLines, SplitSide } from "@git-diff-view/core";
23
import { diffAsideWidthName, diffFontSizeName, removeAllSelection } from "@git-diff-view/utils";
34
import { createEffect, createMemo, createSignal, onCleanup, For } from "solid-js";
@@ -34,6 +35,8 @@ export const DiffSplitViewWrap = (props: { diffFile: DiffFile }) => {
3435
onCleanup(cb);
3536
});
3637

38+
const selectState = { current: undefined as SplitSide | undefined };
39+
3740
const onSelect = (side?: SplitSide) => {
3841
const ele = styleRef();
3942

@@ -60,15 +63,22 @@ export const DiffSplitViewWrap = (props: { diffFile: DiffFile }) => {
6063
const state = ele.getAttribute("data-state");
6164
const side = ele.getAttribute("data-side");
6265
if (side) {
63-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
6466
// @ts-ignore
65-
onSelect(SplitSide[side]);
66-
removeAllSelection();
67+
if (selectState.current !== SplitSide[side]) {
68+
// @ts-ignore
69+
selectState.current = SplitSide[side];
70+
// @ts-ignore
71+
onSelect(SplitSide[side]);
72+
removeAllSelection();
73+
}
6774
}
6875
if (state) {
6976
if (state === "extend" || state === "hunk" || state === "widget") {
70-
onSelect(undefined);
71-
removeAllSelection();
77+
if (selectState.current !== undefined) {
78+
selectState.current = undefined;
79+
onSelect(undefined);
80+
removeAllSelection();
81+
}
7282
return;
7383
} else {
7484
return;

packages/solid/src/components/DiffSplitWidgetLineNormal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const DiffSplitWidgetLine = (props: {
4949
);
5050

5151
const currentIsShow = createMemo(
52-
() => (!!oldLineWidget() || !!newLineWidget()) && !currentIsHidden() && !newLine()?.isHidden && !!renderWidget
52+
() => (!!oldLineWidget() || !!newLineWidget()) && !currentIsHidden() && !!renderWidget
5353
);
5454

5555
const currentEnable = createMemo(() => currentWidget() && !!currentIsShow());

0 commit comments

Comments
 (0)