88 CommandEvent ,
99 CursorPositionChangedEvent ,
1010} 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"
1314import { ProviderRegistry } from "atom-ide-base/src-commons-atom/ProviderRegistry"
1415import { makeOverlaySelectable } from "atom-ide-base/src-commons-ui/float-pane/selectable-overlay"
1516
@@ -330,15 +331,21 @@ export class DataTipManager {
330331 this . currentMarkerRange = datatip . range
331332
332333 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 )
342349 } else if ( datatip . markedStrings . length > 0 ) {
343350 const grammar = editor . getGrammar ( ) . scopeName . toLowerCase ( )
344351
@@ -352,8 +359,8 @@ export class DataTipManager {
352359 }
353360 }
354361
355- let snippet ,
356- markdown = undefined
362+ let snippet : ViewContainerProps [ "snippet" ] | undefined = undefined
363+ let markdown : ViewContainerProps [ " markdown" ] | undefined = undefined
357364 if ( snippetData . length > 0 ) {
358365 snippet = {
359366 snippet : snippetData ,
@@ -370,14 +377,18 @@ export class DataTipManager {
370377 contentClassName : "datatip-markdown" ,
371378 }
372379 }
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 )
381392 }
382393 }
383394 } catch ( err ) {
@@ -399,16 +410,8 @@ export class DataTipManager {
399410 editor : TextEditor ,
400411 range : Range ,
401412 position : Point ,
402- view : ViewContainer
413+ element : HTMLElement
403414 ) : 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-
412415 const disposables = new CompositeDisposable ( )
413416
414417 // Highlight the text indicated by the datatip's range.
@@ -462,7 +465,6 @@ export class DataTipManager {
462465 disposables . add (
463466 new Disposable ( ( ) => {
464467 this . editorView ?. addEventListener ( "mousemove" , this . onMouseMoveEvt )
465- view . destroy ( )
466468 } )
467469 )
468470 }
0 commit comments