import { AgGridDynamic as AgGrid, Button, Callout, Intent, } from '@vegaprotocol/ui-toolkit'; import type { GridApi } from 'ag-grid-community'; import { AgGridColumn } from 'ag-grid-react'; import { useState, useEffect, useRef } from 'react'; import { useApplyGridTransaction } from '@vegaprotocol/react-helpers'; const Grid = () => { const rowData = [ { make: 'Toyota', model: 'Celica', price: 35000 }, { make: 'Ford', model: 'Mondeo', price: 32000 }, { make: 'Porsche', model: 'Boxter', price: 72000 }, ]; const ref = useRef(rowData); const getRowNodeId = (data: { make: string }) => data.make; const gridApi = useRef(null); useEffect(() => { const interval = setInterval(() => { if (!gridApi) return; const update = []; const add = []; // split into updates and adds [...rowData].forEach((data) => { if (!gridApi.current) return; const rowNode = gridApi.current.getRowNode(getRowNodeId(data)); if (rowNode) { if (rowNode.data !== data) { update.push(data); } } else { add.push(data); } }); // async transaction for optimal handling of high grequency updates if (update.length || add.length) { gridApi.current.applyTransaction({ update, add, addIndex: 0, }); } }, 1000); return () => clearInterval(interval); }); return ( { gridApi.current = params.api; }} getRowNodeId={getRowNodeId} rowData={ref.current} style={{ height: 400, width: 600 }} > ); }; export function Index() { return (
With a longer explaination
); } export default Index;