From 229eaad676cd5fbbe51b83c85dcc3339c8ecedaa Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Wed, 10 Apr 2019 11:45:32 +1000 Subject: [PATCH] fix: dont prevent internal clicks, fixes #3 --- example/app.tsx | 4 +++- src/component.tsx | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/example/app.tsx b/example/app.tsx index bfeacc0..06261b0 100644 --- a/example/app.tsx +++ b/example/app.tsx @@ -43,7 +43,7 @@ export default class App extends Component <{}, AppState> { outside - + {on &&
@@ -54,6 +54,8 @@ export default class App extends Component <{}, AppState> { shards={[this.toggleRef, this.scrollRef]} > Holala!! + + link innerbox diff --git a/src/component.tsx b/src/component.tsx index e561c80..ab7ed55 100644 --- a/src/component.tsx +++ b/src/component.tsx @@ -28,9 +28,10 @@ const extractRef = (ref: React.RefObject | HTMLElement): HTMLElement => ( export class ReactFocusOn extends Component { private _undo?: () => void; + private lastEventTarget?: EventTarget; private lockProps = { - onClick: (e: React.MouseEvent) => e.preventDefault(), + onClick: (e: React.MouseEvent) => this.lastEventTarget = e.target }; private onActivation = (node: HTMLElement) => { @@ -47,7 +48,7 @@ export class ReactFocusOn extends Component { document.addEventListener('click', this.onClick); }; - private onDeactivation = (node: HTMLElement) => { + private onDeactivation = () => { this._undo!(); const {onDeactivation} = this.props; if (onDeactivation) { @@ -69,7 +70,7 @@ export class ReactFocusOn extends Component { private onClick = (event: MouseEvent) => { const {shards = [], onClickOutside} = this.props; - if (event.defaultPrevented) { + if (event.defaultPrevented || event.target === this.lastEventTarget) { return; } if (