@@ -10,35 +10,54 @@ import { useDiffWidgetContext } from "../DiffWidgetContext";
10
10
import type { DiffFile } from "@git-diff-view/core" ;
11
11
12
12
const InternalDiffSplitWidgetLine = ( {
13
- diffFile ,
13
+ index ,
14
14
side,
15
+ diffFile,
15
16
lineNumber,
16
- currentLine,
17
- setWidget,
18
- currentWidget,
19
17
} : {
20
18
index : number ;
21
19
side : SplitSide ;
22
20
diffFile : DiffFile ;
23
21
lineNumber : number ;
24
- currentLine : ReturnType < DiffFile [ "getSplitLeftLine" ] > ;
25
- currentWidget : boolean ;
26
- setWidget : ( props : { side ?: SplitSide ; lineNumber ?: number } ) => void ;
27
22
} ) => {
23
+ const { useWidget } = useDiffWidgetContext ( ) ;
24
+
28
25
const { useDiffContext } = useDiffViewContext ( ) ;
29
26
27
+ const oldLine = diffFile . getSplitLeftLine ( index ) ;
28
+
29
+ const newLine = diffFile . getSplitRightLine ( index ) ;
30
+
31
+ const widgetSide = useWidget . getReadonlyState ( ) . widgetSide ;
32
+
33
+ const widgetLineNumber = useWidget . getReadonlyState ( ) . widgetLineNumber ;
34
+
35
+ const setWidget = useWidget . getReadonlyState ( ) . setWidget ;
36
+
37
+ const oldLineWidget = oldLine . lineNumber && widgetSide === SplitSide . old && widgetLineNumber === oldLine . lineNumber ;
38
+
39
+ const newLineWidget = newLine . lineNumber && widgetSide === SplitSide . new && widgetLineNumber === newLine . lineNumber ;
40
+
41
+ const currentLine = side === SplitSide . old ? oldLine : newLine ;
42
+
43
+ const otherSide = side === SplitSide . old ? SplitSide . new : SplitSide . old ;
44
+
45
+ const currentHasWidget = side === SplitSide . old ? oldLineWidget : newLineWidget ;
46
+
47
+ const hasWidget = oldLineWidget || newLineWidget ;
48
+
30
49
const renderWidgetLine = useDiffContext . useShallowStableSelector ( ( s ) => s . renderWidgetLine ) ;
31
50
32
51
useSyncHeight ( {
33
52
wrapper : `div[data-state="widget"][data-line="${ lineNumber } -widget"]` ,
34
53
selector : `div[data-line="${ lineNumber } -widget-content"]` ,
35
- side : SplitSide [ side ] ,
36
- enable : currentWidget && typeof renderWidgetLine === "function" ,
54
+ side : SplitSide [ currentHasWidget ? side : otherSide ] ,
55
+ enable : hasWidget && typeof renderWidgetLine === "function" ,
37
56
} ) ;
38
57
39
58
const width = useDomWidth ( {
40
59
selector : side === SplitSide . old ? ".old-diff-table-wrapper" : ".new-diff-table-wrapper" ,
41
- enable : ! ! currentWidget && typeof renderWidgetLine === "function" ,
60
+ enable : ! ! currentHasWidget && typeof renderWidgetLine === "function" ,
42
61
} ) ;
43
62
44
63
if ( ! renderWidgetLine ) return null ;
@@ -50,7 +69,7 @@ const InternalDiffSplitWidgetLine = ({
50
69
data-side = { SplitSide [ side ] }
51
70
className = "diff-line diff-line-widget"
52
71
>
53
- { currentWidget ? (
72
+ { currentHasWidget ? (
54
73
< div className = { `diff-line-widget-${ SplitSide [ side ] } -content p-0` } >
55
74
< div
56
75
data-line = { `${ lineNumber } -widget-content` }
@@ -92,10 +111,9 @@ export const DiffSplitWidgetLine = ({
92
111
} ) => {
93
112
const { useWidget } = useDiffWidgetContext ( ) ;
94
113
95
- const { widgetLineNumber, widgetSide, setWidget } = useWidget . useShallowStableSelector ( ( s ) => ( {
114
+ const { widgetLineNumber, widgetSide } = useWidget . useShallowStableSelector ( ( s ) => ( {
96
115
widgetLineNumber : s . widgetLineNumber ,
97
116
widgetSide : s . widgetSide ,
98
- setWidget : s . setWidget ,
99
117
} ) ) ;
100
118
101
119
const oldLine = diffFile . getSplitLeftLine ( index ) ;
@@ -106,23 +124,9 @@ export const DiffSplitWidgetLine = ({
106
124
107
125
const newLineWidget = newLine . lineNumber && widgetSide === SplitSide . new && widgetLineNumber === newLine . lineNumber ;
108
126
109
- const currentLine = side === SplitSide . old ? oldLine : newLine ;
110
-
111
- const currentWidget = side === SplitSide . old ? oldLineWidget : newLineWidget ;
112
-
113
127
const currentIsShow = oldLineWidget || newLineWidget ;
114
128
115
129
if ( ! currentIsShow ) return null ;
116
130
117
- return (
118
- < InternalDiffSplitWidgetLine
119
- index = { index }
120
- diffFile = { diffFile }
121
- side = { side }
122
- lineNumber = { lineNumber }
123
- currentLine = { currentLine }
124
- setWidget = { setWidget }
125
- currentWidget = { currentWidget }
126
- />
127
- ) ;
131
+ return < InternalDiffSplitWidgetLine index = { index } diffFile = { diffFile } side = { side } lineNumber = { lineNumber } /> ;
128
132
} ;
0 commit comments