diff --git a/extensions/default/src/Panels/PanelStudyBrowser.jsx b/extensions/default/src/Panels/PanelStudyBrowser.jsx index 221395926..8e813217f 100644 --- a/extensions/default/src/Panels/PanelStudyBrowser.jsx +++ b/extensions/default/src/Panels/PanelStudyBrowser.jsx @@ -1,6 +1,9 @@ import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { StudyBrowser, useImageViewer } from '@ohif/ui'; +import { utils } from '@ohif/core'; + +const { formatDate } = utils; /** * @@ -37,7 +40,7 @@ function PanelStudyBrowser({ const actuallyMappedStudies = mappedStudies.map(qidoStudy => { return { studyInstanceUid: qidoStudy.StudyInstanceUID, - date: qidoStudy.StudyDate, + date: formatDate(qidoStudy.StudyDate), description: qidoStudy.StudyDescription, modalities: qidoStudy.ModalitiesInStudy, numInstances: qidoStudy.NumInstances, @@ -151,11 +154,11 @@ function PanelStudyBrowser({ ); const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy ? // eslint-disable-next-line prettier/prettier - [ - ...expandedStudyInstanceUIDs.filter( - stdyUid => stdyUid !== StudyInstanceUID - ), - ] + [ + ...expandedStudyInstanceUIDs.filter( + stdyUid => stdyUid !== StudyInstanceUID + ), + ] : [...expandedStudyInstanceUIDs, StudyInstanceUID]; setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); diff --git a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js index 35fe5d621..af3bbc10c 100644 --- a/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js +++ b/extensions/dicom-sr/src/OHIFCornerstoneSRViewport.js @@ -4,11 +4,12 @@ import cornerstoneTools from 'cornerstone-tools'; import cornerstone from 'cornerstone-core'; import CornerstoneViewport from 'react-cornerstone-viewport'; -import OHIF from '@ohif/core'; +import OHIF, { utils } from '@ohif/core'; import { ViewportActionBar, useViewportGrid } from '@ohif/ui'; import TOOL_NAMES from './constants/toolNames'; import id from './id'; +const { formatDate } = utils; const scrollToIndex = cornerstoneTools.importInternal('util/scrollToIndex'); // const cine = viewportSpecificData.cine; @@ -244,7 +245,7 @@ function OHIFCornerstoneSRViewport({ label: _viewportLabels[firstViewportIndexWithMatchingDisplaySetUid], isTracked: false, isLocked: false, - studyDate: StudyDate, + studyDate: formatDate(StudyDate), currentSeries: SeriesNumber, seriesDescription: SeriesDescription, modality: Modality, diff --git a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx index 2f4b279ce..438ad0d06 100644 --- a/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx +++ b/extensions/measurement-tracking/src/panels/PanelStudyBrowserTracking/PanelStudyBrowserTracking.jsx @@ -1,8 +1,11 @@ import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; +import { utils } from '@ohif/core'; import { StudyBrowser, useImageViewer, useViewportGrid } from '@ohif/ui'; import { useTrackedMeasurements } from '../../getContextModule'; +const { formatDate } = utils; + /** * * @param {*} param0 @@ -68,7 +71,7 @@ function PanelStudyBrowserTracking({ const actuallyMappedStudies = mappedStudies.map(qidoStudy => { return { studyInstanceUid: qidoStudy.StudyInstanceUID, - date: qidoStudy.StudyDate, + date: formatDate(qidoStudy.StudyDate), description: qidoStudy.StudyDescription, modalities: qidoStudy.ModalitiesInStudy, numInstances: qidoStudy.NumInstances, @@ -198,10 +201,10 @@ function PanelStudyBrowserTracking({ ); const updatedExpandedStudyInstanceUIDs = shouldCollapseStudy ? [ - ...expandedStudyInstanceUIDs.filter( - stdyUid => stdyUid !== StudyInstanceUID - ), - ] + ...expandedStudyInstanceUIDs.filter( + stdyUid => stdyUid !== StudyInstanceUID + ), + ] : [...expandedStudyInstanceUIDs, StudyInstanceUID]; setExpandedStudyInstanceUIDs(updatedExpandedStudyInstanceUIDs); diff --git a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js index 79138339a..38e0938dd 100644 --- a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js +++ b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import cornerstone from 'cornerstone-core'; import cornerstoneTools from 'cornerstone-tools'; import CornerstoneViewport from 'react-cornerstone-viewport'; -import OHIF, { DicomMetadataStore } from '@ohif/core'; +import OHIF, { DicomMetadataStore, utils } from '@ohif/core'; import { Notification, ViewportActionBar, @@ -12,6 +12,8 @@ import { } from '@ohif/ui'; import { useTrackedMeasurements } from './../getContextModule'; +const { formatDate } = utils; + // TODO -> Get this list from the list of tracked measurements. const { ArrowAnnotateTool, @@ -239,7 +241,7 @@ function TrackedCornerstoneViewport({ label: _viewportLabels[firstViewportIndexWithMatchingDisplaySetUid], isTracked: trackedSeries.includes(SeriesInstanceUID), isLocked: false, - studyDate: SeriesDate, // TODO: This is series date. Is that ok? + studyDate: formatDate(SeriesDate), // TODO: This is series date. Is that ok? currentSeries: SeriesNumber, seriesDescription: SeriesDescription, modality: Modality, diff --git a/platform/core/package.json b/platform/core/package.json index a14313b13..34aa934cc 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -44,6 +44,7 @@ "isomorphic-base64": "^1.0.2", "lodash.clonedeep": "^4.5.0", "lodash.merge": "^4.6.1", + "moment": "^2.24.0", "mousetrap": "^1.6.3", "validate.js": "^0.12.0" } diff --git a/platform/core/src/utils/formatDate.js b/platform/core/src/utils/formatDate.js new file mode 100644 index 000000000..a2a9a9bab --- /dev/null +++ b/platform/core/src/utils/formatDate.js @@ -0,0 +1,12 @@ +import moment from 'moment'; + +/** + * Format date + * + * @param {string} date Date to be formatted + * @param {string} format Desired date format + * @returns {string} Formatted date + */ +export default (date, format = 'DD-MMM-YYYY') => { + return moment(date).format(format); +}; diff --git a/platform/core/src/utils/index.js b/platform/core/src/utils/index.js index a69889262..fdf6974cc 100644 --- a/platform/core/src/utils/index.js +++ b/platform/core/src/utils/index.js @@ -15,6 +15,7 @@ import makeCancelable from './makeCancelable'; import hotkeys from './hotkeys'; import Queue from './Queue'; import isDicomUid from './isDicomUid'; +import formatDate from './formatDate'; import formatPN from './formatPN'; import resolveObjectPath from './resolveObjectPath'; import * as hierarchicalListUtils from './hierarchicalListUtils'; @@ -27,6 +28,7 @@ const utils = { addServers, sortBy, writeScript, + formatDate, formatPN, b64toBlob, StackManager, @@ -50,6 +52,7 @@ export { absoluteUrl, addServers, sortBy, + formatDate, writeScript, b64toBlob, StackManager, diff --git a/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.jsx b/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.jsx index f80dfccdb..e9b17b429 100644 --- a/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.jsx +++ b/platform/ui/src/components/InputLabelWrapper/InputLabelWrapper.jsx @@ -21,13 +21,21 @@ const InputLabelWrapper = ({ className, children, }) => { + const onClickHandler = e => { + if (!isSortable) { + return; + } + + onLabelClick(e); + }; + return (