|
1 | 1 | import "@malloydata/render"; |
2 | | -import { Result, QueryResult, ModelDef } from "@malloydata/malloy"; |
| 2 | +import type { MalloyRenderProps } from "@malloydata/render"; |
3 | 3 | import React, { useEffect, useRef } from "react"; |
4 | 4 |
|
| 5 | +type MalloyRenderElement = HTMLElement & MalloyRenderProps; |
| 6 | + |
5 | 7 | declare global { |
6 | 8 | namespace JSX { |
7 | 9 | interface IntrinsicElements { |
8 | 10 | "malloy-render": React.DetailedHTMLProps< |
9 | 11 | React.HTMLAttributes<HTMLElement>, |
10 | | - HTMLElement |
11 | | - > & { |
12 | | - result?: Result; |
13 | | - queryResult?: QueryResult; |
14 | | - modelDef?: ModelDef; |
15 | | - }; // todo: malloy render props exports |
| 12 | + MalloyRenderElement |
| 13 | + >; |
16 | 14 | } |
17 | 15 | } |
18 | 16 | } |
19 | 17 |
|
20 | | -type MalloyRenderProps = { |
21 | | - result?: Result; |
22 | | - queryResult?: QueryResult; |
23 | | - modelDef?: ModelDef; |
24 | | -}; |
25 | | - |
26 | 18 | export function MalloyRender({ |
27 | 19 | result, |
28 | 20 | queryResult, |
29 | 21 | modelDef, |
30 | 22 | }: MalloyRenderProps) { |
31 | | - const ref = useRef<HTMLDivElement>(null); |
| 23 | + const ref = useRef<MalloyRenderElement>(null); |
32 | 24 | useEffect(() => { |
33 | 25 | if (ref.current) { |
34 | | - let render = ref.current.querySelector("malloy-render"); |
35 | | - if (!render) { |
36 | | - render = document.createElement("malloy-render"); |
37 | | - render.result = result; |
38 | | - render.queryResult = queryResult; |
39 | | - render.modelDef = modelDef; |
40 | | - ref.current.appendChild(render); |
41 | | - } |
42 | | - render.result = result; |
43 | | - render.queryResult = queryResult; |
44 | | - render.modelDef = modelDef; |
| 26 | + ref.current.result = result; |
| 27 | + ref.current.queryResult = queryResult; |
| 28 | + ref.current.modelDef = modelDef; |
45 | 29 | } |
46 | 30 | }, [result, queryResult, modelDef]); |
47 | | - return <div ref={ref} />; |
| 31 | + return <malloy-render ref={ref} />; |
48 | 32 | } |
0 commit comments