diff --git a/native/account/registration/registration-button.react.js b/native/account/registration/registration-button.react.js --- a/native/account/registration/registration-button.react.js +++ b/native/account/registration/registration-button.react.js @@ -1,10 +1,10 @@ // @flow import * as React from 'react'; -import { Text } from 'react-native'; +import { Text, View, ActivityIndicator } from 'react-native'; import Button from '../../components/button.react.js'; -import { useStyles } from '../../themes/colors.js'; +import { useColors, useStyles } from '../../themes/colors.js'; type Props = { +onPress: () => mixed, @@ -27,9 +27,28 @@ const buttonTextStyle = React.useMemo(() => { if (variant === 'disabled') { return [styles.buttonText, styles.disabledButtonText]; + } else if (variant === 'loading') { + return [styles.buttonText, styles.invisibleLoadingText]; } return styles.buttonText; - }, [variant, styles.buttonText, styles.disabledButtonText]); + }, [ + variant, + styles.buttonText, + styles.disabledButtonText, + styles.invisibleLoadingText, + ]); + + const colors = useColors(); + const spinner = React.useMemo(() => { + if (variant !== 'loading') { + return undefined; + } + return ( + + + + ); + }, [variant, styles.spinner, colors.panelForegroundLabel]); return ( ); } @@ -66,6 +86,16 @@ disabledButtonText: { color: 'disabledButtonText', }, + invisibleLoadingText: { + color: 'transparent', + }, + spinner: { + position: 'absolute', + width: '100%', + height: '100%', + justifyContent: 'center', + alignItems: 'center', + }, }; export default RegistrationButton;