import { useState } from "react"; import React from "react"; import Markdown from "react-markdown"; import LynxKiteNode from "./LynxKiteNode"; import Table from "./Table"; function toMD(v: any): string { if (typeof v === "string") { return v; } if (Array.isArray(v)) { return v.map(toMD).join("\n\n"); } return JSON.stringify(v); } export default function NodeWithTableView(props: any) { const [open, setOpen] = useState({} as { [name: string]: boolean }); const display = props.data.display?.value; const single = display?.dataframes && Object.keys(display?.dataframes).length === 1; const dfs = Object.entries(display?.dataframes || {}); dfs.sort(); return ( {display && [ dfs.map(([name, df]: [string, any]) => ( {!single && (
setOpen({ ...open, [name]: !open[name] })} > {name}
)} {(single || open[name]) && (df.data.length > 1 ? ( ) : df.data.length ? (
{df.columns.map((c: string, i: number) => (
{c}
{toMD(df.data[0][i])}
))}
) : ( JSON.stringify(df.data) ))} )), Object.entries(display.others || {}).map(([name, o]) => ( <>
setOpen({ ...open, [name]: !open[name] })} > {name}
{open[name] &&
{(o as any).toString()}
} )), ]} ); }