react-spreadsheet-ts
TypeScript icon, indicating that this package has built-in type declarations

1.6.8 • Public • Published

react-spreadsheet-ts

Build NPM Version Code Climate TypeScript

A lightweight, fully-typed React spreadsheet component built with TypeScript and Material-UI (MUI).

Features

  • Theme Support: Integrates with MUI's ThemeProvider for consistent theming
  • CSV Export: Export your data to CSV format
  • Cell Formatting:
    • Text formatting (bold, italic, code)
    • Text alignment (left, center, right)
    • URL links
  • Row and Column Operations:
    • Add/remove rows and columns
    • Clear table contents
    • Transpose table
  • Selection Features:
    • Single cell selection
    • Multi-cell selection
    • Row and column selection
    • Select all
  • Clipboard Operations:
    • Copy/paste support
    • Paste from external sources
  • History Management:
    • Undo/redo functionality
    • State tracking
  • Redux Integration: Built-in state management with Redux

Installation

npm install react-spreadsheet-ts

Basic Usage

import { Spreadsheet } from 'react-spreadsheet-ts';
import { ThemeProvider, createTheme } from '@mui/material';

function App() {
  const theme = createTheme({
    palette: {
      mode: 'light' // or 'dark'
    }
  });

  return (
    <ThemeProvider theme={theme}>
      <Spreadsheet tableHeight="250px" />
    </ThemeProvider>
  );
}

Props

Prop Type Default Description
tableHeight string '250px' The height of the table container.
value CellData[][] undefined The initial data for the spreadsheet cells. Each cell can contain content and formatting options.
onChange (data: CellData[][]) => void undefined Callback fired when the spreadsheet data changes. Receives the complete updated dataset.

Data Structure

The spreadsheet uses a two-dimensional array of CellData objects to represent the grid:

interface CellData {
    content: string       // The text content of the cell
    alignment?: Alignment // Text alignment ('left', 'center', 'right')
    bold?: boolean       // Bold formatting
    italic?: boolean     // Italic formatting
    code?: boolean       // Code (monospace) formatting
    link?: string        // Optional URL for cell content
}

onChange Callback

The onChange callback is called whenever the spreadsheet data is modified. It receives the entire updated dataset as a two-dimensional array of CellData objects:

const handleChange = (newData: CellData[][]) => {
    // Example of the data structure received:
    // [
    //     [
    //         { content: "A1", alignment: "left", bold: false },
    //         { content: "B1", alignment: "center", bold: true }
    //     ],
    //     [
    //         { content: "A2", alignment: "right", italic: true },
    //         { content: "B2", alignment: "left", code: true }
    //     ]
    // ]
    console.log('Spreadsheet data changed:', newData);
};

Controlled Component Example

import { useState } from 'react';
import { Spreadsheet, CellData } from 'react-spreadsheet-ts';
import { ThemeProvider, createTheme } from '@mui/material';

function App() {
  const [data, setData] = useState<CellData[][]>([
    [
      { content: 'Name', alignment: 'center', bold: true },
      { content: 'Age', alignment: 'center', bold: true },
      { content: 'Country', alignment: 'center', bold: true }
    ],
    [
      { content: 'Alice', alignment: 'left' },
      { content: '30', alignment: 'right' },
      { content: 'USA', alignment: 'left' }
    ]
  ]);

  const theme = createTheme({
    palette: {
      mode: 'light'
    }
  });

  const handleDataChange = (newData: CellData[][]) => {
    setData(newData);
    // You can perform additional operations here, such as:
    // - Saving to a backend
    // - Validating data
    // - Triggering other UI updates
  };

  return (
    <ThemeProvider theme={theme}>
      <Spreadsheet
        value={data}
        onChange={handleDataChange}
        tableHeight="250px"
      />
    </ThemeProvider>
  );
}

State Management

The spreadsheet component internally manages its state using Redux, but exposes changes through the onChange callback. This allows you to:

  • Track all changes to the spreadsheet data
  • Implement undo/redo functionality in your application
  • Sync data with external storage
  • Validate changes before accepting them

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Readme

Keywords

none

Package Sidebar

Install

npm i react-spreadsheet-ts

Weekly Downloads

24

Version

1.6.8

License

none

Unpacked Size

1.01 MB

Total Files

443

Last publish

Collaborators

  • keithwalsh