import React, { useState } from 'react'; import { StyleSheet, ActivityIndicator, View, Image, StyleProp, ViewStyle } from 'react-native'; import Ionicons from '@expo/vector-icons/Ionicons'; import InteractiveBase from './InteractiveBase'; import { Text, useTheme } from 'native-base'; // import { BlurView } from 'expo-blur'; interface ButtonProps { title?: string; style?: StyleProp, onPress?: () => Promise; isDisabled?: boolean; icon?: (size: string, color: string) => React.ReactNode; iconImage?: string; isCollapsed?: boolean; type: 'filled' | 'outlined' | 'menu'; } const ButtonBase: React.FC = ({ title, style, onPress, isDisabled, icon, iconImage, isCollapsed, type = 'filled'}) => { const { colors } = useTheme(); const [loading, setLoading] = useState(false); const styleButton = StyleSheet.create({ Default: { scale: 1, shadowOpacity: 0.30, shadowRadius: 4.65, elevation: 8, backgroundColor: colors.primary[400], }, onHover: { scale: 1.02, shadowOpacity: 0.37, shadowRadius: 7.49, elevation: 12, backgroundColor: colors.primary[500], }, onPressed: { scale: 0.98, shadowOpacity: 0.23, shadowRadius: 2.62, elevation: 4, backgroundColor: colors.primary[600], }, Disabled: { scale: 1, shadowOpacity: 0.30, shadowRadius: 4.65, elevation: 8, backgroundColor: colors.primary[400], } }); const styleMenu = StyleSheet.create({ Default: { scale: 1, shadowOpacity: 0.30, shadowRadius: 4.65, elevation: 8, backgroundColor: 'rgba(16,16,20,0.5)', }, onHover: { scale: 1.01, shadowOpacity: 0.37, shadowRadius: 7.49, elevation: 12, backgroundColor: 'rgba(16,16,20,0.4)', }, onPressed: { scale: 0.99, shadowOpacity: 0.23, shadowRadius: 2.62, elevation: 4, backgroundColor: 'rgba(16,16,20,0.6)', }, Disabled: { scale: 1, shadowOpacity: 0.30, shadowRadius: 4.65, elevation: 8, backgroundColor: 'rgba(16,16,20,0.5)', } }); const typeToStyleAnimator = {'filled': styleButton,'outlined': styleButton,'menu': styleMenu}; return ( { if (onPress && !isDisabled) { setLoading(true); await onPress(); setLoading(false); } }} isDisabled={isDisabled} isOutlined={type === 'outlined'} > {loading ? ( ) : ( {icon && icon("18", type === 'outlined' ? '#6075F9' : '#FFFFFF')} {iconImage && } {title && {title}} )} ); }; const styles = StyleSheet.create({ container: { borderRadius: 8, }, content: { padding: 10, justifyContent: 'center', flexDirection: 'row', alignItems: 'center', }, icon: { width: 18, height: 18, // marginRight: 8, }, text: { color: '#fff', marginHorizontal: 8 }, }); export default ButtonBase;