import React, { Component } from 'react'; import { metadata, utils } from '@ohif/core'; import ConnectedViewer from './ConnectedViewer.js'; import PropTypes from 'prop-types'; import { extensionManager } from './../App.js'; import Dropzone from 'react-dropzone'; import filesToStudies from '../lib/filesToStudies'; import './ViewerLocalFileData.css'; import { withTranslation } from 'react-i18next'; const { OHIFStudyMetadata } = metadata; const { studyMetadataManager, updateMetaDataManager } = utils; const dropZoneLinkDialog = (onDrop, i18n, dir) => { return ( {({ getRootProps, getInputProps }) => ( {dir ? ( {i18n('Load folders')} ) : ( {i18n('Load files')} )} )} ); }; const linksDialogMessage = (onDrop, i18n) => { return ( <> {i18n('Or click to ')} {dropZoneLinkDialog(onDrop, i18n)} {i18n(' or ')} {dropZoneLinkDialog(onDrop, i18n, true)} {i18n(' from dialog')} ); }; class ViewerLocalFileData extends Component { static propTypes = { studies: PropTypes.array, }; state = { studies: null, loading: false, error: null, }; updateStudies = studies => { // Render the viewer when the data is ready studyMetadataManager.purge(); // Map studies to new format, update metadata manager? const updatedStudies = studies.map(study => { const studyMetadata = new OHIFStudyMetadata( study, study.studyInstanceUid ); const sopClassHandlerModules = extensionManager.modules['sopClassHandlerModule']; study.displaySets = study.displaySets || studyMetadata.createDisplaySets(sopClassHandlerModules); studyMetadata.setDisplaySets(study.displaySets); // Updates WADO-RS metaDataManager updateMetaDataManager(study); studyMetadataManager.add(studyMetadata); return study; }); this.setState({ studies: updatedStudies, }); }; render() { const onDrop = async acceptedFiles => { this.setState({ loading: true }); const studies = await filesToStudies(acceptedFiles); const updatedStudies = this.updateStudies(studies); if (!updatedStudies) { return; } this.setState({ studies: updatedStudies, loading: false }); }; if (this.state.error) { return
Error: {JSON.stringify(this.state.error)}
; } return ( {({ getRootProps, getInputProps }) => (
{this.state.studies ? ( a.studyInstanceUid) } /> ) : (
{this.state.loading ? (

{this.props.t('Loading...')}

) : ( <>

{this.props.t( 'Drag and Drop DICOM files here to load them in the Viewer' )}

{linksDialogMessage(onDrop, this.props.t)}

)}
)}
)}
); } } export default withTranslation('Common')(ViewerLocalFileData);