11/* eslint-disable unicorn/no-null */
2+ import { ConnectionObserver } from '@wessberg/connection-observer' ;
23import type * as ReactType from 'react' ;
34import type * as ReactDomType from 'react-dom' ;
45import type * as ReactDomClientType from 'react-dom/client' ;
5- import type { IChangedTiddlers } from 'tiddlywiki' ;
6+ import type { IChangedTiddlers , IParseTreeNode , IWidgetInitialiseOptions } from 'tiddlywiki' ;
67import type { IReactWidget , ITWReactProps , ITWReactPropsDefault } from './widget-type' ;
7- import { ConnectionObserver } from '@wessberg/connection-observer' ;
88
99import { widget as Widget } from '$:/core/modules/widgets/widget.js' ;
1010const ReactDom = require ( 'react-dom' ) as typeof ReactDomType & typeof ReactDomClientType ;
@@ -20,15 +20,23 @@ class ReactWidgetImpl<
2020> extends Widget implements IReactWidget < IProps > {
2121 root : ReturnType < typeof ReactDom . createRoot > | undefined ;
2222 containerElement : HTMLDivElement | undefined ;
23+ connectionObserver : ConnectionObserver | undefined ;
2324
24- connectionObserver = new ConnectionObserver ( entries => {
25- for ( const { connected } of entries ) {
26- if ( ! connected ) {
27- this . destroy ( ) ;
28- this . connectionObserver ?. disconnect ?.( ) ;
29- }
25+ constructor ( parseTreeNode : IParseTreeNode , options ?: IWidgetInitialiseOptions | undefined ) {
26+ super ( parseTreeNode , options ) ;
27+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
28+ if ( ! $tw . browser ) {
29+ return ;
3030 }
31- } ) ;
31+ this . connectionObserver = new ConnectionObserver ( entries => {
32+ for ( const { connected } of entries ) {
33+ if ( ! connected ) {
34+ this . destroy ( ) ;
35+ this . connectionObserver ?. disconnect ?.( ) ;
36+ }
37+ }
38+ } ) ;
39+ }
3240
3341 refresh ( changedTiddlers : IChangedTiddlers ) {
3442 // we don't need to refresh mount point of react-dom
@@ -67,7 +75,7 @@ class ReactWidgetImpl<
6775 this . connectionObserver . observe ( this . parentDomNode ) ;
6876 }
6977 this . domNodes . push ( this . containerElement ) ;
70- parent . append ( this . containerElement ) ;
78+ nextSibling === null ? parent . append ( this . containerElement ) : nextSibling . before ( this . containerElement ) ;
7179 const reactElement = React . createElement ( this . reactComponent , currentProps ) ;
7280 this . root . render ( reactElement ) ;
7381 }
0 commit comments