diff --git a/extensions/default/src/DicomWebDataSource/index.js b/extensions/default/src/DicomWebDataSource/index.js
index 0999e6651..a25181556 100644
--- a/extensions/default/src/DicomWebDataSource/index.js
+++ b/extensions/default/src/DicomWebDataSource/index.js
@@ -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,
diff --git a/extensions/default/src/DicomWebDataSource/qido.js b/extensions/default/src/DicomWebDataSource/qido.js
index 8de52caca..19d53f27b 100644
--- a/extensions/default/src/DicomWebDataSource/qido.js
+++ b/extensions/default/src/DicomWebDataSource/qido.js
@@ -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;
diff --git a/platform/viewer/src/routes/DataSourceWrapper.jsx b/platform/viewer/src/routes/DataSourceWrapper.jsx
index 00f949272..55b33058e 100644
--- a/platform/viewer/src/routes/DataSourceWrapper.jsx
+++ b/platform/viewer/src/routes/DataSourceWrapper.jsx
@@ -1,5 +1,5 @@
/* eslint-disable react/jsx-props-no-spreading */
-import React from 'react';
+import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { MODULE_TYPES } from '@ohif/core';
//
@@ -45,13 +45,19 @@ function DataSourceWrapper(props) {
// But only for LayoutTemplate type of 'list'?
// Or no data fetching here, and just hand down my source
- // const studies = dataSource.query.studies.search();
-
- // console.log(studies);
+ debugger;
+ const [data, setData] = useState();
+ useEffect(() => {
+ async function getData() {
+ const searchResult = await dataSource.query.studies.search();
+ setData(searchResult);
+ }
+ getData();
+ }, [dataSource.query.studies]);
return (