material-ui
Version:
Material Design UI components built with React
98 lines (79 loc) • 2.07 kB
JSX
let React = require('react');
let StylePropable = require('../mixins/style-propable');
let TableRowColumn = React.createClass({
mixins: [StylePropable],
contextTypes: {
muiTheme: React.PropTypes.object,
},
propTypes: {
columnNumber: React.PropTypes.number.isRequired,
onClick: React.PropTypes.func,
onHover: React.PropTypes.func,
onHoverExit: React.PropTypes.func,
hoverable: React.PropTypes.bool,
},
getDefaultProps() {
return {
hoverable: false,
};
},
getInitialState() {
return {
hovered: false,
};
},
getTheme() {
return this.context.muiTheme.component.tableRowColumn;
},
getStyles() {
let theme = this.getTheme();
let styles = {
paddingLeft: theme.spacing,
paddingRight: theme.spacing,
height: theme.height,
textAlign: 'left',
fontSize: 13,
overflow: 'hidden',
whiteSpace: 'nowrap',
textOverflow: 'ellipsis',
};
if (React.Children.count(this.props.children) === 1 && !isNaN(this.props.children)) {
styles.textAlign = 'right';
}
return styles;
},
render() {
let className = 'mui-table-row-column';
let styles = this.getStyles();
let handlers = {
onClick: this._onClick,
onMouseOver: this._onMouseOver,
onMouseOut: this._onMouseOut,
};
return (
<td
key={this.props.key}
className={className}
style={this.mergeAndPrefix(styles, this.props.style)}
{...handlers}>
{this.props.children}
</td>
);
},
_onClick(e) {
if (this.props.onClick) this.props.onClick(e, this.props.columnNumber);
},
_onMouseOver(e) {
if (this.props.hoverable) {
this.setState({hovered: true});
if (this.props.onHover) this.props.onHover(e, this.props.columnNumber);
}
},
_onMouseOut(e) {
if (this.props.hoverable) {
this.setState({hovered: false});
if (this.props.onHoverExit) this.props.onHoverExit(e, this.props.columnNumber);
}
},
});
module.exports = TableRowColumn;