* Update all the icons * Turn off global tool sync; watch as the world burns * Shift a bunch of things around so we can start tracking/setting per element * ToolBarService to initiate one of three different calls; callback passed to all button types * SplitButton and Toolbar Button to use new `onInteraction` prop and new toolbar state * Changes to toolbar button interface and config * Fix broken layout selector * Update SR viewport to activate tools in viewport component * Duplicate activation logic in measurement tracking extension * Add alternative/dashed variants for SR Viewport * pass through "setToolActive" commands for other viewport types * fix small overlay bugs (no wwwc or scale info) * Show SpacingBetweenSlices instead of PixelSpacing in patient information dialog * Fix prop-types * Update tracked viewport to have alternative tracked styling * alt styling for SR viewports * Update to support isLocked + isRehydratable * fix broken logic * fix broken logic * switch icon style * fix icon styles * hover and click to start flow * expedited workflow when data is not dirty (just after SR hydration) * fix: setting elliptical roi tool * fix arrow annotate dialog * fix: do not show learn more button for now * remove dead code * simpler cache invalidation * simpler cache invalidation part 2 * Fix for unable to spand study cards on separate pages
76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import { ViewportActionBar, Notification, Button } from '../';
|
|
|
|
const Viewport = ({ viewportIndex, onSeriesChange, studyData, children }) => {
|
|
return (
|
|
<div className="relative flex flex-col h-full">
|
|
<div className="absolute top-0 left-0 w-full">
|
|
<ViewportActionBar
|
|
onSeriesChange={onSeriesChange}
|
|
studyData={studyData}
|
|
/>
|
|
|
|
{/* TODO: NOTIFICATION API DEFINITION - OHIF-112 */}
|
|
<Notification
|
|
message="Track all measurement for this series?"
|
|
type="info"
|
|
actions={[
|
|
{
|
|
type: 'cancel',
|
|
text: 'No',
|
|
value: 0,
|
|
},
|
|
{
|
|
type: 'secondary',
|
|
text: 'No, do not ask again',
|
|
value: -1,
|
|
},
|
|
{
|
|
type: 'primary',
|
|
text: 'Yes',
|
|
value: 1,
|
|
},
|
|
]}
|
|
onSubmit={value => {
|
|
if (typeof window !== 'undefined') window.alert(value);
|
|
}}
|
|
/>
|
|
</div>
|
|
|
|
{/* STUDY IMAGE */}
|
|
<div className="w-full h-full" id={`viewport-${viewportIndex}`}>
|
|
{children}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
Viewport.propTypes = {
|
|
viewportIndex: PropTypes.number.isRequired,
|
|
onSeriesChange: PropTypes.func.isRequired,
|
|
studyData: PropTypes.shape({
|
|
label: PropTypes.string.isRequired,
|
|
isTracked: PropTypes.bool.isRequired,
|
|
/* Specific to SR Viewports only... */
|
|
isLocked: PropTypes.bool.isRequired,
|
|
isRehydratable: PropTypes.bool.isRequired,
|
|
studyDate: PropTypes.string.isRequired,
|
|
currentSeries: PropTypes.number.isRequired,
|
|
seriesDescription: PropTypes.string.isRequired,
|
|
modality: PropTypes.string.isRequired,
|
|
patientInformation: PropTypes.shape({
|
|
patientName: PropTypes.string.isRequired,
|
|
patientSex: PropTypes.string.isRequired,
|
|
patientAge: PropTypes.string.isRequired,
|
|
MRN: PropTypes.string.isRequired,
|
|
thickness: PropTypes.string.isRequired,
|
|
spacing: PropTypes.string.isRequired,
|
|
scanner: PropTypes.string.isRequired,
|
|
}),
|
|
}).isRequired,
|
|
children: PropTypes.node.isRequired,
|
|
};
|
|
|
|
export default Viewport;
|