11/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */
22import { SplitSide , createDiffMultiSelectManager , multiSelectClassNames } from "@git-diff-view/core" ;
33import { 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
66import { DiffView } from "./DiffView" ;
77
@@ -19,36 +19,13 @@ import type {
1919
2020type 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-
4222export 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