@@ -49,6 +49,7 @@ export default class SimpleMDEEditor extends React.PureComponent<
4949 private elementWrapperRef : HTMLDivElement | null ;
5050 private setElementWrapperRef : ( element : HTMLDivElement ) => void ;
5151 private keyChange = false ;
52+ private customEventCallbacks : SimpleMdeToCodemirror = { }
5253
5354 static defaultProps = {
5455 events : { } ,
@@ -92,6 +93,8 @@ export default class SimpleMDEEditor extends React.PureComponent<
9293 this . simpleMde ! . value ( this . props . value || "" ) ;
9394 }
9495 this . keyChange = false ;
96+
97+ this . updateCustomEvents ( this . props . events , prevProps . events ) ;
9598 }
9699
97100 componentWillUnmount ( ) {
@@ -156,22 +159,37 @@ export default class SimpleMDEEditor extends React.PureComponent<
156159 this . simpleMde . codemirror . on ( "change" , this . eventWrapper ) ;
157160 this . simpleMde . codemirror . on ( "cursorActivity" , this . getCursor ) ;
158161
159- const { events } = this . props ;
160-
161- // Handle custom events
162- events &&
163- Object . entries ( events ) . forEach ( ( [ eventName , callback ] ) => {
164- if ( eventName && callback ) {
165- this . simpleMde &&
166- this . simpleMde . codemirror . on (
167- eventName as DOMEvent ,
168- callback as any
169- ) ;
170- }
171- } ) ;
162+ this . updateCustomEvents ( this . props . events )
172163 }
173164 } ;
174165
166+ updateCustomEvents = ( events : SimpleMdeToCodemirror | undefined , prevEvents ?: SimpleMdeToCodemirror | undefined ) => {
167+ prevEvents &&
168+ Object . entries ( prevEvents ) . forEach ( ( [ eventName , callback ] ) => {
169+ if ( eventName && callback && ! events ?. [ eventName as CodemirrorEvents | DOMEvent ] ) {
170+ this . simpleMde &&
171+ this . simpleMde . codemirror . off (
172+ eventName as DOMEvent ,
173+ this . customEventCallbacks [ eventName as CodemirrorEvents | DOMEvent ] as any
174+ ) ;
175+ }
176+ } ) ;
177+ events &&
178+ Object . entries ( events ) . forEach ( ( [ eventName , callback ] ) => {
179+ if ( eventName && callback && ! prevEvents ?. [ eventName as CodemirrorEvents | DOMEvent ] ) {
180+ if ( this . simpleMde ) {
181+ this . customEventCallbacks [ eventName as CodemirrorEvents | DOMEvent ] = ( instance : any ) => {
182+ ( this . props . events ?. [ eventName as CodemirrorEvents | DOMEvent ] as any ) ?.( instance ) ;
183+ }
184+ this . simpleMde . codemirror . on (
185+ eventName as DOMEvent ,
186+ this . customEventCallbacks [ eventName as CodemirrorEvents | DOMEvent ] as any
187+ ) ;
188+ }
189+ }
190+ } ) ;
191+ } ;
192+
175193 getCursor = ( ) => {
176194 // https://codemirror.net/doc/manual.html#api_selection
177195 if ( this . props . getLineAndCursor ) {
0 commit comments