Skip to content

Commit 451b8f0

Browse files
committed
Don't close widgets when clicked within its wrapper
1 parent b3006eb commit 451b8f0

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

src/DateTimePicker.jsx

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { PureComponent } from 'react';
1+
import React, { createRef, PureComponent } from 'react';
22
import { createPortal } from 'react-dom';
33
import PropTypes from 'prop-types';
44
import makeEventProps from 'make-event-props';
@@ -35,6 +35,10 @@ export default class DateTimePicker extends PureComponent {
3535

3636
state = {};
3737

38+
wrapper = createRef();
39+
40+
widgetWrapper = createRef();
41+
3842
componentDidMount() {
3943
this.handleOutsideActionListeners();
4044
}
@@ -70,9 +74,16 @@ export default class DateTimePicker extends PureComponent {
7074
}
7175

7276
onOutsideAction = (event) => {
77+
const { wrapper, widgetWrapper } = this;
78+
7379
// Try event.composedPath first to handle clicks inside a Shadow DOM.
7480
const target = 'composedPath' in event ? event.composedPath()[0] : event.target;
75-
if (this.wrapper && !this.wrapper.contains(target)) {
81+
82+
if (
83+
wrapper.current &&
84+
!wrapper.current.contains(target) &&
85+
(!widgetWrapper.current || !widgetWrapper.current.contains(target))
86+
) {
7687
this.closeWidgets();
7788
}
7889
};
@@ -338,7 +349,12 @@ export default class DateTimePicker extends PureComponent {
338349
);
339350

340351
return portalContainer ? (
341-
createPortal(<div className={classNames}>{calendar}</div>, portalContainer)
352+
createPortal(
353+
<div ref={this.widgetWrapper} className={classNames}>
354+
{calendar}
355+
</div>,
356+
portalContainer,
357+
)
342358
) : (
343359
<Fit>
344360
<div
@@ -394,7 +410,12 @@ export default class DateTimePicker extends PureComponent {
394410
);
395411

396412
return portalContainer ? (
397-
createPortal(<div className={classNames}>{clock}</div>, portalContainer)
413+
createPortal(
414+
<div ref={this.widgetWrapper} className={classNames}>
415+
{clock}
416+
</div>,
417+
portalContainer,
418+
)
398419
) : (
399420
<Fit>
400421
<div
@@ -428,13 +449,7 @@ export default class DateTimePicker extends PureComponent {
428449
)}
429450
{...eventPropsWithoutOnChange}
430451
onFocus={this.onFocus}
431-
ref={(ref) => {
432-
if (!ref) {
433-
return;
434-
}
435-
436-
this.wrapper = ref;
437-
}}
452+
ref={this.wrapper}
438453
>
439454
{this.renderInputs()}
440455
{this.renderCalendar()}

0 commit comments

Comments
 (0)