ignite-boilerplate-andross-typescript
Version:
Customized version of ignite Andross With TypeScript Support.
102 lines (92 loc) • 2.45 kB
JavaScript
/* eslint no-use-before-define: ["error", { "variables": false }] */
import PropTypes from 'prop-types'
import React from 'react'
import { StyleSheet, Text, TouchableOpacity, View, ViewPropTypes } from 'react-native'
import Color from './Color'
export default class Actions extends React.Component {
constructor (props) {
super(props)
this.onActionsPress = this.onActionsPress.bind(this)
}
onActionsPress () {
const { options } = this.props
const optionKeys = Object.keys(options)
const cancelButtonIndex = optionKeys.indexOf('Cancel')
this.context.actionSheet().showActionSheetWithOptions(
{
options: optionKeys,
cancelButtonIndex,
tintColor: this.props.optionTintColor
},
(buttonIndex) => {
const key = optionKeys[buttonIndex]
if (key) {
options[key](this.props)
}
}
)
}
renderIcon () {
if (this.props.icon) {
return this.props.icon()
}
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.props.onPressActionButton || this.onActionsPress}
>
{this.renderIcon()}
</TouchableOpacity>
)
}
}
const styles = StyleSheet.create({
container: {
width: 26,
height: 26,
marginLeft: 10,
marginBottom: 10
},
wrapper: {
borderRadius: 13,
borderColor: Color.defaultColor,
borderWidth: 2,
flex: 1
},
iconText: {
color: Color.defaultColor,
fontWeight: 'bold',
fontSize: 16,
backgroundColor: Color.backgroundTransparent,
textAlign: 'center'
}
})
Actions.contextTypes = {
actionSheet: PropTypes.func
}
Actions.defaultProps = {
onSend: () => { },
options: {},
optionTintColor: Color.optionTintColor,
icon: null,
containerStyle: {},
iconTextStyle: {},
wrapperStyle: {}
}
Actions.propTypes = {
onSend: PropTypes.func,
options: PropTypes.object,
optionTintColor: PropTypes.string,
icon: PropTypes.func,
onPressActionButton: PropTypes.func,
wrapperStyle: ViewPropTypes.style,
containerStyle: ViewPropTypes.style,
iconTextStyle: Text.propTypes.style
}