Skip to content

Commit 4d84224

Browse files
committed
fix: CodeEditor - scalingFactor not getting calculated after re-render fix
1 parent cf5e5ad commit 4d84224

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

src/Common/CodeMirror/CodeEditorRenderer.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const CodeEditorRenderer = ({
5454
const [gutterWidth, setGutterWidth] = useState(0)
5555
const [codeMirrorMergeInstance, setCodeMirrorMergeInstance] = useState<MergeView>(null)
5656
const [diffMinimapInstance, setDiffMinimapInstance] = useState<MergeView>(null)
57+
const [scalingFactor, setScalingFactor] = useState<number>(1)
5758

5859
// REFS
5960
const codeMirrorRef = useRef<ReactCodeMirrorRef>()
@@ -198,6 +199,7 @@ export const CodeEditorRenderer = ({
198199

199200
return () => {
200201
codeMirrorMergeInstance?.destroy()
202+
setCodeMirrorMergeInstance(null)
201203
}
202204
}, [loading, codemirrorMergeKey, diffMode])
203205

@@ -243,9 +245,22 @@ export const CodeEditorRenderer = ({
243245

244246
return () => {
245247
diffMinimapInstance?.destroy()
248+
setDiffMinimapInstance(null)
249+
diffMinimapRef.current = null
246250
}
247251
}, [codeMirrorMergeInstance])
248252

253+
// SCALING FACTOR UPDATER
254+
useEffect(() => {
255+
setTimeout(() => {
256+
setScalingFactor(
257+
codeMirrorMergeInstance
258+
? Math.min(codeMirrorMergeInstance.dom.clientHeight / codeMirrorMergeInstance.dom.scrollHeight, 1)
259+
: 1,
260+
)
261+
}, 100)
262+
}, [lhsValue, value, codeMirrorMergeInstance])
263+
249264
const { codeEditorClassName, codeEditorHeight, codeEditorParentClassName } = getCodeEditorHeight(height)
250265

251266
if (loading) {
@@ -267,8 +282,8 @@ export const CodeEditorRenderer = ({
267282
<DiffMinimap
268283
theme={theme}
269284
view={codeMirrorMergeInstance}
270-
minimapView={diffMinimapInstance}
271285
diffMinimapParentRef={diffMinimapParentRef}
286+
scalingFactor={scalingFactor}
272287
/>
273288
</div>
274289
) : (

src/Common/CodeMirror/Extensions/DiffMinimap.tsx

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import { useEffect, useMemo, useRef, useState } from 'react'
1+
import { useEffect, useRef, useState } from 'react'
22

33
import { getComponentSpecificThemeClass } from '@Shared/Providers'
44

55
import { DiffMinimapProps } from '../types'
66
import { CODE_EDITOR_FONT_SIZE, CODE_EDITOR_MIN_OVERLAY_HEIGHT } from '../CodeEditor.constants'
7-
import { useCodeEditorContext } from '../CodeEditor.context'
8-
9-
export const DiffMinimap = ({ view, minimapView, theme, diffMinimapParentRef }: DiffMinimapProps) => {
10-
// CONTEXTS
11-
const { lhsValue, value } = useCodeEditorContext()
127

8+
export const DiffMinimap = ({ view, theme, diffMinimapParentRef, scalingFactor }: DiffMinimapProps) => {
139
// STATES
1410
const [overlayTop, setOverlayTop] = useState<number>(0)
1511
const [overlayHeight, setOverlayHeight] = useState<number>(50)
@@ -24,14 +20,6 @@ export const DiffMinimap = ({ view, minimapView, theme, diffMinimapParentRef }:
2420
// CONSTANTS
2521
const componentSpecificThemeClass = getComponentSpecificThemeClass(theme)
2622

27-
const scalingFactor = useMemo(() => {
28-
if (view) {
29-
return Math.min(view.dom.clientHeight / view.dom.scrollHeight, 1)
30-
}
31-
32-
return 1
33-
}, [lhsValue, value, view, minimapView])
34-
3523
// Update the overlay position and size
3624
const updateOverlay = () => {
3725
if (!view?.dom || !minimapContainerRef.current || !overlayRef.current) {

src/Common/CodeMirror/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,6 @@ export type CodeEditorRendererProps = Required<
150150

151151
export interface DiffMinimapProps extends Pick<CodeEditorRendererProps, 'theme'> {
152152
view: MergeView
153-
minimapView: MergeView
154153
diffMinimapParentRef: MutableRefObject<HTMLDivElement>
154+
scalingFactor: number
155155
}

0 commit comments

Comments
 (0)