demo D208
Configuring a type in React
One field, five presentations; the stored value never changes
createUnitType({ display, decimals, … })
This grid shows one stored field presented five different ways, with the underlying value never changing. It shows that display is a setting, not a rewrite, so you can change decimals, symbols or format without touching the data behind the column.
This is the React version. The grid mounts through the createLatticeGrid adapter, which takes its configuration as ordinary props and hands back the live grid through a ref. The grid below is the same one every other tab runs.
The configuration
<link rel="stylesheet" href="https://cdn.latticegrid.dev/lattice-grid@1.107.0/lattice-grid.min.css">
<div id="grid"></div>
<script type="module">
import React from 'https://esm.sh/react@18';
import { createRoot } from 'https://esm.sh/react-dom@18/client';
import { createGrid, createUnitType } from 'https://cdn.latticegrid.dev/lattice-grid@1.107.0/lattice-grid.esm.min.js';
import createLatticeGrid from 'https://cdn.latticegrid.dev/lattice-grid@1.107.0/modules/react.esm.min.js';
const LatticeGrid = createLatticeGrid({ React, createGrid });
// The same field stored in metres, shown four ways. The stored value never
// changes; only the display does.
const dataTypes = {
spanAuto: createUnitType({ system: 'length', unit: 'm', display: 'auto' }),
spanMm: createUnitType({ system: 'length', unit: 'm', display: 'mm' }),
spanKm: createUnitType({ system: 'length', unit: 'm', display: 'km', decimals: 3 }),
spanSig: createUnitType({ system: 'length', unit: 'm', display: 'auto', significantFigures: 3 }),
};
const columns = [
{ field: 'run', title: 'Run', layout: { pin: 'start', width: 120 } },
{ field: 'span', id: 'stored', title: 'Stored (m)', type: 'number' },
{ field: 'span', id: 'auto', title: "display: 'auto'", type: 'spanAuto' },
{ field: 'span', id: 'mm', title: "display: 'mm'", type: 'spanMm' },
{ field: 'span', id: 'km', title: "display: 'km'", type: 'spanKm' },
{ field: 'span', id: 'sig', title: '3 sig figs', type: 'spanSig' },
];
const rows = [/* runs, each with a span in metres */];
function App() {
return (
<LatticeGrid
rowKey="id"
dataTypes={dataTypes}
columns={columns}
rows={rows}
style={{ height: '460px' }}
/>
);
}
createRoot(document.getElementById('grid')).render(<App />);
</script>