Skip to content

Commit 62066e7

Browse files
committed
feat: use the Solid ViewContainer
1 parent 06e27e5 commit 62066e7

File tree

3 files changed

+41
-34
lines changed

3 files changed

+41
-34
lines changed

.eslintrc.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
22
"extends": "eslint-config-atomic/strict-react",
3-
"ignorePatterns": ["dist/", "node_modules/"]
3+
"ignorePatterns": ["dist/", "node_modules/"],
4+
"rules": {
5+
"react/react-in-jsx-scope": "off"
6+
}
47
}

lib/datatip-manager.ts renamed to lib/datatip-manager.tsx

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import {
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"
1314
import { ProviderRegistry } from "atom-ide-base/src-commons-atom/ProviderRegistry"
1415
import { 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
}

lib/tsconfig.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
"inlineSources": true,
1717
"preserveSymlinks": true,
1818
"removeComments": true,
19-
"jsx": "react",
20-
"jsxFactory": "etch.dom",
19+
"isolatedModules": true,
20+
"noEmit": true,
21+
"jsx": "preserve",
22+
"jsxImportSource": "solid-js",
2123
"lib": ["ES2018", "dom"],
2224
"target": "ES2018",
2325
"allowJs": true,

0 commit comments

Comments
 (0)