import React from 'react'; import { Text, TouchableOpacity, Animated } from 'react-native'; import buttonStyles from './styles'; export { buttonStyles }; import variables from '../../common/styles/variables'; import { FadeAnimated } from '../../common/animations'; const fontSizeMap = { lg: variables.buttonLFontSize, md: variables.buttonMFontSize, sm: variables.buttonSFontSize }; const paddingMap = { lg: { paddingHorizontal: variables.buttonLHSpacing, paddingVertical: variables.buttonLVSpacing }, md: { paddingHorizontal: variables.buttonMHSpacing, paddingVertical: variables.buttonMVSpacing }, sm: { paddingHorizontal: variables.buttonSHSpacing, paddingVertical: variables.buttonSVSpacing } }; export class Button extends React.Component { constructor(props) { super(props); this.containerRef = null; this.animated = null; this.handleLayout = (e) => { const { width } = e.nativeEvent.layout; this.setState({ buttonWidth: width }); }; this.state = { buttonWidth: 0, }; if (variables.buttonEnableAnimated) { this.animated = new FadeAnimated({ scaleList: [0, 1], opacityList: [1, 0], opacityDuration: 1000, }); } } componentDidMount() { } measure(...args) { this.containerRef.measure.apply(this.containerRef, args); } handlePress() { const { disabled, onPress } = this.props; if (disabled) { return; } this.animated && this.animated.toIn(); if (typeof onPress === 'function') { onPress(); } } render() { const { type, disabled, style, textStyle, size, children, textColorInverse, testID } = this.props; const styleWrapper = buttonStyles[type + 'Wrapper'] || buttonStyles.defaultWrapper; const styleText = buttonStyles[type + 'Text'] || buttonStyles.defaultText; const inverseStyle = textColorInverse && type !== 'default' && type !== 'text' ? { color: variables.mtdGrayBase } : {}; let animatedStyle = {}; if (this.animated) { animatedStyle = { transform: [{ scale: this.animated.getState().scale }], opacity: this.animated.getState().opacity }; } return (React.createElement(TouchableOpacity, { testID: testID, ref: c => (this.containerRef = c), style: [ styleWrapper, { opacity: disabled ? variables.buttonActiveOpacity : 1, ...(paddingMap[size] || paddingMap['md']) }, style ], disabled: disabled, onPress: () => this.handlePress(), activeOpacity: disabled ? 1 : variables.buttonActiveOpacity, onLayout: this.handleLayout }, React.isValidElement(children) ? children : (React.createElement(Text, { style: [ styleText, { fontSize: fontSizeMap[size] || fontSizeMap['md'] }, inverseStyle, textStyle ] }, children)), React.createElement(Animated.View, { style: [ { position: 'absolute', zIndex: -1, width: this.state.buttonWidth, height: this.state.buttonWidth, borderRadius: this.state.buttonWidth, backgroundColor: 'rgba(0, 0, 0, 0.1)', opacity: 0, }, animatedStyle ] }))); } } Button.defaultProps = { style: {}, textStyle: {}, textColorInverse: false, type: 'default', size: 'md', disabled: false, onPress: null, }; //# sourceMappingURL=index.js.map