index.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { CSSProperties, FC, ReactNode } from 'react';
  2. import { Text, TouchableOpacity } from 'react-native';
  3. import { styles } from './styles';
  4. import { ButtonVariants } from '../../types/components';
  5. type Props = {
  6. children?: ReactNode;
  7. variant?: ButtonVariants;
  8. onPress?: () => void;
  9. containerStyles?: CSSProperties;
  10. textStyles?: CSSProperties;
  11. disabled?: boolean;
  12. };
  13. export const Button: FC<Props> = ({ children, variant, onPress, containerStyles, textStyles, disabled }) => {
  14. return (
  15. <>
  16. {variant === ButtonVariants.OPACITY ? (
  17. <OpacityButton
  18. onPress={onPress}
  19. children={children}
  20. containerStyles={containerStyles}
  21. textStyles={textStyles}
  22. disabled={disabled}
  23. />
  24. ) : variant === ButtonVariants.FILL ? (
  25. <FillButton
  26. onPress={onPress}
  27. children={children}
  28. containerStyles={containerStyles}
  29. textStyles={textStyles}
  30. />
  31. ) : variant == ButtonVariants.TEXT ? (
  32. <TextButton children={children} onPress={onPress} />
  33. ) : (
  34. <FillButton onPress={onPress} children={children} />
  35. )}
  36. </>
  37. );
  38. };
  39. type VariantProps = {
  40. children?: ReactNode;
  41. onPress?: () => void;
  42. containerStyles?: CSSProperties | {};
  43. textStyles?: CSSProperties | {};
  44. disabled?: boolean;
  45. };
  46. const OpacityButton: FC<VariantProps> = ({
  47. onPress,
  48. children,
  49. containerStyles = {},
  50. textStyles = {},
  51. disabled = false
  52. }) => (
  53. <TouchableOpacity
  54. style={[styles.button, styles.opacityButton, containerStyles]}
  55. onPress={onPress}
  56. disabled={disabled}
  57. >
  58. <Text style={[styles.text, styles.opacityText, textStyles]}>{children}</Text>
  59. </TouchableOpacity>
  60. );
  61. const FillButton: FC<VariantProps> = ({
  62. onPress,
  63. children,
  64. containerStyles = {},
  65. textStyles = {}
  66. }) => (
  67. <TouchableOpacity style={[styles.button, styles.fillButton, containerStyles]} onPress={onPress}>
  68. <Text style={[styles.text, styles.fillText, textStyles]}>{children}</Text>
  69. </TouchableOpacity>
  70. );
  71. const TextButton: FC<VariantProps> = ({ onPress, children }) => (
  72. <TouchableOpacity style={styles.button} onPress={onPress}>
  73. <Text style={[styles.text, styles.textButtonText]}>{children}</Text>
  74. </TouchableOpacity>
  75. );