Skip to content

Commit acaa18d

Browse files
solid done
1 parent 3334c42 commit acaa18d

19 files changed

+892
-81
lines changed

packages/react/src/components/DiffView.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ const InternalDiffView = <T extends unknown>(
9696
style,
9797
diffViewMode,
9898
diffViewWrap,
99+
diffViewTheme,
99100
diffViewFontSize,
100101
diffViewHighlight,
101102
renderWidgetLine,
@@ -209,13 +210,17 @@ const InternalDiffView = <T extends unknown>(
209210
]);
210211

211212
useEffect(() => {
212-
const cb = diffFile.subscribe(() => {
213+
const init = () => {
213214
wrapperRef.current?.setAttribute("data-theme", diffFile._getTheme() || "light");
214215
wrapperRef.current?.setAttribute("data-highlighter", diffFile._getHighlighterName());
215-
});
216+
}
217+
218+
init();
219+
220+
const cb = diffFile.subscribe(init);
216221

217222
return cb;
218-
}, [diffFile]);
223+
}, [diffFile, diffViewTheme]);
219224

220225
const value = useMemo(() => ({ useDiffContext }), [useDiffContext]);
221226

@@ -315,7 +320,7 @@ const DiffViewWithRef = <T extends unknown>(
315320
diffFile.initSyntax({ registerHighlighter });
316321
diffFile.notifyAll();
317322
}
318-
}, [diffFile, props.diffViewHighlight, registerHighlighter, diffViewTheme]);
323+
}, [diffFile, props.diffViewHighlight, registerHighlighter]);
319324

320325
// fix react strict mode error
321326
useUnmount(() => (__DEV__ ? diffFile?._destroy?.() : diffFile?.clear?.()), [diffFile]);
@@ -330,6 +335,7 @@ const DiffViewWithRef = <T extends unknown>(
330335
{...restProps}
331336
diffFile={diffFile}
332337
isMounted={isMounted}
338+
diffViewTheme={diffViewTheme}
333339
diffViewMode={restProps.diffViewMode || DiffModeEnum.SplitGitHub}
334340
diffViewFontSize={restProps.diffViewFontSize || 14}
335341
/>

packages/solid/src/components/DiffSplitContentLineNormal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ export const DiffSplitContentLine = (props: {
7373
? props.diffFile.getOldPlainLine(currentLine()?.lineNumber || 0)
7474
: props.diffFile.getNewPlainLine(currentLine()?.lineNumber || 0)
7575
);
76-
setCurrentLineHasDiff(!!currentLine()?.diff);
77-
setCurrentLineHasChange(checkDiffLineIncludeChange(currentLine()?.diff));
78-
setCurrentLineHasHidden(currentLine()?.isHidden);
79-
setCurrentLineHasContent(currentLine()?.lineNumber);
76+
setCurrentLineHasDiff(() => !!currentLine()?.diff);
77+
setCurrentLineHasChange(() => checkDiffLineIncludeChange(currentLine()?.diff));
78+
setCurrentLineHasHidden(() => currentLine()?.isHidden);
79+
setCurrentLineHasContent(() => currentLine()?.lineNumber);
8080
};
8181

8282
createEffect(() => {

packages/solid/src/components/DiffSplitContentLineWrap.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ export const DiffSplitContentLine = (props: { index: number; diffFile: DiffFile;
5656
setNewSyntaxLine(props.diffFile.getNewSyntaxLine(newLine()?.lineNumber || 0));
5757
setOldPlainLine(props.diffFile.getOldPlainLine(oldLine()?.lineNumber || 0));
5858
setNewPlainLine(props.diffFile.getNewPlainLine(newLine()?.lineNumber || 0));
59-
setHasDiff(!!oldLine()?.diff || !!newLine()?.diff);
60-
setHasChange(checkDiffLineIncludeChange(oldLine()?.diff) || checkDiffLineIncludeChange(newLine()?.diff));
61-
setHasHidden(oldLine()?.isHidden && newLine()?.isHidden);
62-
setOldLineIsDelete(oldLine()?.diff?.type === DiffLineType.Delete);
63-
setNewLineIsAdded(newLine()?.diff?.type === DiffLineType.Add);
59+
setHasDiff(() => !!oldLine()?.diff || !!newLine()?.diff);
60+
setHasChange(() => checkDiffLineIncludeChange(oldLine()?.diff) || checkDiffLineIncludeChange(newLine()?.diff));
61+
setHasHidden(() => oldLine()?.isHidden && newLine()?.isHidden);
62+
setOldLineIsDelete(() => oldLine()?.diff?.type === DiffLineType.Delete);
63+
setNewLineIsAdded(() => newLine()?.diff?.type === DiffLineType.Add);
6464
};
6565

6666
init();

packages/solid/src/components/DiffSplitExtendLineNormal.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ export const DiffSplitExtendLine = (props: {
4343
setOldLine(props.diffFile.getSplitLeftLine(props.index));
4444
setNewLine(props.diffFile.getSplitRightLine(props.index));
4545
setEnableExpand(props.diffFile.getExpandEnabled());
46-
setOldLineExtend(extendData()?.oldFile?.[oldLine()?.lineNumber || ""]);
47-
setNewLineExtend(extendData()?.newFile?.[newLine()?.lineNumber || ""]);
48-
setCurrentIsHidden(currentItem()?.isHidden);
46+
setOldLineExtend(() => extendData()?.oldFile?.[oldLine()?.lineNumber || ""]);
47+
setNewLineExtend(() => extendData()?.newFile?.[newLine()?.lineNumber || ""]);
48+
setCurrentIsHidden(() => currentItem()?.isHidden);
4949
};
5050

5151
init();
@@ -89,7 +89,7 @@ export const DiffSplitExtendLine = (props: {
8989
data-side={SplitSide[props.side]}
9090
class="diff-line diff-line-extend"
9191
>
92-
{currentExtend() ? (
92+
{renderExtend() && currentExtend() ? (
9393
<td class={`diff-line-extend-${SplitSide[props.side]}-content p-0`} colspan={2}>
9494
<div
9595
data-line={`${props.lineNumber}-extend-content`}

packages/solid/src/components/DiffSplitExtendLineWrap.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ export const DiffSplitExtendLine = (props: { index: number; diffFile: DiffFile;
4141
setOldLine(props.diffFile.getSplitLeftLine(props.index));
4242
setNewLine(props.diffFile.getSplitRightLine(props.index));
4343
setEnableExpand(props.diffFile.getExpandEnabled());
44-
setOldLineExtend(extendData()?.oldFile?.[oldLine()?.lineNumber || ""]);
45-
setNewLineExtend(extendData()?.newFile?.[newLine()?.lineNumber || ""]);
46-
setCurrentIsShow(!!checkIsShow());
44+
setOldLineExtend(() => extendData()?.oldFile?.[oldLine()?.lineNumber || ""]);
45+
setNewLineExtend(() => extendData()?.newFile?.[newLine()?.lineNumber || ""]);
46+
setCurrentIsShow(() => !!checkIsShow());
4747
};
4848

4949
init();
@@ -56,7 +56,7 @@ export const DiffSplitExtendLine = (props: { index: number; diffFile: DiffFile;
5656
return (
5757
<Show when={currentIsShow()}>
5858
<tr data-line={`${props.lineNumber}-extend`} data-state="extend" class="diff-line diff-line-extend">
59-
{renderExtend() ? (
59+
{renderExtend() && oldLineExtend() ? (
6060
<td class="diff-line-extend-old-content p-0" colspan={2}>
6161
<div class="diff-line-extend-wrapper">
6262
{renderExtend()?.({
@@ -75,7 +75,7 @@ export const DiffSplitExtendLine = (props: { index: number; diffFile: DiffFile;
7575
colspan={2}
7676
/>
7777
)}
78-
{renderExtend() ? (
78+
{renderExtend() && newLineExtend() ? (
7979
<td
8080
class="diff-line-extend-new-content border-l-[1px] p-0"
8181
colspan={2}

packages/solid/src/components/DiffSplitHunkLineNormal.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ const DiffSplitHunkLineGitHub = (props: { index: number; side: SplitSide; diffFi
5757
const init = () => {
5858
setCurrentHunk(props.diffFile.getSplitHunkLine(props.index));
5959
setEnableExpand(props.diffFile.getExpandEnabled());
60-
setCouldExpand(enableExpand() && currentHunk()?.splitInfo);
61-
setCurrentIsShow(checkCurrentIsShow());
62-
setCurrentShowExpandAll(checkCurrentShowExpandAll());
60+
setCouldExpand(() => enableExpand() && currentHunk()?.splitInfo);
61+
setCurrentIsShow(checkCurrentIsShow);
62+
setCurrentShowExpandAll(checkCurrentShowExpandAll);
6363
};
6464

6565
init();
@@ -213,7 +213,7 @@ const DiffSplitHunkLineGitLab = (props: { index: number; side: SplitSide; diffFi
213213

214214
const currentIsPureHunk = createMemo(() => {
215215
const hunk = currentHunk();
216-
return hunk && !hunk.splitInfo;
216+
return hunk && props.diffFile._getIsPureDiffRender() && !hunk.splitInfo;
217217
});
218218

219219
const currentIsLastLine = createMemo(() => {
@@ -229,9 +229,9 @@ const DiffSplitHunkLineGitLab = (props: { index: number; side: SplitSide; diffFi
229229
const init = () => {
230230
setCurrentHunk(props.diffFile.getSplitHunkLine(props.index));
231231
setEnableExpand(props.diffFile.getExpandEnabled());
232-
setCouldExpand(enableExpand() && currentHunk()?.splitInfo);
233-
setCurrentIsShow(checkCurrentIsShow());
234-
setCurrentShowExpandAll(checkCurrentShowExpandAll());
232+
setCouldExpand(() => enableExpand() && currentHunk()?.splitInfo);
233+
setCurrentIsShow(checkCurrentIsShow);
234+
setCurrentShowExpandAll(checkCurrentShowExpandAll);
235235
};
236236

237237
init();

packages/solid/src/components/DiffSplitHunkLineWrap.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const DiffSplitHunkLineGitHub = (props: { index: number; diffFile: DiffFile; lin
4141

4242
const currentIsPureHunk = createMemo(() => {
4343
const hunk = currentHunk();
44-
return hunk && !hunk.splitInfo;
44+
return hunk && props.diffFile._getIsPureDiffRender() && !hunk.splitInfo;
4545
});
4646

4747
const currentIsLastLine = createMemo(() => {
@@ -53,9 +53,9 @@ const DiffSplitHunkLineGitHub = (props: { index: number; diffFile: DiffFile; lin
5353
const init = () => {
5454
setCurrentHunk(props.diffFile.getSplitHunkLine(props.index));
5555
setEnableExpand(props.diffFile.getExpandEnabled());
56-
setCouldExpand(enableExpand() && currentHunk()?.splitInfo);
57-
setCurrentShowExpandAll(checkCurrentShowExpandAll());
58-
setCurrentIsShow(checkCurrentIsShow());
56+
setCouldExpand(() => enableExpand() && currentHunk()?.splitInfo);
57+
setCurrentIsShow(checkCurrentIsShow);
58+
setCurrentShowExpandAll(checkCurrentShowExpandAll);
5959
};
6060

6161
init();

packages/solid/src/components/DiffSplitViewNormal.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ const DiffSplitViewTable = (props: { side: SplitSide; diffFile: DiffFile; onSele
110110
export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
111111
const isMounted = useIsMounted();
112112

113-
let ref1 = null as HTMLDivElement | null;
113+
const [ref1, setRef1] = createSignal<HTMLDivElement | null>(null);
114114

115-
let ref2 = null as HTMLDivElement | null;
115+
const [ref2, setRef2] = createSignal<HTMLDivElement | null>(null);
116116

117117
const [side, setSide] = createSignal<SplitSide | undefined>(undefined);
118118

@@ -128,8 +128,8 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
128128

129129
const initSyncScroll = () => {
130130
if (!isMounted()) return;
131-
const left = ref1;
132-
const right = ref2;
131+
const left = ref1();
132+
const right = ref2();
133133
if (!left || !right) return;
134134
const clean = syncScroll(left, right);
135135
onCleanup(clean);
@@ -156,7 +156,7 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
156156
</style>
157157
<div
158158
class="old-diff-table-wrapper diff-table-scroll-container w-full overflow-x-auto overflow-y-hidden"
159-
ref={(l) => (ref1 = l)}
159+
ref={(l) => setRef1(l)}
160160
style={{
161161
[diffAsideWidthName]: `${Math.round(computedWidth())}px`,
162162
"overscroll-behavior-x": "none",
@@ -169,7 +169,7 @@ export const DiffSplitViewNormal = (props: { diffFile: DiffFile }) => {
169169
<div class="diff-split-line w-[1.5px]" style={{ "background-color": `var(${borderColorName})` }} />
170170
<div
171171
class="new-diff-table-wrapper diff-table-scroll-container w-full overflow-x-auto overflow-y-hidden"
172-
ref={(l) => (ref2 = l)}
172+
ref={(l) => setRef2(l)}
173173
style={{
174174
[diffAsideWidthName]: `${Math.round(computedWidth())}px`,
175175
"overscroll-behavior-x": "none",

packages/solid/src/components/DiffSplitWidgetLineNormal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const DiffSplitWidgetLine = (props: {
3838
const init = () => {
3939
setOldLine(props.diffFile.getSplitLeftLine(props.index));
4040
setNewLine(props.diffFile.getSplitRightLine(props.index));
41-
setCurrentIsHidden(currentLine()?.isHidden);
41+
setCurrentIsHidden(() => currentLine()?.isHidden);
4242
};
4343

4444
init();

0 commit comments

Comments
 (0)