-
{label}
+
+ {label}
+
+
+ {label}
+
- Relabel
+ Relabel
)}
@@ -90,7 +110,7 @@ SegmentItem.propTypes = {
SegmentItem.defaultProps = {
itemClass: '',
- onClick: () => { }
+ onClick: () => {},
};
export default SegmentItem;
diff --git a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js
index 79936efee2..7fb9d6bc9f 100644
--- a/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js
+++ b/extensions/dicom-segmentation/src/components/SegmentationPanel/SegmentationPanel.js
@@ -5,6 +5,7 @@ import cornerstone from 'cornerstone-core';
import moment from 'moment';
import { utils, log } from '@ohif/core';
import { ScrollableArea, TableList, Icon } from '@ohif/ui';
+import DICOMSegTempCrosshairsTool from '../../tools/DICOMSegTempCrosshairsTool';
import setActiveLabelmap from '../../utils/setActiveLabelMap';
import refreshViewports from '../../utils/refreshViewports';
@@ -334,6 +335,12 @@ const SegmentationPanel = ({
imageId
);
+ DICOMSegTempCrosshairsTool.addCrosshair(
+ element,
+ imageId,
+ segmentNumber
+ );
+
onSegmentItemClick({
StudyInstanceUID,
SOPInstanceUID,
diff --git a/extensions/dicom-segmentation/src/getOHIFDicomSegSopClassHandler.js b/extensions/dicom-segmentation/src/getOHIFDicomSegSopClassHandler.js
index 83f84ed425..2a3c5ad306 100644
--- a/extensions/dicom-segmentation/src/getOHIFDicomSegSopClassHandler.js
+++ b/extensions/dicom-segmentation/src/getOHIFDicomSegSopClassHandler.js
@@ -28,12 +28,12 @@ export default function getSopClassHandlerModule({ servicesManager }) {
const {
SeriesDate,
SeriesTime,
- SeriesNumber,
SeriesDescription,
FrameOfReferenceUID,
SOPInstanceUID,
SeriesInstanceUID,
StudyInstanceUID,
+ SeriesNumber,
} = metadata;
const segDisplaySet = {
@@ -55,6 +55,7 @@ export default function getSopClassHandlerModule({ servicesManager }) {
SeriesTime,
SeriesNumber,
SeriesDescription,
+ metadata,
};
segDisplaySet.getSourceDisplaySet = function(studies) {
diff --git a/extensions/dicom-segmentation/src/getSourceDisplaySet.js b/extensions/dicom-segmentation/src/getSourceDisplaySet.js
index f7b62bd096..f42351fcef 100644
--- a/extensions/dicom-segmentation/src/getSourceDisplaySet.js
+++ b/extensions/dicom-segmentation/src/getSourceDisplaySet.js
@@ -1,4 +1,7 @@
import setActiveLabelmap from './utils/setActiveLabelMap';
+import { classes } from '@ohif/core';
+
+const { ImageSet } = classes;
export default function getSourceDisplaySet(studies, segDisplaySet) {
const referencedDisplaySet = _getReferencedDisplaySet(segDisplaySet, studies);
@@ -19,15 +22,43 @@ const _getReferencedDisplaySet = (segDisplaySet, studies) => {
ds => ds.displaySetInstanceUID !== segDisplaySet.displaySetInstanceUID
);
- const ReferencedSeriesSequence = Array.isArray(
- segDisplaySet.metadata.ReferencedSeriesSequence
- )
- ? segDisplaySet.metadata.ReferencedSeriesSequence
- : [segDisplaySet.metadata.ReferencedSeriesSequence];
+ const { metadata } = segDisplaySet;
- const referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
- ReferencedSeries => ReferencedSeries.SeriesInstanceUID
- );
+ let referencedSeriesInstanceUIDs;
+
+ if (metadata.ReferencedSeriesSequence) {
+ const ReferencedSeriesSequence = _toArray(
+ metadata.ReferencedSeriesSequence
+ );
+
+ referencedSeriesInstanceUIDs = ReferencedSeriesSequence.map(
+ ReferencedSeries => ReferencedSeries.SeriesInstanceUID
+ );
+ } else {
+ const { PerFrameFunctionalGroupsSequence } = metadata;
+
+ let SourceImageSequence;
+
+ if (metadata.SourceImageSequence) {
+ SourceImageSequence = metadata.SourceImageSequence;
+ } else {
+ const firstFunctionalGroups = _toArray(
+ PerFrameFunctionalGroupsSequence
+ )[0];
+ const { DerivationImageSequence } = firstFunctionalGroups;
+
+ SourceImageSequence = DerivationImageSequence;
+ }
+
+ const firstSourceImage = _toArray(SourceImageSequence)[0];
+
+ const { ReferencedSOPInstanceUID } = firstSourceImage;
+
+ referencedSeriesInstanceUIDs = _findReferencedSeriesInstanceUIDsFromSOPInstanceUID(
+ otherDisplaySets,
+ ReferencedSOPInstanceUID
+ );
+ }
const referencedDisplaySet = otherDisplaySets.find(ds =>
referencedSeriesInstanceUIDs.includes(ds.SeriesInstanceUID)
@@ -35,3 +66,23 @@ const _getReferencedDisplaySet = (segDisplaySet, studies) => {
return referencedDisplaySet;
};
+
+const _findReferencedSeriesInstanceUIDsFromSOPInstanceUID = (
+ displaySets,
+ SOPInstanceUID
+) => {
+ const imageSets = displaySets.filter(ds => ds instanceof ImageSet);
+
+ for (let i = 0; i < imageSets.length; i++) {
+ const { images } = imageSets[i];
+ for (let j = 0; j < images.length; j++) {
+ if (images[j].SOPInstanceUID === SOPInstanceUID) {
+ return [images[j].getData().metadata.SeriesInstanceUID];
+ }
+ }
+ }
+};
+
+function _toArray(arrayOrObject) {
+ return Array.isArray(arrayOrObject) ? arrayOrObject : [arrayOrObject];
+}
diff --git a/extensions/dicom-segmentation/src/index.js b/extensions/dicom-segmentation/src/index.js
index d8f49de43f..d6c1714905 100644
--- a/extensions/dicom-segmentation/src/index.js
+++ b/extensions/dicom-segmentation/src/index.js
@@ -1,15 +1,16 @@
import React from 'react';
-
import init from './init.js';
import toolbarModule from './toolbarModule.js';
import getSopClassHandlerModule from './getOHIFDicomSegSopClassHandler.js';
import SegmentationPanel from './components/SegmentationPanel/SegmentationPanel.js';
+import { version } from '../package.json';
export default {
/**
* Only required property. Should be a unique value across all extensions.
*/
id: 'com.ohif.dicom-segmentation',
+ version,
/**
*
diff --git a/extensions/dicom-segmentation/src/init.js b/extensions/dicom-segmentation/src/init.js
index 504b1e92d8..e114dcd124 100644
--- a/extensions/dicom-segmentation/src/init.js
+++ b/extensions/dicom-segmentation/src/init.js
@@ -1,4 +1,5 @@
import csTools from 'cornerstone-tools';
+import DICOMSegTempCrosshairsTool from './tools/DICOMSegTempCrosshairsTool';
/**
*
@@ -17,4 +18,6 @@ export default function init({ servicesManager, configuration = {} }) {
alwaysEraseOnClick: true,
},
});
+
+ csTools.addTool(DICOMSegTempCrosshairsTool);
}
diff --git a/extensions/dicom-segmentation/src/tools/DICOMSegTempCrosshairsTool.js b/extensions/dicom-segmentation/src/tools/DICOMSegTempCrosshairsTool.js
new file mode 100644
index 0000000000..8bafbbc7b2
--- /dev/null
+++ b/extensions/dicom-segmentation/src/tools/DICOMSegTempCrosshairsTool.js
@@ -0,0 +1,127 @@
+import cornerstoneTools, {
+ importInternal,
+ getToolState,
+ toolColors,
+ getModule,
+ globalImageIdSpecificToolStateManager,
+} from 'cornerstone-tools';
+import cornerstone from 'cornerstone-core';
+import drawCanvasCrosshairs from '../utils/drawCanvasCrosshairs';
+import TOOL_NAMES from './TOOL_NAMES';
+
+const { DICOM_SEG_TEMP_CROSSHAIRS_TOOL } = TOOL_NAMES;
+const { getters } = getModule('segmentation');
+
+// Cornerstone 3rd party dev kit imports
+const BaseTool = importInternal('base/BaseTool');
+
+/**
+ * @class RTStructDisplayTool - Renders RTSTRUCT data in a read only manner (i.e. as an overlay).
+ * @extends cornerstoneTools.BaseTool
+ */
+export default class DICOMSegTempCrosshairsTool extends BaseTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ mixins: ['enabledOrDisabledBinaryTool'],
+ name: DICOM_SEG_TEMP_CROSSHAIRS_TOOL,
+ };
+
+ const initialProps = Object.assign(defaultProps, props);
+
+ super(initialProps);
+
+ this._rtStructModule = cornerstoneTools.getModule('rtstruct');
+ }
+
+ renderToolData(evt) {
+ const eventData = evt.detail;
+ const { element } = eventData;
+ const toolState = getToolState(evt.currentTarget, this.name);
+
+ if (!toolState) {
+ return;
+ }
+
+ // We have tool data for this element - iterate over each one and draw it
+
+ for (let i = 0; i < toolState.data.length; i++) {
+ const data = toolState.data[i];
+ const crossHairCenter = data.center;
+
+ drawCanvasCrosshairs(eventData, crossHairCenter, {
+ color: toolColors.getActiveColor(),
+ lineWidth: 1,
+ });
+
+ // Remove the crosshairs, we only render them for one redraw.
+ toolState.data.pop();
+ }
+ }
+}
+
+DICOMSegTempCrosshairsTool.addCrosshair = (element, imageId, segmentNumber) => {
+ const labelmap3D = getters.labelmap3D(element);
+ const stackToolState = cornerstoneTools.getToolState(element, 'stack');
+ const enabledElement = cornerstone.getEnabledElement(element);
+
+ const { rows, columns } = enabledElement.image;
+
+ if (!stackToolState) {
+ return;
+ }
+
+ const imageIds = stackToolState.data[0].imageIds;
+ const imageIdIndex = imageIds.findIndex(imgId => imgId === imageId);
+
+ const labelmap2D = labelmap3D.labelmaps2D[imageIdIndex];
+ const { pixelData } = labelmap2D;
+
+ let xCenter = 0;
+ let yCenter = 0;
+
+ let count = 0;
+
+ for (let y = 0; y < rows; y++) {
+ for (let x = 0; x < columns; x++) {
+ if (pixelData[y * columns + x] === segmentNumber) {
+ count++;
+ xCenter += x + 0.5;
+ yCenter += y + 0.5;
+ }
+ }
+ }
+
+ xCenter /= count;
+ yCenter /= count;
+
+ const globalToolState = globalImageIdSpecificToolStateManager.saveToolState();
+
+ if (!globalToolState[imageId]) {
+ globalToolState[imageId] = {};
+ }
+
+ const imageIdSpecificToolState = globalToolState[imageId];
+
+ if (!imageIdSpecificToolState[DICOM_SEG_TEMP_CROSSHAIRS_TOOL]) {
+ imageIdSpecificToolState[DICOM_SEG_TEMP_CROSSHAIRS_TOOL] = { data: [] };
+ } else if (!imageIdSpecificToolState[DICOM_SEG_TEMP_CROSSHAIRS_TOOL].data) {
+ imageIdSpecificToolState[DICOM_SEG_TEMP_CROSSHAIRS_TOOL].data = [];
+ }
+
+ const toolSpecificData =
+ imageIdSpecificToolState[DICOM_SEG_TEMP_CROSSHAIRS_TOOL].data;
+
+ toolSpecificData.push({ center: { x: xCenter, y: yCenter }, segmentNumber });
+
+ // Enable the tool if not enabled for the element.
+
+ const tool = cornerstoneTools.getToolForElement(
+ element,
+ DICOM_SEG_TEMP_CROSSHAIRS_TOOL
+ );
+
+ if (tool.mode !== 'enabled') {
+ // If not already active or passive, set passive so contours render.
+ cornerstoneTools.setToolEnabled(DICOM_SEG_TEMP_CROSSHAIRS_TOOL);
+ }
+};
diff --git a/extensions/dicom-segmentation/src/tools/TOOL_NAMES.js b/extensions/dicom-segmentation/src/tools/TOOL_NAMES.js
new file mode 100644
index 0000000000..57fc2dff56
--- /dev/null
+++ b/extensions/dicom-segmentation/src/tools/TOOL_NAMES.js
@@ -0,0 +1,5 @@
+const TOOL_NAMES = {
+ DICOM_SEG_TEMP_CROSSHAIRS_TOOL: 'DICOMSegTempCrosshairsTool',
+};
+
+export default TOOL_NAMES;
diff --git a/extensions/dicom-segmentation/src/utils/drawCanvasCrosshairs.js b/extensions/dicom-segmentation/src/utils/drawCanvasCrosshairs.js
new file mode 100644
index 0000000000..cb4645e246
--- /dev/null
+++ b/extensions/dicom-segmentation/src/utils/drawCanvasCrosshairs.js
@@ -0,0 +1,56 @@
+import cornerstone from 'cornerstone-core';
+import cornerstoneTools from 'cornerstone-tools';
+
+const { importInternal } = cornerstoneTools;
+const draw = importInternal('drawing/draw');
+const drawLine = importInternal('drawing/drawLine');
+const getNewContext = importInternal('drawing/getNewContext');
+
+export default function _drawCanvasCrosshairs(eventData, center, options) {
+ const context = getNewContext(eventData.canvasContext.canvas);
+ const { element } = eventData;
+
+ const centerCanvas = cornerstone.pixelToCanvas(element, center);
+
+ const { clientWidth: width, clientHeight: height } = element;
+
+ const offset = 10;
+
+ draw(context, context => {
+ drawLine(
+ context,
+ element,
+ { x: centerCanvas.x + offset, y: centerCanvas.y },
+ { x: width, y: centerCanvas.y },
+ options,
+ 'canvas'
+ );
+
+ drawLine(
+ context,
+ element,
+ { x: centerCanvas.x - offset, y: centerCanvas.y },
+ { x: 0, y: centerCanvas.y },
+ options,
+ 'canvas'
+ );
+
+ drawLine(
+ context,
+ element,
+ { x: centerCanvas.x, y: centerCanvas.y + offset },
+ { x: centerCanvas.x, y: height },
+ options,
+ 'canvas'
+ );
+
+ drawLine(
+ context,
+ element,
+ { x: centerCanvas.x, y: centerCanvas.y - offset },
+ { x: centerCanvas.x, y: 0 },
+ options,
+ 'canvas'
+ );
+ });
+}
diff --git a/extensions/dicom-tag-browser/.webpack/webpack.dev.js b/extensions/dicom-tag-browser/.webpack/webpack.dev.js
new file mode 100644
index 0000000000..1ae3084480
--- /dev/null
+++ b/extensions/dicom-tag-browser/.webpack/webpack.dev.js
@@ -0,0 +1,8 @@
+const path = require('path');
+const webpackCommon = require('./../../../.webpack/webpack.commonjs.js');
+const SRC_DIR = path.join(__dirname, '../src');
+const DIST_DIR = path.join(__dirname, '../dist');
+
+module.exports = (env, argv) => {
+ return webpackCommon(env, argv, { SRC_DIR, DIST_DIR });
+};
diff --git a/extensions/dicom-tag-browser/.webpack/webpack.prod.js b/extensions/dicom-tag-browser/.webpack/webpack.prod.js
new file mode 100644
index 0000000000..31dff1ae7b
--- /dev/null
+++ b/extensions/dicom-tag-browser/.webpack/webpack.prod.js
@@ -0,0 +1,38 @@
+const merge = require('webpack-merge');
+const path = require('path');
+const webpackCommon = require('./../../../.webpack/webpack.commonjs.js');
+const pkg = require('./../package.json');
+
+const ROOT_DIR = path.join(__dirname, './..');
+const SRC_DIR = path.join(__dirname, '../src');
+const DIST_DIR = path.join(__dirname, '../dist');
+
+module.exports = (env, argv) => {
+ const commonConfig = webpackCommon(env, argv, { SRC_DIR, DIST_DIR });
+
+ return merge(commonConfig, {
+ devtool: 'source-map',
+ stats: {
+ colors: true,
+ hash: true,
+ timings: true,
+ assets: true,
+ chunks: false,
+ chunkModules: false,
+ modules: false,
+ children: false,
+ warnings: true,
+ },
+ optimization: {
+ minimize: true,
+ sideEffects: true,
+ },
+ output: {
+ path: ROOT_DIR,
+ library: 'OHIFExtDicomP10Downloader',
+ libraryTarget: 'umd',
+ libraryExport: 'default',
+ filename: pkg.main,
+ },
+ });
+};
diff --git a/extensions/dicom-tag-browser/CHANGELOG.md b/extensions/dicom-tag-browser/CHANGELOG.md
new file mode 100644
index 0000000000..0e8396c9a3
--- /dev/null
+++ b/extensions/dicom-tag-browser/CHANGELOG.md
@@ -0,0 +1,8 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+## 0.0.2 (2020-09-10)
+
+**Note:** Version bump only for package @ohif/extension-dicom-tag-browser
diff --git a/extensions/dicom-tag-browser/LICENSE b/extensions/dicom-tag-browser/LICENSE
new file mode 100644
index 0000000000..19e20dd35c
--- /dev/null
+++ b/extensions/dicom-tag-browser/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Open Health Imaging Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/extensions/dicom-tag-browser/README.md b/extensions/dicom-tag-browser/README.md
new file mode 100644
index 0000000000..f666b3ef90
--- /dev/null
+++ b/extensions/dicom-tag-browser/README.md
@@ -0,0 +1 @@
+# @ohif/extension-dicom-tag-browser
diff --git a/extensions/dicom-tag-browser/package.json b/extensions/dicom-tag-browser/package.json
new file mode 100644
index 0000000000..1613b6589a
--- /dev/null
+++ b/extensions/dicom-tag-browser/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@ohif/extension-dicom-tag-browser",
+ "version": "0.0.2",
+ "description": "OHIF extension for checking DICOM headers.",
+ "author": "OHIF",
+ "license": "MIT",
+ "repository": "OHIF/Viewers",
+ "main": "dist/index.umd.js",
+ "module": "src/index.js",
+ "publishConfig": {
+ "access": "public"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6",
+ "yarn": ">=1.16.0"
+ },
+ "files": [
+ "dist",
+ "README.md"
+ ],
+ "scripts": {
+ "dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --debug --output-pathinfo",
+ "build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js",
+ "build:package": "yarn run build",
+ "prepublishOnly": "yarn run build",
+ "start": "yarn run dev"
+ },
+ "peerDependencies": {
+ "@ohif/core": "^2.6.0",
+ "dcmjs": "0.16.0",
+ "react": "^16.8.6"
+ },
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dicomweb-client": "^0.6.0",
+ "moment": "2.24.0",
+ "react-select": "^3.0.8"
+ }
+}
diff --git a/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js b/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js
new file mode 100644
index 0000000000..f8d62f8780
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/components/DicomBrowserSelect.js
@@ -0,0 +1,58 @@
+import React from 'react';
+import Select from 'react-select';
+
+const DicomBrowserSelect = ({ value, formatOptionLabel, options }) => (
+
+);
+
+const computedstyle = getComputedStyle(document.body);
+const uiGrayDarker = computedstyle.getPropertyValue('--ui-gray-darker');
+const activeColor = computedstyle.getPropertyValue('--active-color');
+const defaultColor = computedstyle.getPropertyValue('--default-color');
+const uiGrayDark = computedstyle.getPropertyValue('--ui-gray-dark');
+
+const dicomBrowserSelectStyles = {
+ singleValue: (base, state) => ({
+ ...base,
+ width: '100%',
+ }),
+ control: (base, state) => ({
+ ...base,
+ cursor: 'pointer',
+ background: uiGrayDarker,
+ borderRadius: state.isFocused ? '5px 5px 5px 5px' : 5,
+ borderColor: state.isFocused ? activeColor : defaultColor,
+ minHeight: '50px',
+ '&:hover': {
+ borderColor: activeColor,
+ },
+ }),
+ menu: base => ({
+ ...base,
+ borderRadius: 5,
+ background: uiGrayDarker,
+ }),
+ option: (base, state) => ({
+ ...base,
+ cursor: 'pointer',
+ '&:first-of-type': {
+ borderTopLeftRadius: 5,
+ borderTopRightRadius: 5,
+ },
+ '&:last-of-type': {
+ borderBottomLeftRadius: 5,
+ borderBottomRightRadius: 5,
+ },
+ background: state.isSelected ? uiGrayDark : uiGrayDarker,
+ '&:hover': {
+ background: uiGrayDark,
+ },
+ }),
+};
+
+export default DicomBrowserSelect;
diff --git a/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css
new file mode 100644
index 0000000000..bc65eee35d
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.css
@@ -0,0 +1,25 @@
+.dcmseg-segmentation-item {
+ display: flex;
+ justify-content: start;
+ margin: 0;
+}
+
+.dcmseg-segmentation-item .segmentation-meta {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ overflow: hidden;
+}
+
+.dcmseg-segmentation-item .segmentation-meta-title {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ color: white;
+ max-width: calc(100% - 30px);
+}
+
+.dcmseg-segmentation-item .segmentation-meta-description {
+ font-size: 12px;
+ color: var(--text-secondary-color);
+}
diff --git a/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.js b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.js
new file mode 100644
index 0000000000..428ed6413a
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/components/DicomBrowserSelectItem.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+import './DicomBrowserSelectItem.css';
+
+const DicomBrowserSelectItem = ({ onClick, title, description }) => {
+ return (
+
+
+
{title}
+
{description}
+
+
+ );
+};
+
+DicomBrowserSelectItem.propTypes = {
+ onClick: PropTypes.func.isRequired,
+ title: PropTypes.string.isRequired,
+ description: PropTypes.string.isRequired,
+};
+
+DicomBrowserSelectItem.defaultProps = {
+ description: '',
+};
+
+export default DicomBrowserSelectItem;
diff --git a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css
new file mode 100644
index 0000000000..3b336a1dc2
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.css
@@ -0,0 +1,27 @@
+.dicom-tag-browser-table {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.dicom-tag-browser-table td {
+ padding-left: 10px;
+ padding-right: 10px;
+ color: var(--table-text-primary-color);
+ border-top: 1px solid #ddd;
+ white-space: nowrap;
+}
+
+.dicom-tag-browser-table td.dicom-tag-browser-table-center {
+ text-align: center;
+}
+
+.dicom-tag-browser-table th {
+ padding-left: 10px;
+ padding-right: 10px;
+ text-align: center;
+ color: var(--active-color);
+}
+
+.dicom-tag-browser-table th.dicom-tag-browser-table-left {
+ text-align: left;
+}
diff --git a/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js
new file mode 100644
index 0000000000..dae111451d
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/components/DicomTagBrowser.js
@@ -0,0 +1,228 @@
+import React, { useState } from 'react';
+import { classes } from '@ohif/core';
+import dcmjs from 'dcmjs';
+import DicomBrowserSelect from './DicomBrowserSelect';
+import moment from 'moment';
+import './DicomTagBrowser.css';
+import DicomBrowserSelectItem from './DicomBrowserSelectItem';
+
+const { ImageSet } = classes;
+const { DicomMetaDictionary } = dcmjs.data;
+const { nameMap } = DicomMetaDictionary;
+
+const DicomTagBrowser = ({ displaySets, displaySetInstanceUID }) => {
+ const [
+ activeDisplaySetInstanceUID,
+ setActiveDisplaySetInstanceUID,
+ ] = useState(displaySetInstanceUID);
+ const [activeInstance, setActiveInstance] = useState(0);
+
+ const activeDisplaySet = displaySets.find(
+ ds => ds.displaySetInstanceUID === activeDisplaySetInstanceUID
+ );
+
+ const displaySetList = displaySets.map(displaySet => {
+ const {
+ displaySetInstanceUID,
+ SeriesDate,
+ SeriesTime,
+ SeriesNumber,
+ SeriesDescription,
+ Modality,
+ } = displaySet;
+
+ /* Map to display representation */
+ const dateStr = `${SeriesDate}:${SeriesTime}`.split('.')[0];
+ const date = moment(dateStr, 'YYYYMMDD:HHmmss');
+ const displayDate = date.format('ddd, MMM Do YYYY');
+
+ return {
+ value: displaySetInstanceUID,
+ title: `${SeriesNumber} (${Modality}): ${SeriesDescription}`,
+ description: displayDate,
+ onClick: () => {
+ setActiveDisplaySetInstanceUID(displaySetInstanceUID);
+ setActiveInstance(0);
+ },
+ };
+ });
+
+ let metadata;
+ const isImageStack = activeDisplaySet instanceof ImageSet;
+
+ let selectedInstanceValue;
+ let instanceList;
+
+ if (isImageStack) {
+ const { images } = activeDisplaySet;
+ const image = images[activeInstance];
+
+ instanceList = images.map((image, index) => {
+ const metadata = image.getData().metadata;
+
+ const { InstanceNumber } = metadata;
+
+ return {
+ value: index,
+ title: `Instance Number: ${InstanceNumber}`,
+ description: '',
+ onClick: () => {
+ setActiveInstance(index);
+ },
+ };
+ });
+
+ selectedInstanceValue = instanceList[activeInstance];
+
+ metadata = image.getData().metadata;
+ } else {
+ metadata = activeDisplaySet.metadata;
+ }
+
+ const selectedDisplaySetValue = displaySetList.find(
+ ds => ds.value === activeDisplaySetInstanceUID
+ );
+
+ return (
+
+
+ {isImageStack ? (
+
+ ) : null}
+
+
+ );
+};
+
+function DicomTagTable({ instanceMetadata }) {
+ const rows = getRows(instanceMetadata);
+
+ return (
+
+
+
+ Tag |
+ Value Representation |
+ Keyword |
+ Value |
+
+ {rows.map(row => (
+
+ {row[0]} |
+ {row[1]} |
+ {row[2]} |
+ {row[3]} |
+
+ ))}
+
+
+ );
+}
+
+function getRows(metadata, depth = 0) {
+ // Tag, Type, Value, Keyword
+
+ const keywords = Object.keys(metadata);
+
+ let tagIndent = '';
+
+ for (let i = 0; i < depth; i++) {
+ tagIndent += '>';
+ }
+
+ const rows = [];
+
+ for (let i = 0; i < keywords.length; i++) {
+ let keyword = keywords[i];
+
+ if (keyword === '_vrMap') {
+ continue;
+ }
+
+ const tagInfo = nameMap[keyword];
+
+ let value = metadata[keyword];
+
+ if (tagInfo && tagInfo.vr === 'SQ') {
+ const sequenceAsArray = toArray(value);
+
+ // Push line defining the sequence
+ rows.push([`${tagIndent}${tagInfo.tag}`, tagInfo.vr, keyword, '']);
+
+ if (value === null) {
+ // Type 2 Sequence
+ continue;
+ }
+
+ sequenceAsArray.forEach(item => {
+ const sequenceRows = getRows(item, depth + 1);
+
+ sequenceRows.forEach(row => {
+ rows.push(row);
+ });
+ });
+
+ continue;
+ }
+
+ if (Array.isArray(value)) {
+ value = value.join('\\');
+ }
+
+ if (typeof value === 'number') {
+ value = value.toString();
+ }
+
+ if (typeof value !== 'string') {
+ if (value === null) {
+ value = ' ';
+ } else {
+ if (typeof value === 'object') {
+ if (value.InlineBinary) {
+ value = 'Inline Binary';
+ } else if (value.BulkDataURI) {
+ value = `Bulk Data URI`; //: ${value.BulkDataURI}`;
+ } else if (value.Alphabetic) {
+ value = value.Alphabetic;
+ } else {
+ console.error('Unrecognised Value for element:');
+ console.error(value);
+ value = ' ';
+ }
+ } else {
+ console.error('Unrecognised Value for element:');
+ console.error(value);
+ value = ' ';
+ }
+ }
+ }
+
+ // Remove retired tags
+ keyword = keyword.replace('RETIRED_', '');
+
+ if (tagInfo) {
+ rows.push([`${tagIndent}${tagInfo.tag}`, tagInfo.vr, keyword, value]);
+ } else {
+ // Private tag
+ const tag = `(${keyword.substring(0, 4)},${keyword.substring(4, 8)})`;
+
+ rows.push([`${tagIndent}${tag}`, '', 'Private Tag', value]);
+ }
+ }
+
+ return rows;
+}
+
+function toArray(objectOrArray) {
+ return Array.isArray(objectOrArray) ? objectOrArray : [objectOrArray];
+}
+
+export default DicomTagBrowser;
diff --git a/extensions/dicom-tag-browser/src/getCommandsModule.js b/extensions/dicom-tag-browser/src/getCommandsModule.js
new file mode 100644
index 0000000000..274e5e1277
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/getCommandsModule.js
@@ -0,0 +1,52 @@
+import { utils } from '@ohif/core';
+import React from 'react';
+import DicomTagBrowser from './components/DicomTagBrowser';
+
+const { studyMetadataManager } = utils;
+
+export default function getCommandsModule(servicesManager) {
+ const actions = {
+ openDICOMTagViewer({ viewports }) {
+ const { activeViewportIndex, viewportSpecificData } = viewports;
+ const activeViewportSpecificData =
+ viewportSpecificData[activeViewportIndex];
+
+ const {
+ StudyInstanceUID,
+ displaySetInstanceUID,
+ } = activeViewportSpecificData;
+
+ const studyMetadata = studyMetadataManager.get(StudyInstanceUID);
+ const displaySets = studyMetadata.getDisplaySets();
+
+ const { UIModalService } = servicesManager.services;
+
+ const WrappedDicomTagBrowser = function() {
+ return (
+
+ );
+ };
+
+ UIModalService.show({
+ content: WrappedDicomTagBrowser,
+ title: `DICOM Tag Browser`,
+ fullscreen: true,
+ });
+ },
+ };
+
+ const definitions = {
+ openDICOMTagViewer: {
+ commandFn: actions.openDICOMTagViewer,
+ storeContexts: ['servers', 'viewports'],
+ },
+ };
+
+ return {
+ actions,
+ definitions,
+ };
+}
diff --git a/extensions/dicom-tag-browser/src/index.js b/extensions/dicom-tag-browser/src/index.js
new file mode 100644
index 0000000000..e6b5702a19
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/index.js
@@ -0,0 +1,26 @@
+import getCommandsModule from './getCommandsModule';
+import toolbarModule from './toolbarModule';
+
+/**
+ * Constants
+ */
+
+/**
+ * Extension
+ */
+export default {
+ /**
+ * Only required property. Should be a unique value across all extensions.
+ */
+ id: 'dicom-tag-browser',
+
+ /**
+ * MODULE GETTERS
+ */
+ getCommandsModule({ servicesManager }) {
+ return getCommandsModule(servicesManager);
+ },
+ getToolbarModule() {
+ return toolbarModule;
+ },
+};
diff --git a/extensions/dicom-tag-browser/src/toolbarModule.js b/extensions/dicom-tag-browser/src/toolbarModule.js
new file mode 100644
index 0000000000..0eb1c77a4b
--- /dev/null
+++ b/extensions/dicom-tag-browser/src/toolbarModule.js
@@ -0,0 +1,20 @@
+const TOOLBAR_BUTTON_TYPES = {
+ COMMAND: 'command',
+};
+
+const definitions = [
+ {
+ id: 'TagBrowser',
+ label: 'Tag Browser',
+ icon: 'list',
+ //
+ type: TOOLBAR_BUTTON_TYPES.COMMAND,
+ commandName: 'openDICOMTagViewer',
+ context: 'VIEWER',
+ },
+];
+
+export default {
+ definitions,
+ defaultContext: 'VIEWER',
+};
diff --git a/extensions/lesion-tracker/CHANGELOG.md b/extensions/lesion-tracker/CHANGELOG.md
index 7d23c9be6c..551621f1e1 100644
--- a/extensions/lesion-tracker/CHANGELOG.md
+++ b/extensions/lesion-tracker/CHANGELOG.md
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [0.2.1](https://github.com/OHIF/Viewers/compare/@ohif/extension-lesion-tracker@0.2.0...@ohif/extension-lesion-tracker@0.2.1) (2020-09-03)
+
+**Note:** Version bump only for package @ohif/extension-lesion-tracker
+
+
+
+
+
# [0.2.0](https://github.com/OHIF/Viewers/compare/@ohif/extension-lesion-tracker@0.1.0...@ohif/extension-lesion-tracker@0.2.0) (2020-02-10)
diff --git a/extensions/lesion-tracker/package.json b/extensions/lesion-tracker/package.json
index 371d92693f..ef56b97762 100644
--- a/extensions/lesion-tracker/package.json
+++ b/extensions/lesion-tracker/package.json
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-lesion-tracker",
- "version": "0.2.0",
+ "version": "0.2.1",
"description": "OHIF extension for Lesion Tracker",
"author": "OHIF",
"license": "MIT",
diff --git a/extensions/lesion-tracker/src/index.js b/extensions/lesion-tracker/src/index.js
index a521b2128b..a3a6d04996 100644
--- a/extensions/lesion-tracker/src/index.js
+++ b/extensions/lesion-tracker/src/index.js
@@ -1,10 +1,12 @@
import MeasurementComparisonTable from './components/MeasurementComparisonTable';
+import { version } from '../package.json';
export default {
/**
* Only required property. Should be a unique value across all extensions.
*/
id: 'lesion-tracker',
+ version,
/**
* @param {object} params
@@ -26,7 +28,7 @@ export default {
component: MeasurementComparisonTable,
},
],
- defaultContext: ['VIEWER']
+ defaultContext: ['VIEWER'],
};
},
diff --git a/extensions/vtk/CHANGELOG.md b/extensions/vtk/CHANGELOG.md
index 5d330d917c..727f576736 100644
--- a/extensions/vtk/CHANGELOG.md
+++ b/extensions/vtk/CHANGELOG.md
@@ -3,6 +3,46 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.7.7](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.6...@ohif/extension-vtk@1.7.7) (2020-09-17)
+
+**Note:** Version bump only for package @ohif/extension-vtk
+
+
+
+
+
+## [1.7.6](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.5...@ohif/extension-vtk@1.7.6) (2020-09-10)
+
+**Note:** Version bump only for package @ohif/extension-vtk
+
+
+
+
+
+## [1.7.5](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.4...@ohif/extension-vtk@1.7.5) (2020-09-03)
+
+**Note:** Version bump only for package @ohif/extension-vtk
+
+
+
+
+
+## [1.7.4](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.3...@ohif/extension-vtk@1.7.4) (2020-09-03)
+
+**Note:** Version bump only for package @ohif/extension-vtk
+
+
+
+
+
+## [1.7.3](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.2...@ohif/extension-vtk@1.7.3) (2020-09-02)
+
+**Note:** Version bump only for package @ohif/extension-vtk
+
+
+
+
+
## [1.7.2](https://github.com/OHIF/Viewers/compare/@ohif/extension-vtk@1.7.1...@ohif/extension-vtk@1.7.2) (2020-08-28)
**Note:** Version bump only for package @ohif/extension-vtk
diff --git a/extensions/vtk/package.json b/extensions/vtk/package.json
index 2015e17863..0296c45e91 100644
--- a/extensions/vtk/package.json
+++ b/extensions/vtk/package.json
@@ -1,6 +1,6 @@
{
"name": "@ohif/extension-vtk",
- "version": "1.7.2",
+ "version": "1.7.7",
"description": "OHIF extension for VTK.js",
"author": "OHIF",
"license": "MIT",
@@ -35,7 +35,7 @@
"cornerstone-core": "^2.2.8",
"cornerstone-tools": "^4.20.1",
"cornerstone-wado-image-loader": "^3.1.0",
- "dcmjs": "0.16.0",
+ "dcmjs": "0.16.3",
"dicom-parser": "^1.8.3",
"i18next": "^17.0.3",
"i18next-browser-languagedetector": "^3.0.1",
@@ -53,8 +53,8 @@
"react-vtkjs-viewport": "^0.10.4"
},
"devDependencies": {
- "@ohif/core": "^2.10.1",
- "@ohif/ui": "^1.5.3",
+ "@ohif/core": "^2.10.5",
+ "@ohif/ui": "^1.5.5",
"cornerstone-tools": "^4.20.1",
"cornerstone-wado-image-loader": "^3.1.0",
"dicom-parser": "^1.8.3",
diff --git a/extensions/vtk/src/index.js b/extensions/vtk/src/index.js
index 6ee1d14e47..d327e16f39 100644
--- a/extensions/vtk/src/index.js
+++ b/extensions/vtk/src/index.js
@@ -3,6 +3,7 @@ import asyncComponent from './asyncComponent.js';
import commandsModule from './commandsModule.js';
import toolbarModule from './toolbarModule.js';
import withCommandsManager from './withCommandsManager.js';
+import { version } from '../package.json';
// This feels weird
// import loadLocales from './loadLocales';
@@ -15,6 +16,7 @@ const vtkExtension = {
* Only required property. Should be a unique value across all extensions.
*/
id: 'vtk',
+ version,
getViewportModule({ commandsManager, servicesManager }) {
const ExtendedVTKViewport = props => (
diff --git a/platform/core/CHANGELOG.md b/platform/core/CHANGELOG.md
index 045751baa6..b4568fa03d 100644
--- a/platform/core/CHANGELOG.md
+++ b/platform/core/CHANGELOG.md
@@ -1,245 +1,179 @@
# Change Log
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+All notable changes to this project will be documented in this file. See
+[Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-## [2.10.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.0...@ohif/core@2.10.1) (2020-08-28)
+## [2.10.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.4...@ohif/core@2.10.5) (2020-09-10)
**Note:** Version bump only for package @ohif/core
+## [2.10.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.3...@ohif/core@2.10.4) (2020-09-03)
+**Note:** Version bump only for package @ohif/core
+## [2.10.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.2...@ohif/core@2.10.3) (2020-09-03)
+**Note:** Version bump only for package @ohif/core
-# [2.10.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.14...@ohif/core@2.10.0) (2020-08-18)
-
+## [2.10.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.1...@ohif/core@2.10.2) (2020-09-02)
-### Features
+**Note:** Version bump only for package @ohif/core
-* 🎸 Update react-vtkjs-viewport usage to use requestPool ([#1984](https://github.com/OHIF/Viewers/issues/1984)) ([bb5f30c](https://github.com/OHIF/Viewers/commit/bb5f30ce2a0192d2e021beaaadfff22fd38e17b9))
+## [2.10.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.10.0...@ohif/core@2.10.1) (2020-08-28)
+**Note:** Version bump only for package @ohif/core
+# [2.10.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.14...@ohif/core@2.10.0) (2020-08-18)
+### Features
+- 🎸 Update react-vtkjs-viewport usage to use requestPool
+ ([#1984](https://github.com/OHIF/Viewers/issues/1984))
+ ([bb5f30c](https://github.com/OHIF/Viewers/commit/bb5f30ce2a0192d2e021beaaadfff22fd38e17b9))
## [2.9.14](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.13...@ohif/core@2.9.14) (2020-08-10)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.9.13](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.12...@ohif/core@2.9.13) (2020-07-22)
-
### Bug Fixes
-* Switch DICOMFileUploader to use the UIModalService ([#1904](https://github.com/OHIF/Viewers/issues/1904)) ([7772fee](https://github.com/OHIF/Viewers/commit/7772fee21ae6a65994e1251e2f1d2554b47781be))
-
-
-
-
+- Switch DICOMFileUploader to use the UIModalService
+ ([#1904](https://github.com/OHIF/Viewers/issues/1904))
+ ([7772fee](https://github.com/OHIF/Viewers/commit/7772fee21ae6a65994e1251e2f1d2554b47781be))
## [2.9.12](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.11...@ohif/core@2.9.12) (2020-07-13)
-
### Bug Fixes
-* 🐛 - Put guards in all places that a cornerstone re-render ([#1899](https://github.com/OHIF/Viewers/issues/1899)) ([451f7ea](https://github.com/OHIF/Viewers/commit/451f7eab9258e7a193eb362e0926b13aedc4b3c9))
-
-
-
-
+- 🐛 - Put guards in all places that a cornerstone re-render
+ ([#1899](https://github.com/OHIF/Viewers/issues/1899))
+ ([451f7ea](https://github.com/OHIF/Viewers/commit/451f7eab9258e7a193eb362e0926b13aedc4b3c9))
## [2.9.11](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.10...@ohif/core@2.9.11) (2020-07-13)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.9.10](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.9...@ohif/core@2.9.10) (2020-07-13)
-
### Bug Fixes
-* 🐛 Fix RT Panel hide/show and Fix looping load errors ([#1877](https://github.com/OHIF/Viewers/issues/1877)) ([e7cc735](https://github.com/OHIF/Viewers/commit/e7cc735c03d02eeb0d3af4ba02c15ed4f81bbec2))
-
-
-
-
+- 🐛 Fix RT Panel hide/show and Fix looping load errors
+ ([#1877](https://github.com/OHIF/Viewers/issues/1877))
+ ([e7cc735](https://github.com/OHIF/Viewers/commit/e7cc735c03d02eeb0d3af4ba02c15ed4f81bbec2))
## [2.9.9](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.8...@ohif/core@2.9.9) (2020-06-18)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.9.8](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.7...@ohif/core@2.9.8) (2020-06-15)
-
### Bug Fixes
-* 🐛 Disable seg panel when data for seg unavailable ([#1732](https://github.com/OHIF/Viewers/issues/1732)) ([698e900](https://github.com/OHIF/Viewers/commit/698e900b85121d3c2a46747c443ef69fb7a8c95b)), closes [#1728](https://github.com/OHIF/Viewers/issues/1728)
-
-
-
-
+- 🐛 Disable seg panel when data for seg unavailable
+ ([#1732](https://github.com/OHIF/Viewers/issues/1732))
+ ([698e900](https://github.com/OHIF/Viewers/commit/698e900b85121d3c2a46747c443ef69fb7a8c95b)),
+ closes [#1728](https://github.com/OHIF/Viewers/issues/1728)
## [2.9.7](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.6...@ohif/core@2.9.7) (2020-06-04)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.9.6](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.5...@ohif/core@2.9.6) (2020-05-14)
-
### Bug Fixes
-* 🐛 Load default display set when no time metadata ([#1684](https://github.com/OHIF/Viewers/issues/1684)) ([f7b8b6a](https://github.com/OHIF/Viewers/commit/f7b8b6a41c4626084ef56b0fdf7363e914b143c4)), closes [#1683](https://github.com/OHIF/Viewers/issues/1683)
-
-
-
-
+- 🐛 Load default display set when no time metadata
+ ([#1684](https://github.com/OHIF/Viewers/issues/1684))
+ ([f7b8b6a](https://github.com/OHIF/Viewers/commit/f7b8b6a41c4626084ef56b0fdf7363e914b143c4)),
+ closes [#1683](https://github.com/OHIF/Viewers/issues/1683)
## [2.9.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.4...@ohif/core@2.9.5) (2020-05-12)
-
### Bug Fixes
-* 🐛 Fix seg color load ([#1724](https://github.com/OHIF/Viewers/issues/1724)) ([c4f84b1](https://github.com/OHIF/Viewers/commit/c4f84b1174d04ba84d37ed89b6d7ab541be28181))
-
-
-
-
+- 🐛 Fix seg color load ([#1724](https://github.com/OHIF/Viewers/issues/1724))
+ ([c4f84b1](https://github.com/OHIF/Viewers/commit/c4f84b1174d04ba84d37ed89b6d7ab541be28181))
## [2.9.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.3...@ohif/core@2.9.4) (2020-05-06)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.9.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.2...@ohif/core@2.9.3) (2020-05-04)
-
### Bug Fixes
-* 🐛 Proper error handling for derived display sets ([#1708](https://github.com/OHIF/Viewers/issues/1708)) ([5b20d8f](https://github.com/OHIF/Viewers/commit/5b20d8f323e4b3ef9988f2f2ab672d697b6da409))
-
-
-
-
+- 🐛 Proper error handling for derived display sets
+ ([#1708](https://github.com/OHIF/Viewers/issues/1708))
+ ([5b20d8f](https://github.com/OHIF/Viewers/commit/5b20d8f323e4b3ef9988f2f2ab672d697b6da409))
## [2.9.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.1...@ohif/core@2.9.2) (2020-05-04)
-
### Bug Fixes
-* use bit-appropriate array for palette lookup tables ([#1698](https://github.com/OHIF/Viewers/issues/1698)) ([7033886](https://github.com/OHIF/Viewers/commit/70338866978a76fa026c18d7c3c05257c5ece762))
-
-
-
-
+- use bit-appropriate array for palette lookup tables
+ ([#1698](https://github.com/OHIF/Viewers/issues/1698))
+ ([7033886](https://github.com/OHIF/Viewers/commit/70338866978a76fa026c18d7c3c05257c5ece762))
## [2.9.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.9.0...@ohif/core@2.9.1) (2020-04-28)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# [2.9.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.8.1...@ohif/core@2.9.0) (2020-04-24)
-
### Features
-* 🎸 Seg jump to slice + show/hide ([835f64d](https://github.com/OHIF/Viewers/commit/835f64d47a9994f6a25aaf3941a4974e215e7e7f))
-
-
-
-
+- 🎸 Seg jump to slice + show/hide
+ ([835f64d](https://github.com/OHIF/Viewers/commit/835f64d47a9994f6a25aaf3941a4974e215e7e7f))
## [2.8.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.8.0...@ohif/core@2.8.1) (2020-04-23)
-
### Bug Fixes
-* 🐛 Multiframe fix ([#1661](https://github.com/OHIF/Viewers/issues/1661)) ([7120561](https://github.com/OHIF/Viewers/commit/71205618ecb8b592247c5acb32284bfe7e18fce5))
-
-
-
-
+- 🐛 Multiframe fix ([#1661](https://github.com/OHIF/Viewers/issues/1661))
+ ([7120561](https://github.com/OHIF/Viewers/commit/71205618ecb8b592247c5acb32284bfe7e18fce5))
# [2.8.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.7.1...@ohif/core@2.8.0) (2020-04-23)
-
### Features
-* configuration to hook into XHR Error handling ([e96205d](https://github.com/OHIF/Viewers/commit/e96205de35e5bec14dc8a9a8509db3dd4e6ecdb6))
-
-
-
-
+- configuration to hook into XHR Error handling
+ ([e96205d](https://github.com/OHIF/Viewers/commit/e96205de35e5bec14dc8a9a8509db3dd4e6ecdb6))
## [2.7.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.7.0...@ohif/core@2.7.1) (2020-04-22)
-
### Bug Fixes
-* whiteLabeling should support component creation by passing React to defined fn ([#1659](https://github.com/OHIF/Viewers/issues/1659)) ([2093a00](https://github.com/OHIF/Viewers/commit/2093a0036584b2cc698c8f06fe62b334523b1029))
-
-
-
-
+- whiteLabeling should support component creation by passing React to defined fn
+ ([#1659](https://github.com/OHIF/Viewers/issues/1659))
+ ([2093a00](https://github.com/OHIF/Viewers/commit/2093a0036584b2cc698c8f06fe62b334523b1029))
# [2.7.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.11...@ohif/core@2.7.0) (2020-04-17)
-
### Features
-* set the authorization header for DICOMWeb requests if provided in query string ([#1646](https://github.com/OHIF/Viewers/issues/1646)) ([450c80b](https://github.com/OHIF/Viewers/commit/450c80b9d5f172be8b5713b422370360325a0afc))
-
-
-
-
+- set the authorization header for DICOMWeb requests if provided in query string
+ ([#1646](https://github.com/OHIF/Viewers/issues/1646))
+ ([450c80b](https://github.com/OHIF/Viewers/commit/450c80b9d5f172be8b5713b422370360325a0afc))
## [2.6.11](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.10...@ohif/core@2.6.11) (2020-04-15)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.6.10](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.9...@ohif/core@2.6.10) (2020-04-09)
-
### Bug Fixes
-* Revert "refactor: Reduce bundle size ([#1575](https://github.com/OHIF/Viewers/issues/1575))" ([#1622](https://github.com/OHIF/Viewers/issues/1622)) ([d21af3f](https://github.com/OHIF/Viewers/commit/d21af3f133492fa31492413b8782936c9ff18b44))
-
-
-
-
+- Revert "refactor: Reduce bundle size
+ ([#1575](https://github.com/OHIF/Viewers/issues/1575))"
+ ([#1622](https://github.com/OHIF/Viewers/issues/1622))
+ ([d21af3f](https://github.com/OHIF/Viewers/commit/d21af3f133492fa31492413b8782936c9ff18b44))
## [2.6.9](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.8...@ohif/core@2.6.9) (2020-04-09)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# Change Log
All notable changes to this project will be documented in this file. See
@@ -249,95 +183,70 @@ All notable changes to this project will be documented in this file. See
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.6.7](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.6...@ohif/core@2.6.7) (2020-04-02)
-
### Bug Fixes
-* 🐛 Fix multiframe images ([#1595](https://github.com/OHIF/Viewers/issues/1595)) ([9e0bd52](https://github.com/OHIF/Viewers/commit/9e0bd52c6a86648eb6673344a8555ad787043e5c))
-
-
-
-
+- 🐛 Fix multiframe images
+ ([#1595](https://github.com/OHIF/Viewers/issues/1595))
+ ([9e0bd52](https://github.com/OHIF/Viewers/commit/9e0bd52c6a86648eb6673344a8555ad787043e5c))
## [2.6.6](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.5...@ohif/core@2.6.6) (2020-04-02)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.6.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.4...@ohif/core@2.6.5) (2020-04-01)
-
### Bug Fixes
-* segmentation not loading ([#1566](https://github.com/OHIF/Viewers/issues/1566)) ([4a7ce1c](https://github.com/OHIF/Viewers/commit/4a7ce1c09324d74c61048393e3a2427757e4001a))
-
-
-
-
+- segmentation not loading
+ ([#1566](https://github.com/OHIF/Viewers/issues/1566))
+ ([4a7ce1c](https://github.com/OHIF/Viewers/commit/4a7ce1c09324d74c61048393e3a2427757e4001a))
## [2.6.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.3...@ohif/core@2.6.4) (2020-03-25)
-
### Bug Fixes
-* Add support for single entries in SequenceOfUltrasoundRegions. M… ([#1559](https://github.com/OHIF/Viewers/issues/1559)) ([c1a0d3c](https://github.com/OHIF/Viewers/commit/c1a0d3c662d143b62dfbf1c01f6ce394af3756ca))
-* disable autoFreeze of immer, even in dev mode ([#1560](https://github.com/OHIF/Viewers/issues/1560)) ([d604eba](https://github.com/OHIF/Viewers/commit/d604ebaffd93f688eadd0081e402f27074dd226b))
-
-
-
-
+- Add support for single entries in SequenceOfUltrasoundRegions. M…
+ ([#1559](https://github.com/OHIF/Viewers/issues/1559))
+ ([c1a0d3c](https://github.com/OHIF/Viewers/commit/c1a0d3c662d143b62dfbf1c01f6ce394af3756ca))
+- disable autoFreeze of immer, even in dev mode
+ ([#1560](https://github.com/OHIF/Viewers/issues/1560))
+ ([d604eba](https://github.com/OHIF/Viewers/commit/d604ebaffd93f688eadd0081e402f27074dd226b))
## [2.6.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.2...@ohif/core@2.6.3) (2020-03-24)
-
### Bug Fixes
-* Ensure we take into account pixel spacing fields properly ([#1555](https://github.com/OHIF/Viewers/issues/1555)) ([77ab0ad](https://github.com/OHIF/Viewers/commit/77ab0ad9a14a135b5560741fc1600704df08c141))
-
-
-
-
+- Ensure we take into account pixel spacing fields properly
+ ([#1555](https://github.com/OHIF/Viewers/issues/1555))
+ ([77ab0ad](https://github.com/OHIF/Viewers/commit/77ab0ad9a14a135b5560741fc1600704df08c141))
## [2.6.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.1...@ohif/core@2.6.2) (2020-03-24)
-
### Bug Fixes
-* OverlayPlane module usage for ArrayBuffer, BulkDataURI, and InlineBinary cases, as well as PaletteColor LUTs for ArrayBuffer (i.e. local drag/drop) case ([#1546](https://github.com/OHIF/Viewers/issues/1546)) ([404d52f](https://github.com/OHIF/Viewers/commit/404d52fe5c0442dd13e4d407bb0687d72fa5f32c))
-
-
-
-
+- OverlayPlane module usage for ArrayBuffer, BulkDataURI, and InlineBinary
+ cases, as well as PaletteColor LUTs for ArrayBuffer (i.e. local drag/drop)
+ case ([#1546](https://github.com/OHIF/Viewers/issues/1546))
+ ([404d52f](https://github.com/OHIF/Viewers/commit/404d52fe5c0442dd13e4d407bb0687d72fa5f32c))
## [2.6.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.6.0...@ohif/core@2.6.1) (2020-03-23)
-
### Bug Fixes
-* avoid-wasteful-renders ([#1544](https://github.com/OHIF/Viewers/issues/1544)) ([e41d339](https://github.com/OHIF/Viewers/commit/e41d339f5faef6b93700bc860f37f29f32ad5ed6))
-
-
-
-
+- avoid-wasteful-renders ([#1544](https://github.com/OHIF/Viewers/issues/1544))
+ ([e41d339](https://github.com/OHIF/Viewers/commit/e41d339f5faef6b93700bc860f37f29f32ad5ed6))
# [2.6.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.5.3...@ohif/core@2.6.0) (2020-03-13)
-
### Features
-* Segmentations Settings UI - Phase 1 [#1391](https://github.com/OHIF/Viewers/issues/1391) ([#1392](https://github.com/OHIF/Viewers/issues/1392)) ([e8842cf](https://github.com/OHIF/Viewers/commit/e8842cf8aebde98db7fc123e4867c8288552331f)), closes [#1423](https://github.com/OHIF/Viewers/issues/1423)
-
-
-
-
+- Segmentations Settings UI - Phase 1
+ [#1391](https://github.com/OHIF/Viewers/issues/1391)
+ ([#1392](https://github.com/OHIF/Viewers/issues/1392))
+ ([e8842cf](https://github.com/OHIF/Viewers/commit/e8842cf8aebde98db7fc123e4867c8288552331f)),
+ closes [#1423](https://github.com/OHIF/Viewers/issues/1423)
# Change Log
@@ -348,301 +257,206 @@ All notable changes to this project will be documented in this file. See
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.5.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.5.1...@ohif/core@2.5.2) (2020-03-06)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.5.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.5.0...@ohif/core@2.5.1) (2020-02-21)
-
### Bug Fixes
-* 💡 Update log to warn ([#1454](https://github.com/OHIF/Viewers/issues/1454)) ([509a7b7](https://github.com/OHIF/Viewers/commit/509a7b7e57834a0653add98cc320b2a5dbefd51d)), closes [#1451](https://github.com/OHIF/Viewers/issues/1451)
-
-
-
-
+- 💡 Update log to warn ([#1454](https://github.com/OHIF/Viewers/issues/1454))
+ ([509a7b7](https://github.com/OHIF/Viewers/commit/509a7b7e57834a0653add98cc320b2a5dbefd51d)),
+ closes [#1451](https://github.com/OHIF/Viewers/issues/1451)
# [2.5.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.4.1...@ohif/core@2.5.0) (2020-02-20)
-
### Features
-* [#1342](https://github.com/OHIF/Viewers/issues/1342) - Window level tab ([#1429](https://github.com/OHIF/Viewers/issues/1429)) ([ebc01a8](https://github.com/OHIF/Viewers/commit/ebc01a8ca238d5a3437b44d81f75aa8a5e8d0574))
-
-
-
-
+- [#1342](https://github.com/OHIF/Viewers/issues/1342) - Window level tab
+ ([#1429](https://github.com/OHIF/Viewers/issues/1429))
+ ([ebc01a8](https://github.com/OHIF/Viewers/commit/ebc01a8ca238d5a3437b44d81f75aa8a5e8d0574))
## [2.4.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.4.0...@ohif/core@2.4.1) (2020-02-12)
-
### Bug Fixes
-* Combined Hotkeys for special characters ([#1233](https://github.com/OHIF/Viewers/issues/1233)) ([2f30e7a](https://github.com/OHIF/Viewers/commit/2f30e7a821a238144c49c56f37d8e5565540b4bd))
-
-
-
-
+- Combined Hotkeys for special characters
+ ([#1233](https://github.com/OHIF/Viewers/issues/1233))
+ ([2f30e7a](https://github.com/OHIF/Viewers/commit/2f30e7a821a238144c49c56f37d8e5565540b4bd))
# [2.4.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.9...@ohif/core@2.4.0) (2020-02-10)
-
### Features
-* 🎸 MeasurementService ([#1314](https://github.com/OHIF/Viewers/issues/1314)) ([0c37a40](https://github.com/OHIF/Viewers/commit/0c37a406d963569af8c3be24c697dafd42712dfc))
-
-
-
-
+- 🎸 MeasurementService ([#1314](https://github.com/OHIF/Viewers/issues/1314))
+ ([0c37a40](https://github.com/OHIF/Viewers/commit/0c37a406d963569af8c3be24c697dafd42712dfc))
## [2.3.9](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.8...@ohif/core@2.3.9) (2020-02-07)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.8](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.7...@ohif/core@2.3.8) (2020-02-06)
-
### Bug Fixes
-* Remove trash data from redux storage after updates ([#1358](https://github.com/OHIF/Viewers/issues/1358)) ([7b2d44f](https://github.com/OHIF/Viewers/commit/7b2d44f2c18241ea521b8d3652aee32e36eaddb8))
-
-
-
-
+- Remove trash data from redux storage after updates
+ ([#1358](https://github.com/OHIF/Viewers/issues/1358))
+ ([7b2d44f](https://github.com/OHIF/Viewers/commit/7b2d44f2c18241ea521b8d3652aee32e36eaddb8))
## [2.3.7](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.6...@ohif/core@2.3.7) (2020-01-30)
-
### Bug Fixes
-* Set VTK viewport as active by interaction ([#1139](https://github.com/OHIF/Viewers/issues/1139)) ([686d12d](https://github.com/OHIF/Viewers/commit/686d12da5c9d3d435b1e326c2a5caee36e2ed27c))
-
-
-
-
+- Set VTK viewport as active by interaction
+ ([#1139](https://github.com/OHIF/Viewers/issues/1139))
+ ([686d12d](https://github.com/OHIF/Viewers/commit/686d12da5c9d3d435b1e326c2a5caee36e2ed27c))
## [2.3.6](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.5...@ohif/core@2.3.6) (2020-01-28)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.5](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.4...@ohif/core@2.3.5) (2020-01-28)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.4](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.3...@ohif/core@2.3.4) (2020-01-27)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.3](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.2...@ohif/core@2.3.3) (2020-01-24)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.1...@ohif/core@2.3.2) (2020-01-06)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.3.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.3.0...@ohif/core@2.3.1) (2019-12-30)
-
### Bug Fixes
-* 🐛 1241: Make Plugin switch part of ToolbarModule ([#1322](https://github.com/OHIF/Viewers/issues/1322)) ([6540e36](https://github.com/OHIF/Viewers/commit/6540e36818944ac2eccc696186366ae495b33a04)), closes [#1241](https://github.com/OHIF/Viewers/issues/1241)
-
-
-
-
+- 🐛 1241: Make Plugin switch part of ToolbarModule
+ ([#1322](https://github.com/OHIF/Viewers/issues/1322))
+ ([6540e36](https://github.com/OHIF/Viewers/commit/6540e36818944ac2eccc696186366ae495b33a04)),
+ closes [#1241](https://github.com/OHIF/Viewers/issues/1241)
# [2.3.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.2.1...@ohif/core@2.3.0) (2019-12-20)
-
### Features
-* 🎸 Configuration so viewer tools can nix handles ([#1304](https://github.com/OHIF/Viewers/issues/1304)) ([63594d3](https://github.com/OHIF/Viewers/commit/63594d36b0bdba59f0901095aed70b75fb05172d)), closes [#1223](https://github.com/OHIF/Viewers/issues/1223)
-
-
-
-
+- 🎸 Configuration so viewer tools can nix handles
+ ([#1304](https://github.com/OHIF/Viewers/issues/1304))
+ ([63594d3](https://github.com/OHIF/Viewers/commit/63594d36b0bdba59f0901095aed70b75fb05172d)),
+ closes [#1223](https://github.com/OHIF/Viewers/issues/1223)
## [2.2.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.2.0...@ohif/core@2.2.1) (2019-12-18)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# [2.2.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.1.1...@ohif/core@2.2.0) (2019-12-16)
-
### Features
-* 🎸 Expose extension config to modules ([#1279](https://github.com/OHIF/Viewers/issues/1279)) ([4ea239a](https://github.com/OHIF/Viewers/commit/4ea239a9535ef297e23387c186e537ab273744ea)), closes [#1268](https://github.com/OHIF/Viewers/issues/1268)
-
-
-
-
+- 🎸 Expose extension config to modules
+ ([#1279](https://github.com/OHIF/Viewers/issues/1279))
+ ([4ea239a](https://github.com/OHIF/Viewers/commit/4ea239a9535ef297e23387c186e537ab273744ea)),
+ closes [#1268](https://github.com/OHIF/Viewers/issues/1268)
## [2.1.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.1.0...@ohif/core@2.1.1) (2019-12-16)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# [2.1.0](https://github.com/OHIF/Viewers/compare/@ohif/core@2.0.2...@ohif/core@2.1.0) (2019-12-11)
-
### Features
-* 🎸 DICOM SR STOW on MeasurementAPI ([#954](https://github.com/OHIF/Viewers/issues/954)) ([ebe1af8](https://github.com/OHIF/Viewers/commit/ebe1af8d4f75d2483eba869655906d7829bd9666)), closes [#758](https://github.com/OHIF/Viewers/issues/758)
-
-
-
-
+- 🎸 DICOM SR STOW on MeasurementAPI
+ ([#954](https://github.com/OHIF/Viewers/issues/954))
+ ([ebe1af8](https://github.com/OHIF/Viewers/commit/ebe1af8d4f75d2483eba869655906d7829bd9666)),
+ closes [#758](https://github.com/OHIF/Viewers/issues/758)
## [2.0.2](https://github.com/OHIF/Viewers/compare/@ohif/core@2.0.1...@ohif/core@2.0.2) (2019-12-11)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [2.0.1](https://github.com/OHIF/Viewers/compare/@ohif/core@2.0.0...@ohif/core@2.0.1) (2019-12-09)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# [2.0.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.13.3...@ohif/core@2.0.0) (2019-12-09)
-
-* feat!: Ability to configure cornerstone tools via extension configuration (#1229) ([55a5806](https://github.com/OHIF/Viewers/commit/55a580659ecb74ca6433461d8f9a05c2a2b69533)), closes [#1229](https://github.com/OHIF/Viewers/issues/1229)
-
+- feat!: Ability to configure cornerstone tools via extension configuration
+ (#1229)
+ ([55a5806](https://github.com/OHIF/Viewers/commit/55a580659ecb74ca6433461d8f9a05c2a2b69533)),
+ closes [#1229](https://github.com/OHIF/Viewers/issues/1229)
### BREAKING CHANGES
-* modifies the exposed react
components props. The contract for providing configuration for the app has changed. Please reference updated documentation for guidance.
-
-
-
-
+- modifies the exposed react
components props. The contract for
+ providing configuration for the app has changed. Please reference updated
+ documentation for guidance.
## [1.13.3](https://github.com/OHIF/Viewers/compare/@ohif/core@1.13.2...@ohif/core@1.13.3) (2019-12-06)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [1.13.2](https://github.com/OHIF/Viewers/compare/@ohif/core@1.13.1...@ohif/core@1.13.2) (2019-12-02)
**Note:** Version bump only for package @ohif/core
-
-
-
-
## [1.13.1](https://github.com/OHIF/Viewers/compare/@ohif/core@1.13.0...@ohif/core@1.13.1) (2019-11-28)
-
### Bug Fixes
-* User Preferences Issues ([#1207](https://github.com/OHIF/Viewers/issues/1207)) ([1df21a9](https://github.com/OHIF/Viewers/commit/1df21a9e075b5e6dfc10a429ae825826f46c71b8)), closes [#1161](https://github.com/OHIF/Viewers/issues/1161) [#1164](https://github.com/OHIF/Viewers/issues/1164) [#1177](https://github.com/OHIF/Viewers/issues/1177) [#1179](https://github.com/OHIF/Viewers/issues/1179) [#1180](https://github.com/OHIF/Viewers/issues/1180) [#1181](https://github.com/OHIF/Viewers/issues/1181) [#1182](https://github.com/OHIF/Viewers/issues/1182) [#1183](https://github.com/OHIF/Viewers/issues/1183) [#1184](https://github.com/OHIF/Viewers/issues/1184) [#1185](https://github.com/OHIF/Viewers/issues/1185)
-
-
-
-
+- User Preferences Issues ([#1207](https://github.com/OHIF/Viewers/issues/1207))
+ ([1df21a9](https://github.com/OHIF/Viewers/commit/1df21a9e075b5e6dfc10a429ae825826f46c71b8)),
+ closes [#1161](https://github.com/OHIF/Viewers/issues/1161)
+ [#1164](https://github.com/OHIF/Viewers/issues/1164)
+ [#1177](https://github.com/OHIF/Viewers/issues/1177)
+ [#1179](https://github.com/OHIF/Viewers/issues/1179)
+ [#1180](https://github.com/OHIF/Viewers/issues/1180)
+ [#1181](https://github.com/OHIF/Viewers/issues/1181)
+ [#1182](https://github.com/OHIF/Viewers/issues/1182)
+ [#1183](https://github.com/OHIF/Viewers/issues/1183)
+ [#1184](https://github.com/OHIF/Viewers/issues/1184)
+ [#1185](https://github.com/OHIF/Viewers/issues/1185)
# [1.13.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.12.0...@ohif/core@1.13.0) (2019-11-25)
-
### Features
-* Add new annotate tool using new dialog service ([#1211](https://github.com/OHIF/Viewers/issues/1211)) ([8fd3af1](https://github.com/OHIF/Viewers/commit/8fd3af1e137e793f1b482760a22591c64a072047))
-
-
-
-
+- Add new annotate tool using new dialog service
+ ([#1211](https://github.com/OHIF/Viewers/issues/1211))
+ ([8fd3af1](https://github.com/OHIF/Viewers/commit/8fd3af1e137e793f1b482760a22591c64a072047))
# [1.12.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.11.0...@ohif/core@1.12.0) (2019-11-19)
-
### Features
-* New dialog service ([#1202](https://github.com/OHIF/Viewers/issues/1202)) ([f65639c](https://github.com/OHIF/Viewers/commit/f65639c2b0dab01decd20cab2cef4263cb4fab37))
-
-
-
-
+- New dialog service ([#1202](https://github.com/OHIF/Viewers/issues/1202))
+ ([f65639c](https://github.com/OHIF/Viewers/commit/f65639c2b0dab01decd20cab2cef4263cb4fab37))
# [1.11.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.10.0...@ohif/core@1.11.0) (2019-11-19)
-
### Features
-* Issue 879 viewer route query param not filtering but promoting ([#1141](https://github.com/OHIF/Viewers/issues/1141)) ([b17f753](https://github.com/OHIF/Viewers/commit/b17f753e6222045252ef885e40233681541a32e1)), closes [#1118](https://github.com/OHIF/Viewers/issues/1118)
-
-
-
-
+- Issue 879 viewer route query param not filtering but promoting
+ ([#1141](https://github.com/OHIF/Viewers/issues/1141))
+ ([b17f753](https://github.com/OHIF/Viewers/commit/b17f753e6222045252ef885e40233681541a32e1)),
+ closes [#1118](https://github.com/OHIF/Viewers/issues/1118)
# [1.10.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.9.1...@ohif/core@1.10.0) (2019-11-15)
-
### Features
-* Inject into Extension Modules / improve tests ([f63d8a7](https://github.com/OHIF/Viewers/commit/f63d8a73d867ad9dfd8ee0cad74edce180eb34f0))
-
-
-
-
+- Inject into Extension Modules / improve tests
+ ([f63d8a7](https://github.com/OHIF/Viewers/commit/f63d8a73d867ad9dfd8ee0cad74edce180eb34f0))
## [1.9.1](https://github.com/OHIF/Viewers/compare/@ohif/core@1.9.0...@ohif/core@1.9.1) (2019-11-15)
**Note:** Version bump only for package @ohif/core
-
-
-
-
# [1.9.0](https://github.com/OHIF/Viewers/compare/@ohif/core@1.8.0...@ohif/core@1.9.0) (2019-11-13)
### Features
diff --git a/platform/core/package.json b/platform/core/package.json
index 36b3f43f74..f2756ab4fc 100644
--- a/platform/core/package.json
+++ b/platform/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@ohif/core",
- "version": "2.10.1",
+ "version": "2.10.5",
"description": "Generic business logic for web-based medical imaging applications",
"author": "OHIF Core Team",
"license": "MIT",
@@ -39,7 +39,7 @@
"dependencies": {
"@babel/runtime": "^7.5.5",
"ajv": "^6.10.0",
- "dcmjs": "0.16.0",
+ "dcmjs": "0.16.3",
"dicomweb-client": "^0.6.0",
"immer": "6.0.2",
"isomorphic-base64": "^1.0.2",
diff --git a/platform/core/src/extensions/ExtensionManager.js b/platform/core/src/extensions/ExtensionManager.js
index bb32ab553f..f1a81a9bbe 100644
--- a/platform/core/src/extensions/ExtensionManager.js
+++ b/platform/core/src/extensions/ExtensionManager.js
@@ -5,6 +5,7 @@ export default class ExtensionManager {
constructor({ commandsManager, servicesManager, api, appConfig = {} }) {
this.modules = {};
this.registeredExtensionIds = [];
+ this.registeredExtensionVesions = {};
this.moduleTypeNames = Object.values(MODULE_TYPES);
//
this._commandsManager = commandsManager;
@@ -51,6 +52,7 @@ export default class ExtensionManager {
}
let extensionId = extension.id;
+ const version = extension.version;
if (!extensionId) {
extensionId = Math.random()
@@ -98,6 +100,8 @@ export default class ExtensionManager {
// Track extension registration
this.registeredExtensionIds.push(extensionId);
+
+ this.registeredExtensionVesions[extensionId] = version;
}
/**
@@ -120,7 +124,8 @@ export default class ExtensionManager {
commandsManager: this._commandsManager,
appConfig: this._appConfig,
configuration,
- api: this._api
+ api: this._api,
+ extensionManager: this,
});
if (!extensionModule) {
diff --git a/platform/core/src/extensions/ExtensionManager.test.js b/platform/core/src/extensions/ExtensionManager.test.js
index 42965c4a18..d9c3ca235c 100644
--- a/platform/core/src/extensions/ExtensionManager.test.js
+++ b/platform/core/src/extensions/ExtensionManager.test.js
@@ -184,6 +184,8 @@ describe('ExtensionManager.js', () => {
commandsManager,
appConfig,
configuration: extensionConfiguration,
+ api: undefined,
+ extensionManager,
});
}
});
@@ -226,7 +228,7 @@ describe('ExtensionManager.js', () => {
return {
definitions: {
exampleDefinition: {
- commandFn: () => { },
+ commandFn: () => {},
storeContexts: [],
options: {},
},
diff --git a/platform/core/src/services/UIModalService/index.js b/platform/core/src/services/UIModalService/index.js
index 57e3087134..e2cd178caf 100644
--- a/platform/core/src/services/UIModalService/index.js
+++ b/platform/core/src/services/UIModalService/index.js
@@ -38,6 +38,7 @@ function _show({
onClose = null,
closeButton = true,
title = null,
+ fullscreen = false,
customClassName = null,
}) {
return serviceImplementation._show({
@@ -48,6 +49,7 @@ function _show({
onClose,
closeButton,
title,
+ fullscreen,
customClassName,
});
}
diff --git a/platform/core/src/studies/retrieveStudiesMetadata.js b/platform/core/src/studies/retrieveStudiesMetadata.js
index ebed831cbd..e6ffd73093 100644
--- a/platform/core/src/studies/retrieveStudiesMetadata.js
+++ b/platform/core/src/studies/retrieveStudiesMetadata.js
@@ -11,12 +11,15 @@ import { retrieveStudyMetadata } from './retrieveStudyMetadata';
* @param {Array} studyInstanceUIDs The UIDs of the Studies to be retrieved
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
+ * @param {boolean} [separateSeriesInstanceUIDFilters = false] - If true, split filtered metadata calls into multiple calls,
+ * as some DICOMWeb implementations only support single filters.
* @returns {Promise} that will be resolved with the metadata or rejected with the error
*/
export default function retrieveStudiesMetadata(
server,
studyInstanceUIDs,
- filters
+ filters,
+ separateSeriesInstanceUIDFilters = false
) {
// Create an empty array to store the Promises for each metaData retrieval call
const promises = [];
@@ -24,7 +27,12 @@ export default function retrieveStudiesMetadata(
// Loop through the array of studyInstanceUIDs
studyInstanceUIDs.forEach(function(StudyInstanceUID) {
// Send the call and resolve or reject the related promise based on its outcome
- const promise = retrieveStudyMetadata(server, StudyInstanceUID, filters);
+ const promise = retrieveStudyMetadata(
+ server,
+ StudyInstanceUID,
+ filters,
+ separateSeriesInstanceUIDFilters
+ );
// Add the current promise to the array of promises
promises.push(promise);
diff --git a/platform/core/src/studies/retrieveStudyMetadata.js b/platform/core/src/studies/retrieveStudyMetadata.js
index b2d84be9ef..ad931ef123 100644
--- a/platform/core/src/studies/retrieveStudyMetadata.js
+++ b/platform/core/src/studies/retrieveStudyMetadata.js
@@ -11,9 +11,16 @@ const StudyMetaDataPromises = new Map();
* @param {string} StudyInstanceUID The UID of the Study to be retrieved
* @param {Object} [filters] - Object containing filters to be applied on retrieve metadata process
* @param {string} [filter.seriesInstanceUID] - series instance uid to filter results against
+ * @param {boolean} [separateSeriesInstanceUIDFilters = false] - If true, split filtered metadata calls into multiple calls,
+ * as some DICOMWeb implementations only support single filters.
* @returns {Promise} that will be resolved with the metadata or rejected with the error
*/
-export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
+export function retrieveStudyMetadata(
+ server,
+ StudyInstanceUID,
+ filters,
+ separateSeriesInstanceUIDFilters = false
+) {
// @TODO: Whenever a study metadata request has failed, its related promise will be rejected once and for all
// and further requests for that metadata will always fail. On failure, we probably need to remove the
// corresponding promise from the "StudyMetaDataPromises" map...
@@ -33,11 +40,29 @@ export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
}
// Create a promise to handle the data retrieval
- const promise = new Promise((resolve, reject) => {
- RetrieveMetadata(server, StudyInstanceUID, filters).then(function(data) {
- resolve(data);
- }, reject);
- });
+ let promise;
+
+ if (
+ filters &&
+ filters.seriesInstanceUID &&
+ separateSeriesInstanceUIDFilters
+ ) {
+ promise = __separateSeriesRequestToAggregatePromiseateSeriesRequestToAggregatePromise(
+ server,
+ StudyInstanceUID,
+ filters
+ );
+ } else {
+ promise = RetrieveMetadata(server, StudyInstanceUID, filters);
+
+ /*
+ promise = new Promise((resolve, reject) => {
+ RetrieveMetadata(server, StudyInstanceUID, filters).then(function(data) {
+ resolve(data);
+ }, reject);
+ });
+ */
+ }
// Store the promise in cache
StudyMetaDataPromises.set(StudyInstanceUID, promise);
@@ -45,6 +70,49 @@ export function retrieveStudyMetadata(server, StudyInstanceUID, filters) {
return promise;
}
+/**
+ * Splits up seriesInstanceUID filters to multiple calls for platforms
+ * @param {Object} server Object with server configuration parameters
+ * @param {string} StudyInstanceUID The UID of the Study to be retrieved
+ * @param {Object} filters - Object containing filters to be applied on retrieve metadata process
+ */
+function __separateSeriesRequestToAggregatePromiseateSeriesRequestToAggregatePromise(
+ server,
+ StudyInstanceUID,
+ filters
+) {
+ const { seriesInstanceUID } = filters;
+ const seriesInstanceUIDs = seriesInstanceUID.split(',');
+
+ return new Promise((resolve, reject) => {
+ const promises = [];
+
+ seriesInstanceUIDs.forEach(uid => {
+ const seriesSpecificFilters = Object.assign({}, filters, {
+ seriesInstanceUID: uid,
+ });
+
+ promises.push(
+ RetrieveMetadata(server, StudyInstanceUID, seriesSpecificFilters)
+ );
+ });
+
+ Promise.all(promises).then(results => {
+ const data = results[0];
+
+ let series = [];
+
+ results.forEach(result => {
+ series = [...series, ...result.series];
+ });
+
+ data.series = series;
+
+ resolve(data);
+ }, reject);
+ });
+}
+
/**
* Delete the cached study metadata retrieval promise to ensure that the browser will
* re-retrieve the study metadata when it is next requested
diff --git a/platform/ui/CHANGELOG.md b/platform/ui/CHANGELOG.md
index 1ec130f477..25d90e7586 100644
--- a/platform/ui/CHANGELOG.md
+++ b/platform/ui/CHANGELOG.md
@@ -3,6 +3,22 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [1.5.5](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.5.4...@ohif/ui@1.5.5) (2020-09-17)
+
+**Note:** Version bump only for package @ohif/ui
+
+
+
+
+
+## [1.5.4](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.5.3...@ohif/ui@1.5.4) (2020-09-10)
+
+**Note:** Version bump only for package @ohif/ui
+
+
+
+
+
## [1.5.3](https://github.com/OHIF/Viewers/compare/@ohif/ui@1.5.2...@ohif/ui@1.5.3) (2020-07-23)
**Note:** Version bump only for package @ohif/ui
diff --git a/platform/ui/package.json b/platform/ui/package.json
index c289205913..e3059e14c8 100644
--- a/platform/ui/package.json
+++ b/platform/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@ohif/ui",
- "version": "1.5.3",
+ "version": "1.5.5",
"description": "A set of React components for Medical Imaging Viewers",
"author": "OHIF Contributors",
"license": "MIT",
diff --git a/platform/ui/src/components/ohifModal/OHIFModal.js b/platform/ui/src/components/ohifModal/OHIFModal.js
index 3f9302cedb..44aa67fd6b 100644
--- a/platform/ui/src/components/ohifModal/OHIFModal.js
+++ b/platform/ui/src/components/ohifModal/OHIFModal.js
@@ -22,6 +22,7 @@ const OHIFModal = ({
closeButton,
shouldCloseOnEsc,
isOpen,
+ fullscreen,
title,
onClose,
children,
@@ -41,9 +42,13 @@ const OHIFModal = ({
);
};
+ const classes = fullscreen
+ ? classNames('OHIFModal', className, 'OHIFModal-fullscreen')
+ : classNames('OHIFModal', className);
+
return (
{
closeButton: true,
title: null,
customClassName: '',
+ fullscreen: false,
};
const [options, setOptions] = useState(DEFAULT_OPTIONS);
@@ -78,6 +79,7 @@ const ModalProvider = ({ children, modal: Modal, service }) => {
title,
customClassName,
shouldCloseOnEsc,
+ fullscreen,
closeButton,
} = options;
@@ -89,6 +91,7 @@ const ModalProvider = ({ children, modal: Modal, service }) => {
shouldCloseOnEsc={shouldCloseOnEsc}
isOpen={isOpen}
title={title}
+ fullscreen={fullscreen}
closeButton={closeButton}
onClose={() => {
if (onClose) {
diff --git a/platform/ui/src/elements/Icon/getIcon.js b/platform/ui/src/elements/Icon/getIcon.js
index cbd6a15161..bea2f5cac2 100644
--- a/platform/ui/src/elements/Icon/getIcon.js
+++ b/platform/ui/src/elements/Icon/getIcon.js
@@ -87,6 +87,7 @@ import user from './icons/user.svg';
import youtube from './icons/youtube.svg';
import eye from './icons/eye.svg';
import eyeClosed from './icons/eye-closed.svg';
+import envelopeSquare from './icons/envelope-square.svg';
const ICONS = {
eye,
@@ -176,6 +177,7 @@ const ICONS = {
lung,
liver,
save: saveRegular,
+ 'envelope-square': envelopeSquare,
};
/**
diff --git a/platform/ui/src/elements/Icon/icons/envelope-square.svg b/platform/ui/src/elements/Icon/icons/envelope-square.svg
new file mode 100644
index 0000000000..5e61ee3c21
--- /dev/null
+++ b/platform/ui/src/elements/Icon/icons/envelope-square.svg
@@ -0,0 +1,10 @@
+
diff --git a/platform/viewer/.recipes/Nginx-Dcm4che/docker-compose-dcm4che.yml b/platform/viewer/.recipes/Nginx-Dcm4che/docker-compose-dcm4che.yml
index 40b6d8efe8..84f5efc151 100644
--- a/platform/viewer/.recipes/Nginx-Dcm4che/docker-compose-dcm4che.yml
+++ b/platform/viewer/.recipes/Nginx-Dcm4che/docker-compose-dcm4che.yml
@@ -9,7 +9,7 @@ services:
max-size: '10m'
ports:
- '389:389'
- env_file: ./dcm4che/docker-compose-dcm4che.env
+ env_file: ./docker-compose-dcm4che.env
volumes:
- ./dcm4che/etc/localtime:/etc/localtime:ro
- ./dcm4che/etc/timezone:/etc/timezone:ro
@@ -25,7 +25,7 @@ services:
max-size: '10m'
ports:
- '5432:5432'
- env_file: ./dcm4che/docker-compose-dcm4che.env
+ env_file: ./docker-compose-dcm4che.env
volumes:
- ./dcm4che/etc/localtime:/etc/localtime:ro
- ./dcm4che/etc/timezone:/etc/timezone:ro
@@ -44,7 +44,7 @@ services:
- '9990:9990'
- '11112:11112'
- '2575:2575'
- env_file: ./dcm4che/docker-compose-dcm4che.env
+ env_file: ./docker-compose-dcm4che.env
environment:
WILDFLY_CHOWN: /opt/wildfly/standalone /storage
WILDFLY_WAIT_FOR: ldap:389 db:5432
@@ -73,5 +73,4 @@ services:
restart: always
networks:
- dcm4che_default
-
-networks: dcm4che_default:
+ networks: dcm4che_default:
diff --git a/platform/viewer/CHANGELOG.md b/platform/viewer/CHANGELOG.md
index 9cbded7b39..7fb47c2874 100644
--- a/platform/viewer/CHANGELOG.md
+++ b/platform/viewer/CHANGELOG.md
@@ -3,6 +3,62 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [4.5.10](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.9...@ohif/viewer@4.5.10) (2020-09-17)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.9](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.8...@ohif/viewer@4.5.9) (2020-09-10)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.8](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.7...@ohif/viewer@4.5.8) (2020-09-10)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.7](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.6...@ohif/viewer@4.5.7) (2020-09-09)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.6](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.5...@ohif/viewer@4.5.6) (2020-09-03)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.5](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.4...@ohif/viewer@4.5.5) (2020-09-03)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
+## [4.5.4](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.3...@ohif/viewer@4.5.4) (2020-09-02)
+
+**Note:** Version bump only for package @ohif/viewer
+
+
+
+
+
## [4.5.3](https://github.com/OHIF/Viewers/compare/@ohif/viewer@4.5.2...@ohif/viewer@4.5.3) (2020-08-28)
**Note:** Version bump only for package @ohif/viewer
diff --git a/platform/viewer/package.json b/platform/viewer/package.json
index 053e80cb7a..c368f858be 100644
--- a/platform/viewer/package.json
+++ b/platform/viewer/package.json
@@ -1,6 +1,6 @@
{
"name": "@ohif/viewer",
- "version": "4.5.3",
+ "version": "4.5.10",
"description": "OHIF Viewer",
"author": "OHIF Contributors",
"license": "MIT",
@@ -48,18 +48,18 @@
},
"dependencies": {
"@babel/runtime": "^7.5.5",
- "@ohif/core": "^2.10.1",
- "@ohif/extension-cornerstone": "^2.9.2",
- "@ohif/extension-dicom-html": "^1.2.5",
- "@ohif/extension-dicom-microscopy": "^0.51.1",
- "@ohif/extension-dicom-p10-downloader": "^0.1.2",
- "@ohif/extension-dicom-pdf": "^1.0.4",
- "@ohif/extension-dicom-rt": "^0.4.1",
- "@ohif/extension-dicom-segmentation": "^0.4.1",
- "@ohif/extension-lesion-tracker": "^0.2.0",
- "@ohif/extension-vtk": "^1.7.2",
+ "@ohif/core": "^2.10.5",
+ "@ohif/extension-cornerstone": "^2.9.4",
+ "@ohif/extension-debugging": "^0.1.5",
+ "@ohif/extension-dicom-html": "^1.2.8",
+ "@ohif/extension-dicom-microscopy": "^0.51.3",
+ "@ohif/extension-dicom-pdf": "^1.0.6",
+ "@ohif/extension-dicom-rt": "^0.4.5",
+ "@ohif/extension-dicom-segmentation": "^0.4.5",
+ "@ohif/extension-lesion-tracker": "^0.2.1",
+ "@ohif/extension-vtk": "^1.7.7",
"@ohif/i18n": "^0.52.8",
- "@ohif/ui": "^1.5.3",
+ "@ohif/ui": "^1.5.5",
"@tanem/react-nprogress": "^1.1.25",
"classnames": "^2.2.6",
"core-js": "^3.2.1",
@@ -67,7 +67,7 @@
"cornerstone-math": "^0.1.8",
"cornerstone-tools": "^4.20.1",
"cornerstone-wado-image-loader": "^3.1.0",
- "dcmjs": "0.16.0",
+ "dcmjs": "0.16.3",
"dicom-parser": "^1.8.3",
"dicomweb-client": "^0.4.4",
"hammerjs": "^2.0.8",
diff --git a/platform/viewer/public/config/idc.js b/platform/viewer/public/config/idc.js
index 5ba0bf4c45..4be4c0e9a9 100644
--- a/platform/viewer/public/config/idc.js
+++ b/platform/viewer/public/config/idc.js
@@ -6,11 +6,14 @@ window.config = function(props) {
routerBasename: '/',
disableMeasurementPanel: true,
enableGoogleCloudAdapter: true,
+ splitQueryParameterCalls: true, // Allows the user to split QIDO SeriesInstanceUID filters into multiple calls, if the server does not support multi-valued query parameters.
enableGoogleCloudAdapterUI: false,
- showStudyList: false,
+ showStudyList: true,
+ filterQueryParam: true,
httpErrorHandler: error => {
// This is 429 when rejected from the public idc sandbox too often.
console.warn(error.status);
+
// Could use services manager here to bring up a dialog/modal if needed.
console.warn('test, navigate to https://ohif.org/');
window.location = 'https://ohif.org/';
diff --git a/platform/viewer/src/appExtensions/GenericViewerCommands/index.js b/platform/viewer/src/appExtensions/GenericViewerCommands/index.js
index 866055a79a..3fcfe9403c 100644
--- a/platform/viewer/src/appExtensions/GenericViewerCommands/index.js
+++ b/platform/viewer/src/appExtensions/GenericViewerCommands/index.js
@@ -2,6 +2,9 @@ import commandsModule from './commandsModule.js';
export default {
id: 'generic-viewer-commands',
+ get version() {
+ return window.version;
+ },
getCommandsModule({ commandsManager }) {
return commandsModule({ commandsManager });
},
diff --git a/platform/viewer/src/appExtensions/MeasurementsPanel/index.js b/platform/viewer/src/appExtensions/MeasurementsPanel/index.js
index 41d1f2f99d..93de3d7e95 100644
--- a/platform/viewer/src/appExtensions/MeasurementsPanel/index.js
+++ b/platform/viewer/src/appExtensions/MeasurementsPanel/index.js
@@ -9,6 +9,9 @@ export default {
* Only required property. Should be a unique value across all extensions.
*/
id: 'measurements-table',
+ get version() {
+ return window.version;
+ },
preRegistration({ servicesManager, commandsManager, configuration = {} }) {
init({ servicesManager, commandsManager, configuration });
diff --git a/platform/viewer/src/connectedComponents/ViewerLocalFileData.js b/platform/viewer/src/connectedComponents/ViewerLocalFileData.js
index 9d211f2d8a..512a269c4a 100644
--- a/platform/viewer/src/connectedComponents/ViewerLocalFileData.js
+++ b/platform/viewer/src/connectedComponents/ViewerLocalFileData.js
@@ -78,8 +78,6 @@ class ViewerLocalFileData extends Component {
study.displaySets ||
studyMetadata.createDisplaySets(sopClassHandlerModules);
- debugger;
-
studyMetadata.forEachDisplaySet(displayset => {
displayset.localFile = true;
});
diff --git a/platform/viewer/src/connectedComponents/ViewerRetrieveStudyData.js b/platform/viewer/src/connectedComponents/ViewerRetrieveStudyData.js
index 1d003cf9e1..9ad349b309 100644
--- a/platform/viewer/src/connectedComponents/ViewerRetrieveStudyData.js
+++ b/platform/viewer/src/connectedComponents/ViewerRetrieveStudyData.js
@@ -88,6 +88,7 @@ const _isQueryParamApplied = (study, filters = {}, isFilterStrategy) => {
const { seriesInstanceUID } = filters;
let applied = true;
// skip in case no filter or no toast manager
+
if (!seriesInstanceUID) {
return applied;
}
@@ -340,6 +341,13 @@ function ViewerRetrieveStudyData({
}
}
+ if (
+ appConfig.splitQueryParameterCalls ||
+ appConfig.enableGoogleCloudAdapter
+ ) {
+ retrieveParams.push(true); // Seperate SeriesInstanceUID filter calls.
+ }
+
cancelableStudiesPromises[studyInstanceUIDs] = makeCancelable(
retrieveStudiesMetadata(...retrieveParams)
)
diff --git a/platform/viewer/src/index.js b/platform/viewer/src/index.js
index 4b6afde12a..c231c71bf2 100644
--- a/platform/viewer/src/index.js
+++ b/platform/viewer/src/index.js
@@ -29,7 +29,10 @@ import OHIFDicomSegmentationExtension from '@ohif/extension-dicom-segmentation';
import OHIFDicomRtExtension from '@ohif/extension-dicom-rt';
import OHIFDicomMicroscopyExtension from '@ohif/extension-dicom-microscopy';
import OHIFDicomPDFExtension from '@ohif/extension-dicom-pdf';
-import OHIFDicomP10DownloaderExtension from '@ohif/extension-dicom-p10-downloader';
+import OHIFDicomTagBrowserExtension from '@ohif/extension-dicom-tag-browser';
+// Add this for Debugging purposes:
+import OHIFDebuggingExtension from '@ohif/extension-debugging';
+import { version } from '../package.json';
/*
* Default Settings
@@ -38,6 +41,8 @@ let config = {};
if (window) {
config = window.config || {};
+
+ window.version = version;
}
const appProps = {
@@ -49,7 +54,8 @@ const appProps = {
OHIFDicomPDFExtension,
OHIFDicomSegmentationExtension,
OHIFDicomRtExtension,
- OHIFDicomP10DownloaderExtension,
+ [OHIFDebuggingExtension, { mailTo: 'support@canceridc.dev' }],
+ OHIFDicomTagBrowserExtension,
],
};
diff --git a/yarn.lock b/yarn.lock
index 7ccb613385..8ff5f2ced7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -6539,10 +6539,10 @@ dateformat@^3.0.0:
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-dcmjs@0.16.0:
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.16.0.tgz#714755d006c3a49cf65ef13e627ff7a23151d35a"
- integrity sha512-41nY3Isg5i5FoSd1s67aUgUHi146r+fb8JuiRvDsxvm7MEkkdjIzMYMtxjsrVwKRW1xRH+x34nxbV9+8cc7WQw==
+dcmjs@0.16.3:
+ version "0.16.3"
+ resolved "https://registry.yarnpkg.com/dcmjs/-/dcmjs-0.16.3.tgz#ef44ccc4988a473fd40e1601122c57f2babded11"
+ integrity sha512-pMQGifMpMW9i9ufCdUoEPHrLWnm6ilnpfLqUc+PPoWr7OnuBhiRVRunbv39oTtFDZOLhQ2Ampm7UrkidWAbqiA==
dependencies:
"@babel/polyfill" "^7.8.3"
"@babel/runtime" "^7.8.4"
@@ -6782,6 +6782,11 @@ detab@2.0.2, detab@^2.0.0:
dependencies:
repeat-string "^1.5.4"
+detect-browser@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.1.1.tgz#a800db91d3fd60d0861669f5984f1be9ffbe009c"
+ integrity sha512-5n2aWI57qC3kZaK4j2zYsG6L1LrxgLptGCNhMQgdKhVn6cSdcq43pp6xHPfTHG3TYM6myF4tIPWiZtfdVDgb9w==
+
detect-file@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
@@ -16015,6 +16020,14 @@ react-simple-code-editor@^0.9.0:
resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.9.15.tgz#59e3583832e9e98992d3674b2d7673b4cd1c5709"
integrity sha512-M8iKgjBTBZK92tZYgOEfMuR7c3zZ0q0v3QYllSxIPx3SU+w003VofH50txXQSBTu92pSOm2tidON1HbQ1l8BDA==
+react-tooltip@4.2.10:
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.10.tgz#ed1a1acd388940c96f4b6309f4fd4dcce5e01bdc"
+ integrity sha512-D7ZLx6/QwpUl0SZRek3IZy/HWpsEEp0v3562tcT8IwZgu8IgV7hY5ZzniTkHyRcuL+IQnljpjj7A7zCgl2+T3w==
+ dependencies:
+ prop-types "^15.7.2"
+ uuid "^7.0.3"
+
react-transition-group@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.0.0.tgz#e882e61fce8622ed981b6e31fc7ef52d43a1a06a"
@@ -19552,6 +19565,11 @@ uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
+uuid@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
+ integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
v8-compile-cache@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"