2.16.6 • Published 2 months ago

@aures/custom-react-table v2.16.6

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

Custom react table By M@HeR

Custom-react-table is based on React-Table v7: collection of hooks for building powerful tables and datagrid experiences. These hooks are lightweight, composable, and ultra-extensible, but do not render any markup or styles for you. This effectively means that React Table is a "headless" UI library.

Desktop Version:

alt text

Mobile Version:

alt text

greets to

https://github.com/atefBB > https://github.com/Iyadchafroud

If you’re new to TypeScript and React, checkout this handy cheatsheet

Installation

You can install React Table with NPM, Yarn

npm install @aures/custom-react-table
 --save

or

yarn add @aures/custom-react-table

This package is compatible with React v16.8+ and works with ReactDOM.

How to use

import { DynamicTable } from @aures/custom-react-table

//this the format of object if you need to add custom columns to table with your personal jsx
interface customColumnProps {
  indexOFColumn: number;  //position of column to insert it
  columnName: string;    //name of column
  customJsx:  React.ReactNode;   //react componant
  filterName?: string;
  canFilter?: boolean ;
}

let arrayOfCustomColumns: customColumnProps[] = [];


function customJsxComponent(props: any) {
  return (
    <div className='w-100 d-flex justify-content-center'>
      <div className='dropdown'>
        <button
          id='dropdownMenuButton1'
          data-bs-toggle='dropdown'
          // className=" dropdown-toggle"
        >
          test
        </button>
        <div className='dropdown-menu' aria-labelledby='dropdownMenuButton'>
          <div className='dropdown-item' onClick={() => // console.log({ props })}>
            react
          </div>
          <div className='dropdown-item'>table</div>
        </div>
      </div>
    </div>
  );
}


arrayOfCustomColumns.push(

    {
      indexOFColumn: 1,
      columnName: 'custom Cell',
      customJsx: SelectAccountDropdown,
      filterName: 'Désignation',
      canFilter: true,
    }
  );




export default function App(): JSX.Element {
  const [filterActive, setLocalFilterActive] = React.useState<boolean>(false);
  const [selectedRows, setSelectedRows] = React.useState<any[]>([]);
  const [dataIsUpdated, setDataIsUpdated] = React.useState<boolean | number>(false);
  const [data, setData] = React.useState<any[]>([]);
  return (
    <>
      <DynamicTable
        //put your backed api url it's obligation  to get your date from api

        url='http://localhost:4000/client'
        // url='http://localhost:4000/cards'
        //optionnal props
         name="mytable"
        setData={setData}  //--->here to return fetched data only
        // --->here for add custom component in the end of table
        actionColumn={SelectAccountDropdown}
        // --->here you can add component side Filter Button
        customJsxSideFilterButton={<FilterSideComponent />}
        // --->here for grouping columns with same name
        canGroupBy
        // --->here for sorting table
        canSort
        // --->here for resizing with of column
        canResize
        // --->here for row and subrows
        canExpand
        // --->here showing checkbox in the begin of RowTable with return you the checked rows
        canSelect
        setSelectedRows={setSelectedRows}

        // --->here add custom checkbox without only checked row or subrow without depend his parent row
        customSelect
        // --->here showing global filter input on the top of table
        showGlobalFilter

        //----> the props for decaling checkbox on expand mode
        canMovedCheckboxLeftOnExpand

        // --->here showing  filter button  on the top of table
        showFilter
        filterActive={filterActive}
        setLocalFilterActive={setLocalFilterActive}
        // --->here add action header with delete and duplicate
        canDeleteOrDuplicate

        // --->here you can add any column to the table in the specified place with custom name and customjsx
        arrayOfCustomColumns={arrayOfCustomColumns}
        // --->here  if you don't have any other click in row you can use to get clicked row details
        onClick={(row: any) => // console.log(row.original)}

        // when you update your backend set dataIsUpdated to true to render table
        setDataIsUpdated={setDataIsUpdated}
        dataIsUpdated={dataIsUpdated}
        // request header to use custom fetching data like language
        requestHeader={{"string":"string"}}
        // if you need your table is elevated in his parent
        elevationTable={8}
        //this for let you modify the height of the table and min height you can put number or string  or calc() function of css
       [ NB: for maxHeight must be less than 100%]
        minHeight='calc(100% - 276px)'
        maxHeight={'200px'}

      />
      <p>Selected Rows: {selectedRows.length}</p>
      <pre>
        <code>
          {JSON.stringify(
            {
              selectedRows,
            },
            null,
            2
          )}
        </code>
      </pre>
    </>
  );
}

other info

if you use vitejs` project add thisto main :.

 import "regenerator-runtime/runtime";

---> if you need click on row and click on custom cell add to your custom jsx onClick={(e) => { put here your function; e.stopPropagation(); }} --->

Example for data with expand

. type of response must be like this:

"person": {
  //here list of visible header colums
    "structure": [
      "id",
      "name",
      "lastName"
      "age"
    ],
    //here your data
    "data": [
      {
        "id": 1,
        "name": "Maher",
        "lastName": "unlocker",
        "age": 15,
        "subRows": [
          {
            "id": 2,
            "name": "Maher",
            "lastName": "unlocker",
            "age": 15,
            "subRows": []
          },
          {
            "id": 3,
            "name": "Maher",
            "lastName": "unlocker",
            "age": 15,
            "subRows": []
          }
        ]
      },
      {
        "id": 4,
        "name": "Maher",
        "lastName": "unlocker",
        "age": 15,
        "subRows": []
      }
    ]
  }

TypeScript

tsconfig.json is set up to interpret dom and esnext types, as well as react for jsx. Adjust according to your needs.

This example uses:

  • useGroupBy to enable header groups
  • useFilters for per-column filters. Note that filters are displayed in a separate filter dropdown rather than being embedded in each column header.
  • useSortBy for column sorting
  • useExpanded to allow expansion of grouped columns
  • useFlexLayout for a scalable full width table
  • usePagination for pagination
  • useResizeColumns for resizable columns
  • useRowSelect for row selection
2.16.6

2 months ago

2.16.5

3 months ago

2.16.3

3 months ago

2.16.4

3 months ago

2.16.1

3 months ago

2.16.2

3 months ago

2.16.0

3 months ago

2.15.6

3 months ago

2.15.4

3 months ago

2.15.5

3 months ago

2.15.3

3 months ago

2.15.2

3 months ago

2.15.1

3 months ago

2.15.0

3 months ago

2.14.4

3 months ago

2.14.3

4 months ago

2.13.19

4 months ago

2.14.1

4 months ago

2.14.2

4 months ago

2.13.21

4 months ago

2.13.17

4 months ago

2.13.16

5 months ago

2.13.15

5 months ago

2.13.14

5 months ago

2.13.13

5 months ago

2.13.12

5 months ago

2.13.11

5 months ago

2.13.10

5 months ago

2.13.8

5 months ago

2.13.9

5 months ago

2.13.6

5 months ago

2.13.4

5 months ago

2.13.2

5 months ago

2.13.1

5 months ago

2.12.33

5 months ago

2.12.32

5 months ago

2.12.31

5 months ago

2.12.29

5 months ago

2.12.28

5 months ago

2.12.27

5 months ago

2.12.26

5 months ago

2.12.25

5 months ago

2.12.24

5 months ago

2.12.22

5 months ago

2.12.21

5 months ago

2.12.19

5 months ago

2.12.18

5 months ago

2.12.17

5 months ago

2.12.16

5 months ago

2.12.9

5 months ago

2.12.7

5 months ago

2.12.8

5 months ago

2.12.15

5 months ago

2.12.14

5 months ago

2.12.6

5 months ago

2.12.13

5 months ago

2.12.12

5 months ago

2.12.4

5 months ago

2.12.11

5 months ago

2.12.3

5 months ago

2.12.0

6 months ago

2.11.24

6 months ago

2.11.25

6 months ago

2.11.26

6 months ago

2.11.27

6 months ago

2.12.1

6 months ago

2.12.2

6 months ago

2.11.19

7 months ago

2.11.20

7 months ago

2.11.21

6 months ago

2.11.22

6 months ago

2.11.23

6 months ago

2.11.18

7 months ago

2.11.17

7 months ago

2.11.16

7 months ago

2.11.15

7 months ago

2.11.14

7 months ago

2.11.13

7 months ago

2.11.11

7 months ago

2.11.10

7 months ago

2.11.8

7 months ago

2.11.7

7 months ago

2.11.6

7 months ago

2.11.5

7 months ago

2.11.4

7 months ago

2.11.3

7 months ago

2.11.2

7 months ago

2.11.1

7 months ago

2.11.0

7 months ago

2.10.48

7 months ago

2.10.47

8 months ago

2.10.46

8 months ago

2.10.45

8 months ago

2.10.44

8 months ago

2.10.43

8 months ago

2.10.42

8 months ago

2.10.41

8 months ago

2.10.40

8 months ago

2.10.38

8 months ago

2.10.37

8 months ago

2.10.35

8 months ago

2.10.34

8 months ago

2.10.33

8 months ago

2.10.32

8 months ago

2.10.31

8 months ago

2.10.30

8 months ago

2.10.29

8 months ago

2.10.28

8 months ago

2.10.26

8 months ago

2.10.25

8 months ago

2.10.24

8 months ago

2.10.23

8 months ago

2.10.22

8 months ago

2.10.21

8 months ago

2.10.20

8 months ago

2.10.19

8 months ago

2.10.18

8 months ago

2.10.15

8 months ago

2.10.14

8 months ago

2.10.13

8 months ago

2.10.12

8 months ago

2.10.10

8 months ago

2.10.9

8 months ago

2.10.8

8 months ago

2.10.7

8 months ago

2.10.1

9 months ago

2.10.0

9 months ago

1.0.3

9 months ago

1.0.1

9 months ago

1.0.0

9 months ago