Skip to content

JavaScript Data Grid Demo

Use this standalone JavaScript demo to see RevoGrid render editable tabular data with virtual scrolling and fast browser performance.

Source code Git Codesandbox
ts
import { stocks } from '@/json/stock.json'
import type { ColumnRegular } from '@revolist/revogrid'

// Define columns
const columns: ColumnRegular[] = [
  {
    name: '🎰 Ticker',
    prop: 'symbol',
    sortable: true,
    pin: 'colPinStart',
    cellTemplate: (h, { model, prop }) => h('strong', null, model[prop]),
  },
  {
    name: '🔠 Company Name',
    prop: 'company_name',
    size: 300,
  },
  {
    name: '',
    prop: '📉 graph',
    readonly: true,
    // Custom cell render
    cellTemplate(h) {
      const barWidth = 5
      const barSpacing = 5
      const maxHeight = 30
      const bars = []

      // Draw 5 vertical bars with random heights
      for (let i = 0; i < 5; i++) {
        const barHeight = Math.random() * maxHeight
        const x = i * (barWidth + barSpacing)
        const y = maxHeight - barHeight + 5

        // Create the rectangle element for the bar
        const rect = h('rect', {
          key: i,
          x,
          y,
          width: barWidth,
          height: barHeight,
          fill: 'blue',
          stroke: 'black',
        })

        // Append the rectangle to the group
        bars.push(rect)
      }
      return h(
        'svg',
        {
          width: '100%',
          height: maxHeight + 10,
        },
        h('g', {}, bars),
      )
    },
  },
  {
    name: '💰 Price',
    prop: 'price',
  },
  {
    name: '⬆️ Change',
    prop: 'change',
  },
  {
    name: '% Change',
    prop: 'percent_change',
  },
]

// Render grid
function render() {
  // Create grid element
  const grid = document.createElement('revo-grid')
  document.getElementById('demo-overview')?.appendChild(grid)

  const items = stocks
  grid.columns = columns
  grid.source = items
  grid.theme = 'compact'

  setInterval(() => {
    grid.source = items.map(stock => {
      return {
        ...stock,
        price: (Math.random() * 4000).toFixed(2),
        change: (Math.random() * (20 - -5) + -5).toFixed(2),
      }
    })
  }, 1000)
}
json
{
  "stocks": [
    {
      "symbol": "AAPL",
      "company_name": "Apple Inc.",
      "price": 150.23,
      "change": 2.45,
      "percent_change": 1.65
    },
    {
      "symbol": "MSFT",
      "company_name": "Microsoft Corporation",
      "price": 300.45,
      "change": -1.2,
      "percent_change": -0.4
    },
    {
      "symbol": "GOOGL",
      "company_name": "Alphabet Inc. (Class A)",
      "price": 2800.67,
      "change": 10.89,
      "percent_change": 0.39
    },
    {
      "symbol": "AMZN",
      "company_name": "Amazon.com Inc.",
      "price": 3500.12,
      "change": -5.76,
      "percent_change": -0.16
    },
    {
      "symbol": "FB",
      "company_name": "Meta Platforms Inc.",
      "price": 330.98,
      "change": 3.2,
      "percent_change": 0.97
    },
    {
      "symbol": "TSLA",
      "company_name": "Tesla Inc.",
      "price": 750.89,
      "change": -8.45,
      "percent_change": -1.11
    },
    {
      "symbol": "JPM",
      "company_name": "JPMorgan Chase & Co.",
      "price": 155.76,
      "change": 1.56,
      "percent_change": 1.01
    },
    {
      "symbol": "V",
      "company_name": "Visa Inc.",
      "price": 220.34,
      "change": -2.1,
      "percent_change": -0.95
    },
    {
      "symbol": "PG",
      "company_name": "Procter & Gamble Co.",
      "price": 145.67,
      "change": 0.76,
      "percent_change": 0.52
    },
    {
      "symbol": "DIS",
      "company_name": "The Walt Disney Company",
      "price": 175.45,
      "change": 4.32,
      "percent_change": 2.53
    },
    {
      "symbol": "GS",
      "company_name": "The Goldman Sachs Group Inc.",
      "price": 380.21,
      "change": -3.45,
      "percent_change": -0.9
    },
    {
      "symbol": "CVX",
      "company_name": "Chevron Corporation",
      "price": 120.89,
      "change": 1.1,
      "percent_change": 0.92
    },
    {
      "symbol": "IBM",
      "company_name": "International Business Machines Corporation",
      "price": 130.67,
      "change": -0.89,
      "percent_change": -0.68
    },
    {
      "symbol": "CSCO",
      "company_name": "Cisco Systems Inc.",
      "price": 55.32,
      "change": 0.45,
      "percent_change": 0.82
    },
    {
      "symbol": "BA",
      "company_name": "The Boeing Company",
      "price": 180.45,
      "change": -1.76,
      "percent_change": -0.97
    },
    {
      "symbol": "AAP",
      "company_name": "Advance Auto Parts Inc.",
      "price": 240.67,
      "change": 2.34,
      "percent_change": 0.98
    },
    {
      "symbol": "INTC",
      "company_name": "Intel Corporation",
      "price": 50.21,
      "change": -0.56,
      "percent_change": -1.1
    },
    {
      "symbol": "INTU",
      "company_name": "Intuit Inc.",
      "price": 400.12,
      "change": 6.78,
      "percent_change": 1.72
    },
    {
      "symbol": "CAT",
      "company_name": "Caterpillar Inc.",
      "price": 180.34,
      "change": 3.21,
      "percent_change": 1.81
    },
    {
      "symbol": "WMT",
      "company_name": "Walmart Inc.",
      "price": 140.56,
      "change": -0.76,
      "percent_change": -0.54
    },
    {
      "symbol": "MMM",
      "company_name": "3M Company",
      "price": 170.89,
      "change": 1.23,
      "percent_change": 0.72
    }
  ]
}