import "mobx-react-table-grid/index.css"; // or @import in *.css
import React from "react"
import { createRoot } from "react-dom/client" // react@18+
import { observer } from "mobx-react"
import { createTableState, Table } from "mobx-react-table-grid";
interface ResourceItem {
id: string | number;
name: string;
hobby: string[];
renderName(): React.ReactNode;
};
const tableState = createTableState<ResourceItem>({
items: [
{
id: 1,
name: "Joe",
hobby: ["hacking", "martial-arts"],
renderName(){ return <b>Joel White</b> },
},
{
id: 2,
name: "Ann",
hobby: ["dancing"],
renderName(){ return <b>Anna Dark</b> },
}
],
columns: [
{
id: "index",
title: <b>#</b>,
renderValue: (row, col) => row.index,
},
{
id: ResourceColumnId.name,
title: <>Name</>,
renderValue: (row, col) => row.data.renderName(),
sortValue: (row, col) => row.data.name,
},
{
id: ResourceColumnId.hobby,
title: <>Hobby</>,
renderValue: (row, col) => <b>{row.data.hobby.join(", ")}</b>,
sortValue: (row, col) => row.data.hobby.join(""),
searchValue: (row, col) => row.data.hobby.join(" "),
},
]
});
const Demo = observer(() => {
const { tableColumns, searchResultTableRows } = tableState;
return (
<Table
id="table-grid-demo"
columns={tableColumns.get()}
rows={searchResultTableRows.get()}
/>
);
});
// react@18+
const appRootElem = document.getElementById("app");
createRoot(appRootElem).render(<Demo/>);