diff --git a/Packages/ohif-lesiontracker/both/configuration/toolGroups/baseSchema.js b/Packages/ohif-lesiontracker/both/configuration/toolGroups/baseSchema.js index 05431563f..dbd53d65b 100644 --- a/Packages/ohif-lesiontracker/both/configuration/toolGroups/baseSchema.js +++ b/Packages/ohif-lesiontracker/both/configuration/toolGroups/baseSchema.js @@ -19,5 +19,9 @@ export const ToolGroupBaseSchema = new SimpleSchema({ timepointId: { type: String, label: 'Timepoint ID' + }, + measurementNumber: { + type: Number, + label: 'Measurement Number' } }); diff --git a/Packages/ohif-measurements/both/configuration/measurements.js b/Packages/ohif-measurements/both/configuration/measurements.js index 0e70e9eb9..6b295d36d 100644 --- a/Packages/ohif-measurements/both/configuration/measurements.js +++ b/Packages/ohif-measurements/both/configuration/measurements.js @@ -39,23 +39,26 @@ class MeasurementApi { const timepoint = this.timepointApi.timepoints.findOne({ studyInstanceUids: measurement.studyInstanceUid }); + const measurementNumber = groupCollection.find({ + studyInstanceUid: { + $in: timepoint.studyInstanceUids + } + }).count() + 1; + measurement.measurementNumber = measurementNumber; + groupCollection.insert({ toolId: tool.id, toolItemId: measurement._id, timepointId: timepoint.timepointId, studyInstanceUid: measurement.studyInstanceUid, - createdAt: measurement.createdAt + createdAt: measurement.createdAt, + measurementNumber }); - const measurementNumber = groupCollection.find({ - studyInstanceUid: { - $in: timepoint.studyInstanceUids - } - }).count(); - measurement.measurementNumber = measurementNumber; collection.update(measurement._id, { $set: { - measurementNumber + measurementNumber, + timepointId: timepoint.timepointId } }); }, @@ -68,22 +71,27 @@ class MeasurementApi { const timepoint = this.timepointApi.timepoints.findOne({ timepointId: measurement.timepointId }); + const filter = { + studyInstanceUid: { + $in: timepoint.studyInstanceUids + }, + measurementNumber: { + $gt: atIndex + } + }; + const operator = { + $inc: { + measurementNumber: -1 + } + }; + const options = { + multi: true + }; + groupCollection.update(filter, operator, options); toolGroup.childTools.forEach(childTool => { - this.tools[childTool.id].update({ - studyInstanceUid: { - $in: timepoint.studyInstanceUids - }, - measurementNumber: { - $gt: atIndex - } - }, { - $inc: { - measurementNumber: -1 - } - }, { - multi: true - }); + const collection = this.tools[childTool.id]; + collection.update(filter, operator, options); }); } }); @@ -186,11 +194,16 @@ class MeasurementApi { } deleteMeasurements(measurementTypeId, filter) { - const collection = this.tools[measurementTypeId]; + const groupCollection = this.toolGroups[measurementTypeId]; // Get the entries information before removing them - const entries = collection.find(filter).fetch(); - collection.remove(filter); + const groupItems = groupCollection.find(filter).fetch(); + const entries = []; + groupItems.forEach(groupItem => { + const collection = this.tools[groupItem.toolId]; + entries.push(collection.findOne(groupItem.toolItemId)); + collection.remove(groupItem.toolItemId); + }); // Stop here if no entries were found if (!entries.length) { @@ -219,24 +232,33 @@ class MeasurementApi { // Synchronize the updated measurements with Cornerstone Tools // toolData to make sure the displayed measurements show 'Target X' correctly - const syncFilter = _.clone(updateFilter); + const syncFilter = _.clone(filter); syncFilter.measurementNumber = { $gt: measurementNumber - 1 }; - collection.find(syncFilter).forEach(measurement => { - OHIF.measurements.syncMeasurementAndToolData(measurement); + const toolTypes = _.uniq(entries.map(entry => entry.toolType)); + toolTypes.forEach(toolType => { + const collection = this.tools[toolType]; + collection.find(syncFilter).forEach(measurement => { + OHIF.measurements.syncMeasurementAndToolData(measurement); + }); }); } fetch(measurementTypeId, selector, options) { - if (!this.tools[measurementTypeId]) { + if (!this.toolGroups[measurementTypeId]) { throw 'MeasurementApi: No Collection with the id: ' + measurementTypeId; } selector = selector || {}; options = options || {}; - return this.tools[measurementTypeId].find(selector, options).fetch(); + const result = []; + const items = this.toolGroups[measurementTypeId].find(selector, options).fetch(); + items.forEach(item => { + result.push(this.tools[item.toolId].findOne(item.toolItemId)); + }); + return result; } } diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.html b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.html index ebbc6a8ca..2fb1a6f9e 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.html +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.html @@ -2,7 +2,7 @@
- {{rowItem.measurementNumberOverall}} + {{rowItem.measurementNumber}}
{{#unless rowItem.location}}
diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js index ba537b7c7..6d781d163 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js @@ -31,12 +31,13 @@ Template.measurementTableRow.events({ 'click .js-rename'(event, instance) { const rowItem = instance.data.rowItem; + const entry = rowItem.entries[0]; // Show the measure flow for targets OHIF.measurements.toggleLabelButton({ instance, - measurementId: rowItem.entries[0]._id, - measurementTypeId: rowItem.measurementTypeId, + measurementId: entry._id, + toolType: entry.toolType, element: document.body, measurementApi: instance.data.measurementApi, position: { @@ -56,16 +57,12 @@ Template.measurementTableRow.events({ OHIF.ui.showFormDialog('dialogConfirm', dialogSettings).then(formData => { const measurementTypeId = instance.data.rowItem.measurementTypeId; const measurement = instance.data.rowItem.entries[0]; - const toolType = measurement.toolType; const measurementNumber = measurement.measurementNumber; const measurementApi = instance.data.measurementApi; const timepointApi = instance.data.timepointApi; // Remove all the measurements with the given type and number - measurementApi.deleteMeasurements(measurementTypeId, { - toolType, - measurementNumber - }); + measurementApi.deleteMeasurements(measurementTypeId, { measurementNumber }); // Update the Overall Measurement Numbers for all Measurements const baseline = timepointApi.baseline(); @@ -74,27 +71,5 @@ Template.measurementTableRow.events({ // Repaint the images on all viewports without the removed measurements _.each($('.imageViewerViewport'), element => cornerstone.updateImage(element)); }); - }, - - 'keydown .location'(event) { - const keyCode = event.which; - - if (keyCode === keys.DELETE || - (keyCode === keys.D && event.ctrlKey === true)) { - const currentMeasurement = this; - const options = { - keyPressAllowed: false, - title: 'Remove measurement?', - text: 'Are you sure you would like to remove the entire measurement?' - }; - - showConfirmDialog(() => { - Meteor.call('removeMeasurement', currentMeasurement._id, (error, response) => { - if (error) { - OHIF.log.warn(error); - } - }); - }, options); - } } }); diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.js index b64d0ae03..51d1f69bc 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableTimepointCell/measurementTableTimepointCell.js @@ -6,9 +6,10 @@ Template.measurementTableTimepointCell.helpers({ // exists for this Measurement at this Timepoint const instance = Template.instance(); const rowItem = instance.data.rowItem; + const timepointId = instance.data.timepointId; - if (this.timepointId) { - const dataAtThisTimepoint = _.where(rowItem.entries, {timepointId: this.timepointId}); + if (timepointId) { + const dataAtThisTimepoint = _.where(rowItem.entries, { timepointId }); return dataAtThisTimepoint.length > 0; } else { return rowItem.entries.length > 0; @@ -16,11 +17,12 @@ Template.measurementTableTimepointCell.helpers({ }, displayData() { const instance = Template.instance(); - const rowItem = instance.data.rowItem; + const timepointId = instance.data.timepointId; + let data; - if (this.timepointId) { - const dataAtThisTimepoint = _.where(rowItem.entries, {timepointId: this.timepointId}); + if (timepointId) { + const dataAtThisTimepoint = _.where(rowItem.entries, { timepointId }); if (dataAtThisTimepoint.length > 1) { throw 'More than one measurement was found at the same timepoint with the same measurement number?'; } @@ -32,7 +34,8 @@ Template.measurementTableTimepointCell.helpers({ const config = OHIF.measurements.MeasurementApi.getConfiguration(); const measurementTools = config.measurementTools; - const tool = _.where(measurementTools, {id: rowItem.measurementTypeId})[0]; + const toolGroup = _.findWhere(measurementTools, { id: rowItem.measurementTypeId }); + const tool = _.findWhere(toolGroup.childTools, { id: data.toolType }); if (!tool) { // TODO: Figure out what is going on here? console.warn('Something went wrong?'); diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.html b/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.html index 83b94ced1..92c469f62 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.html +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableView/measurementTableView.html @@ -1,11 +1,11 @@