Skip to content

Commit fa99067

Browse files
inter-actione1emeb0t
authored andcommitted
fix issue #467 (#471)
1 parent bc35f85 commit fa99067

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

libs/internal/EventRegister.jsx

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,22 @@ const registerMap = window.__registerMap = window.__registerMap || {
88

99
const not_null = (t) => (t != null)
1010

11-
const hasRegistered = ({id}) => {
11+
const hasRegistered = ({ id }) => {
1212
return not_null(registerMap.ids[id])
1313
}
1414

15-
const cleanRegister = ({id}) => {
16-
delete registerMap.ids[id]
15+
const cleanRegister = (props) => {
16+
const { target, eventName, func, isUseCapture, id } = props
17+
if (hasRegistered(this.cached)) {
18+
target.removeEventListener(eventName, func, isUseCapture);
19+
delete registerMap.ids[id]
20+
}
1721
}
1822

19-
const doRegister = ({id}) => {
23+
const doRegister = (props) => {
24+
let { id, eventName, func, isUseCapture } = props
2025
registerMap.ids[id] = id
26+
document.addEventListener(eventName, func, isUseCapture)
2127
}
2228

2329
/**
@@ -26,24 +32,19 @@ const doRegister = ({id}) => {
2632
export default class EventRegister extends Component {
2733

2834
componentDidMount() {
29-
let {target, eventName, func, isUseCapture, id} = this.props
35+
let { eventName, id } = this.props
3036
eventName = eventName.toLowerCase()
3137
eventName = /^on/.test(eventName) ? eventName.substring(2) : eventName
3238
this.cached = Object.assign({}, this.props, { eventName })
3339

3440
require_condition(typeof id === 'string', 'id prop is required')
3541
require_condition(!hasRegistered(this.cached), `id: ${id} has been registered`)
3642

37-
target.addEventListener(eventName, func, isUseCapture)
3843
doRegister(this.cached)
3944
}
4045

4146
componentWillUnmount() {
42-
const {target, eventName, func, isUseCapture} = this.cached
43-
if (hasRegistered(this.cached)) {
44-
target.removeEventListener(eventName, func, isUseCapture)
45-
cleanRegister(this.cached)
46-
}
47+
cleanRegister(this.cached)
4748
}
4849

4950
render() {

src/date-picker/BasePicker.jsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ReactDOM from 'react-dom';
66
import { PropTypes, Component } from '../../libs';
77
import { EventRegister } from '../../libs/internal'
88

9+
910
import Input from '../input'
1011
import { PLACEMENT_MAP, HAVE_TRIGGER_TYPES, TYPE_VALUE_RESOLVER_MAP, DEFAULT_FORMATS } from './constants'
1112
import { Errors, require_condition, IDGenerator } from '../../libs/utils';
@@ -104,7 +105,7 @@ export default class BasePicker extends Component {
104105
}
105106

106107
// (string) => Date | null
107-
parseDate(dateStr: string) : NullableDate{
108+
parseDate(dateStr: string): NullableDate{
108109
if (!dateStr) return null
109110
const type = this.type;
110111
const parser = (
@@ -178,7 +179,7 @@ export default class BasePicker extends Component {
178179

179180
// (state, props)=>ReactElement
180181
pickerPanel(state: any, props: $Subtype<BasePickerProps>) {
181-
throw new Errors.MethodImplementationRequiredError()
182+
throw new Errors.MethodImplementationRequiredError(props)
182183
}
183184

184185
isDateValid(date: ValidDateType) {
@@ -201,12 +202,12 @@ export default class BasePicker extends Component {
201202
return true
202203
}
203204

204-
handleClickOutside() {
205+
handleClickOutside(evt: SyntheticEvent) {
205206
const {value, pickerVisible} = this.state
206207
if (!this.isInputFocus && !pickerVisible) {
207208
return
208209
}
209-
210+
if (this.domRoot.contains(evt.target)) return
210211
if (this.isDateValid(value)) {
211212
this.setState({ pickerVisible: false })
212213
this.props.onChange(value)
@@ -278,11 +279,8 @@ export default class BasePicker extends Component {
278279
'is-active': pickerVisible,
279280
'is-filled': !!value
280281
})}
281-
onClick={(evt) => {
282-
evt.stopPropagation()
283-
evt.nativeEvent.stopImmediatePropagation();
284-
return false
285-
} }
282+
283+
ref={v=>this.domRoot=v}
286284
>
287285

288286
<EventRegister

0 commit comments

Comments
 (0)