UNPKG

1.67 kBJavaScriptView Raw
1import React, { useState } from 'react'
2import { ScrollView } from 'react-native'
3import TextInput from '../forms/TextInput'
4import Popover from '../popups/Popover'
5import Menu from '../Menu'
6import propTypes from 'prop-types'
7
8const AutoSuggest = ({
9 data,
10 placeholder,
11 popoverHeight,
12 renderItem,
13 value,
14 onChange
15}) => {
16 const [isFind, setIsFind] = useState(false)
17 const onFocus = () => setIsFind(true)
18 const onBlur = () => setIsFind(false)
19
20 let _data = data.filter((item, index) => {
21 if (item === value) return
22 return value ? !!item.match(new RegExp('^' + value, 'gi')) : true
23 }).splice(0, 30)
24
25 const renderItems = _data.map((item, index) => {
26 if (renderItem) return renderItem(item, index, item === value)
27 return pug`
28 Menu.Item(
29 key=index
30 onPress=()=> onChange(item)
31 active=item === value
32 )= item
33 `
34 })
35
36 return pug`
37 Popover(
38 height=popoverHeight
39 visible=(!!_data.length && isFind)
40 positionHorizontal="right"
41 onDismiss=()=> {}
42 )
43 Popover.Caption
44 TextInput(
45 placeholder=placeholder
46 onFocus=onFocus
47 onBlur=onBlur
48 onChangeText=t=> onChange(t)
49 value=value
50 )
51 ScrollView
52 Menu= renderItems
53 `
54}
55
56AutoSuggest.defaultProps = {
57 data: [],
58 placeholder: 'Select value',
59 popoverHeight: 300,
60 value: ''
61}
62
63AutoSuggest.propTypes = {
64 placeholder: propTypes.string,
65 popoverHeight: propTypes.number,
66 value: propTypes.oneOfType([propTypes.string, propTypes.number]),
67 data: propTypes.array,
68 renderItem: propTypes.func,
69 onChange: propTypes.func
70}
71
72export default AutoSuggest