Skip to content

Commit 402c559

Browse files
authored
Merge pull request #682 from devtron-labs/fix/code-editor-large-diff
fix: CodeEditor - large file incorrect diff
2 parents db32d23 + dc95c39 commit 402c559

File tree

6 files changed

+42
-11
lines changed

6 files changed

+42
-11
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@devtron-labs/devtron-fe-common-lib",
3-
"version": "1.10.0-patch-7",
3+
"version": "1.10.0-patch-8",
44
"description": "Supporting common component library",
55
"type": "module",
66
"main": "dist/index.js",

src/Common/CodeMirror/CodeEditorRenderer.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { Progressing } from '@Common/Progressing'
2323

2424
import { useCodeEditorContext } from './CodeEditor.context'
2525
import { CodeEditorRendererProps } from './types'
26-
import { getCodeEditorHeight, getRevertControlButton, updateDiffMinimapValues } from './utils'
26+
import { getCodeEditorHeight, getRevertControlButton, getScanLimit, updateDiffMinimapValues } from './utils'
2727
import { DiffMinimap } from './Extensions'
2828

2929
export const CodeEditorRenderer = ({
@@ -180,6 +180,8 @@ export const CodeEditorRenderer = ({
180180
useEffect(() => {
181181
// DIFF VIEW INITIALIZATION
182182
if (!loading && codeMirrorMergeParentRef.current) {
183+
const scanLimit = getScanLimit(lhsValue, value)
184+
183185
codeMirrorMergeInstance?.destroy()
184186

185187
const codeMirrorMergeView = new MergeView({
@@ -192,7 +194,7 @@ export const CodeEditorRenderer = ({
192194
extensions: [...modifiedViewExtensions, modifiedUpdateListener],
193195
},
194196
...(!readOnly ? { revertControls: 'a-to-b', renderRevertControl: getRevertControlButton } : {}),
195-
diffConfig: { scanLimit: 5000 },
197+
diffConfig: { scanLimit, timeout: 5000 },
196198
parent: codeMirrorMergeParentRef.current,
197199
})
198200
setCodeMirrorMergeInstance(codeMirrorMergeView)
@@ -212,7 +214,7 @@ export const CodeEditorRenderer = ({
212214
extensions: diffMinimapExtensions,
213215
},
214216
gutter: false,
215-
diffConfig: { scanLimit: 5000 },
217+
diffConfig: { scanLimit, timeout: 5000 },
216218
parent: diffMinimapParentRef.current,
217219
})
218220

@@ -272,6 +274,11 @@ export const CodeEditorRenderer = ({
272274

273275
return diffMode ? (
274276
<div className={`flexbox w-100 ${componentSpecificThemeClass} ${codeEditorParentClassName}`}>
277+
{!codeMirrorMergeInstance && (
278+
<div className="flex h-100 w-100">
279+
<p>Calculating diff for large file. Please wait...</p>
280+
</div>
281+
)}
275282
<div
276283
ref={codeMirrorMergeParentRef}
277284
className={`cm-merge-theme flex-grow-1 h-100 dc__overflow-hidden ${readOnly ? 'code-editor__read-only' : ''}`}

src/Common/CodeMirror/Extensions/findAndReplace.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,11 @@ export const codeEditorFindReplace = (view: EditorView): Panel => {
457457
}
458458

459459
const mount = () => {
460-
const findField = document.querySelector('[data-code-editor-find]') as HTMLInputElement
461-
findField?.focus()
462-
findField?.select()
460+
requestAnimationFrame(() => {
461+
const findField = document.querySelector('[data-code-editor-find]') as HTMLInputElement
462+
findField?.focus()
463+
findField?.select()
464+
})
463465
}
464466

465467
const update = ({ transactions, docChanged, state, startState }: ViewUpdate) => {

src/Common/CodeMirror/codeEditor.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,13 +267,13 @@
267267
&.cm-merge-a .cm-changedText,
268268
.cm-deletedChunk .cm-deletedText,
269269
&.cm-merge-a .cm-changedLineGutter {
270-
background: var(--R300);
270+
background: var(--R500);
271271
}
272272

273273
&.cm-merge-b .cm-changedLine,
274274
&.cm-merge-b .cm-changedText,
275275
&.cm-merge-b .cm-changedLineGutter {
276-
background: var(--G300);
276+
background: var(--G500);
277277
}
278278
}
279279

src/Common/CodeMirror/utils.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,28 @@ export const updateDiffMinimapValues = (view: MergeView, transactions: readonly
168168
})
169169
}
170170

171+
export const getScanLimit = (lhsValue: string, value: string) => {
172+
const numberOfLines = Math.max((lhsValue ?? '').split('\n').length, (value ?? '').split('\n').length)
173+
174+
if (numberOfLines <= 5000) {
175+
return 5000
176+
}
177+
178+
if (numberOfLines <= 10000) {
179+
return 10000
180+
}
181+
182+
if (numberOfLines <= 15000) {
183+
return 15000
184+
}
185+
186+
if (numberOfLines <= 20000) {
187+
return 20000
188+
}
189+
190+
return 500
191+
}
192+
171193
// DOM HELPERS
172194
export const getFoldGutterElement = (open: boolean) => {
173195
const icon = document.createElement('span')

0 commit comments

Comments
 (0)