-
Notifications
You must be signed in to change notification settings - Fork 220
/
Copy pathTelInput.js
71 lines (64 loc) · 1.87 KB
/
TelInput.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import React, { Component } from 'react';
import PropTypes from 'prop-types';
export default class TelInput extends Component {
static propTypes = {
className: PropTypes.string,
disabled: PropTypes.bool,
readonly: PropTypes.bool,
fieldName: PropTypes.string,
fieldId: PropTypes.string,
value: PropTypes.string,
placeholder: PropTypes.string,
handleInputChange: PropTypes.func,
handlePaste: PropTypes.func,
handleOnBlur: PropTypes.func,
autoFocus: PropTypes.bool,
autoComplete: PropTypes.string,
inputProps: PropTypes.object, // eslint-disable-line react/forbid-prop-types
refCallback: PropTypes.func.isRequired,
cursorPosition: PropTypes.number,
};
componentDidUpdate() {
this.tel.setSelectionRange(
this.props.cursorPosition,
this.props.cursorPosition
);
}
refHandler = element => {
this.tel = element;
this.props.refCallback(element);
};
handleBlur = e => {
if (typeof this.props.handleOnBlur === 'function') {
this.props.handleOnBlur(e);
}
};
handleFocus = () => {};
handlePaste = e => {
if (typeof this.props.handlePaste === 'function') {
this.props.handlePaste(e);
}
};
render() {
return (
<input
{...this.props.inputProps}
ref={this.refHandler}
type="tel"
autoComplete={this.props.autoComplete}
className={this.props.className}
disabled={this.props.disabled ? 'disabled' : false}
readOnly={this.props.readonly ? 'readonly' : false}
name={this.props.fieldName}
id={this.props.fieldId}
value={this.props.value}
placeholder={this.props.placeholder}
onChange={this.props.handleInputChange}
onPaste={this.handlePaste}
onBlur={this.handleBlur}
onFocus={this.handleFocus}
autoFocus={this.props.autoFocus}
/>
);
}
}