-
Notifications
You must be signed in to change notification settings - Fork 214
Expand file tree
/
Copy pathAutoComplete.js
More file actions
81 lines (81 loc) · 1.95 KB
/
AutoComplete.js
File metadata and controls
81 lines (81 loc) · 1.95 KB
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
72
73
74
75
76
77
78
79
80
81
import React, { Component } from 'react'
import styles from './auto.module.sass'
export default class AutoComplete extends Component {
constructor(props) {
super(props);
this.state = {
isFocus: false,
val: ''
}
}
handleChange = (e) => {
const input = e.target.value
this.props.filter(input)
if(this.props.onChange){
this.props.onChange(input)
}
this.setState({
val: input
})
}
handleFocus = () => {
this.setState({
isFocus: true
})
}
handleBlur = () => {
let blurTimer=null
blurTimer=setTimeout(() => {
this.setState({
isFocus: false
},()=>clearTimeout(blurTimer))
}, 100);
}
handleClick = (v) => {
if(this.props.suggest_value){
this.props.suggest_value(v)
}
this.setState({
val: v
})
}
render() {
const r = this.props.filter_result
return (
<div className={styles.outbox} style={this.props.style}>
<input
type="text"
onChange={this.handleChange}
onFocus={this.handleFocus}
onBlur={this.handleBlur}
value={this.state.val}
placeholder="Buscar"
/>
<div className={styles.sugges_outbox}>
{
this.state.isFocus &&
!this.props.error && !this.props.loading &&
Object.keys(r || {}).map(f =>
<div key={f} className={styles.sugges_box}>
<div className={styles.sugges_category}>
{f}
</div>
<div className={styles.sugges_arr}>
{r[f].map(s =>
<div
key={s}
className={styles.sugges_value}
onClick={() => this.handleClick(s)}
>
{s}
</div>
)}
</div>
</div>
)
}
</div>
</div>
)
}
}