Skip to content

Commit 3925341

Browse files
committed
Dialog: Clicks that starts inside the dialog will not trigger clickedOutside
1 parent 0017c2e commit 3925341

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/ui/Dialog/index.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
1111
// Set an unique ID for the dialog
1212
const [id] = useState(`${nanoid()}`)
1313

14+
const [clickStartedInsideDialog, setClickStartedInsideDialog] = useState(undefined)
15+
1416
const parsedStyles = useMemo(() => {
1517
const _style = { ...style }
1618
if (width) _style.width = width
@@ -38,10 +40,16 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
3840
}
3941
}
4042

43+
function handleMouseUp(e) {
44+
setClickStartedInsideDialog(false);
45+
}
46+
4147
// Register eventhandlers
42-
document.addEventListener('keydown', handleKeyDown)
48+
document.addEventListener('keydown', handleKeyDown);
49+
document.addEventListener('mouseup', handleMouseUp);
4350
return () => {
44-
document.removeEventListener('keydown', handleKeyDown)
51+
document.removeEventListener('keydown', handleKeyDown);
52+
document.removeEventListener('mouseup', handleMouseUp)
4553
}
4654
})
4755

@@ -58,6 +66,7 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
5866
}
5967

6068
function handleBackdropClick (e) {
69+
if(clickStartedInsideDialog) return;
6170
const clickedBackdrop = e.target.id === `dialog-backdrop-${id}`
6271

6372
if (isOpen && clickedBackdrop) {
@@ -76,15 +85,15 @@ export function Dialog ({ isOpen, title, className, persistent, width, height, s
7685
return (
7786
isOpen === true &&
7887
<ScrollLock isActive={isOpen}>
79-
<div id={`dialog-backdrop-${id}`} className={`dialog-backdrop ${className}`} onClick={(e) => handleBackdropClick(e)}>
88+
<div id={`dialog-backdrop-${id}`} className={`dialog-backdrop ${className}`} onMouseUp={(e) => handleBackdropClick(e)}>
8089
<div
8190
id={`dialog-${id}`}
8291
className='dialog'
8392
aria-label='dialog'
8493
aria-modal='true'
8594
role='dialog'
8695
style={parsedStyles}
87-
onClick={(e) => { e.preventDefault(); e.stopPropagation(); }}
96+
onMouseDown={(e) => { setClickStartedInsideDialog(true); e.preventDefault(); e.stopPropagation(); }}
8897
>
8998
{!persistent && showCloseButton &&
9099
<button className='dialog-close-btn' onClick={(e) => { handleCloseBtnClick(); e.preventDefault() }} aria-label='Lukk'>

0 commit comments

Comments
 (0)