fix(dicom-pdf): enhance PDF loading with authentication support
- move authenticated rendered media loading into the datasource\n- route DICOM video display sets through Cornerstone video viewports\n- add a 3.12 to 3.13 migration note for the removed DICOM-video viewport namespace
This commit is contained in:
1 parent
2800f82e3c
commit
e0f42d4f1d
18 files changed
+446
-130
No files matched your search
@@ -14,12 +14,17 @@ const _getDisplaySetsFromSeries = (instances, servicesManager, extensionManager)
|
||||
const { Modality, SOPInstanceUID } = instance;
|
||||
const { SeriesDescription = 'PDF', MIMETypeOfEncapsulatedDocument } = instance;
|
||||
const { SeriesNumber, SeriesDate, SeriesInstanceUID, StudyInstanceUID, SOPClassUID } = instance;
|
||||
const renderedUrl = dataSource.retrieve.directURL({
|
||||
const renderedUrlParams = {
|
||||
instance,
|
||||
tag: 'EncapsulatedDocument',
|
||||
defaultType: MIMETypeOfEncapsulatedDocument || 'application/pdf',
|
||||
singlepart: 'pdf',
|
||||
});
|
||||
};
|
||||
const renderedUrl = dataSource.retrieve.directURL(renderedUrlParams);
|
||||
const getRenderedUrl = dataSource.retrieve.renderedURL
|
||||
? options =>
|
||||
dataSource.retrieve.renderedURL({ ...renderedUrlParams, url: renderedUrl }, options)
|
||||
: undefined;
|
||||
|
||||
const displaySet = {
|
||||
//plugin: id,
|
||||
@@ -36,6 +41,7 @@ const _getDisplaySetsFromSeries = (instances, servicesManager, extensionManager)
|
||||
referencedImages: null,
|
||||
measurements: null,
|
||||
renderedUrl: renderedUrl,
|
||||
getRenderedUrl,
|
||||
instances: [instance],
|
||||
thumbnailSrc: null,
|
||||
isDerivedDisplaySet: true,
|
||||
|
||||
@@ -28,15 +28,9 @@ const dicomPDFExtension = {
|
||||
* @param {object} [configuration={}]
|
||||
* @param {object|array} [configuration.csToolsConfig] - Passed directly to `initCornerstoneTools`
|
||||
*/
|
||||
getViewportModule({ servicesManager, extensionManager }) {
|
||||
getViewportModule() {
|
||||
const ExtendedOHIFCornerstonePdfViewport = props => {
|
||||
return (
|
||||
<OHIFCornerstonePdfViewport
|
||||
servicesManager={servicesManager}
|
||||
extensionManager={extensionManager}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
return <OHIFCornerstonePdfViewport {...props} />;
|
||||
};
|
||||
|
||||
return [{ name: 'dicom-pdf', component: ExtendedOHIFCornerstonePdfViewport }];
|
||||
|
||||
@@ -33,14 +33,43 @@ function OHIFCornerstonePdfViewport({ displaySets, viewportId = 'pdf-viewport' }
|
||||
}
|
||||
|
||||
const { renderedUrl } = displaySets[0];
|
||||
const { getRenderedUrl } = displaySets[0];
|
||||
|
||||
useEffect(() => {
|
||||
let isCancelled = false;
|
||||
let revokeUrl;
|
||||
const abortController = new AbortController();
|
||||
|
||||
const load = async () => {
|
||||
setUrl(await renderedUrl);
|
||||
try {
|
||||
const result = getRenderedUrl
|
||||
? await getRenderedUrl({ signal: abortController.signal })
|
||||
: { url: await renderedUrl };
|
||||
|
||||
if (isCancelled) {
|
||||
result?.revoke?.();
|
||||
return;
|
||||
}
|
||||
|
||||
revokeUrl = result?.revoke;
|
||||
setUrl(result?.url || null);
|
||||
} catch (error) {
|
||||
console.warn('Failed to load PDF', error);
|
||||
if (!isCancelled) {
|
||||
setUrl(null);
|
||||
}
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
load();
|
||||
}, [renderedUrl]);
|
||||
|
||||
return () => {
|
||||
isCancelled = true;
|
||||
abortController.abort();
|
||||
revokeUrl?.();
|
||||
};
|
||||
}, [renderedUrl, getRenderedUrl]);
|
||||
|
||||
return (
|
||||
<div
|
||||
|
||||
Reference in new issue
Block a user