import React, { useEffect, useRef } from 'react'; import classnames from 'classnames'; import { useNavigate } from 'react-router-dom'; import { DicomMetadataStore, MODULE_TYPES } from '@ohif/core'; import Dropzone from 'react-dropzone'; import filesToStudies from './filesToStudies'; import { extensionManager } from '../../App.tsx'; import { Icon, Button, LoadingIndicatorProgress } from '@ohif/ui'; const getLoadButton = (onDrop, text, isDir) => { return ( {({ getRootProps, getInputProps }) => (
)}
); }; function Local() { const navigate = useNavigate(); const dropzoneRef = useRef(); const [dropInitiated, setDropInitiated] = React.useState(false); // Initializing the dicom local dataSource const dataSourceModules = extensionManager.modules[MODULE_TYPES.DATA_SOURCE]; const localDataSources = dataSourceModules.reduce((acc, curr) => { const mods = []; curr.module.forEach(mod => { if (mod.type === 'localApi') { mods.push(mod); } }); return acc.concat(mods); }, []); const firstLocalDataSource = localDataSources[0]; const dataSource = firstLocalDataSource.createDataSource({}); const microscopyExtensionLoaded = extensionManager.registeredExtensionIds.includes( '@ohif/extension-dicom-microscopy' ); let modePath = 'viewer'; const onDrop = async acceptedFiles => { const studies = await filesToStudies(acceptedFiles, dataSource); const query = new URLSearchParams(); if (microscopyExtensionLoaded) { // TODO: for microscopy, we are forcing microscopy mode, which is not ideal. // we should make the local drag and drop navigate to the worklist and // there user can select microscopy mode const smStudies = studies.filter(id => { const study = DicomMetadataStore.getStudy(id); return ( study.series.findIndex( s => s.Modality === 'SM' || s.instances[0].Modality === 'SM' ) >= 0 ); }); if (smStudies.length > 0) { smStudies.forEach(id => query.append('StudyInstanceUIDs', id)); modePath = 'microscopy'; } } // Todo: navigate to work list and let user select a mode studies.forEach(id => query.append('StudyInstanceUIDs', id)); navigate(`/${modePath}/dicomlocal?${decodeURIComponent(query.toString())}`); }; // Set body style useEffect(() => { document.body.classList.add('bg-black'); return () => { document.body.classList.remove('bg-black'); }; }, []); return ( { setDropInitiated(true); onDrop(acceptedFiles); }} noClick > {({ getRootProps }) => (
OHIF
{dropInitiated ? (
) : (

Note: You data is not uploaded to any server, it will stay in your local browser application

Drag and Drop DICOM files here to load them in the Viewer

Or click to

)}
{getLoadButton(onDrop, 'Load files', false)} {getLoadButton(onDrop, 'Load folders', true)}
)}
); } export default Local;