2.17.3 • Published 11 months ago

@aures/custom-react-table v2.17.3

Weekly downloads
-
License
MIT
Repository
github
Last release
11 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.17.2

11 months ago

2.17.3

11 months ago

2.17.0

11 months ago

2.17.1

11 months ago

2.16.9

12 months ago

2.16.7

12 months ago

2.16.8

12 months ago

2.16.6

1 year ago

2.16.5

1 year ago

2.16.3

1 year ago

2.16.4

1 year ago

2.16.1

1 year ago

2.16.2

1 year ago

2.16.0

1 year ago

2.15.6

1 year ago

2.15.4

1 year ago

2.15.5

1 year ago

2.15.3

1 year ago

2.15.2

1 year ago

2.15.1

1 year ago

2.15.0

1 year ago

2.14.4

1 year ago

2.14.3

1 year ago

2.13.19

1 year ago

2.14.1

1 year ago

2.14.2

1 year ago

2.13.21

1 year ago

2.13.17

1 year ago

2.13.16

1 year ago

2.13.15

1 year ago

2.13.14

1 year ago

2.13.13

1 year ago

2.13.12

1 year ago

2.13.11

1 year ago

2.13.10

1 year ago

2.13.8

1 year ago

2.13.9

1 year ago

2.13.6

1 year ago

2.13.4

1 year ago

2.13.2

1 year ago

2.13.1

1 year ago

2.12.33

2 years ago

2.12.32

2 years ago

2.12.31

2 years ago

2.12.29

2 years ago

2.12.28

2 years ago

2.12.27

2 years ago

2.12.26

2 years ago

2.12.25

2 years ago

2.12.24

2 years ago

2.12.22

2 years ago

2.12.21

2 years ago

2.12.19

2 years ago

2.12.18

2 years ago

2.12.17

2 years ago

2.12.16

2 years ago

2.12.9

2 years ago

2.12.7

2 years ago

2.12.8

2 years ago

2.12.15

2 years ago

2.12.14

2 years ago

2.12.6

2 years ago

2.12.13

2 years ago

2.12.12

2 years ago

2.12.4

2 years ago

2.12.11

2 years ago

2.12.3

2 years ago

2.12.0

2 years ago

2.11.24

2 years ago

2.11.25

2 years ago

2.11.26

2 years ago

2.11.27

2 years ago

2.12.1

2 years ago

2.12.2

2 years ago

2.11.19

2 years ago

2.11.20

2 years ago

2.11.21

2 years ago

2.11.22

2 years ago

2.11.23

2 years ago

2.11.18

2 years ago

2.11.17

2 years ago

2.11.16

2 years ago

2.11.15

2 years ago

2.11.14

2 years ago

2.11.13

2 years ago

2.11.11

2 years ago

2.11.10

2 years ago

2.11.8

2 years ago

2.11.7

2 years ago

2.11.6

2 years ago

2.11.5

2 years ago

2.11.4

2 years ago

2.11.3

2 years ago

2.11.2

2 years ago

2.11.1

2 years ago

2.11.0

2 years ago

2.10.48

2 years ago

2.10.47

2 years ago

2.10.46

2 years ago

2.10.45

2 years ago

2.10.44

2 years ago

2.10.43

2 years ago

2.10.42

2 years ago

2.10.41

2 years ago

2.10.40

2 years ago

2.10.38

2 years ago

2.10.37

2 years ago

2.10.35

2 years ago

2.10.34

2 years ago

2.10.33

2 years ago

2.10.32

2 years ago

2.10.31

2 years ago

2.10.30

2 years ago

2.10.29

2 years ago

2.10.28

2 years ago

2.10.26

2 years ago

2.10.25

2 years ago

2.10.24

2 years ago

2.10.23

2 years ago

2.10.22

2 years ago

2.10.21

2 years ago

2.10.20

2 years ago

2.10.19

2 years ago

2.10.18

2 years ago

2.10.15

2 years ago

2.10.14

2 years ago

2.10.13

2 years ago

2.10.12

2 years ago

2.10.10

2 years ago

2.10.9

2 years ago

2.10.8

2 years ago

2.10.7

2 years ago

2.10.1

2 years ago

2.10.0

2 years ago

1.0.3

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago