Home Reference Source Repository

src/table/SelectorColumn.js

/**
 * @file TableSelectorColumn
 * @author leon([email protected])
 */

import React, {PropTypes} from 'react';

import Icon from '../Icon';
import Column from './Column';

export default function TableSelectorColumn(props) {
    return null;
}

TableSelectorColumn.displayName = 'TableSelectorColumn';

TableSelectorColumn.icons = {
    radio: {
        checked: 'radio-button-checked',
        unchecked: 'radio-button-unchecked'
    },
    checkbox: {
        checked: 'check-box',
        unchecked: 'check-box-outline-blank'
    }
};

TableSelectorColumn.getIcon = function (multiple, selected) {
    let icons = TableSelectorColumn.icons[multiple ? 'checkbox' : 'radio'];
    return icons[selected ? 'checked' : 'unchecked'];
};

TableSelectorColumn.cellRenderer = function (props) {


    let {part, columnData, rowIndex} = props;
    let {multiple} = columnData;

    if (!multiple && part !== 'body') {
        return null;
    }

    let isSelected = part === 'body'
        ? columnData.isSelected(rowIndex)
        : columnData.isAllSelected();

    return (
        <Icon
            onClick={TableSelectorColumn.onCellClick.bind(null, props)}
            icon={TableSelectorColumn.getIcon(multiple, isSelected)}
            states={{selected: isSelected}}
            variants={['table-selector']} />
    );

};

TableSelectorColumn.onCellClick = function (props) {

    let {part, rowIndex, columnData} = props;
    let handler = columnData[part === 'body' ? 'onSelect' : 'onSelectAll'];

    if (typeof handler === 'function') {
        handler(rowIndex);
    }

};

TableSelectorColumn.propTypes = {

    ...Column.propTypes,

    isSelected: PropTypes.func.isRequired,
    isAllSelected: PropTypes.func.isRequired,
    onSelect: PropTypes.func,
    onSelectAll: PropTypes.func,
    name: PropTypes.string

};

/**
 * 最关键的东西在这里
 */
TableSelectorColumn.defaultProps = {
    ...Column.defaultProps,
    width: 66,
    cellRenderer: TableSelectorColumn.cellRenderer,
    headerRenderer: TableSelectorColumn.headerRenderer,
    footerRenderer: TableSelectorColumn.footerRenderer,
    align: 'center',
    dataKey: '',
    multiple: false
};

TableSelectorColumn._TABLE_COMPONENT_ = 'COLUMN';