diff --git a/extensions/default/src/DicomWebDataSource/qido.js b/extensions/default/src/DicomWebDataSource/qido.js index b9409ff5c..434cccee4 100644 --- a/extensions/default/src/DicomWebDataSource/qido.js +++ b/extensions/default/src/DicomWebDataSource/qido.js @@ -46,16 +46,17 @@ function processResults(qidoStudies) { qidoStudies.forEach(qidoStudy => studies.push({ studyInstanceUid: getString(qidoStudy['0020000D']), - date: getString(qidoStudy['00080020']), + date: getString(qidoStudy['00080020']), // YYYYMMDD time: getString(qidoStudy['00080030']), // HHmmss.SSS (24-hour, minutes, seconds, fractional seconds) - accession: getString(qidoStudy['00080050']), // short string, probably a number? - mrn: getString(qidoStudy['00100020']), // medicalRecordNumber - patientName: getName(qidoStudy['00100010']), - instances: Number(getString(qidoStudy['00201208'])), // number - description: getString(qidoStudy['00081030']), - modalities: getString( - getModalities(qidoStudy['00080060'], qidoStudy['00080061']) - ), + accession: getString(qidoStudy['00080050']) || '', // short string, probably a number? + mrn: getString(qidoStudy['00100020']) || '', // medicalRecordNumber + patientName: getName(qidoStudy['00100010']) || '', + instances: Number(getString(qidoStudy['00201208'])) || 0, // number + description: getString(qidoStudy['00081030']) || '', + modalities: + getString( + getModalities(qidoStudy['00080060'], qidoStudy['00080061']) + ) || '', }) ); diff --git a/platform/viewer/src/routes/StudyListContainer/StudyListContainer.jsx b/platform/viewer/src/routes/StudyListContainer/StudyListContainer.jsx index 89cbde8d4..5faeebb39 100644 --- a/platform/viewer/src/routes/StudyListContainer/StudyListContainer.jsx +++ b/platform/viewer/src/routes/StudyListContainer/StudyListContainer.jsx @@ -182,6 +182,21 @@ function StudyListContainer({ history, data: studies }) { return -1 * sortModifier; } else if (!s2Prop && s1Prop) { return 1 * sortModifier; + } else if (sortBy === 'studyDate') { + // TODO: Delimiters are non-standard. Should we support them? + const s1Date = moment(s1.date, ['YYYYMMDD', 'YYYY.MM.DD'], true); + const s2Date = moment(s2.date, ['YYYYMMDD', 'YYYY.MM.DD'], true); + + if (s1Date.isValid() && s2Date.isValid()) { + return ( + (s1Date.toISOString() > s2Date.toISOString() ? 1 : -1) * + sortModifier + ); + } else if (s1Date.isValid()) { + return sortModifier; + } else if (s2Date.isValid()) { + return -1 * sortModifier; + } } return 0; @@ -240,11 +255,27 @@ function StudyListContainer({ history, data: studies }) { content: (
- {moment(date).format('MMM-DD-YYYY')} + {date && + moment(date, ['YYYYMMDD', 'YYYY.MM.DD'], true).isValid() && + moment(date, ['YYYYMMDD', 'YYYY.MM.DD']).format( + 'MMM-DD-YYYY' + )} {time && ( - {moment(time, 'HHmmss.SSS').format('hh:mm A')} + {time && + moment(time, [ + 'HH', + 'HHmm', + 'HHmmss', + 'HHmmss.SSS', + ]).isValid() && + moment(time, [ + 'HH', + 'HHmm', + 'HHmmss', + 'HHmmss.SSS', + ]).format('hh:mm A')} )}