Skip to content

Commit edef72d

Browse files
committed
fix(merge): fix extensions props issue.
1 parent 250cf04 commit edef72d

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

merge/src/Internal.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useEffect, useImperativeHandle, useMemo, useRef, memo } from 'react';
2+
import { EditorStateConfig, Extension, StateEffect, Annotation } from '@codemirror/state';
23
import { MergeView, MergeConfig } from '@codemirror/merge';
34
import { useStore } from './store';
45
import { CodeMirrorMergeProps } from './';
@@ -24,7 +25,7 @@ export const Internal = React.forwardRef((props: CodeMirrorMergeProps, ref?: Rea
2425
const editor = useRef<HTMLDivElement>(null);
2526
useImperativeHandle(ref, () => ({ container: editor.current, view }), [editor, view]);
2627
useEffect(() => {
27-
if (!view && editor.current && original && modified) {
28+
if (!view && editor.current && original?.extensions && modified?.extensions) {
2829
const opts = { orientation, revertControls, highlightChanges, gutter, collapseUnchanged, renderRevertControl };
2930
const viewDefault = new MergeView({
3031
a: original,

merge/src/Modified.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export const Modified = (props: ModifiedProps): JSX.Element | null => {
3232
});
3333
const extensionsData = [updateListener, ...defaultExtensions, ...extensions];
3434
const data: EditorStateConfig = { extensions: [...extensionsData] };
35+
36+
useEffect(() => {
37+
dispatch!({ modified: { doc: props.value, selection: props.selection, ...data } });
38+
}, []);
39+
3540
useEffect(() => {
3641
if (modified?.doc !== props.value && view) {
3742
data.doc = props.value;

merge/src/Original.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export const Original = (props: OriginalProps): JSX.Element | null => {
3232
});
3333
const extensionsData = [updateListener, ...defaultExtensions, ...extensions];
3434
const data: EditorStateConfig = { extensions: [...extensionsData] };
35+
36+
useEffect(() => {
37+
dispatch!({ original: { doc: props.value, selection: props.selection, ...data } });
38+
}, []);
39+
3540
useEffect(() => {
3641
if (original?.doc !== props.value && view) {
3742
data.doc = props.value;
@@ -41,6 +46,7 @@ export const Original = (props: OriginalProps): JSX.Element | null => {
4146
view?.a.dispatch({
4247
changes: { from: 0, to: (originalDoc || '').length, insert: props.value || '' },
4348
effects: StateEffect.appendConfig.of([...extensionsData]),
49+
annotations: [External.of(true)],
4450
});
4551
}
4652
}

0 commit comments

Comments
 (0)