basic/dataTable/TableColumn.js
- /**
- * Created by pawelposel on 17/11/2016.
- */
-
- import PropTypes from 'prop-types';
-
- import React, { Component } from 'react';
-
- /**
- * Defines table columns, renders <th> elements.
- *
- * ## Access
- * `Stage.Basic.DataTable.Column`
- *
- * ## Usage
- *
- * ```
- * <DataTable.Column label="Name" name="id" width="40%"/>
- * ```
- */
- export default class TableColumn extends Component {
- /**
- * @property {any} label - column label
- * @property {string} [name] - data property, enables column sorting
- * @property {string} [width] - width style
- * @property {boolean} [show=true] - if false then column is hidden
- * @property {boolean} [centerAligned=false] - if true then column label is center aligned
- */
- static propTypes = {
- label: PropTypes.any,
- name: PropTypes.string,
- width: PropTypes.string,
- show: PropTypes.bool,
- centerAligned: PropTypes.bool
- };
-
- static defaultProps = {
- width: '',
- show: true,
- centerAligned: false
- };
-
- static contextTypes = {
- getSortColumn: PropTypes.func.isRequired,
- isSortAscending: PropTypes.func.isRequired,
- sortColumn: PropTypes.func.isRequired
- };
-
- _onClick() {
- if (this.props.name) {
- this.context.sortColumn(this.props.name);
- }
- }
-
- _className() {
- let cssClass = this.props.name ? '' : 'disabled';
-
- if (this.context.getSortColumn() === this.props.name) {
- cssClass += ' sorted';
- cssClass += this.context.isSortAscending() ? ' ascending' : ' descending ';
- }
-
- if (this.props.centerAligned) {
- cssClass += ' center aligned';
- }
-
- return cssClass;
- }
-
- render() {
- if (!this.props.show) {
- return null;
- }
-
- return (
- <th
- className={this._className()}
- style={this.props.width ? { width: this.props.width } : {}}
- onClick={this._onClick.bind(this)}
- >
- {this.props.label}
- </th>
- );
- }
- }