@@ -14,9 +14,10 @@ export interface ModifiedProps extends Omit<DefaultExtensionsOptions, 'theme'>,
1414}
1515
1616export const Modified = ( props : ModifiedProps ) : JSX . Element | null => {
17- const { extensions = [ ] , selection, onChange, ...otherOption } = props ;
17+ const { extensions = [ ] , value , selection, onChange, ...otherOption } = props ;
1818 const { modified, view, theme, dispatch } = useStore ( ) ;
19- const defaultExtensions = getDefaultExtensions ( { ...otherOption , theme } ) ;
19+ const defaultExtensionsOptions = { ...otherOption } ;
20+ const defaultExtensions = getDefaultExtensions ( { ...defaultExtensionsOptions , theme } ) ;
2021 const updateListener = EditorView . updateListener . of ( ( vu : ViewUpdate ) => {
2122 if (
2223 vu . docChanged &&
@@ -26,40 +27,49 @@ export const Modified = (props: ModifiedProps): JSX.Element | null => {
2627 ! vu . transactions . some ( ( tr ) => tr . annotation ( External ) )
2728 ) {
2829 const doc = vu . state . doc ;
29- const value = doc . toString ( ) ;
30- onChange ( value , vu ) ;
30+ const val = doc . toString ( ) ;
31+ onChange ( val , vu ) ;
3132 }
3233 } ) ;
3334 const extensionsData = [ updateListener , ...defaultExtensions , ...extensions ] ;
3435 const data : EditorStateConfig = { extensions : [ ...extensionsData ] } ;
3536
3637 useEffect ( ( ) => {
3738 dispatch ! ( {
38- modified : { doc : props . value , selection : selection , ...data } ,
39- modifiedExtension : [ updateListener , extensions ] ,
39+ modified : { doc : value , selection : selection , ...data } ,
40+ modifiedExtension : {
41+ option : defaultExtensionsOptions ,
42+ extension : [ updateListener , extensions ] ,
43+ } ,
4044 } ) ;
4145 } , [ ] ) ;
4246
43- useEffect ( ( ) => dispatch ! ( { modifiedExtension : [ updateListener , extensions ] } ) , [ extensions ] ) ;
47+ useEffect (
48+ ( ) =>
49+ dispatch ! ( {
50+ modifiedExtension : { option : otherOption , extension : [ updateListener , extensions ] } ,
51+ } ) ,
52+ [ props ] ,
53+ ) ;
4454
4555 useEffect ( ( ) => {
46- if ( modified ?. doc !== props . value && view ) {
47- data . doc = props . value ;
48- dispatch ! ( { modified : { ...modified , ...data } } ) ;
56+ if ( modified ?. doc !== value && view ) {
57+ data . doc = value ;
4958 const modifiedDoc = view ?. b . state . doc . toString ( ) ;
50- if ( modifiedDoc !== props . value ) {
59+ if ( modifiedDoc !== value ) {
5160 view . b . dispatch ( {
52- changes : { from : 0 , to : ( modifiedDoc || '' ) . length , insert : props . value || '' } ,
61+ changes : { from : 0 , to : ( modifiedDoc || '' ) . length , insert : value || '' } ,
5362 effects : StateEffect . reconfigure . of ( [ ...extensionsData ] ) ,
5463 annotations : [ External . of ( true ) ] ,
5564 } ) ;
5665 }
66+ dispatch ! ( { modified : { ...modified , ...data } } ) ;
5767 }
5868 if ( modified ?. selection !== selection ) {
5969 data . selection = selection ;
6070 dispatch ! ( { modified : { ...modified , ...data } } ) ;
6171 }
62- } , [ props . value , extensions , selection , view ] ) ;
72+ } , [ value , extensions , selection , view ] ) ;
6373
6474 return null ;
6575} ;
0 commit comments