From 048bb3f050126174dee1e65c6610c25413cb1fb8 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Mon, 27 Jun 2016 18:18:42 -0300 Subject: [PATCH] LT-249: Implementing behavior for 'comparison' and 'key timepoints' switch --- .../flexboxLayout/flexboxLayout.html | 6 +- .../components/lesionTable/lesionTable.html | 4 +- .../components/lesionTable/lesionTable.js | 91 +++++++++++-------- .../lesionTableRow/lesionTableRow.html | 20 ++-- .../lesionTableRow/lesionTableRow.js | 10 -- .../lesionTableTimepointCell.html | 20 ++-- .../lesionTableTimepointCell.js | 10 +- .../lesionTableView/lesionTableView.html | 26 +++--- .../lesionTableView/lesionTableView.js | 8 +- Packages/viewerbase/lib/helpers/blaze.js | 33 +++++++ Packages/viewerbase/package.js | 1 + 11 files changed, 136 insertions(+), 93 deletions(-) create mode 100644 Packages/viewerbase/lib/helpers/blaze.js diff --git a/Packages/lesiontracker/client/components/flexboxLayout/flexboxLayout.html b/Packages/lesiontracker/client/components/flexboxLayout/flexboxLayout.html index 418cd1ffe..65d782152 100644 --- a/Packages/lesiontracker/client/components/flexboxLayout/flexboxLayout.html +++ b/Packages/lesiontracker/client/components/flexboxLayout/flexboxLayout.html @@ -4,13 +4,13 @@ {{>studyTimepointBrowser}}
- {{>viewerMain }} + {{>viewerMain}}
diff --git a/Packages/lesiontracker/client/components/lesionTable/lesionTable.html b/Packages/lesiontracker/client/components/lesionTable/lesionTable.html index be3014c16..51c61ab79 100644 --- a/Packages/lesiontracker/client/components/lesionTable/lesionTable.html +++ b/Packages/lesiontracker/client/components/lesionTable/lesionTable.html @@ -4,10 +4,10 @@ {{>roundedButtonGroup buttonGroupData}}
- {{#each timepoints}} + {{#each timepoints.get}} {{>lesionTableTimepointHeader}} {{/each}}
- {{>lesionTableView}} + {{>lesionTableView this}} diff --git a/Packages/lesiontracker/client/components/lesionTable/lesionTable.js b/Packages/lesiontracker/client/components/lesionTable/lesionTable.js index 1329f18ce..6a82b5afc 100644 --- a/Packages/lesiontracker/client/components/lesionTable/lesionTable.js +++ b/Packages/lesiontracker/client/components/lesionTable/lesionTable.js @@ -1,48 +1,37 @@ -Template.lesionTable.helpers({ - timepoints: function() { - return Timepoints.find({}, { +Template.lesionTable.onCreated(() => { + const instance = Template.instance(); + + instance.data.lesionTableLayout = new ReactiveVar('comparison'); + instance.data.timepoints = new ReactiveVar([]); + + instance.autorun(() => { + // Get the current table layout + const tableLayout = instance.data.lesionTableLayout.get(); + + // Get all the timepoints + const allTimepoints = Timepoints.find({}, { sort: { - latestDate: 1 + latestDate: -1 } - }); - }, + }).fetch(); - buttonGroupData() { - const instance = Template.instance(); - return { - value: instance.lesionTableLayout, - options: [{ - value: 'comparison', - text: 'Comparison' - }, { - value: 'key', - text: 'Key Timepoints' - }] - }; - } -}); + // Get the last 2 timepoints + let timepoints = allTimepoints.slice(0, 2); -Template.lesionTable.events({ - /** - * Retrieve the lesion id from the DOM data for this row - */ - /*'click table#tblLesion tbody tr': function(e, template) { - var measurementId = $(e.currentTarget).data('measurementid'); - activateLesion(measurementId, template.data); - },*/ + // Concatenate the baseline if the table layout is for key timepoints + if (tableLayout === 'key' && allTimepoints.length > 2) { + timepoints = timepoints.concat(_.last(allTimepoints)); + } + + // Return key timepoints + instance.data.timepoints.set(timepoints); + }); }); // Temporary until we have a real window manager with events for series/study changed Session.setDefault('NewSeriesLoaded', false); -Template.lesionTable.onCreated(function() { - var instance = this; - - instance.lesionTableLayout = new ReactiveVar(); - instance.lesionTableLayout.set('comparison'); -}); - -Template.lesionTable.onRendered(function() { +Template.lesionTable.onRendered(() => { // Find the first measurement by Lesion Number var firstLesion = Measurements.findOne({}, { sort: { @@ -60,3 +49,33 @@ Template.lesionTable.onRendered(function() { activateLesion(firstLesion._id, templateData); } }); + +Template.lesionTable.events({ + /** + * Retrieve the lesion id from the DOM data for this row + */ + /*'click table#tblLesion tbody tr': function(e, template) { + var measurementId = $(e.currentTarget).data('measurementid'); + activateLesion(measurementId, template.data); + },*/ +}); + +Template.lesionTable.helpers({ + dataContainer() { + return {}; + }, + + buttonGroupData() { + const instance = Template.instance(); + return { + value: instance.data.lesionTableLayout, + options: [{ + value: 'comparison', + text: 'Comparison' + }, { + value: 'key', + text: 'Key Timepoints' + }] + }; + } +}); diff --git a/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.html b/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.html index 9a9767fbe..be9a07088 100644 --- a/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.html +++ b/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.html @@ -2,16 +2,16 @@
- {{lesionNumberAbsolute}} + {{rowItem.lesionNumberAbsolute}}
- {{#if descriptionRequired}} + {{#if rowItem.descriptionRequired}}
{{/if}} - {{#if responseStatus}} + {{#if rowItem.responseStatus}}
CR
@@ -19,17 +19,17 @@
- {{ #if location }} - {{location}} - {{ else }} + {{#if rowItem.location}} + {{rowItem.location}} + {{else}} (No description) - {{ /if }} + {{/if}}
- {{# each timepoints }} - {{> lesionTableTimepointCell}} - {{/ each }} + {{#each timepoints.get}} + {{>lesionTableTimepointCell}} + {{/each}}
diff --git a/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.js b/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.js index 6e883dc64..afa5eb748 100644 --- a/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.js +++ b/Packages/lesiontracker/client/components/lesionTableRow/lesionTableRow.js @@ -1,13 +1,3 @@ -Template.lesionTableRow.helpers({ - timepoints: function() { - return Timepoints.find({}, { - sort: { - timepointName: 1 - } - }); - } -}); - function doneCallback(measurementData, deleteTool) { // If a Lesion or Non-Target is removed via a dialog // opened by the Lesion Table, we should clear the data for diff --git a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.html b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.html index d39d2195d..b54cd10d9 100644 --- a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.html +++ b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.html @@ -1,11 +1,11 @@ \ No newline at end of file + {{#if hasDataAtThisTimepoint}} +
+ {{displayData}} +
+ {{else}} +
+ ... +
+ {{/if}} + diff --git a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js index 19ccf25d2..f4a22dd56 100644 --- a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js +++ b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js @@ -2,14 +2,14 @@ Template.lesionTableTimepointCell.helpers({ hasDataAtThisTimepoint: function() { // This simple function just checks whether or not timepoint data // exists for this Measurement at this Timepoint - var lesionData = Template.parentData(1); + var lesionData = Template.parentData(1).rowItem; return (lesionData && lesionData.timepoints && lesionData.timepoints[this.timepointId]); }, displayData: function() { // Search Measurements by lesion and timepoint - var lesionData = Template.parentData(1); + var lesionData = Template.parentData(1).rowItem; if (!lesionData || !lesionData.timepoints || !lesionData.timepoints[this.timepointId]) { @@ -49,7 +49,7 @@ Template.lesionTableTimepointCell.helpers({ }, isBidirectional: function() { - var lesionData = Template.parentData(1); + var lesionData = Template.parentData(1).rowItem; if (lesionData.toolType === 'bidirectional') { return true; } @@ -77,7 +77,7 @@ Template.lesionTableTimepointCell.events({ 'dblclick .lesionTableTimepointCell': function() { log.info('Double clicked on a timepoint cell'); // Search Measurements by lesion and timepoint - var currentMeasurement = Template.parentData(1); + var currentMeasurement = Template.parentData(1).rowItem; // Create some fake measurement data var currentTimepointID = this.timepointId; @@ -110,7 +110,7 @@ Template.lesionTableTimepointCell.events({ var keyCode = e.which; if (keyCode === keys.DELETE || (keyCode === keys.D && e.ctrlKey === true)) { - var currentMeasurement = Template.parentData(1); + var currentMeasurement = Template.parentData(1).rowItem; var currentTimepointID = this.timepointId; showConfirmDialog(function() { diff --git a/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.html b/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.html index 1f2213d15..d7d7249b0 100644 --- a/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.html +++ b/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.html @@ -1,18 +1,18 @@ \ No newline at end of file + diff --git a/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.js b/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.js index 8e1a5cae1..4df919501 100644 --- a/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.js +++ b/Packages/lesiontracker/client/components/lesionTableView/lesionTableView.js @@ -1,5 +1,5 @@ Template.lesionTableView.helpers({ - targets: function () { + targets() { // All Targets shall be listed first followed by Non-Targets return Measurements.find({ isTarget: true @@ -9,7 +9,7 @@ Template.lesionTableView.helpers({ } }); }, - nonTargets: function () { + nonTargets() { // All Targets shall be listed first followed by Non-Targets return Measurements.find({ isTarget: false @@ -19,7 +19,7 @@ Template.lesionTableView.helpers({ } }); }, - newLesions: function () { + newLesions() { // All Targets shall be listed first followed by Non-Targets return Measurements.find({ saved: false @@ -29,4 +29,4 @@ Template.lesionTableView.helpers({ } }); } -}); \ No newline at end of file +}); diff --git a/Packages/viewerbase/lib/helpers/blaze.js b/Packages/viewerbase/lib/helpers/blaze.js new file mode 100644 index 000000000..8746439b4 --- /dev/null +++ b/Packages/viewerbase/lib/helpers/blaze.js @@ -0,0 +1,33 @@ +// Return the current template instance +Template.registerHelper('instance', () => { + return Template.instance(); +}); + +// Create a new object and extends it with the argument objects +Template.registerHelper('extend', (...argsArray) => { + // Create the resulting object + const result = {}; + + // Extract the Spacebars kw hash + const kwHash = _.last(argsArray).hash; + + // Extract the given objects + const objects = _.initial(argsArray); + + // Iterate over the given objects + _.each(objects, current => { + // Stop here if the current argument is not an object + if (typeof current !== 'object') { + return; + } + + // Extend the resulting object with the current argument object + _.extend(result, current); + }); + + // Extend the resulting object with the Spacebars kw hash + _.extend(result, kwHash); + + // Return the resulting object + return result; +}); diff --git a/Packages/viewerbase/package.js b/Packages/viewerbase/package.js index ae713f623..1eb47440d 100644 --- a/Packages/viewerbase/package.js +++ b/Packages/viewerbase/package.js @@ -175,6 +175,7 @@ Package.onUse(function(api) { // UI Helpers api.addFiles([ 'lib/helpers/formatDA.js', + 'lib/helpers/blaze.js', 'lib/helpers/logical.js', 'lib/helpers/formatJSDate.js', 'lib/helpers/jsDateFromNow.js',