npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sifatkabir/reactdatatable

v1.0.10

Published

A customizable react component with additional function.

Downloads

4

Readme

React Data Table Component

A customizable react component with additional function.

Key Features

  • Searching
  • Sorting
  • Pagination
  • Customizable

Usage

import ReactDataTable, {ReactTableCheckBox} from '@sifatkabir/reactdatatable';
const columns = [
    { title: <ReactTableCheckBox name="test" checked={true}/>, key: 'userId' },
    {
      title: 'Firstname', render: (item) => {
        return (
          <b>{item.firstname}</b>
        )
      }, sort: true, key: 'firstname'
    },
    {
      title: 'Lastname', render: (item) => {
        return (
          <b>{item.lastname}</b>
        )
      }, sort: true, key: 'lastname'
    },
    { title: 'Country code', key: 'countrycode', sort: true }
  ];

  const data = [
    {
      "userId": "56615",
      "firstname": "Kaelyn",
      "lastname": "Hane",
      "countrycode": "CL"
    },
    {
      "userId": "66680",
      "firstname": "Jovani",
      "lastname": "Mosciski",
      "countrycode": "AT"
    },
    
  ];

  const option = {
    pagination: { perPage: 5 }
  };

  return (
      <ReactDataTable columns={columns} data={data} option={option} title="Users" theme="bootstrap" />
  );

use with remote source

const columns = [
    { title: 'ID', key: 'userId' },
    { title: 'firstname', key: 'firstname', sort: true },
    { title: 'lastname', key: 'lastname', sort: true },
    {
      title: 'friends', key: 'friends', render: (item) => {
        const li = item.friends.map((friend) => <li key={friend.id}>{friend.id}</li>);
        return (
          <ul>
            {li}
          </ul>
        );
      }
    }
  ];

const option = {
    ajax: {
      url: 'http://localhost:3001/',
      requestOption: {
        mode: 'cors', credentials: 'omit',
        headers: {
          'Content-Type': 'application/json'
        },
        referrerPolicy: 'no-referrer'
      }
    }
  }
  const data = [];
  return (
    <>
      <ReactDataTable columns={columns} data={data} option={option} />
    </>
  );

Props

| Name | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | columns | array | yes | | Please view columns section | | data | array | no | [] | array of objects | | option | object| no | default option object | Please view option section | | title | string | component | no | | Displayed on table caption | | theme | string | no | default | Values: default | bootstap. When use with bootstrap please set theme to bootstrap | | loader | component | no | <Loading /> component | Shows while table loads data. |

columns Props

| Name | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | title | string | component | yes | | The name of the column. e.g. Firstname. You can also a valid react component. | | key | string | no | | key is required if you want to display data. This will map to data object key. e.g. if you have data like this [{"userId": "56615","firstname": "Kaelyn"}] and you want to display firstname then set key to firstname. | | sort | boolean | no | false | Set to true if you want this column to be sortable | | render | function(item) | no | | Custom function to display cell data. The record of the row passed as parameter. Returned value displayed on table cell |

option Props

| Name | Type | Required | Default | Description | | ---- | ---- | -------- | ------- | ----------- | | heading| boolean | object | no | enabled by default | div containing search element or dropdown containing number of entries per page before table. You can set {heading: false} to hide this element. | | heading.className | string | no | table-header | CSS class for heading | | table.title | string | JSX element | no | | This value will showup in the caption of the table. | | table.className | string | no | react-datatable | CSS class for the table | | table.tableHeader | boolean | object | no | enabled by default | <thead> element of the table. You can set {table: {tableHeader: false}} to hide this element. | | table.tableHeader.className | string | no | | CSS class for <thead> | | table.tableHeader.sortingIcon.asc | string | JSX element | no | \u2191 | If that column has sorting enable then this icon will showup and will be highlighted it is in ascending order. | | table.tableHeader.sortingIcon.desc | string | JSX element | no | \u2193 | If that column has sorting enable then this icon will showup and will be highlighted it is in descending order. | | pagination | boolean | object | no | enabled by default | You can set {pagination: false} to disable pagination | | pagination.perPage | number | no| 20 | Number of items to be shown in a page | | pagination.className | string | no | react-table-pagination | CSS class for <ul> element of the pagination. | | pagination.pageItemClassName | string | no | react-table-page-item | CSS class for <li> items of the pagination. | | pagination.anchorClassName | string | no | react-table-page-link | CSS class for <a> items or links for the pagination. | | pagination.wrapperClassName | string | no | | There is a wrapper <nav> element for the pagination. This will set the CSS class for that element. | | pagination.lengthMenu.className | string | no | | CSS class for per page dropdown. | | pagination.lengthMenu.position | string | no | left | This determines in which side the per page dropdown will be displayed. By default it is left. You can set it to right to show this on right.| | pagination.lengthMenu.menu | array | no | [5, 10, 15, 20] | Menu items for per page dropdown. | | pagination.lengthMenu.wrapperClassName | string | no | | CSS class for a wrapper <div> element | | pagination.lengthMenu.labelClassName | string | no | | CSS class for the label of the dropdown | | pagination.lengthMenu.style | string | no | '{}' | Inline style for the dropdown. | | search | boolean | object | no | enabled by default | You can disable search by setting search to false | | search.position | string | no | right | This determines in whcih side the search box will show up. By default it is right. You can set it to left to show this on left side. | | search.className | string | no | | CSS class for the search box | | search.notFoundText | string | no | Sorry, no record found with the search criteria | Text to display if there is no result with search criteria. | | search.casesensitive | boolean | no | false | Set it true if you want to make search case-sensitive. | | search.wrapperClassName | string | no | | CSS class for a wrapper <div> element. | | search.name | string | no | search | name attribute for the search input box. | | search.searchLabel | string | no | Search | Label for the search box. | | search.searchLabelClassName | string | no | | CSS class for the search label. | | search.style | string | no | '{}' | Inline style for search. | | ajax.url | string | no | | url for your remote request. | | ajax.requestOption | object | no | {} | fetch API options. For details please visit MDN | | ajax.dataKey | string | no | data | Key of response json which contains the data. Data should be an array of objects. | | ajax.totalRecordKey | string | no | total | Key of the response json whcih contains total number of pages for pagination. |

option example

Table

Change CSS class for table

{table: className: 'my-table'}

Pagination

Disable pagination

{pagination: false}

Changing class for pagination ul

{pagination: className: 'custom-class-name'}

Changing class for pagination li

{pagination: pageItemClassName: 'custom-class-name'}

Changing class for pagination a

{pagination: anchorClassName: 'custom-class-name'}

Changing class for pagination wrapper nav

{pagination: wrapperClassName: 'custom-class-name'}

Changing number of items to display per page

{pagination: perPage: 5}

Changing dropdown for number of items per page

{pagination: lengthMenu: menu: [10, 20, 30, 50]}

Search

Disable Search

{search: false}

Changing Not found text

{search: notFoundText: 'nothing found'}

Place search box to left

{search: position: 'left'}

Change label for search

{search: searchLabel: 'Find'}

Default option object

{
    heading: {
        enableHeading: true,
        title: '',
        className: 'table-header'
    },
    table: {
        className: 'react-datatable',
        tableHeader: {
            enableTableHeader: true,
            className: '',
            sortingIcon: {
                asc: '\u2191',
                desc: '\u2193'
            }
        },
        tableFooter: {
            enableTableFooter: false,
            className: ''
        },


    },
    pagination: {
        enablePagination: true,
        position: 'bottom',
        perPage: 20,
        className: 'react-table-pagination',
        pageItemClassName: 'react-table-page-item',
        anchorClassName: 'react-table-page-link',
        wrapperClassName: '',
        lengthMenu: {
            className: '',
            position: 'left',
            menu: [5, 10, 15, 20],
            wrapperClassName: '',
            labelClassName: '',
            style: '{}'
        }
    },
    search: {
        enableSearch: true,
        position: 'right',
        className: '',
        notFoundText: 'Sorry, no record found with the search criteria',
        casesensitive: false,
        wrapperClassName: '',
        name: 'search',
        searchLabel: 'Search',
        searchLabelClassName: '',
        style: '{}'
    },
    ajax: {
        url: '',
        requestOption: {},
        dataKey: 'data',
        totalRecordKey: 'total'
    },
    socket: {

    },
    remote: false