fix(bugs): fixing lots of bugs regarding release candidate (#3700)

This commit is contained in:
Alireza authored and GitHub committed 2023-10-05 23:39:56 -04:00
1 parent 29aeb070e0
commit 8bc12a37d0
16 files changed
+119 -76

No files matched your search

@@ -188,7 +188,8 @@ function DataSourceWrapper(props) {
!isSamePage || (!isLoading && (newOffset !== previousOffset || isLocationUpdated));
if (isDataInvalid) {
getData().catch(() => {
getData().catch(e => {
console.error(e);
// If there is a data source configuration API, then the Worklist will popup the dialog to attempt to configure it
// and attempt to resolve this issue.
if (dataSource.getConfig().configurationAPI) {
@@ -74,7 +74,7 @@ function _getInstance(StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID) {
return;
}
return series.instances.find(instance => instance.SOPInstanceUID === SOPInstanceUID);
return series.getInstance(SOPInstanceUID);
}
function _getInstanceByImageId(imageId) {
@@ -1,9 +1,26 @@
function createSeriesMetadata(instances) {
const { SeriesInstanceUID } = instances[0];
function createSeriesMetadata(SeriesInstanceUID) {
const instances = [];
const instancesMap = new Map();
return {
SeriesInstanceUID,
instances,
addInstance: function (newInstance) {
this.addInstances([newInstance]);
},
addInstances: function (newInstances) {
for (let i = 0, len = newInstances.length; i < len; i++) {
const instance = newInstances[i];
if (!instancesMap.has(instance.SOPInstanceUID)) {
instancesMap.set(instance.SOPInstanceUID, instance);
instances.push(instance);
}
}
},
getInstance: function (SOPInstanceUID) {
return instancesMap.get(SOPInstanceUID);
},
};
}
@@ -8,54 +8,29 @@ function createStudyMetadata(StudyInstanceUID) {
isLoaded: false,
series: [],
/**
*
* @param {object} instance
* @returns {bool} true if series were added; false if series already exist
*/
addInstanceToSeries: function (instance) {
const { SeriesInstanceUID } = instance;
if (!this.StudyDescription) {
this.StudyDescription = instance.StudyDescription;
}
const existingSeries = this.series.find(s => s.SeriesInstanceUID === SeriesInstanceUID);
if (existingSeries) {
existingSeries.instances.push(instance);
} else {
const series = createSeriesMetadata([instance]);
this.series.push(series);
const { Modality } = series;
if (this.ModalitiesInStudy.indexOf(Modality) === -1) {
this.ModalitiesInStudy.push(Modality);
}
}
this.addInstancesToSeries([instance]);
},
/**
*
* @param {object[]} instances
* @param {string} instances[].SeriesInstanceUID
* @param {string} instances[].StudyDescription
* @returns {bool} true if series were added; false if series already exist
*/
addInstancesToSeries: function (instances) {
const { SeriesInstanceUID } = instances[0];
if (!this.StudyDescription) {
this.StudyDescription = instances[0].StudyDescription;
}
const existingSeries = this.series.find(s => s.SeriesInstanceUID === SeriesInstanceUID);
let series = this.series.find(s => s.SeriesInstanceUID === SeriesInstanceUID);
if (existingSeries) {
// Only add instances not already present, so generate a map
// of existing instances and filter the to add by things
// already present.
const sopMap = {};
existingSeries.instances.forEach(it => (sopMap[it.SOPInstanceUID] = it));
const newInstances = instances.filter(it => !sopMap[it.SOPInstanceUID]);
existingSeries.instances.push(...newInstances);
} else {
const series = createSeriesMetadata(instances);
if (!series) {
const series = createSeriesMetadata(SeriesInstanceUID);
this.series.push(series);
}
series.addInstances(instances);
},
setSeriesMetadata: function (SeriesInstanceUID, seriesMetadata) {
@@ -64,7 +39,8 @@ function createStudyMetadata(StudyInstanceUID) {
if (existingSeries) {
existingSeries = Object.assign(existingSeries, seriesMetadata);
} else {
this.series.push(Object.assign({ instances: [] }, seriesMetadata));
const series = createSeriesMetadata(SeriesInstanceUID);
this.series.push(Object.assign(series, seriesMetadata));
}
},
};
@@ -115,7 +115,13 @@ export default class ToolbarService extends PubSubService {
return;
}
const commandsManager = this._commandsManager;
const { groupId, itemId, interactionType, commands } = interaction;
const { groupId, itemId, commands, type } = interaction;
let { interactionType } = interaction;
// if not interaction type, assume the type can be used
if (!interactionType) {
interactionType = type;
}
switch (interactionType) {
case 'action': {
@@ -228,6 +234,10 @@ export default class ToolbarService extends PubSubService {
return activeTools;
}
getActivePrimaryTool() {
return this.state.primaryToolId;
}
/** Sets the toggle state of a button to the isToggled state */
public setToggled(id: string, isToggled: boolean): void {
if (isToggled) {
@@ -259,7 +269,9 @@ export default class ToolbarService extends PubSubService {
}
for (const buttonId of Object.keys(this.buttons)) {
const { primary, items } = this.buttons[buttonId].props || {};
if (primary?.id === id) { return primary; }
if (primary?.id === id) {
return primary;
}
const found = items?.find(childButton => childButton.id === id);
if (found) {
return found;
@@ -153,3 +153,14 @@ directly from
Your public folder should look like this:
![](../../assets/img/dicom-json-public.png)
:::note
When hosting the DICOM JSON files, it is important to be aware that certain providers
do not automatically handle the 404 error and fallback to index.html. For example, Netlify
handles this, but Azure does not. Consequently, when you attempt to access a link with a
specific URL, a 404 error will be displayed.
This issue also occurs locally, where the http-server does not handle it. However,
if you utilize the `serve` package (npx serve ./dist -l 8080 -s), it effectively addresses this problem.
:::
@@ -18,13 +18,15 @@ It can be compiled with Java and Gradle, and then run against a set of dicom, in
the example located in /dicom/study1 outputting to /dicomweb, and then a server
run against that data, like this:
```
```bash
git clone https://github.com/OHIF/static-wado
cd static-wado
./gradlew installDist
StaticWado/build/install/StaticWado/bin/StaticWado -d /dicomweb /dicom/study1
cd /dicomweb
npx http-server -p 5000 --cors -g
# you can use npx serve ./dist -l 8080 -s as an alternative to http-server
```
There is then a dev environment in the platform/app directory which can be
@@ -106,6 +106,8 @@ yarn global add http-server
# Serve the files in our current directory
# Accessible at: `http://localhost:8080`
npx http-server ./dist
# you can use npx serve ./dist -l 8080 -s as an alternative to http-server
```
:::caution
+3 -1
View File
@@ -44,8 +44,10 @@ Download the index.html and the build (against the /ohif/ path) from [here](http
Then run the
```
```bash
npx http-server unzipped-folder
# you can use npx serve ./dist -l 8080 -s as an alternative to http-server
```
You should be able to see