import './MeasurementTable.styl'; import React, { Component } from 'react'; import { withTranslation } from '../../utils/LanguageProvider'; import { Icon } from './../../elements/Icon'; import { MeasurementTableItem } from './MeasurementTableItem.js'; import { OverlayTrigger } from './../overlayTrigger'; import PropTypes from 'prop-types'; import { ScrollableArea } from './../../ScrollableArea/ScrollableArea.js'; import { TableList } from './../tableList'; import { Tooltip } from './../tooltip'; class MeasurementTable extends Component { static propTypes = { measurementCollection: PropTypes.array.isRequired, timepoints: PropTypes.array.isRequired, overallWarnings: PropTypes.object.isRequired, readOnly: PropTypes.bool, onItemClick: PropTypes.func, onRelabelClick: PropTypes.func, onDeleteClick: PropTypes.func, onEditDescriptionClick: PropTypes.func, selectedMeasurementNumber: PropTypes.number, overwallWarnings: PropTypes.object, t: PropTypes.func, }; static defaultProps = { overallWarnings: { warningList: [], }, readOnly: false, }; state = { selectedKey: null, }; render() { const hasOverallWarnings = this.props.overallWarnings.warningList.length > 0; return (
{hasOverallWarnings && (
{this.props.t('Criteria nonconformities')}
{this.getWarningContent()}
} >
)} {this.getTimepointsHeader()}
{this.getMeasurementsGroups()}
); } getMeasurementsGroups = () => { return this.props.measurementCollection.map((measureGroup, index) => { return ( {this.getMeasurements(measureGroup)} ); }); }; getMeasurements = measureGroup => { const selectedKey = this.props.selectedMeasurementNumber ? this.props.selectedMeasurementNumber : this.state.selectedKey; return measureGroup.measurements.map((measurement, index) => { const key = measurement.measurementNumber; const itemIndex = measurement.itemNumber || index + 1; const itemClass = selectedKey === key && !this.props.readOnly ? 'selected' : ''; return ( ); }); }; onItemClick = (event, measurementData) => { if (this.props.readOnly) return; this.setState({ selectedKey: measurementData.measurementNumber, }); if (this.props.onItemClick) { this.props.onItemClick(event, measurementData); } }; getCustomHeader = measureGroup => { return (
{this.props.t(measureGroup.groupName)}
{measureGroup.maxMeasurements && (
{this.props.t('MAX')} {measureGroup.maxMeasurements}
)}
{measureGroup.measurements.length}
); }; getTimepointsHeader = () => { return this.props.timepoints.map((timepoint, index) => { return (
{this.props.t(timepoint.key)}
{timepoint.date}
); }); }; getWarningContent = () => { const { warningList = '' } = this.props.overwallWarnings; if (Array.isArray(warningList)) { const listedWarnings = warningList.map((warn, index) => { return
  • {warn}
  • ; }); return
      {listedWarnings}
    ; } else { return {warningList}; } }; } const connectedComponent = withTranslation(['MeasurementTable', 'Common'])( MeasurementTable ); export { connectedComponent as MeasurementTable }; export default connectedComponent;