forked from FaridSafi/react-native-gifted-chat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCustomActions.js
113 lines (105 loc) · 2.24 KB
/
CustomActions.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import PropTypes from 'prop-types'
import React from 'react'
import {
StyleSheet,
Text,
TouchableOpacity,
View,
ViewPropTypes,
} from 'react-native'
import {
getLocationAsync,
pickImageAsync,
takePictureAsync,
} from './mediaUtils'
export default class CustomActions extends React.Component {
onActionsPress = () => {
const options = [
'Choose From Library',
'Take Picture',
'Send Location',
'Cancel',
]
const cancelButtonIndex = options.length - 1
this.context.actionSheet().showActionSheetWithOptions(
{
options,
cancelButtonIndex,
},
async buttonIndex => {
const { onSend } = this.props
switch (buttonIndex) {
case 0:
pickImageAsync(onSend)
return
case 1:
takePictureAsync(onSend)
return
case 2:
getLocationAsync(onSend)
default:
}
},
)
}
renderIcon = () => {
if (this.props.renderIcon) {
return this.props.renderIcon()
}
return (
<View style={[styles.wrapper, this.props.wrapperStyle]}>
<Text style={[styles.iconText, this.props.iconTextStyle]}>+</Text>
</View>
)
}
render() {
return (
<TouchableOpacity
style={[styles.container, this.props.containerStyle]}
onPress={this.onActionsPress}
>
{this.renderIcon()}
</TouchableOpacity>
)
}
}
const styles = StyleSheet.create({
container: {
width: 26,
height: 26,
marginLeft: 10,
marginBottom: 10,
},
wrapper: {
borderRadius: 13,
borderColor: '#b2b2b2',
borderWidth: 2,
flex: 1,
},
iconText: {
color: '#b2b2b2',
fontWeight: 'bold',
fontSize: 16,
backgroundColor: 'transparent',
textAlign: 'center',
},
})
CustomActions.contextTypes = {
actionSheet: PropTypes.func,
}
CustomActions.defaultProps = {
onSend: () => {},
options: {},
renderIcon: null,
containerStyle: {},
wrapperStyle: {},
iconTextStyle: {},
}
CustomActions.propTypes = {
onSend: PropTypes.func,
options: PropTypes.object,
renderIcon: PropTypes.func,
containerStyle: ViewPropTypes.style,
wrapperStyle: ViewPropTypes.style,
iconTextStyle: Text.propTypes.style,
}