8
8
CommandEvent ,
9
9
CursorPositionChangedEvent ,
10
10
} from "atom"
11
- import type { Datatip , DatatipProvider } from "atom-ide-base"
12
- import { ViewContainer } from "atom-ide-base/src-commons-ui/float-pane/ViewContainer"
11
+ import type { Datatip , DatatipProvider , ReactComponentDatatip } from "atom-ide-base"
12
+ import { ViewContainer , Props as ViewContainerProps } from "atom-ide-base/src-commons-ui/float-pane/ViewContainer"
13
+ import { render } from "solid-js/web"
13
14
import { ProviderRegistry } from "atom-ide-base/src-commons-atom/ProviderRegistry"
14
15
import { makeOverlaySelectable } from "atom-ide-base/src-commons-ui/float-pane/selectable-overlay"
15
16
@@ -330,15 +331,21 @@ export class DataTipManager {
330
331
this . currentMarkerRange = datatip . range
331
332
332
333
if ( "component" in datatip ) {
333
- const dataTipView = new ViewContainer ( {
334
- component : {
335
- component : datatip . component ,
336
- containerClassName : "datatip-component-container" ,
337
- contentClassName : "datatip-component" ,
338
- } ,
339
- className : "datatip-element select-list popover-list" ,
340
- } )
341
- this . dataTipMarkerDisposables = this . mountDataTipWithMarker ( editor , datatip . range , position , dataTipView )
334
+ const element = document . createElement ( "div" )
335
+ render (
336
+ ( ) => (
337
+ < ViewContainer
338
+ component = { {
339
+ component : ( datatip as ReactComponentDatatip ) . component ,
340
+ containerClassName : "datatip-component-container" ,
341
+ contentClassName : "datatip-component" ,
342
+ } }
343
+ className = "datatip-element select-list popover-list"
344
+ />
345
+ ) ,
346
+ element
347
+ )
348
+ this . dataTipMarkerDisposables = this . mountDataTipWithMarker ( editor , datatip . range , position , element )
342
349
} else if ( datatip . markedStrings . length > 0 ) {
343
350
const grammar = editor . getGrammar ( ) . scopeName . toLowerCase ( )
344
351
@@ -352,8 +359,8 @@ export class DataTipManager {
352
359
}
353
360
}
354
361
355
- let snippet ,
356
- markdown = undefined
362
+ let snippet : ViewContainerProps [ "snippet" ] | undefined = undefined
363
+ let markdown : ViewContainerProps [ " markdown" ] | undefined = undefined
357
364
if ( snippetData . length > 0 ) {
358
365
snippet = {
359
366
snippet : snippetData ,
@@ -370,14 +377,18 @@ export class DataTipManager {
370
377
contentClassName : "datatip-markdown" ,
371
378
}
372
379
}
373
-
374
- const dataTipView = new ViewContainer ( {
375
- snippet,
376
- markdown,
377
- className : "datatip-element select-list popover-list" ,
378
- } )
379
-
380
- this . dataTipMarkerDisposables = this . mountDataTipWithMarker ( editor , datatip . range , position , dataTipView )
380
+ const element = document . createElement ( "div" )
381
+ render (
382
+ ( ) => (
383
+ < ViewContainer
384
+ snippet = { snippet }
385
+ markdown = { markdown }
386
+ className = "datatip-element select-list popover-list"
387
+ />
388
+ ) ,
389
+ element
390
+ )
391
+ this . dataTipMarkerDisposables = this . mountDataTipWithMarker ( editor , datatip . range , position , element )
381
392
}
382
393
}
383
394
} catch ( err ) {
@@ -399,16 +410,8 @@ export class DataTipManager {
399
410
editor : TextEditor ,
400
411
range : Range ,
401
412
position : Point ,
402
- view : ViewContainer
413
+ element : HTMLElement
403
414
) : CompositeDisposable | null {
404
- const element = view . element as HTMLElement
405
-
406
- // TODO do we need this?
407
- if ( ! element ) {
408
- // if the element is not created return right away
409
- return this . dataTipMarkerDisposables
410
- }
411
-
412
415
const disposables = new CompositeDisposable ( )
413
416
414
417
// Highlight the text indicated by the datatip's range.
@@ -462,7 +465,6 @@ export class DataTipManager {
462
465
disposables . add (
463
466
new Disposable ( ( ) => {
464
467
this . editorView ?. addEventListener ( "mousemove" , this . onMouseMoveEvt )
465
- view . destroy ( )
466
468
} )
467
469
)
468
470
}
0 commit comments