basic initial search and passing data to LayoutTemplate for list route

This commit is contained in:
dannyrb authored and James A. Petts committed 2020-05-15 14:01:26 +02:00
1 parent 3cf2eb5ed8
commit 6f9c27f10b
4 files changed
+83 -49

No files matched your search

@@ -1,5 +1,5 @@
import { api } from 'dicomweb-client';
import { mapParams, search, processResults } from './qido.js';
import { mapParams, search as qidoSearch, processResults } from './qido.js';
import { IWebApiDataSource } from '@ohif/core';
/**
@@ -26,12 +26,24 @@ function createDicomWebApi(dicomWebConfig) {
query: {
studies: {
mapParams: mapParams.bind(),
search: search.bind(undefined, dicomWebClient, null, null),
search: async function(origParams) {
const { studyInstanceUid, seriesInstanceUid, ...mappedParams } =
mapParams(origParams) || {};
const results = await qidoSearch(
dicomWebClient,
studyInstanceUid,
seriesInstanceUid,
mappedParams
);
return processResults(results);
},
processResults: processResults.bind(),
},
instances: {
search: (studyInstanceUid, queryParamaters) =>
search.call(
qidoSearch.call(
undefined,
dicomWebClient,
studyInstanceUid,
@@ -22,7 +22,7 @@
* | limit | {number} |
* | offset | {number} |
*/
import DICOMWeb from '@ohif/core';
import { DICOMWeb } from '@ohif/core';
const { getString, getName, getModalities } = DICOMWeb;
@@ -37,26 +37,36 @@ const { getString, getName, getModalities } = DICOMWeb;
* @returns {Array} An array of Study MetaData objects
*/
function processResults(qidoStudies) {
debugger;
if (!qidoStudies || !qidoStudies.length) {
return [];
}
const studies = [];
// LIST
// AccessionNumber,
// Modalities,
// Instances,
// StudyDescription,
// PatientId,
// PatientName,
// StudyDate,
qidoStudies.forEach(qidoStudy =>
studies.push({
studyInstanceUid: getString(qidoStudy['0020000D']),
studyDate: getString(qidoStudy['00080020']),
studyTime: getString(qidoStudy['00080030']),
accessionNumber: getString(qidoStudy['00080050']),
referringPhysicianName: getString(qidoStudy['00080090']),
// referringPhysicianName: getString(qidoStudy['00080090']),
patientName: getName(qidoStudy['00100010']),
patientId: getString(qidoStudy['00100020']),
patientBirthdate: getString(qidoStudy['00100030']),
patientSex: getString(qidoStudy['00100040']),
studyId: getString(qidoStudy['00200010']),
numberOfStudyRelatedSeries: getString(qidoStudy['00201206']),
numberOfStudyRelatedInstances: getString(qidoStudy['00201208']),
// patientBirthdate: getString(qidoStudy['00100030']),
// patientSex: getString(qidoStudy['00100040']),
// studyId: getString(qidoStudy['00200010']), // mrn?
// numberOfStudyRelatedSeries: getString(qidoStudy['00201206']),
instances: getString(qidoStudy['00201208']),
studyDescription: getString(qidoStudy['00081030']),
modalities: getString(
getModalities(qidoStudy['00080060'], qidoStudy['00080061'])
@@ -82,13 +92,13 @@ function search(
seriesInstanceUid,
queryParamaters
) {
const requestFn = studyInstanceUid
? dicomWebClient.searchForInstances
: dicomWebClient.searchForStudies;
// const requestFn = studyInstanceUid
// ? dicomWebClient.searchForInstances
// : dicomWebClient.searchForStudies;
// TODO: Current version does not apply query Params for `searchForInstances` call?
// Just sets `studyInstanceUid` in options...
return requestFn({
return dicomWebClient.searchForStudies({
studyInstanceUid,
queryParams: queryParamaters,
});
@@ -115,6 +125,9 @@ export default function searchStudies(server, filter) {
* @returns {string} The URL with encoded filter query data
*/
function mapParams(params) {
if (!params) {
return;
}
const commaSeparatedFields = [
'00081030', // Study Description
'00080060', // Modality
@@ -122,27 +135,27 @@ function mapParams(params) {
].join(',');
const parameters = {
PatientName: filter.patientName,
PatientID: filter.patientId,
AccessionNumber: filter.accessionNumber,
StudyDescription: filter.studyDescription,
ModalitiesInStudy: filter.modalitiesInStudy,
limit: filter.limit,
offset: filter.offset,
fuzzymatching: filter.fuzzymatching,
PatientName: params.patientName,
PatientID: params.patientId,
AccessionNumber: params.accessionNumber,
StudyDescription: params.studyDescription,
ModalitiesInStudy: params.modalitiesInStudy,
limit: params.limit,
offset: params.offset,
fuzzymatching: params.fuzzymatching,
includefield: serverSupportsQIDOIncludeField ? commaSeparatedFields : 'all',
};
// build the StudyDate range parameter
if (filter.studyDateFrom || filter.studyDateTo) {
const dateFrom = _dateToString(new Date(filter.studyDateFrom));
const dateTo = _dateToString(new Date(filter.studyDateTo));
if (params.studyDateFrom || params.studyDateTo) {
const dateFrom = _dateToString(new Date(params.studyDateFrom));
const dateTo = _dateToString(new Date(params.studyDateTo));
parameters.StudyDate = `${dateFrom}-${dateTo}`;
}
// Build the StudyInstanceUID parameter
if (filter.studyInstanceUid) {
let studyUids = filter.studyInstanceUid;
if (params.studyInstanceUid) {
let studyUids = params.studyInstanceUid;
studyUids = Array.isArray(studyUids) ? studyUids.join() : studyUids;
studyUids = studyUids.replace(/[^0-9.]+/g, '\\');
parameters.StudyInstanceUID = studyUids;