Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 26 additions & 25 deletions platform/app/src/routes/Mode/Mode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -137,33 +137,29 @@ export default function ModeRoute({
* Validates study existence before loading the viewer.
* Moved from PanelStudyBrowser.tsx to ensure validation runs in all modes
*/
useEffect(() => {
const validateStudies = async () => {
if (!ExtensionDependenciesLoaded || !studyInstanceUIDs?.length || !dataSource) {
return;
}

const validateStudies = async () => {
for (const studyInstanceUID of studyInstanceUIDs) {
try {
const qidoForStudyUID = await dataSource.query.studies.search({
studyInstanceUid: studyInstanceUID,
});
for (const studyInstanceUID of studyInstanceUIDs) {
try {
const qidoForStudyUID = await dataSource.query.studies.search({
studyInstanceUid: studyInstanceUID,
});

if (!qidoForStudyUID?.length) {
console.warn('Study not found:', studyInstanceUID);
navigate('/notfoundstudy');
return;
}
} catch (error) {
console.error('Error validating study:', studyInstanceUID, error);
if (!qidoForStudyUID?.length) {
console.warn('Study not found:', studyInstanceUID);
navigate('/notfoundstudy');
return;
}
} catch (error) {
console.error('Error validating study:', studyInstanceUID, error);
navigate('/notfoundstudy');
return;
}
};

validateStudies();
}, [studyInstanceUIDs, ExtensionDependenciesLoaded, dataSource, navigate]);
}
};
Comment on lines +140 to +162
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateStudies doesn't check if dataSource is available before using it, which can cause runtime errors

Suggested change
const validateStudies = async () => {
for (const studyInstanceUID of studyInstanceUIDs) {
try {
const qidoForStudyUID = await dataSource.query.studies.search({
studyInstanceUid: studyInstanceUID,
});
if (!qidoForStudyUID?.length) {
console.warn('Study not found:', studyInstanceUID);
navigate('/notfoundstudy');
return;
}
} catch (error) {
console.error('Error validating study:', studyInstanceUID, error);
if (!qidoForStudyUID?.length) {
console.warn('Study not found:', studyInstanceUID);
navigate('/notfoundstudy');
return;
}
} catch (error) {
console.error('Error validating study:', studyInstanceUID, error);
navigate('/notfoundstudy');
return;
}
};
validateStudies();
}, [studyInstanceUIDs, ExtensionDependenciesLoaded, dataSource, navigate]);
}
};
const validateStudies = async () => {
if (!dataSource) {
return;
}
for (const studyInstanceUID of studyInstanceUIDs) {


useEffect(() => {
if (!ExtensionDependenciesLoaded || !studyInstanceUIDs?.length) {
Expand Down Expand Up @@ -311,14 +307,19 @@ export default function ModeRoute({
};

let unsubscriptions;
setupRouteInit().then(unsubs => {
unsubscriptions = unsubs;
setupRouteInit()
.then(unsubs => {
unsubscriptions = unsubs;
Comment on lines +310 to +312
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the promise chain is broken - validateStudies() doesn't return the unsubs value, so unsubs becomes undefined

Suggested change
setupRouteInit()
.then(() => validateStudies())
.then(unsubs => {
unsubscriptions = unsubs;
setupRouteInit()
.then(unsubs => {
unsubscriptions = unsubs;
return validateStudies();
})
.then(() => {


mode?.onSetupRouteComplete?.({
servicesManager,
extensionManager,
commandsManager,
});
validateStudies()
})
.then(() => {

mode?.onSetupRouteComplete?.({
servicesManager,
extensionManager,
commandsManager,
});
});

return () => {
Expand Down
Loading