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;