Skip to content

Commit a412fdd

Browse files
update
1 parent b9ac11d commit a412fdd

12 files changed

Lines changed: 161 additions & 479 deletions

File tree

packages/react/index.d.ts

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,34 +1215,12 @@ declare function ReactDiffView<T>(props: DiffViewProps_2<T> & {
12151215
}): JSX.Element;
12161216
export declare const DiffView: typeof ReactDiffView;
12171217
export declare const version: string;
1218-
/**
1219-
* Extended data item with fromLine support for multi-line comments
1220-
*/
1221-
export interface MultiSelectExtendDataItem<T = unknown> {
1222-
data: T;
1223-
/**
1224-
* Starting line number for multi-line selection
1225-
* If not provided, defaults to the key (end line number)
1226-
*/
1227-
fromLine?: number;
1228-
}
1229-
/**
1230-
* Extended data format for multi-select diff view
1231-
*/
1232-
export type MultiSelectExtendData<T = unknown> = {
1233-
oldFile?: Record<string, MultiSelectExtendDataItem<T>>;
1234-
newFile?: Record<string, MultiSelectExtendDataItem<T>>;
1235-
};
1236-
export interface DiffViewWithMultiSelectProps<T = unknown> extends Omit<DiffViewProps<T>, "extendData" | "renderExtendLine" | "renderWidgetLine" | "onAddWidgetClick"> {
1218+
export interface DiffViewWithMultiSelectProps<T = unknown> extends Omit<DiffViewProps<T>, "renderWidgetLine" | "onAddWidgetClick"> {
12371219
/**
12381220
* Enable multi-select feature
12391221
* @default true
12401222
*/
12411223
enableMultiSelect?: boolean;
1242-
/**
1243-
* Extended data with fromLine support for multi-line comments
1244-
*/
1245-
extendData?: MultiSelectExtendData<T>;
12461224
/**
12471225
* Callback when multi-line selection is complete
12481226
* Use this to open a comment dialog or handle the selection
@@ -1269,14 +1247,6 @@ export interface DiffViewWithMultiSelectProps<T = unknown> extends Omit<DiffView
12691247
diffFile: DiffFile;
12701248
onClose: () => void;
12711249
}) => ReactNode;
1272-
renderExtendLine?: (props: {
1273-
lineNumber: number;
1274-
fromLineNumber: number;
1275-
side: SplitSide;
1276-
data: T;
1277-
diffFile: DiffFile;
1278-
onUpdate: () => void;
1279-
}) => ReactNode;
12801250
}
12811251
export interface DiffViewWithMultiSelectRef {
12821252
getDiffFileInstance: () => DiffFile | null;

packages/react/src/components/DiffViewWithMultiSelect.tsx

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,16 @@ import type {
1818
import type { DiffViewProps } from "./DiffView";
1919
import type { ForwardedRef, ReactNode } from "react";
2020

21-
/**
22-
* Extended data item with fromLine support for multi-line comments
23-
*/
24-
export interface MultiSelectExtendDataItem<T = unknown> {
25-
data: T;
26-
/**
27-
* Starting line number for multi-line selection
28-
* If not provided, defaults to the key (end line number)
29-
*/
30-
fromLine?: number;
31-
}
32-
33-
/**
34-
* Extended data format for multi-select diff view
35-
*/
36-
export type MultiSelectExtendData<T = unknown> = {
37-
oldFile?: Record<string, MultiSelectExtendDataItem<T>>;
38-
newFile?: Record<string, MultiSelectExtendDataItem<T>>;
39-
};
40-
4121
export interface DiffViewWithMultiSelectProps<T = unknown> extends Omit<
4222
DiffViewProps<T>,
43-
"extendData" | "renderExtendLine" | "renderWidgetLine" | "onAddWidgetClick"
23+
"renderWidgetLine" | "onAddWidgetClick"
4424
> {
4525
/**
4626
* Enable multi-select feature
4727
* @default true
4828
*/
4929
enableMultiSelect?: boolean;
5030

51-
/**
52-
* Extended data with fromLine support for multi-line comments
53-
*/
54-
extendData?: MultiSelectExtendData<T>;
55-
5631
/**
5732
* Callback when multi-line selection is complete
5833
* Use this to open a comment dialog or handle the selection
@@ -79,15 +54,6 @@ export interface DiffViewWithMultiSelectProps<T = unknown> extends Omit<
7954
diffFile: DiffFile;
8055
onClose: () => void;
8156
}) => ReactNode;
82-
83-
renderExtendLine?: (props: {
84-
lineNumber: number;
85-
fromLineNumber: number;
86-
side: SplitSide;
87-
data: T;
88-
diffFile: DiffFile;
89-
onUpdate: () => void;
90-
}) => ReactNode;
9157
}
9258

9359
export interface DiffViewWithMultiSelectRef {
@@ -112,7 +78,6 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(
11278
onMultiSelectChange,
11379
scopeMultiSelectToHunk,
11480
renderWidgetLine,
115-
renderExtendLine,
11681
onAddWidgetClick,
11782
diffViewMode = DiffModeEnum.SplitGitHub,
11883
...restProps
@@ -226,38 +191,6 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(
226191
return result;
227192
}, [extendData]);
228193

229-
const internalRenderExtendLine = useCallback(
230-
({
231-
lineNumber,
232-
side,
233-
data,
234-
diffFile,
235-
onUpdate,
236-
}: {
237-
lineNumber: number;
238-
side: SplitSide;
239-
data: T;
240-
diffFile: DiffFile;
241-
onUpdate: () => void;
242-
}) => {
243-
if (!renderExtendLine) return null;
244-
245-
const sideKey = side === SplitSide.old ? "oldFile" : "newFile";
246-
const extendItem = extendData?.[sideKey]?.[lineNumber];
247-
const fromLineNumber = extendItem?.fromLine ?? lineNumber;
248-
249-
return renderExtendLine({
250-
lineNumber,
251-
fromLineNumber,
252-
side,
253-
data,
254-
diffFile,
255-
onUpdate,
256-
});
257-
},
258-
[renderExtendLine, extendData]
259-
);
260-
261194
const internalRenderWidgetLine = useCallback(
262195
({
263196
lineNumber,
@@ -369,7 +302,6 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(
369302
}
370303
}}
371304
renderWidgetLine={renderWidgetLine ? internalRenderWidgetLine : undefined}
372-
renderExtendLine={renderExtendLine ? internalRenderExtendLine : undefined}
373305
/>
374306
</div>
375307
);

packages/solid/src/components/DiffViewWithMultiSelect.tsx

Lines changed: 4 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
22
import { SplitSide, createDiffMultiSelectManager, multiSelectClassNames } from "@git-diff-view/core";
33
import { DiffModeEnum } from "@git-diff-view/utils";
4-
import { type JSXElement, type JSX, createSignal, createEffect, createMemo, onCleanup, on } from "solid-js";
4+
import { type JSXElement, type JSX, createSignal, createEffect, onCleanup, on } from "solid-js";
55

66
import { DiffView } from "./DiffView";
77

@@ -19,36 +19,13 @@ import type {
1919

2020
type MultiResult = ReturnType<typeof extendDataToPreselectedLines>;
2121

22-
/**
23-
* Extended data item with fromLine support for multi-line comments
24-
*/
25-
export interface MultiSelectExtendDataItem<T = unknown> {
26-
data: T;
27-
/**
28-
* Starting line number for multi-line selection
29-
* If not provided, defaults to the key (end line number)
30-
*/
31-
fromLine?: number;
32-
}
33-
34-
/**
35-
* Extended data format for multi-select diff view
36-
*/
37-
export type MultiSelectExtendData<T = unknown> = {
38-
oldFile?: Record<string, MultiSelectExtendDataItem<T>>;
39-
newFile?: Record<string, MultiSelectExtendDataItem<T>>;
40-
};
41-
4222
export type DiffViewWithMultiSelectProps<T> = {
4323
data?: {
4424
oldFile?: { fileName?: string | null; fileLang?: DiffHighlighterLang | string | null; content?: string | null };
4525
newFile?: { fileName?: string | null; fileLang?: DiffHighlighterLang | string | null; content?: string | null };
4626
hunks: string[];
4727
};
48-
/**
49-
* Extended data with fromLine support for multi-line comments
50-
*/
51-
extendData?: MultiSelectExtendData<T>;
28+
extendData?: { oldFile?: Record<string, { data: T }>; newFile?: Record<string, { data: T }> };
5229
initialWidgetState?: { side: SplitSide; lineNumber: number };
5330
diffFile?: DiffFile;
5431
class?: string;
@@ -96,11 +73,9 @@ export type DiffViewWithMultiSelectProps<T> = {
9673
side,
9774
data,
9875
lineNumber,
99-
fromLineNumber,
10076
onUpdate,
10177
}: {
10278
lineNumber: number;
103-
fromLineNumber: number;
10479
side: SplitSide;
10580
data: T;
10681
diffFile: DiffFile;
@@ -194,32 +169,6 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(props: DiffViewWithM
194169
});
195170
});
196171

197-
const convertedExtendData = createMemo(() => {
198-
const extendData = props.extendData;
199-
if (!extendData) return undefined;
200-
201-
const result: {
202-
oldFile?: Record<string, { data: T } | undefined>;
203-
newFile?: Record<string, { data: T } | undefined>;
204-
} = {};
205-
206-
if (extendData.oldFile) {
207-
result.oldFile = {};
208-
for (const [key, value] of Object.entries(extendData.oldFile)) {
209-
result.oldFile[key] = { data: value.data };
210-
}
211-
}
212-
213-
if (extendData.newFile) {
214-
result.newFile = {};
215-
for (const [key, value] of Object.entries(extendData.newFile)) {
216-
result.newFile[key] = { data: value.data };
217-
}
218-
}
219-
220-
return result;
221-
});
222-
223172
const handleAddWidgetClick = (lineNum: number, side: SplitSide) => {
224173
managerRef?.clearSelection();
225174
const multiResult = multiResultRef;
@@ -326,38 +275,6 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(props: DiffViewWithM
326275
};
327276
};
328277

329-
const getInternalRenderExtendLine = () => {
330-
const renderExtendLine = props.renderExtendLine;
331-
if (!renderExtendLine) return undefined;
332-
333-
return ({
334-
lineNumber,
335-
side,
336-
data,
337-
diffFile,
338-
onUpdate,
339-
}: {
340-
lineNumber: number;
341-
side: SplitSide;
342-
data: T;
343-
diffFile: DiffFile;
344-
onUpdate: () => void;
345-
}) => {
346-
const sideKey = side === SplitSide.old ? "oldFile" : "newFile";
347-
const extendItem = props.extendData?.[sideKey]?.[lineNumber];
348-
const fromLineNumber = extendItem?.fromLine ?? lineNumber;
349-
350-
return renderExtendLine({
351-
lineNumber,
352-
fromLineNumber,
353-
side,
354-
data,
355-
diffFile,
356-
onUpdate,
357-
});
358-
};
359-
};
360-
361278
return (
362279
<div ref={setContainerRef} class="diff-multiselect-wrapper">
363280
<DiffView
@@ -373,11 +290,11 @@ const InternalDiffViewWithMultiSelect = <T extends unknown>(props: DiffViewWithM
373290
diffViewHighlight={props.diffViewHighlight}
374291
diffViewAddWidget={props.diffViewAddWidget}
375292
initialWidgetState={props.initialWidgetState}
376-
extendData={convertedExtendData()}
293+
extendData={props.extendData}
377294
onAddWidgetClick={handleAddWidgetClick}
378295
onDiffFileCreated={setInnerDiffFile}
379296
renderWidgetLine={getInternalRenderWidgetLine()}
380-
renderExtendLine={getInternalRenderExtendLine()}
297+
renderExtendLine={props.renderExtendLine}
381298
/>
382299
</div>
383300
);

0 commit comments

Comments
 (0)