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 🙏

© 2026 – Pkg Stats / Ryan Hefner

react-tabelify

v2.0.4

Published

Tabelify is the one of the best data grid libraries for react. The sole reason to build this was that there was no other library which was generic enough to cater our needs.

Readme

Tabelify

Tabelify is the one of the best data grid libraries for react. The sole reason to build this was that there was no other library which was generic enough to cater our needs.

Features of Tabelify

  • Enable/disable Header, Footer.
  • Provide Custom Header, Footer
  • Ability to change the view/style of the column just by passing a render function along with the columnMetaData of the column. The function takes in the data and returns the content to be rendered in the Column.
  • Provides rendering a Custom Row instead of a default one. A custom row can be rendered just by passing customRow(a react component) as props to Tabelify. The Custom Row recieves all the data of the row as well as grid and it is rendered in place of the default row.
  • Provides default pagination.
  • Provides default local search on the grid.
  • Provides customisable page size.
  • Provides default pagination.
  • Provides selection of rows via chechbox which appears on the left of each row. This can be easily enabled/diabled by passing a prop showCheckbox:true/false.
  • Coulumn width can be adusted by passing a proprty flexBasis: 100px or flexBasis:40% to the columnMetadata od column.

So, we decided to build a library which is generic, highly customisable and easy to use.

Live Demo

Tabelify is an uncontrolled component. That means any change in the grid is propogated to the parent via an onChangeGrid function. The The function can be caught and required changes can then be stored in state(by setState method), which will then rerender Tabeliify with new props. Thus, data manipulation happens only at one place.

#STEPS:

  • npm install
  • npm install webpack -g
  • webpack --progress --colors
  • npm start
  • goto http://localhost:3000/ to see the the page

#Note: In case you are importing react-tabelify, do not forget the link the css file along with it.

#For details on Tabelify, Have a look at the blog : https://medium.com/@rishabh.bits038/the-simplest-way-to-create-a-data-grid-in-react-ccdd4368ee7a#.r7h57mfnj

#Working example:

export default class Page extends React.Component {
    constructor(){
        super();
        this.onChangeGrid = this.onChangeGrid.bind(this);
        this.state={
        tableConfig: {
                columnMetadata: [
                    {
                        "columnName": "cgpa",
                        "displayName": "CGPA",
                    },
                    {
                        "columnName": "name",
                        "displayName": "Name"
                    },
                ],
                currentPage: 1,
                showCheckbox:true,
                data:
                [
                    {
                        "cgpa":5.2,
                        "name": "Rishabh",
                    }
                ],
                onChangeGrid: this.onChangeGrid,
                selectedRows: {},
                onRowClick: this.onRowClick,
                resultsPerPage: 10,
                // CustomRow: require('./CustomRow.js')
                // CustomHeader: require('./CustomHeader')
                // showHeader:false,
                // showFooter: false
                localSearch: true,
                // fixedHeight:100,
                // width: '1000px'
            }
    }
    }

    onChangeGrid(event, data) {
        var tableConfig = this.state.tableConfig;
        _.extend(tableConfig, data);
        this.setState({
            tableConfig: tableConfig
        });
    }

	render(){
		return <div>
			<Tabelify style={{margin:'30px'}} {...this.state.tableConfig}/>
		</div>
	}
}