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({
|
Template.measurementTableRow.helpers({
|
||||||
hasWarnings() {
|
hasWarnings() {
|
||||||
const toolsGroupsMap = this.measurementApi.toolsGroupsMap;
|
const toolsGroupsMap = this.measurementApi.toolsGroupsMap;
|
||||||
const nonConformities = this.conformanceCriteria.nonConformities.get();
|
const measurementTypeId = this.rowItem.measurementTypeId;
|
||||||
const foundNonConformity = _.find(nonConformities, nonConformity => {
|
const measurementNumber = this.rowItem.measurementNumber;
|
||||||
const measurement = _.find(nonConformity.measurements, measurement => {
|
const groupedNonConformities = this.conformanceCriteria.groupedNonConformities.get() || {};
|
||||||
if(toolsGroupsMap[measurement.toolType] !== this.rowItem.measurementTypeId) {
|
const nonConformitiesByMeasurementTypeId = groupedNonConformities[measurementTypeId] || {};
|
||||||
return false;
|
const nonConformitiesByMeasurementNumbers = nonConformitiesByMeasurementTypeId.measurementNumbers || {};
|
||||||
}
|
const nonConformitiesByMeasurementNumber = nonConformitiesByMeasurementNumbers[measurementNumber] || {};
|
||||||
|
|
||||||
return measurement.measurementNumber === parseInt(this.rowItem.measurementNumber, 10);
|
return nonConformitiesByMeasurementNumber.messages && nonConformitiesByMeasurementNumber.messages.length;
|
||||||
});
|
|
||||||
|
|
||||||
return !!measurement;
|
|
||||||
});
|
|
||||||
|
|
||||||
return !!foundNonConformity;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ class ConformanceCriteria {
|
|||||||
this.measurementApi = measurementApi;
|
this.measurementApi = measurementApi;
|
||||||
this.timepointApi = timepointApi;
|
this.timepointApi = timepointApi;
|
||||||
this.nonConformities = new ReactiveVar();
|
this.nonConformities = new ReactiveVar();
|
||||||
|
this.groupedNonConformities = new ReactiveVar();
|
||||||
|
|
||||||
const validate = _.debounce(trialCriteriaType => {
|
const validate = _.debounce(trialCriteriaType => {
|
||||||
this.validate(trialCriteriaType);
|
this.validate(trialCriteriaType);
|
||||||
@ -33,12 +34,53 @@ class ConformanceCriteria {
|
|||||||
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
|
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
|
||||||
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
|
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
|
||||||
const nonConformities = resultBaseline.concat(resultFollowup).concat(resultBoth);
|
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.nonConformities.set(nonConformities);
|
||||||
|
this.groupedNonConformities.set(groupedNonConformities);
|
||||||
|
|
||||||
return nonConformities;
|
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) {
|
validateTimepoint(timepointId, trialCriteriaType, data) {
|
||||||
const evaluators = this.getEvaluators(timepointId, trialCriteriaType);
|
const evaluators = this.getEvaluators(timepointId, trialCriteriaType);
|
||||||
let nonConformities = [];
|
let nonConformities = [];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user