UNPKG

react-cm-ui

Version:
70 lines (61 loc) 2.16 kB
import _ from 'lodash'; import ClassNames from 'classnames'; import PropTypes from 'prop-types'; import React from 'react'; import Header from '../header'; const propTypes = { columns: PropTypes.arrayOf(PropTypes.shape({ style: PropTypes.shape({}), })).isRequired, data: PropTypes.shape({}).isRequired, moduleType: PropTypes.oneOf(['drawer', 'page']).isRequired, }; function DataCardColumn(props) { const { columns, data, moduleType, } = props; const elementClassName = `${moduleType}--data_card_column`; return _.map(columns, (column, index) => { const accessorClasses = ClassNames(`${elementClassName}_accessor`, { 'font-size-medium': column.fontSize === 'medium', 'font-size-small': !column.fontSize || column.fontSize === 'small', 'font-weight-bold': column.fontWeight === 'bold', 'font-weight-normal': !column.fontWeight || column.fontWeight === 'normal', 'font-weight-semibold': column.fontWeight === 'semibold', }); let accessor = null; if (_.isString(column.accessor)) { accessor = _.get(data, column.accessor); } else if (_.isFunction(column.accessor)) { accessor = column.accessor(data); } return ( <div className={elementClassName} key={`${elementClassName}-${index}`} style={{ marginBottom: column.width ? '11px' : null, width: column.width, ...(column.style || {}), }} > {column.header && ( <Header color="static" size="xsmall" style={{ margin: 0 }} > {column.header} </Header> )} <span className={accessorClasses}> {accessor} </span> </div> ); }); } DataCardColumn.propTypes = propTypes; export default DataCardColumn;