ohif-viewer/OHIFViewer/client/components/ohifViewer/structuredReportModal/structuredReportModal.js

91 lines
2.2 KiB
JavaScript
Raw Normal View History

feat(google-cloud): Add support for Google Cloud Healthcare API DICOM Store Switch (#325) * NOTASK: PoC for loading data from Healthcare API * NOTASK: PoC for loading data from Healthcare API fix * Add sample dialog for loading test dicom-picker * Fix incorrect promise resolving * NOTASK: PoC for loading dicom store * Add web-components as git submodules. (Probably will be changed later) * Add rough dicomStore picker * Add dataset selector * NOTASK: QIDO metadata first draft * NOTASK: Not Implemented error for color images * NOTASK: clean-up * Dicom files uploader intermediate version * NOTASK: Accept header * NOTASK: docker configs * NOTASK: fix * NOTASK: howTo * Add draft of DICOM uploader * Add missing files * Fix error with missing clientId * Update submodule * NOTASK: HowTo * NOTASK: config for dev * NOTASK: new docker file * clean-up * Update GCP web-components * Add integration with async web components * Fix errors in nginx.conf * Structured reports views basic implementation * NOTASK: qido -> wado * NOTASK: config fix * NOTASK: dirty copy-paste implementation * Add "Change dicom store" button. Add an ability to clear date. Fix bug, when OAuth dosn't work if URL is not / * Fix studylist filtering * Fix dockerfile * NOTASK: meteor update * NOTASK: fix of package structure * NOTASK: merge fix * improvements Move check for now SR into SR modal Use simple button to open SR modal Remove button styling cleanup * copy SR data retrieval to wado * make search of SR simpler * Codestyle fix * NOTASK: palette color error message * Fix date filter. Fix server settings on first loading. Add SR and PS buttons * NOTASK: PS is now hidden by default * NOTASK: dirty solution * NOTASK: new wadoimage lib version * Fix PS and SR buttons * Make modal dialogs vertically centered * Update web components. Quick UI fixes * Add missing files to the previous commit * NOTASK: show-hide for PS * NOTASK: show-hide for PS * NOTASK: fix of min-max PixelValue bug * Add "sign out" functionality for Google OAuth. Update web-components. * intermediate commit * Add demo signin page * Beautifying demo sign in page * NOTASK: merge * NOTASK: clean-up * Use npm for getting healthcare-api-adapter instead of git submodule. * NOTASK: clean-up * meteor update * clean-up * clean-up * Clean up code * Update healthcare-api-adapter version. Add location to dicom store path. Fix buttons style. * Downgrade meteor and packages to master version. Use meteor-build-client-fixed2
2019-03-22 16:42:26 +01:00
import { $ } from 'meteor/jquery';
import { OHIF } from 'meteor/ohif:core';
Template.structuredReportModal.onRendered(() => {
const structuredReport = getStructureReport();
render(structuredReport);
});
// FIXME: we use just 1st SR for current study for now
function getStructureReport() {
let structuredReport;
OHIF.viewer.StudyMetadataList.find(studyMetadata => {
structuredReport = studyMetadata.findInstance(instance => instance.getData().modality === 'SR');
// If SR is found stop the search
return !!structuredReport;
});
return structuredReport;
}
function render(structureReport) {
const root = $('#root');
if (structureReport) {
renderStructuredReport(root, structureReport.getData());
} else {
renderNoData(root);
}
}
function renderStructuredReport(root, data) {
root.append(getMainDataHtml(data));
root.append(getContentSequenceHtml(data.contentSequence));
}
function renderNoData(root) {
root.append('<div>No structured report found</div>');
}
function getMainDataHtml(data) {
const root = $('<div></div>');
const { completionFlag, verificationFlag, manufacturer, contentDateTime } = data;
if (completionFlag) {
root.append(getMainDataItemHtml('Completion flag', completionFlag));
}
if (verificationFlag) {
root.append(getMainDataItemHtml('Verification flag', verificationFlag));
}
if (manufacturer) {
root.append(getMainDataItemHtml('Manufacturer', manufacturer));
}
if (contentDateTime) {
root.append(getMainDataItemHtml('Content Date/Time', contentDateTime));
}
return root;
}
const getContentSequenceHtml = (data, level = 1) => {
const root = $('<div></div>');
const header = data.header;
const items = data.items || [];
if (header) {
root.append(`<h${level}>${header}</h${level}>`);
}
items.forEach(item => {
root.append(
item instanceof Object
? getContentSequenceHtml(item, level + 1)
: `<div>${item}</div>`
);
});
return root;
}
function getMainDataItemHtml(key, value) {
return $(`<div><b>${key}</b>: ${value}</div>`);
}