diff --git a/OHIFViewer/client/components/viewer/viewer.js b/OHIFViewer/client/components/viewer/viewer.js index eb11d1076..4feb6fc91 100644 --- a/OHIFViewer/client/components/viewer/viewer.js +++ b/OHIFViewer/client/components/viewer/viewer.js @@ -2,12 +2,41 @@ import { Meteor } from 'meteor/meteor'; import { Session } from 'meteor/session'; import { Template } from 'meteor/templating'; import { ReactiveDict } from 'meteor/reactive-dict'; +import { Tracker } from 'meteor/tracker' import { OHIF } from 'meteor/ohif:core'; import 'meteor/ohif:cornerstone'; import 'meteor/ohif:viewerbase'; import 'meteor/ohif:metadata'; + +/** + * Inits OHIF Hanging Protocol's onReady. + * It waits for OHIF Hanging Protocol to be ready to instantiate the ProtocolEngine + * Hanging Protocol will use OHIF LayoutManager to render viewports properly + */ +const initHangingProtocol = () => { + // When Hanging Protocol is ready + HP.ProtocolStore.onReady(() => { + + // Gets all StudyMetadata objects: necessary for Hanging Protocol to access study metadata + const studyMetadataList = OHIF.viewer.StudyMetadataList.all(); + + // Caches Layout Manager: Hanging Protocol uses it for layout management according to current protocol + const layoutManager = OHIF.viewerbase.layoutManager; + + // Instantiate StudyMetadataSource: necessary for Hanging Protocol to get study metadata + const studyMetadataSource = new OHIFStudyMetadataSource(); + + // Creates Protocol Engine object with required arguments + const ProtocolEngine = new HP.ProtocolEngine(layoutManager, studyMetadataList, [], studyMetadataSource); + + // Sets up Hanging Protocol engine + HP.setEngine(ProtocolEngine); + + }); +}; + Meteor.startup(() => { Session.setDefault('activeViewport', false); Session.setDefault('leftSidebar', false); @@ -78,12 +107,29 @@ Template.viewer.onCreated(() => { instance.data.studies.forEach(study => { study.selected = true; OHIF.viewer.Studies.insert(study); + OHIF.viewer.StudyMetadataList.insert(studyMetadata); ViewerData[contentId].studyInstanceUids.push(study.studyInstanceUid); }); Session.set('ViewerData', ViewerData); }); +Template.viewer.onRendered(function() { + + this.autorun(function() { + // To make sure ohif viewerMain is rendered before initializing Hanging Protocols + const isOHIFViewerMainRendered = Session.get('OHIFViewerMainRendered'); + + // To avoid first run + if (isOHIFViewerMainRendered) { + // To run only when ViewerMainRendered dependency has changed. + // because initHangingProtocol can have other reactive components + Tracker.nonreactive(initHangingProtocol); + } + }); + +}); + Template.viewer.events({ 'click .js-toggle-studies'() { const instance = Template.instance(); diff --git a/Packages/ohif-study-list/client/lib/OHIFStudyMetadataSource.js b/Packages/ohif-study-list/client/lib/OHIFStudyMetadataSource.js new file mode 100644 index 000000000..51d08bd10 --- /dev/null +++ b/Packages/ohif-study-list/client/lib/OHIFStudyMetadataSource.js @@ -0,0 +1,16 @@ +import { OHIF } from 'meteor/ohif:core'; +import 'meteor/ohif:viewerbase'; + +export class OHIFStudyMetadataSource extends OHIF.viewerbase.StudyMetadataSource { + + /** + * Get study metadata for a study with given study InstanceUID + * @param {String} studyInstanceUID Study InstanceUID + */ + getByInstanceUID(studyInstanceUID) { + return new Promise((resolve, reject) => { + getStudyMetadata(studyInstanceUID, resolve, reject); + }); + } + +} diff --git a/Packages/ohif-study-list/package.js b/Packages/ohif-study-list/package.js index a854f9dae..1ec26f1f4 100644 --- a/Packages/ohif-study-list/package.js +++ b/Packages/ohif-study-list/package.js @@ -65,4 +65,5 @@ Package.onUse(function(api) { // Export the Collections api.export('StudyListStudies', 'client'); api.export('StudyListSelectedStudies', 'client'); + api.export('OHIFStudyMetadataSource', 'client'); }); diff --git a/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js b/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js index dfab3a971..a6486d815 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js +++ b/Packages/ohif-viewerbase/client/components/viewer/viewerMain/viewerMain.js @@ -114,7 +114,11 @@ Template.viewerMain.onRendered(() => { // Enable hotkeys hotkeyUtils.enableHotkeys(); - Session.set('ViewerMainRendered', Random.id()); + Session.set('OHIFViewerMainRendered', { + instance, + date: new Date() + }); + }); Template.viewerMain.onDestroyed(() => { diff --git a/Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js b/Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js index 7ee9518b0..286df0e9b 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js +++ b/Packages/ohif-viewerbase/client/lib/classes/StudyMetadataSource.js @@ -5,25 +5,25 @@ import { OHIFError } from './OHIFError'; */ export class StudyMetadataSource { - /** - * Get study metadata for a given study info - * @param {Object} studyInfo Study info object - */ - getByStudyInfo(studyInfo) { /** - * Please override this method on a specialized class. + * Get study metadata for a given study info + * @param {Object} studyInfo Study info object */ - throw new OHIFError('StudyMetadataSource::getByStudyInfo is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example'); - } + getByStudyInfo(studyInfo) { + /** + * Please override this method on a specialized class. + */ + throw new OHIFError('StudyMetadataSource::getByStudyInfo is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example'); + } - /** - * Get study metadata for a study with given study InstanceUID - * @param {String} studyInstanceUID Study InstanceUID - */ - getByInstanceUID(studyInstanceUID) { /** - * Please override this method on a specialized class. + * Get study metadata for a study with given study InstanceUID + * @param {String} studyInstanceUID Study InstanceUID */ - throw new OHIFError('StudyMetadataSource::getByInstanceUID is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example'); - } + getByInstanceUID(studyInstanceUID) { + /** + * Please override this method on a specialized class. + */ + throw new OHIFError('StudyMetadataSource::getByInstanceUID is not overriden. Please, override it in a specialized class. See OHIFStudyMetadataSource for example'); + } } \ No newline at end of file