LT-92: Integrating RECIST and measurements table

This commit is contained in:
Leonardo Campos authored and Bruno Alves de Faria committed 2017-01-18 11:01:52 -02:00
1 parent 7ef0dd812b
commit 1efe611497
7 files changed
+47 -16

No files matched your search

@@ -1,16 +1,16 @@
<template name="measurementTableRow">
<div class="measurementTableRow {{#unless rowItem.location}}warning{{/unless}}{{#if responseStatus}}response-status{{/if}}" data-measurementid="{{_id}}">
<div class="measurementTableRow {{#if hasWarnings}}warning{{/if}}{{#if responseStatus}}response-status{{/if}}" data-measurementid="{{_id}}">
<div class='measurementRowSidebar'>
<div class="measurementNumber">
{{rowItem.measurementNumber}}
</div>
{{#unless rowItem.location}}
{{#if hasWarnings}}
<div class="warning-icon">
<svg>
<use xlink:href={{absoluteUrl "packages/ohif_viewerbase/assets/icons.svg#icon-ui-warning"}}></use>
</svg>
</div>
{{/unless}}
{{/if}}
{{#if rowItem.responseStatus}}
<div class="response-status-icon">
{{rowItem.responseStatus}}
@@ -22,6 +22,26 @@ const keys = {
DELETE: 46
};
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;
}
return measurement.measurementNumber === parseInt(this.rowItem.measurementNumber, 10);
});
return !!measurement;
});
return !!foundNonConformity;
}
});
Template.measurementTableRow.events({
'click .measurementRowSidebar'(event, instance) {
const $row = instance.$('.measurementTableRow');
@@ -9,7 +9,8 @@
measurements=collection
currentTimepointId=currentTimepointId
timepointApi=timepointApi
measurementApi=measurementApi}}
measurementApi=measurementApi
conformanceCriteria=conformanceCriteria}}
{{#each entry in collection}}
{{>measurementTableRow (clone this rowItem=entry)}}
@@ -8,7 +8,7 @@ class ConformanceCriteria {
constructor(measurementApi, timepointApi) {
this.measurementApi = measurementApi;
this.timepointApi = timepointApi;
this.results = [];
this.nonConformities = new ReactiveVar();
const validate = _.debounce(trialCriteriaType => {
this.validate(trialCriteriaType);
@@ -32,23 +32,23 @@ class ConformanceCriteria {
const resultBoth = this.validateTimepoint('both', trialCriteriaType, mergedData);
const resultBaseline = this.validateTimepoint('baseline', trialCriteriaType, baselineData);
const resultFollowup = this.validateTimepoint('followup', trialCriteriaType, followupData);
const results = resultBaseline.concat(resultFollowup).concat(resultBoth);
const nonConformities = resultBaseline.concat(resultFollowup).concat(resultBoth);
console.warn('>>>> validate', results);
this.nonConformities.set(nonConformities);
return results;
return nonConformities;
}
validateTimepoint(timepointId, trialCriteriaType, data) {
const evaluators = this.getEvaluators(timepointId, trialCriteriaType);
let results = [];
let nonConformities = [];
evaluators.forEach(evaluator => {
const result = evaluator.evaluate(data);
results = results.concat(result);
nonConformities = nonConformities.concat(result);
});
return results;
return nonConformities;
}
getEvaluators(timepointId, trialCriteriaType) {
@@ -25,6 +25,10 @@ export class CriteriaEvaluator {
}
getCriteriaValidator() {
if(CriteriaEvaluator.criteriaValidator) {
return CriteriaEvaluator.criteriaValidator;
}
const schema = {
properties: {},
definitions: {}
@@ -50,18 +54,18 @@ export class CriteriaEvaluator {
}
});
return new Ajv().compile(schema);
return CriteriaEvaluator.criteriaValidator = new Ajv().compile(schema);
}
evaluate(data) {
const nonconformity = [];
const nonConformities = [];
this.criteria.forEach(criterion => {
const criterionResult = criterion.evaluate(data);
if (!criterionResult.passed) {
nonconformity.push(criterionResult);
nonConformities.push(criterionResult);
}
});
return nonconformity;
return nonConformities;
}
}
@@ -6,8 +6,11 @@ export class BaseCriterion {
generateResponse(message, measurements) {
const passed = !message;
const isGlobal = !measurements || !measurements.length;
return {
passed,
isGlobal,
message,
measurements
};