From be56608208d0e2b2ac166bdbaa4076f381d9e695 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Sun, 6 Nov 2016 21:08:04 +0100 Subject: [PATCH] LT-275: Fix case progress and measurement table tool buttons --- .../client/compatibility/nonTargetTool.js | 4 +- .../components/caseProgress/caseProgress.js | 61 +++++++++++++++---- .../measurementTableHeaderRow.js | 18 +++++- .../measurementTableView.js | 2 +- 4 files changed, 67 insertions(+), 18 deletions(-) diff --git a/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js b/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js index 926286d62..808f132bb 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js @@ -223,9 +223,9 @@ if (config.drawHandles) { cornerstoneTools.drawHandles(context, eventData, data.handles, color); } else if (config.drawHandlesOnHover && data.handles.start.active) { - cornerstoneTools.drawHandles(context, eventData, [ measurement.handles.start ], color); + cornerstoneTools.drawHandles(context, eventData, [ data.handles.start ], color); } else if (config.drawHandlesOnHover && data.handles.end.active) { - cornerstoneTools.drawHandles(context, eventData, [ measurement.handles.end ], color); + cornerstoneTools.drawHandles(context, eventData, [ data.handles.end ], color); } // Draw the text diff --git a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js index 691af986d..80d33527a 100644 --- a/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js +++ b/Packages/ohif-measurements/client/components/caseProgress/caseProgress.js @@ -1,3 +1,6 @@ +import { Template } from 'meteor/templating'; +import { ReactiveVar } from 'meteor/reactive-var'; + Template.caseProgress.onCreated(() => { const instance = Template.instance(); @@ -17,12 +20,8 @@ Template.caseProgress.onRendered(() => { // Get the current timepoint const current = instance.data.timepointApi.current(); - if (!current) { - instance.progressPercent.set(100); - return; - } - - if (!current.timepointId) { + const prior = instance.data.timepointApi.prior(); + if (!current || !prior || !current.timepointId) { instance.progressPercent.set(100); return; } @@ -32,8 +31,47 @@ Template.caseProgress.onRendered(() => { // Retrieve the initial number of targets left to measure at this // follow-up. Note that this is done outside of the reactive function // below so that new lesions don't change the initial target count. - const withPriors = true; - const totalTargets = 10; //instance.data.measurementApi.targets(withPriors).length; + + const config = OHIF.measurements.MeasurementApi.getConfiguration(); + const tools = config.measurementTools; + const toolsToInclude = tools.filter(tool => tool.options && tool.options.includeInCaseProgress); + const toolIds = toolsToInclude.map(tool => tool.id); + const api = instance.data.measurementApi; + + const getNumMeasurementsAtTimepoint = timepointId => { + const filter = { + timepointId: timepointId + }; + + let count = 0; + toolIds.forEach(measurementTypeId => { + count += api.fetch(measurementTypeId, filter).length; + }); + + return count; + }; + + const getNumRemainingBetweenTimepoints = (currentTimepointId, priorTimepointId) => { + const currentFilter = { + timepointId: currentTimepointId + }; + + const priorFilter = { + timepointId: priorTimepointId + }; + + let totalRemaining = 0; + toolIds.forEach(measurementTypeId => { + const numCurrent = api.fetch(measurementTypeId, currentFilter).length; + const numPrior = api.fetch(measurementTypeId, priorFilter).length; + const remaining = Math.max(numPrior - numCurrent, 0); + totalRemaining += remaining; + }); + + return totalRemaining; + }; + + const totalMeasurements = getNumMeasurementsAtTimepoint(prior.timepointId); // If we're currently reviewing a Baseline timepoint, don't do any // progress measurement. @@ -45,15 +83,15 @@ Template.caseProgress.onRendered(() => { instance.autorun(() => { // Obtain the number of Measurements for which the current Timepoint has // no Measurement data - const numRemainingMeasurements = 5; //instance.data.measurementApi.unmarked().length; + const numRemainingMeasurements = getNumRemainingBetweenTimepoints(current.timepointId, prior.timepointId); + const numMeasurementsMade = totalMeasurements - numRemainingMeasurements; // Update the Case Progress text with the remaining measurement count instance.progressText.set(numRemainingMeasurements); // Calculate the Case Progress as a percentage in order to update the // radial progress bar - const numMeasurementsMade = Math.max(totalTargets - numRemainingMeasurements, 0); - const progressPercent = Math.round(100 * numMeasurementsMade / totalTargets); + const progressPercent = Math.min(100, Math.round(100 * numMeasurementsMade / totalMeasurements)); instance.progressPercent.set(progressPercent); }); } @@ -86,7 +124,6 @@ Template.caseProgress.helpers({ Template.caseProgress.events({ 'click .js-finish-case'() { const instance = Template.instance(); - console.log('Case Finished!'); switchToTab('studylistTab'); instance.data.measurementApi.storeMeasurements(); } diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.js index 75aadeee0..efe130006 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableHeaderRow/measurementTableHeaderRow.js @@ -57,10 +57,22 @@ Template.measurementTableHeaderRow.helpers({ const instance = Template.instance(); const measurementType = instance.data.measurementType; const measurementApi = instance.data.measurementApi; + const timepointApi = instance.data.timepointApi; - // TODO: Add selector to check if there are unmarked lesions - //return measurementApi.fetch(measurementType.id).length; - return; + const current = instance.data.timepointApi.current(); + const prior = instance.data.timepointApi.prior(); + if (!prior) { + return true; + } + + const currentFilter = { timepointId: current.timepointId }; + const priorFilter = { timepointId: prior.timepointId }; + const measurementTypeId = measurementType.id; + + const numCurrent = measurementApi.fetch(measurementTypeId, currentFilter).length; + const numPrior = measurementApi.fetch(measurementTypeId, priorFilter).length; + const remaining = Math.max(numPrior - numCurrent, 0); + return remaining > 0; } }); diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.js index 2b41ed8db..dd1747d57 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.js @@ -13,7 +13,7 @@ Template.measurementTableView.helpers({ const Collection = api[measurementTypeId]; const data = Collection.find().fetch(); - const groupObject = _.groupBy(data, entry => { return entry.measurementNumber }); + const groupObject = _.groupBy(data, entry => entry.measurementNumber); return Object.keys(groupObject).map(key => { const anEntry = groupObject[key][0];