From 2de102c73c795cfb48b49005b10aa788444a45b7 Mon Sep 17 00:00:00 2001 From: Igor Octaviano Date: Thu, 9 May 2024 17:10:56 -0300 Subject: [PATCH] fix(DicomJSONDataSource): Fix series filtering (#4092) --- .../default/src/DicomJSONDataSource/index.js | 14 +++++++++++++- platform/app/src/routes/Mode/Mode.tsx | 19 ++++++++----------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/extensions/default/src/DicomJSONDataSource/index.js b/extensions/default/src/DicomJSONDataSource/index.js index deb50e252..bf21a77e8 100644 --- a/extensions/default/src/DicomJSONDataSource/index.js +++ b/extensions/default/src/DicomJSONDataSource/index.js @@ -169,7 +169,7 @@ function createDicomJSONApi(dicomJsonConfig) { return getDirectURL(dicomJsonConfig, params); }, series: { - metadata: async ({ StudyInstanceUID, madeInClient = false, customSort } = {}) => { + metadata: async ({ filters, StudyInstanceUID, madeInClient = false, customSort } = {}) => { if (!StudyInstanceUID) { throw new Error('Unable to query for SeriesMetadata without StudyInstanceUID'); } @@ -183,6 +183,18 @@ function createDicomJSONApi(dicomJsonConfig) { series = study.series; } + const seriesKeys = [ + 'SeriesInstanceUID', + 'SeriesInstanceUIDs', + 'seriesInstanceUID', + 'seriesInstanceUIDs', + ]; + const seriesFilter = seriesKeys.find(key => filters[key]); + if (seriesFilter) { + const seriesUIDs = filters[seriesFilter]; + series = series.filter(s => seriesUIDs.includes(s.SeriesInstanceUID)); + } + const seriesSummaryMetadata = series.map(series => { const seriesSummary = { StudyInstanceUID: study.StudyInstanceUID, diff --git a/platform/app/src/routes/Mode/Mode.tsx b/platform/app/src/routes/Mode/Mode.tsx index 0e78c74be..783356dda 100644 --- a/platform/app/src/routes/Mode/Mode.tsx +++ b/platform/app/src/routes/Mode/Mode.tsx @@ -239,18 +239,15 @@ export default function ModeRoute({ const filters = Array.from(query.keys()).reduce((acc: Record, val: string) => { const lowerVal = val.toLowerCase(); - if (lowerVal !== 'studyinstanceuids') { - // Not sure why the case matters here - it doesn't in the URL - if (lowerVal === 'seriesinstanceuids') { - const seriesUIDs = getSplitParam(lowerVal, query); - return { - ...acc, - seriesInstanceUID: seriesUIDs, - }; - } - - return { ...acc, [val]: getSplitParam(lowerVal, query) }; + // Not sure why the case matters here - it doesn't in the URL + if (lowerVal === 'seriesinstanceuids') { + const seriesUIDs = getSplitParam(lowerVal, query); + return { + ...acc, + seriesInstanceUID: seriesUIDs, + }; } + return { ...acc, [val]: getSplitParam(lowerVal, query) }; }, {}) ?? {}; let unsubs;