Compare commits

...
8 Commits
Author SHA1 Message Date
Tanner Linsley e8146b5d14 2.2.2 2016-10-26 19:25:51 -06:00
Tanner Linsley eef59a559e Added stuff back to umd files array 2016-10-26 19:25:45 -06:00
Tanner Linsley 3b18e8c8c1 2.2.1 2016-10-26 19:18:51 -06:00
Tanner Linsley dd6b8af304 Ignore built files in git 2016-10-26 19:18:45 -06:00
Tanner Linsley f242d2f3f6 Fixed tbodystyle bug 2016-10-26 19:15:36 -06:00
Tanner Linsley 9dd0333571 Readme Update 2016-10-26 19:11:48 -06:00
Tanner Linsley 085616d858 2.2.0 2016-10-26 17:33:32 -06:00
Tanner Linsley 25ef0b2273 Styles, ClassNames & Row Style/ClassName callbacks 2016-10-26 17:33:26 -06:00
7 changed files with 382 additions and 146 deletions
+3 -1
View File
@@ -1,3 +1,5 @@
node_modules/ node_modules/
lib/
react-table.js
react-table.css
*.log *.log
+39 -23
View File
@@ -81,24 +81,32 @@ Every React-Table instance requires you to set the `data` prop. To use client-si
These are the default props for the main react component `<ReactTable />` These are the default props for the main react component `<ReactTable />`
```javascript ```javascript
{ {
// General
pageSize: 20,
minRows: 0, // Ensure this many rows are always rendered, regardless of rows on page
// Text
previousText: 'Previous',
nextText: 'Next'
// Classes // Classes
className: '-striped -highlight', // The most top level className for the component className: '-striped -highlight', // The most top level className for the component
tableClassName: '', // ClassName for the `table` element tableClassName: '', // ClassName for the `table` element
theadClassName: '', // ClassName for the `thead` element theadClassName: '', // ClassName for the `thead` element
tbodyClassName: '', // ClassName for the `tbody` element tbodyClassName: '', // ClassName for the `tbody` element
trClassName: '', // ClassName for all `tr` elements trClassName: '', // ClassName for all `tr` elements
trClassCallback: row => null, // A call back to dynamically add classes (via the classnames module) to a row element
paginationClassName: '' // ClassName for `pagination` element paginationClassName: '' // ClassName for `pagination` element
// // Styles
pageSize: 20, style: {}, // Main style object for the component
minRows: 0, // Ensure this many rows are always rendered, regardless of rows on page tableStyle: {}, // style object for the `table` component
// Global Column Defaults theadStyle: {}, // style object for the `thead` component
column: { // default properties for every column's model tbodyStyle: {}, // style object for the `tbody` component
sortable: true, trStyle: {}, // style object for the `tr` component
show: true trStyleCallback: row => {}, // A call back to dynamically add styles to a row element
}, thStyle: {}, // style object for the `th` component
// Text tdStyle: {}, // style object for the `td` component
previousText: 'Previous', paginationStyle: {}, // style object for the `paginination` component
nextText: 'Next'
} }
``` ```
@@ -130,23 +138,31 @@ Every React-Table instance requires a `columns` prop, which is an array of objec
```javascript ```javascript
[{ [{
// Required // General
header: 'Header Name' or JSX eg. ({data, column}) => <div>Header Name</div>,
accessor: 'propertyName' or Accessor eg. (row) => row.propertyName, accessor: 'propertyName' or Accessor eg. (row) => row.propertyName,
id: 'myProperty', // Conditional - A unique ID is required if the accessor is not a string or if you would like to override the column name used in server-side calls
// A unique ID is required if the accessor is not a string or if you would like to override the column name used in server-side calls
id: 'myProperty',
// Optional
className: '', // Set the classname of the `th/td` element of the column
innerClassName: '', // Set the classname of the `.th-inner/.td-inner` element of the column
columns: [...] // See Header Groups section below
render: JSX eg. ({row, value, index, viewIndex}) => <span>{value}</span>, // Provide a JSX element or stateless function to render whatever you want as the column's cell with access to the entire row
sortable: true, sortable: true,
sort: 'asc' or 'desc', sort: 'asc' or 'desc',
show: true, show: true,
width: Number, // Locks the column width to this amount
minWidth: Number // Allows the column to flex above this minimum amount minWidth: Number // Allows the column to flex above this minimum amount
// Cell Options
className: '', // Set the classname of the `td` element of the column
style: {}, // Set the style of the `td` element of the column
innerClassName: '', // Set the classname of the `.-td-inner` element of the column
innerStyle: {}, // Set the style of the `.-td-inner` element of the column
render: JSX eg. ({row, value, index, viewIndex}) => <span>{value}</span>, // Provide a JSX element or stateless function to render whatever you want as the column's cell with access to the entire row
// Header & HeaderGroup Options
header: 'Header Name' or JSX eg. ({data, column}) => <div>Header Name</div>,
headerClassName: '', // Set the classname of the `th` element of the column
headerStyle: {}, // Set the style of the `th` element of the column
headerInnerClassName: '', // Set the classname of the `.-th-inner` element of the column
headerInnerStyle: {}, // Set the style of the `.th-inner` element of the column
// Header Groups only
columns: [...] // See Header Groups section below
}] }]
``` ```
+126 -47
View File
File diff suppressed because one or more lines are too long
+104 -38
View File
File diff suppressed because one or more lines are too long
+9 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "react-table", "name": "react-table",
"version": "2.1.3", "version": "2.2.2",
"description": "A fast, lightweight, opinionated table and datagrid built on React", "description": "A fast, lightweight, opinionated table and datagrid built on React",
"license": "MIT", "license": "MIT",
"homepage": "https://github.com/tannerlinsley/react-table#readme", "homepage": "https://github.com/tannerlinsley/react-table#readme",
@@ -15,13 +15,20 @@
"datagrid" "datagrid"
], ],
"main": "lib/index.js", "main": "lib/index.js",
"files": [
"lib/",
"react-table.js",
"react-table.css",
"media/*.png"
],
"scripts": { "scripts": {
"build:node": "babel src --out-dir lib --source-maps inline", "build:node": "babel src --out-dir lib --source-maps inline",
"build:css": "rm -rf react-table.css && stylus src/index.styl --use ./node_modules/nib/lib/nib.js --compress -o react-table.css", "build:css": "rm -rf react-table.css && stylus src/index.styl --use ./node_modules/nib/lib/nib.js --compress -o react-table.css",
"watch": "onchange 'src/**' -i -- npm-run-all build:*", "watch": "onchange 'src/**' -i -- npm-run-all build:*",
"test": "standard", "test": "standard",
"umd": "rm -rf react-table.js && browserify lib/index.js -s reactTable -x react -t babelify -g uglifyify -o react-table.js", "umd": "rm -rf react-table.js && browserify lib/index.js -s reactTable -x react -t babelify -g uglifyify -o react-table.js",
"prepublish": "npm-run-all build:* && npm run umd" "prepublish": "npm-run-all build:* && npm run umd",
"postpublish": "git push --tags"
}, },
"dependencies": { "dependencies": {
"classnames": "^2.2.5" "classnames": "^2.2.5"
+1 -1
View File
File diff suppressed because one or more lines are too long
+100 -34
View File
@@ -22,14 +22,36 @@ export const ReactTableDefaults = {
theadClassName: '', theadClassName: '',
tbodyClassName: '', tbodyClassName: '',
trClassName: '', trClassName: '',
trClassCallback: d => null,
thClassName: '',
thGroupClassName: '',
tdClassName: '',
paginationClassName: '', paginationClassName: '',
// Styles
style: {},
tableStyle: {},
theadStyle: {},
tbodyStyle: {},
trStyle: {},
trStyleCallback: d => {},
thStyle: {},
tdStyle: {},
paginationStyle: {},
// //
pageSize: 20, pageSize: 20,
minRows: 0, minRows: 0,
// Global Column Defaults // Global Column Defaults
column: { column: {
sortable: true, sortable: true,
show: true show: true,
className: '',
style: {},
innerClassName: '',
innerStyle: {},
headerClassName: '',
headerStyle: {},
headerInnerClassName: '',
headerInnerStyle: {}
}, },
// Text // Text
previousText: 'Previous', previousText: 'Previous',
@@ -255,19 +277,35 @@ export default React.createClass({
const NextComponent = this.props.nextComponent || defaultButton const NextComponent = this.props.nextComponent || defaultButton
return ( return (
<div className={classnames(this.props.className, 'ReactTable')}> <div
<TableComponent className={classnames(this.props.tableClassName)}> className={classnames(this.props.className, 'ReactTable')}
style={this.props.style}
>
<TableComponent
className={classnames(this.props.tableClassName)}
style={this.props.tableStyle}
>
{this.hasHeaderGroups && ( {this.hasHeaderGroups && (
<TheadComponent className={classnames(this.props.theadClassName, '-headerGroups')}> <TheadComponent
<TrComponent className={this.props.trClassName}> className={classnames(this.props.theadGroupClassName, '-headerGroups')}
style={this.props.theadStyle}
>
<TrComponent
className={this.props.trClassName}
style={this.props.trStyle}
>
{this.headerGroups.map((column, i) => { {this.headerGroups.map((column, i) => {
return ( return (
<ThComponent <ThComponent
key={i} key={i}
className={classnames(column.className)} colSpan={column.columns.length}
colSpan={column.columns.length}> className={classnames(this.props.thClassname, column.headerClassName)}
style={Object.assign({}, this.props.thStyle, column.headerStyle)}
>
<div <div
className={classnames(column.innerClassName, '-th-inner')}> className={classnames(column.headerInnerClassName, '-th-inner')}
style={Object.assign({}, this.props.thInnerStyle, column.headerInnerStyle)}
>
{typeof column.header === 'function' ? ( {typeof column.header === 'function' ? (
<column.header <column.header
data={this.props.data} data={this.props.data}
@@ -281,8 +319,14 @@ export default React.createClass({
</TrComponent> </TrComponent>
</TheadComponent> </TheadComponent>
)} )}
<TheadComponent className={classnames(this.props.theadClassName)}> <TheadComponent
<TrComponent className={this.props.trClassName}> className={classnames(this.props.theadClassName)}
style={this.props.theadStyle}
>
<TrComponent
className={this.props.trClassName}
style={this.props.trStyle}
>
{this.decoratedColumns.map((column, i) => { {this.decoratedColumns.map((column, i) => {
const sort = this.state.sorting.find(d => d.id === column.id) const sort = this.state.sorting.find(d => d.id === column.id)
const show = typeof column.show === 'function' ? column.show() : column.show const show = typeof column.show === 'function' ? column.show() : column.show
@@ -290,22 +334,25 @@ export default React.createClass({
<ThComponent <ThComponent
key={i} key={i}
className={classnames( className={classnames(
column.className, this.props.thClassname,
column.headerClassName,
sort ? (sort.asc ? '-sort-asc' : '-sort-desc') : '', sort ? (sort.asc ? '-sort-asc' : '-sort-desc') : '',
{ {
'-cursor-pointer': column.sortable, '-cursor-pointer': column.sortable,
'-hidden': !show '-hidden': !show
} }
)} )}
style={Object.assign({}, this.props.thStyle, column.headerStyle)}
onClick={(e) => { onClick={(e) => {
column.sortable && this.sortColumn(column, e.shiftKey) column.sortable && this.sortColumn(column, e.shiftKey)
}}> }}
>
<div <div
className={classnames(column.innerClassName, '-th-inner')} className={classnames(column.headerInnerClassName, '-th-inner')}
style={{ style={Object.assign({}, column.headerInnerStyle, {
width: column.width + 'px',
minWidth: column.minWidth + 'px' minWidth: column.minWidth + 'px'
}}> })}
>
{typeof column.header === 'function' ? ( {typeof column.header === 'function' ? (
<column.header <column.header
data={this.props.data} data={this.props.data}
@@ -318,31 +365,41 @@ export default React.createClass({
})} })}
</TrComponent> </TrComponent>
</TheadComponent> </TheadComponent>
<TbodyComponent className={classnames(this.props.tbodyClassName)}> <TbodyComponent
className={classnames(this.props.tbodyClassName)}
style={this.props.tbodyStyle}
>
{pageRows.map((row, i) => { {pageRows.map((row, i) => {
const rowInfo = {
row: row.__original,
index: row.__index,
viewIndex: i
}
return ( return (
<TrComponent <TrComponent
className={classnames(this.props.trClassName)} key={i}
key={i}> className={classnames(this.props.trClassName, this.props.trClassCallback(rowInfo))}
style={Object.assign({}, this.props.trStyle, this.props.trStyleCallback(rowInfo))}
>
{this.decoratedColumns.map((column, i2) => { {this.decoratedColumns.map((column, i2) => {
const Cell = column.render const Cell = column.render
const show = typeof column.show === 'function' ? column.show() : column.show const show = typeof column.show === 'function' ? column.show() : column.show
return ( return (
<TdComponent <TdComponent
key={i2}
className={classnames(column.className, {hidden: !show})} className={classnames(column.className, {hidden: !show})}
key={i2}> style={Object.assign({}, this.props.tdStyle, column.style)}
>
<div <div
className={classnames(column.innerClassName, '-td-inner')} className={classnames(column.innerClassName, '-td-inner')}
style={{ style={Object.assign({}, column.innerStyle, {
width: column.width + 'px',
minWidth: column.minWidth + 'px' minWidth: column.minWidth + 'px'
}}> })}
>
{typeof Cell === 'function' ? ( {typeof Cell === 'function' ? (
<Cell <Cell
value={row[column.id]} value={row[column.id]}
row={row.__original} {...rowInfo}
index={row.__index}
viewIndex={i}
/> />
) : typeof Cell !== 'undefined' ? Cell ) : typeof Cell !== 'undefined' ? Cell
: row[column.id]} : row[column.id]}
@@ -356,20 +413,24 @@ export default React.createClass({
{padRows.map((row, i) => { {padRows.map((row, i) => {
return ( return (
<TrComponent <TrComponent
key={i}
className={classnames(this.props.trClassName, '-padRow')} className={classnames(this.props.trClassName, '-padRow')}
key={i}> style={this.props.trStyle}
>
{this.decoratedColumns.map((column, i2) => { {this.decoratedColumns.map((column, i2) => {
const show = typeof column.show === 'function' ? column.show() : column.show const show = typeof column.show === 'function' ? column.show() : column.show
return ( return (
<TdComponent <TdComponent
key={i2}
className={classnames(column.className, {hidden: !show})} className={classnames(column.className, {hidden: !show})}
key={i2}> style={Object.assign({}, this.props.tdStyle, column.style)}
>
<div <div
className={classnames(column.innerClassName, '-td-inner')} className={classnames(column.innerClassName, '-td-inner')}
style={{ style={Object.assign({}, column.innerStyle, {
width: column.width + 'px',
minWidth: column.minWidth + 'px' minWidth: column.minWidth + 'px'
}}>&nbsp;</div> })}
>&nbsp;</div>
</TdComponent> </TdComponent>
) )
})} })}
@@ -379,11 +440,15 @@ export default React.createClass({
</TbodyComponent> </TbodyComponent>
</TableComponent> </TableComponent>
{pagesLength > 1 && ( {pagesLength > 1 && (
<div className={classnames(this.props.paginationClassName, '-pagination')}> <div
className={classnames(this.props.paginationClassName, '-pagination')}
style={this.props.paginationStyle}
>
<div className='-left'> <div className='-left'>
<PreviousComponent <PreviousComponent
onClick={canPrevious && ((e) => this.previousPage(e))} onClick={canPrevious && ((e) => this.previousPage(e))}
disabled={!canPrevious}> disabled={!canPrevious}
>
{this.props.previousText} {this.props.previousText}
</PreviousComponent> </PreviousComponent>
</div> </div>
@@ -393,7 +458,8 @@ export default React.createClass({
<div className='-right'> <div className='-right'>
<NextComponent <NextComponent
onClick={canNext && ((e) => this.nextPage(e))} onClick={canNext && ((e) => this.nextPage(e))}
disabled={!canNext}> disabled={!canNext}
>
{this.props.nextText} {this.props.nextText}
</NextComponent> </NextComponent>
</div> </div>