diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptBeginTracking.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptBeginTracking.js index e1560150c..657c24e66 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptBeginTracking.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptBeginTracking.js @@ -50,6 +50,10 @@ function _askTrackMeasurements(UIViewportDialogService, viewportIndex) { message, actions, onSubmit, + onOutsideClick: () => { + UIViewportDialogService.hide(); + resolve(RESPONSE.CANCEL); + }, }); }); } diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js index fbbe31c15..4a6f7dcc1 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewSeries.js @@ -63,6 +63,10 @@ function _askShouldAddMeasurements(UIViewportDialogService, viewportIndex) { message, actions, onSubmit, + onOutsideClick: () => { + UIViewportDialogService.hide(); + resolve(RESPONSE.CANCEL); + }, }); }); } @@ -91,10 +95,14 @@ function _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) { UIViewportDialogService.show({ viewportIndex, - type: 'info', // TODO: warn + type: 'warning', message, actions, onSubmit, + onOutsideClick: () => { + UIViewportDialogService.hide(); + resolve(RESPONSE.CANCEL); + }, }); }); } diff --git a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js index 71265b6c4..0f8842a31 100644 --- a/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js +++ b/extensions/measurement-tracking/src/contexts/TrackedMeasurementsContext/promptTrackNewStudy.js @@ -57,6 +57,10 @@ function _askTrackMeasurements(UIViewportDialogService, viewportIndex) { message, actions, onSubmit, + onOutsideClick: () => { + UIViewportDialogService.hide(); + resolve(RESPONSE.CANCEL); + }, }); }); } @@ -85,10 +89,14 @@ function _askSaveDiscardOrCancel(UIViewportDialogService, viewportIndex) { UIViewportDialogService.show({ viewportIndex, - type: 'info', // TODO: warn + type: 'warning', message, actions, onSubmit, + onOutsideClick: () => { + UIViewportDialogService.hide(); + resolve(RESPONSE.CANCEL); + }, }); }); } diff --git a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js index 38e0938dd..55eb3ef29 100644 --- a/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js +++ b/extensions/measurement-tracking/src/viewports/TrackedCornerstoneViewport.js @@ -277,6 +277,7 @@ function TrackedCornerstoneViewport({ type={viewportDialogState.type} actions={viewportDialogState.actions} onSubmit={viewportDialogState.onSubmit} + onOutsideClick={viewportDialogState.onOutsideClick} /> )} diff --git a/platform/core/src/services/UIViewportDialogService/index.js b/platform/core/src/services/UIViewportDialogService/index.js index 8fdb91437..12cc526c5 100644 --- a/platform/core/src/services/UIViewportDialogService/index.js +++ b/platform/core/src/services/UIViewportDialogService/index.js @@ -26,13 +26,21 @@ const serviceImplementation = { * * @param {ViewportDialogProps} props { content, contentProps, viewportIndex } */ -function _show({ viewportIndex, type, message, actions, onSubmit }) { +function _show({ + viewportIndex, + type, + message, + actions, + onSubmit, + onOutsideClick, +}) { return serviceImplementation._show({ viewportIndex, type, message, actions, onSubmit, + onOutsideClick, }); } diff --git a/platform/ui/src/components/Notification/Notification.jsx b/platform/ui/src/components/Notification/Notification.jsx index f980f2f07..d76428373 100644 --- a/platform/ui/src/components/Notification/Notification.jsx +++ b/platform/ui/src/components/Notification/Notification.jsx @@ -1,16 +1,35 @@ -import React from 'react'; +import React, { useEffect, useRef } from 'react'; import classnames from 'classnames'; import PropTypes from 'prop-types'; import { Button, Icon } from '@ohif/ui'; -const Notification = ({ type, message, actions, onSubmit }) => { +const Notification = ({ type, message, actions, onSubmit, onOutsideClick }) => { + const notificationRef = useRef(null); + + useEffect(() => { + const notificationElement = notificationRef.current; + const handleClick = function(event) { + const isClickInside = notificationElement.contains(event.target); + + if (!isClickInside) { + onOutsideClick(); + } + }; + + document.addEventListener('mousedown', handleClick); + + return () => { + document.removeEventListener('mousedown', handleClick); + }; + }, [onOutsideClick]); + const iconsByType = { error: { icon: 'info', color: 'text-red-700', }, warning: { - icon: 'info', + icon: 'notificationwarning-diamond', color: 'text-yellow-500', }, info: { @@ -35,7 +54,10 @@ const Notification = ({ type, message, actions, onSubmit }) => { const { icon, color } = getIconData(); return ( -