UNPKG

react-cm-ui

Version:
209 lines (198 loc) 6.23 kB
import { isNumber, } from 'lodash'; import React from 'react'; import ClassNames from 'classnames'; import PropTypes from 'prop-types'; import Utils from '../../utils/utils'; const columnNumberEnums = [ 'auto', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ]; const propTypes = { active: PropTypes.bool, children: PropTypes.node, className: PropTypes.string, collapsing: PropTypes.bool, desktop: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), desktopLarge: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), /** * Deprecated prop. Please use `disabled` instead. */ disable: PropTypes.bool, /** * A TableCell can be disabled. */ disabled: PropTypes.bool, fontSize: PropTypes.oneOf([ 'large', 'medium', 'small', 'xsmall', ]), id: PropTypes.string, laptop: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), mobile: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), mobileLarge: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), mobileMedium: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), selectable: PropTypes.bool, singleLine: PropTypes.bool, sticky: PropTypes.bool, style: PropTypes.shape({}), tablet: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), textAlign: PropTypes.oneOf([ 'center', 'left', 'right', ]), verticalAlign: PropTypes.oneOf([ 'bottom', 'middle', 'top', ]), width: PropTypes.oneOfType([ PropTypes.bool, PropTypes.oneOf(columnNumberEnums), ]), }; const defaultProps = { active: false, children: null, className: null, collapsing: false, desktop: null, desktopLarge: null, disable: false, disabled: false, fontSize: null, id: null, laptop: null, mobile: null, mobileLarge: null, mobileMedium: null, selectable: false, singleLine: false, sticky: false, style: null, tablet: null, textAlign: null, verticalAlign: null, width: null, }; function TableCell(props) { const { active, children, className, collapsing, desktop, desktopLarge, disable, disabled, fontSize, id, mobile, mobileMedium, mobileLarge, laptop, selectable, singleLine, sticky, style, tablet, textAlign, verticalAlign, width, } = props; const cellPrefix = 'table-cell'; const containerClasses = ClassNames( 'table-cell', { 'table-cell-active': active, 'table-cell-collapsing': collapsing, 'table-cell-disabled': disable || disabled, 'table-cell-font-size-large': fontSize === 'large', 'table-cell-font-size-medium': fontSize === 'medium', 'table-cell-font-size-small': fontSize === 'small', 'table-cell-font-size-xsmall': fontSize === 'xsmall', 'table-cell-selectable': selectable, 'table-cell-single-line': singleLine, 'table-cell-text-align-center': textAlign === 'center', 'table-cell-text-align-left': textAlign === 'left', 'table-cell-text-align-right': textAlign === 'right', 'table-cell-vertical-align-bottom': verticalAlign === 'bottom', 'table-cell-vertical-align-middle': verticalAlign === 'middle', 'table-cell-vertical-align-top': verticalAlign === 'top', 'table-cell-sticky': sticky, [`${cellPrefix}-${Utils.numberToWord(width)}`]: isNumber(width), [`${cellPrefix}-show`]: width === true || width === 'auto', [`${cellPrefix}-hide`]: width === false, [`${cellPrefix}-mobile-${Utils.numberToWord(mobile)}`]: isNumber(mobile), [`${cellPrefix}-mobile-show`]: mobile === true || mobile === 'auto', [`${cellPrefix}-mobile-hide`]: mobile === false, [`${cellPrefix}-mobile-medium-${Utils.numberToWord(mobileMedium)}`]: isNumber(mobileMedium), [`${cellPrefix}-mobile-medium-show`]: mobileMedium === true || mobileMedium === 'auto', [`${cellPrefix}-mobile-medium-hide`]: mobileMedium === false, [`${cellPrefix}-mobile-large-${Utils.numberToWord(mobileLarge)}`]: isNumber(mobileLarge), [`${cellPrefix}-mobile-large-show`]: mobileLarge === true || mobileLarge === 'auto', [`${cellPrefix}-mobile-large-hide`]: mobileLarge === false, [`${cellPrefix}-tablet-${Utils.numberToWord(tablet)}`]: isNumber(tablet), [`${cellPrefix}-tablet-show`]: tablet === true || tablet === 'auto', [`${cellPrefix}-tablet-hide`]: tablet === false, [`${cellPrefix}-laptop-${Utils.numberToWord(laptop)}`]: isNumber(laptop), [`${cellPrefix}-laptop-show`]: laptop === true || laptop === 'auto', [`${cellPrefix}-laptop-hide`]: laptop === false, [`${cellPrefix}-desktop-${Utils.numberToWord(desktop)}`]: isNumber(desktop), [`${cellPrefix}-desktop-show`]: desktop === true || desktop === 'auto', [`${cellPrefix}-desktop-hide`]: desktop === false, [`${cellPrefix}-desktop-${Utils.numberToWord(desktopLarge)}`]: isNumber(desktopLarge), [`${cellPrefix}-desktop-show`]: desktopLarge === true || desktopLarge === 'auto', [`${cellPrefix}-desktop-hide`]: desktopLarge === false, }, className, ); return ( <td className={containerClasses} id={id} style={style} > {children} </td> ); } TableCell.propTypes = propTypes; TableCell.defaultProps = defaultProps; export default TableCell;