LT-92: Grouping non-conformities to make it faster to read on measurementTableRow view
This commit is contained in:
parent
1efe611497
commit
65b867d1b0
@ -25,20 +25,14 @@ const keys = {
|
||||
Template.measurementTableRow.helpers({
|
||||
hasWarnings() {
|
||||
const toolsGroupsMap = this.measurementApi.toolsGroupsMap;
|
||||
const nonConformities = this.conformanceCriteria.nonConformities.get();
|
||||
const foundNonConformity = _.find(nonConformities, nonConformity => {
|
||||
const measurement = _.find(nonConformity.measurements, measurement => {
|
||||
if(toolsGroupsMap[measurement.toolType] !== this.rowItem.measurementTypeId) {
|
||||
return false;
|
||||
}
|
||||
const measurementTypeId = this.rowItem.measurementTypeId;
|
||||
const measurementNumber = this.rowItem.measurementNumber;
|
||||
const groupedNonConformities = this.conformanceCriteria.groupedNonConformities.get() || {};
|
||||
const nonConformitiesByMeasurementTypeId = groupedNonConformities[measurementTypeId] || {};
|
||||
const nonConformitiesByMeasurementNumbers = nonConformitiesByMeasurementTypeId.measurementNumbers || {};
|
||||
const nonConformitiesByMeasurementNumber = nonConformitiesByMeasurementNumbers[measurementNumber] || {};
|
||||
|
||||
return measurement.measurementNumber === parseInt(this.rowItem.measurementNumber, 10);
|
||||
});
|
||||
|
||||
return !!measurement;
|
||||
});
|
||||
|
||||
return !!foundNonConformity;
|
||||
return nonConformitiesByMeasurementNumber.messages && nonConformitiesByMeasurementNumber.messages.length;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ class ConformanceCriteria {
|
||||
this.measurementApi = measurementApi;
|
||||
this.timepointApi = timepointApi;
|
||||
this.nonConformities = new ReactiveVar();
|
||||
this.groupedNonConformities = new ReactiveVar();
|
||||
|
||||
const validate = _.debounce(trialCriteriaType => {
|
||||
this.validate(trialCriteriaType);
|
||||
@ -33,12 +34,53 @@ class ConformanceCriteria {
|
||||
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
|
||||
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
|
||||
const nonConformities = resultBaseline.concat(resultFollowup).concat(resultBoth);
|
||||
const groupedNonConformities = this.groupNonConformities(nonConformities);
|
||||
|
||||
// Keep both? Group the data only on viewer/measurementTable views?
|
||||
// Work with not grouped data (worse lookup performance on measurementTableRow)?
|
||||
this.nonConformities.set(nonConformities);
|
||||
this.groupedNonConformities.set(groupedNonConformities);
|
||||
|
||||
return nonConformities;
|
||||
}
|
||||
|
||||
groupNonConformities(nonConformities) {
|
||||
const groups = {};
|
||||
const toolsGroupsMap = this.measurementApi.toolsGroupsMap;
|
||||
|
||||
nonConformities.forEach(nonConformity => {
|
||||
if(nonConformity.isGlobal) {
|
||||
groups.globals = groups.globals || { messages: [] };
|
||||
groups.globals.messages.push(nonConformity.message);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
nonConformity.measurements.forEach(measurement => {
|
||||
const groupName = toolsGroupsMap[measurement.toolType];
|
||||
groups[groupName] = groups[groupName] || { measurementNumbers: {} };
|
||||
|
||||
const group = groups[groupName];
|
||||
const measureNumber = measurement.measurementNumber;
|
||||
let measurementNumbers = group.measurementNumbers[measureNumber];
|
||||
|
||||
if(!measurementNumbers) {
|
||||
measurementNumbers = group.measurementNumbers[measureNumber] = {
|
||||
messages: [],
|
||||
measurements: []
|
||||
}
|
||||
}
|
||||
|
||||
measurementNumbers.messages.push(nonConformity.message);
|
||||
measurementNumbers.measurements.push(measurement);
|
||||
});
|
||||
});
|
||||
|
||||
console.log('>>>>> groups: ', groups);
|
||||
|
||||
return groups;
|
||||
}
|
||||
|
||||
validateTimepoint(timepointId, trialCriteriaType, data) {
|
||||
const evaluators = this.getEvaluators(timepointId, trialCriteriaType);
|
||||
let nonConformities = [];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user