import React, { useState } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; import { ButtonGroup, Button, StudyItem, ThumbnailList } from '@ohif/ui'; const buttonClasses = 'text-white text-base border-none bg-black p-2 min-w-18'; const activeButtonClasses = 'bg-primary-main'; const getInitialActiveTab = (tabs) => { return tabs && tabs[0] && tabs[0].name; }; const getTrackedSeries = (displaySets) => { let trackedSeries = 0; displaySets.forEach((displaySet) => { if (displaySet.isTracked) { trackedSeries++; } }); return trackedSeries; }; const StudyBrowser = ({ tabs, onClickStudy, onClickThumbnail }) => { const [tabActive, setTabActive] = useState(getInitialActiveTab(tabs)); const [studyActive, setStudyActive] = useState(null); const [thumbnailActive, setThumbnailActive] = useState(null); const getTabContent = () => { const tabData = tabs.find((tab) => tab.name === tabActive); if (!tabData || !tabData.studies || !Array.isArray(tabData.studies)) { return; } return tabData.studies.map( ({ studyInstanceUid, date, description, numInstances, modalities, displaySets, }) => { const isActive = studyActive === studyInstanceUid; return ( { setStudyActive(isActive ? null : studyInstanceUid); if (onClickStudy) { onClickStudy(studyInstanceUid); } }} /> {isActive && displaySets && ( { setThumbnailActive( thumbnailId === thumbnailActive ? null : thumbnailId ) if (onClickThumbnail) { // TODO: what is thumbnailId? Should pass display set instead onClickThumbnail(thumbnailId); } } } /> )} ); } ); }; return (
{tabs.map((tab) => { const { name, label } = tab; const isActive = tabActive === name; return ( ); })}
{getTabContent()}
); }; StudyBrowser.propTypes = { onClickStudy: PropTypes.func, onClickThumbnail: PropTypes.func, tabs: PropTypes.arrayOf( PropTypes.shape({ name: PropTypes.string.isRequired, label: PropTypes.string.isRequired, studies: PropTypes.arrayOf( PropTypes.shape({ studyInstanceUid: PropTypes.string.isRequired, date: PropTypes.string, numInstances: PropTypes.number, modalities: PropTypes.string, description: PropTypes.string, displaySets: PropTypes.arrayOf( PropTypes.shape({ displaySetInstanceUid: PropTypes.string.isRequired, imageSrc: PropTypes.string, imageAltText: PropTypes.string, seriesDate: PropTypes.string, seriesNumber: PropTypes.number, numInstances: PropTypes.number, description: PropTypes.string, componentType: PropTypes.oneOf([ 'thumbnail', 'thumbnailTracked', 'thumbnailNoImage', ]).isRequired, isTracked: PropTypes.bool, viewportIdentificator: PropTypes.string, }) ), }) ).isRequired, }) ), }; export default StudyBrowser;