* 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
91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
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>`);
|
|
} |