react-smart-dynamic-table

A simple dynamic react table

Usage no npm install needed!

<script type="module">
  import reactSmartDynamicTable from 'https://cdn.skypack.dev/react-smart-dynamic-table';
</script>

README

Description

Using the react-smart-dynamic-table you can dynamically add, edit, delete columns, headers, cells

Demo

DEMO LINK

Installation

npm i react-smart-dynamic-table

API

Property Required Type Description Example
tableColumns yes arrayof({ header: string, columnData: arrayof(string)}) initial table data tableColumns = {[{ header: 'company', columnData: ['adidas', 'nike', 'puma', 'reebok'] }, { header: 'founded', columnData: ['1949', '1964', '1948', '1958'] }]}
emptyCellPlaceholder no string empty cell placeholder emptyCellPlaceholder="empty"
tableClasses no object keys are values from STYLING section, values are your custom classes, or array of classes tableClasses={{ table: classes.table, addRowButton: classes.addRowButton, sendButton: [classes.sendButton, classes.mt] }}
cellSpacing no string value to define gap between cells cellSpacing = "300"
minColumnSize no number value to define minimal size of table columns (default 300px) ````minColumnSize={200}```
onCeilEdit no function gets new Table data as a prop, emmits when edit cell -
onCeilBlur no function gets new Table data as a prop, emmits when cell blurs -
onHeaderEdit no function gets new Table data as a prop, emmits when edit header -
onHeaderBlur no function gets new Table data as a prop, emmits when header blurs -
onSendData no function gets new Table data as a prop, emmits when click send button -

STYLING:

General Buttons

  • addColumnButton
  • addRowButton
  • sendButton

Modal

  • modalOverlay
  • modal
  • modalText
  • modalInput
  • modalSetButton
  • modalCloseButton

Table

  • container
  • table
  • tableHead
  • tableHeadRow
  • tableHeadCell
  • tableHeadTextarea
  • deleteButton
  • deleteRowButton
  • tableBody
  • tableBodyRow
  • tableBodyCeilTextarea

Usage

App.js

import Table from 'react-smart-dynamic-table'
import classes from './App.module.scss';

function App() {
  const tableColumns = [{
      header: 'name',
      columnData: ['adidas', 'nike', 'puma', 'reebok']
    },
    { 
      header: 'founded', 
      columnData: ['1949', '1964', '1948', '1958'] 
    },
    { 
      header: 'origin', 
      columnData: ['Germany', '', 'Germany', 'USA'] 
    }
  ]

  return (
    <div className="App">
      <Table 
        tableColumns={tableColumns}
        tableClasses={{ 
            container: classes.container, 
            addRowButton: classes.addRowButton,
             sendButton: [classes.sendButton, classes.mt]
          }}
      />
    </div>
  );
}

export default App;

App.module.scss

  .addRowButton {
    color: red;
  }

  .sendButton {
    background-color: black;
    color: white;
  }

  .mt {
    margin-top: 30px;
  }

  .container {
    margin-top: 20px;
  }

expected result:

alt text