UNPKG

mh-rn-component

Version:

97 lines (94 loc) 3.13 kB
import React, { useState, useEffect } from 'react'; import { dp } from '../utils/index'; import { ButtonType } from '../types'; import { View, Text, TouchableOpacity, TouchableWithoutFeedback, StyleSheet, Platform, Animated } from 'react-native'; import Icon from '../Icon'; const Button = props => { /** * type 样式的处理 */ const [buttonStyle, setButtonStyle] = useState({}); const [plainStyle, setPlainStyle] = useState({}); const [fontColor, setFontColor] = useState('#333'); const type = (props === null || props === void 0 ? void 0 : props.type) || 'default'; useEffect(() => { if (type !== 'default') { setFontColor('#fff'); } else { setFontColor('#333'); } }, [props === null || props === void 0 ? void 0 : props.type]); /** * todo 是否还需要? 处理边框圆角 */ useEffect(() => { if (props.borderRadius) { if (typeof props.borderRadius == 'string') { setButtonStyle(oldStyles => ({ ...oldStyles, borderRadius: styles.button.height / 2 })); } else { setButtonStyle(oldStyles => ({ ...oldStyles, borderRadius: Number(props.borderRadius) })); } } }, []); useEffect(() => { if (props.plain) { setPlainStyle({ backgroundColor: "#fff", color: ButtonType[type], borderWidth: 1, borderColor: props.color ? props.color : ButtonType[type] }); props.color && setFontColor(props.color); } }, [props.plain, props.color]); return /*#__PURE__*/React.createElement(Animated.View, null, /*#__PURE__*/React.createElement(TouchableWithoutFeedback, { disabled: props === null || props === void 0 ? void 0 : props.disabled }, /*#__PURE__*/React.createElement(TouchableOpacity, { onPress: props.onPress, activeOpacity: 0.8 }, /*#__PURE__*/React.createElement(View, { style: StyleSheet.flatten([styles.button, styles.content, styles.plr10, { backgroundColor: props.color ? props.color : ButtonType[type] }, type === 'default' && !props.color && styles.border, plainStyle, props.style, { opacity: props !== null && props !== void 0 && props.disabled ? 0.5 : 1, borderRadius: props.borderRadius && Number(props.borderRadius) || 0 }]) }, props.icon && /*#__PURE__*/React.createElement(Icon, { color: fontColor, name: props.icon }), /*#__PURE__*/React.createElement(Text, { style: [styles.content, { color: props.color ? fontColor : props.plain ? ButtonType[type] : fontColor }, props.textStyle] }, props === null || props === void 0 ? void 0 : props.children))))); }; const styles = StyleSheet.create({ button: { minWidth: dp(88), height: dp(44), borderStyle: 'solid', backgroundColor: '#fff', ...(Platform.OS === 'web' && { cursor: 'pointer' }) }, content: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }, border: { borderWidth: 1, borderColor: '#333' }, plr10: { paddingLeft: 10, paddingRight: 10 } }); export default Button; //# sourceMappingURL=index.js.map