LT-92: Adding max targets label again

This commit is contained in:
Bruno Alves de Faria 2017-01-18 10:59:09 -02:00
parent efa18aeb1d
commit 5f338c6711
4 changed files with 30 additions and 53 deletions

View File

@ -9,7 +9,7 @@
{{/if}}
<div class="type">{{measurementType.name}}</div>
<div class="max {{#if gt numberOfMeasurements maxNumMeasurements}}warning{{/if}}">
{{#if maxNumMeasurements}}
{{#if and maxNumMeasurements (eq measurementType.id 'targets')}}
<p class="maxNumMeasurements">Max {{maxNumMeasurements}}</p>
{{/if}}
</div>

View File

@ -1,48 +1,5 @@
Template.measurementTableHeaderRow.onCreated(() => {
const instance = Template.instance();
instance.maxNumMeasurements = new ReactiveVar();
if (!instance.data.timepointApi) {
return;
}
// Get the current timepoint
const current = instance.data.timepointApi.current();
// Stop here if no timepoint was found
if (!current) {
console.warn('No current timepoint found?');
return;
}
const timepointType = current.timepointType;
// TODO: Check if we have criteria where maximum limits are applied to
// Non-Targets and/or New Lesions
if (timepointType === 'baseline' && instance.data.id === 'target') {
instance.autorun(() => {
// Identify which Trial Conformance Criteria are currently being used
// Note that there may be more than one.
const criteriaTypes = TrialCriteriaTypes.find({
selected: true
}).map(function(criteria) {
return criteria.id;
});
const currentConstraints = OHIF.lesiontracker.getTrialCriteriaConstraints(criteriaTypes);
if (!currentConstraints) {
return;
}
// TODO: Fix Trial Conformance Criteria, it appears that totalNumberOfLesions
// is applied to both Targets and Non-Targets, when it should typically only be
// for Targets
const criteria = currentConstraints[timepointType];
const maxNumMeasurements = criteria.group.totalNumberOfLesions.numericality.lessThanOrEqualTo;
instance.maxNumMeasurements.set(maxNumMeasurements);
});
}
});
import { Template } from 'meteor/templating';
import { OHIF } from 'meteor/ohif:core';
Template.measurementTableHeaderRow.helpers({
numberOfMeasurements() {
@ -50,15 +7,17 @@ Template.measurementTableHeaderRow.helpers({
if (!instance.data.measurements) {
return;
}
return instance.data.measurements.length;
},
maxNumMeasurements() {
const instance = Template.instance();
if (!instance.data.measurements) {
if (!instance.data.conformanceCriteria) {
return;
}
return instance.maxNumMeasurements.get();
return instance.data.conformanceCriteria.maxTargets.get();
},
anyUnmarkedLesionsLeft() {
@ -75,8 +34,8 @@ Template.measurementTableHeaderRow.helpers({
}
const timepointApi = instance.data.timepointApi;
const current = instance.data.timepointApi.current();
const prior = instance.data.timepointApi.prior();
const current = timepointApi.current();
const prior = timepointApi.prior();
if (!prior) {
return true;
}

View File

@ -12,6 +12,7 @@ class ConformanceCriteria {
this.timepointApi = timepointApi;
this.nonconformities = new ReactiveVar();
this.groupedNonConformities = new ReactiveVar();
this.maxTargets = new ReactiveVar(null);
const validate = _.debounce(trialCriteriaType => {
this.validate(trialCriteriaType);
@ -32,6 +33,7 @@ class ConformanceCriteria {
mergedData.targets = mergedData.targets.concat(followupData.targets);
mergedData.nonTargets = mergedData.nonTargets.concat(followupData.nonTargets);
this.maxTargets.set(null);
const resultBoth = this.validateTimepoint('both', trialCriteriaType, mergedData);
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
@ -86,6 +88,11 @@ class ConformanceCriteria {
let nonconformities = [];
evaluators.forEach(evaluator => {
const maxTargets = evaluator.getMaxTargets();
if (maxTargets) {
this.maxTargets.set(maxTargets);
}
const result = evaluator.evaluate(data);
nonconformities = nonconformities.concat(result);
});

View File

@ -24,8 +24,18 @@ export class CriteriaEvaluator {
});
}
getMaxTargets() {
let result;
_.each(this.criteria, criterion => {
if (criterion instanceof Criteria.MaxTargetsCriterion) {
result = criterion.options.limit;
}
});
return result;
}
getCriteriaValidator() {
if(CriteriaEvaluator.criteriaValidator) {
if (CriteriaEvaluator.criteriaValidator) {
return CriteriaEvaluator.criteriaValidator;
}
@ -53,8 +63,9 @@ export class CriteriaEvaluator {
};
}
});
return CriteriaEvaluator.criteriaValidator = new Ajv().compile(schema);
CriteriaEvaluator.criteriaValidator = new Ajv().compile(schema);
return CriteriaEvaluator.criteriaValidator;
}
evaluate(data) {