1.6.8 • Published 8 months ago

react-spreadsheet-ts v1.6.8

Weekly downloads
-
License
-
Repository
-
Last release
8 months ago

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

PropTypeDefaultDescription
tableHeightstring'250px'The height of the table container.
valueCellDataundefinedThe initial data for the spreadsheet cells. Each cell can contain content and formatting options.
onChange(data: CellData) => voidundefinedCallback 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.

1.6.4

8 months ago

1.4.6

9 months ago

1.6.3

8 months ago

1.4.5

9 months ago

1.6.2

8 months ago

1.4.4

9 months ago

1.6.1

8 months ago

1.4.3

9 months ago

1.6.0

8 months ago

1.4.2

9 months ago

1.5.9

8 months ago

1.5.7

8 months ago

1.5.6

9 months ago

0.5.0

9 months ago

1.5.5

9 months ago

1.5.3

9 months ago

1.5.2

9 months ago

1.5.1

9 months ago

1.5.0

9 months ago

1.5.10

8 months ago

1.5.12

8 months ago

1.5.11

8 months ago

1.5.14

8 months ago

1.5.16

8 months ago

1.5.15

8 months ago

1.6.8

8 months ago

1.6.7

8 months ago

1.4.9

9 months ago

1.6.6

8 months ago

1.4.8

9 months ago

1.6.5

8 months ago

1.4.10

9 months ago

1.4.7

9 months ago

0.4.5

9 months ago

1.4.13

9 months ago

0.4.4

9 months ago

1.4.12

9 months ago

0.6.5

9 months ago

0.6.4

9 months ago

1.4.14

9 months ago

0.4.1

9 months ago

0.4.0

9 months ago

0.6.1

9 months ago

0.4.3

9 months ago

0.6.0

9 months ago

0.4.2

9 months ago

1.3.8

10 months ago

1.3.7

10 months ago

1.3.4

10 months ago

1.3.3

10 months ago

1.3.2

10 months ago

1.3.1

10 months ago