UNPKG

fixed-data-table-one.com

Version:

A React table component designed to allow presenting thousands of rows of data.

150 lines (137 loc) 3.73 kB
/** * Copyright Schrodinger, LLC */ "use strict"; const ExampleImage = require('./ExampleImage'); const { Cell } = require('fixed-data-table-2'); const React = require('react'); const ReactTooltip = require('react-tooltip'); class CollapseCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, collapsedRows, callback, ...props} = this.props; return ( <Cell {...props}> <a onClick={() => callback(rowIndex)}> {collapsedRows.has(rowIndex) ? '\u25BC' : '\u25BA'} </a> </Cell> ); } }; module.exports.CollapseCell = CollapseCell; class ColoredTextCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; return ( <Cell {...props}> {this.colorizeText(data.getObjectAt(rowIndex)[columnKey], rowIndex)} </Cell> ); } colorizeText(str, index) { let val, n = 0; return str.split('').map((letter) => { val = index * 70 + n++; let color = 'hsl(' + val + ', 100%, 50%)'; return <span style={{color}} key={val}>{letter}</span>; }); } }; module.exports.ColoredTextCell = ColoredTextCell; class DateCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; return ( <Cell {...props}> {data.getObjectAt(rowIndex)[columnKey].toLocaleString()} </Cell> ); } }; module.exports.DateCell = DateCell; class ImageCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; return ( <ExampleImage src={data.getObjectAt(rowIndex)[columnKey]} /> ); } }; module.exports.ImageCell = ImageCell; class LinkCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; return ( <Cell {...props}> <a href="#">{data.getObjectAt(rowIndex)[columnKey]}</a> </Cell> ); } }; module.exports.LinkCell = LinkCell; class PendingCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, dataVersion, ...props} = this.props; const rowObject = data.getObjectAt(rowIndex); return ( <Cell {...props}> {rowObject ? rowObject[columnKey] : 'pending'} </Cell> ); } }; const PagedCell = ({data, ...props}) => { const dataVersion = data.getDataVersion(); return ( <PendingCell data={data} dataVersion={dataVersion} {...props}> </PendingCell> ); }; module.exports.PagedCell = PagedCell; class RemovableHeaderCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, callback, children, ...props} = this.props; return ( <Cell {...props}> {children} <a style={{float: 'right'}} onClick={() => callback(columnKey)}> {'\u274C'} </a> </Cell> ); } }; module.exports.RemovableHeaderCell = RemovableHeaderCell; class TextCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; return ( <Cell {...props}> {data.getObjectAt(rowIndex)[columnKey]} </Cell> ); } }; module.exports.TextCell = TextCell; class TooltipCell extends React.PureComponent { render() { const {data, rowIndex, columnKey, ...props} = this.props; const value = data.getObjectAt(rowIndex)[columnKey]; return ( <Cell {...props} onMouseEnter={() => { ReactTooltip.show(); }} onMouseLeave={() => { ReactTooltip.hide(); }}> <div ref='valueDiv' data-tip={value}> {value} </div> </Cell> ); } }; module.exports.TooltipCell = TooltipCell;