80 lines
2.1 KiB
JavaScript
Executable File
80 lines
2.1 KiB
JavaScript
Executable File
import React from "react";
|
|
import {ActivityIndicator, StyleSheet, TouchableOpacity} from "react-native";
|
|
import {Color} from '../../config/Color';
|
|
import PropTypes from "prop-types";
|
|
import CustomText from "../CustomText";
|
|
import styles from "./styles";
|
|
|
|
export default function CustomButton(props) {
|
|
const {
|
|
style,
|
|
styleCustomText,
|
|
icon,
|
|
outline,
|
|
onPress,
|
|
full,
|
|
round,
|
|
loading,
|
|
children,
|
|
...rest
|
|
} = props;
|
|
|
|
return (
|
|
<TouchableOpacity
|
|
{...rest}
|
|
style={StyleSheet.flatten([
|
|
[styles.default, {backgroundColor: Color.primaryColor}],
|
|
outline && [
|
|
styles.outline,
|
|
{backgroundColor: Color.cardBackgroundColor, borderColor: Color.primaryColor}
|
|
],
|
|
full && styles.full,
|
|
round && styles.round,
|
|
style
|
|
])}
|
|
activeOpacity={0.9}
|
|
onPress={onPress}
|
|
>
|
|
{icon ? icon : null}
|
|
<CustomText
|
|
style={StyleSheet.flatten([
|
|
styles.textDefault,
|
|
outline && {color: Color.primaryColor},
|
|
styleCustomText
|
|
])}
|
|
numberOfLines={1}
|
|
>
|
|
{children || "CustomButton"}
|
|
</CustomText>
|
|
{loading ? (
|
|
<ActivityIndicator
|
|
size="small"
|
|
color={outline ? Color.primaryColor : Color.whiteColor}
|
|
style={{paddingLeft: 5}}
|
|
/>
|
|
) : null}
|
|
</TouchableOpacity>
|
|
);
|
|
}
|
|
|
|
CustomButton.propTypes = {
|
|
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
|
|
icon: PropTypes.node,
|
|
outline: PropTypes.bool,
|
|
full: PropTypes.bool,
|
|
onPress: PropTypes.func,
|
|
round: PropTypes.bool,
|
|
loading: PropTypes.bool
|
|
};
|
|
|
|
CustomButton.defaultProps = {
|
|
style: {},
|
|
icon: null,
|
|
outline: false,
|
|
full: false,
|
|
onPress: () => {
|
|
},
|
|
round: false,
|
|
loading: false
|
|
};
|