import React from "react"; import { type DataEditorRef } from "../../data-editor/data-editor.js"; import { BeautifulWrapper, Description, MoreInfo, useMockDataGenerator, KeyName, defaultProps, } from "../../data-editor/stories/utils.js"; import type { Item } from "../../internal/data-grid/data-grid-types.js"; import { GridCellKind } from "../../internal/data-grid/data-grid-types.js"; import { SimpleThemeWrapper } from "../../stories/story-utils.js"; import { DataEditorAll } from "../../data-editor-all.js"; export default { title: "Glide-Data-Grid/DataEditor Demos", decorators: [ (Story: React.ComponentType) => ( ), ], }; let num: number = 1; function rand(): number { return (num = (num * 16_807) % 2_147_483_647); } export const RapidUpdates: React.VFC = () => { const { cols, getCellContent, setCellValueRaw } = useMockDataGenerator(100); const ref = React.useRef(null); const countRef = React.useRef(0); const displayCountRef = React.useRef(null); React.useEffect(() => { let rafID = 0; const sendUpdate = () => { const cells: { cell: Item; }[] = []; const now = performance.now(); for (let x = 0; x < 5000; x++) { const col = Math.max(10, rand() % 100); const row = rand() % 10_000; setCellValueRaw([col, row], { kind: GridCellKind.Text, data: x.toString(), displayData: `${x}k`, themeOverride: x % 5 !== 0 ? { bgCell: "#f2fff4", textDark: "#00d41c", } : { bgCell: "#fff6f6", textDark: "#d40000", }, allowOverlay: true, lastUpdated: now, }); cells.push({ cell: [col, row] }); } countRef.current += 5000; if (displayCountRef.current !== null) { displayCountRef.current.textContent = `${countRef.current}`; } ref.current?.updateCells(cells); rafID = window.requestAnimationFrame(sendUpdate); }; sendUpdate(); return () => { cancelAnimationFrame(rafID); }; }, [setCellValueRaw]); return ( Data grid can support many thousands of updates per seconds. The data grid can easily update data faster than a human can read it, more importantly the faster the data grid can update, the more time your code can spend doing more valuable work. Updates processed: We could do this faster but we wrote a really crappy data store for this demo which is actually slowing down the data grid. }> ); };