diff --git a/native/account/registration/keyserver-selection.react.js b/native/account/registration/keyserver-selection.react.js
index ef038048f..984154bde 100644
--- a/native/account/registration/keyserver-selection.react.js
+++ b/native/account/registration/keyserver-selection.react.js
@@ -1,139 +1,146 @@
// @flow
import * as React from 'react';
import { Text, TextInput, View } from 'react-native';
import RegistrationButton from './registration-button.react.js';
import RegistrationContainer from './registration-container.react.js';
import type { RegistrationNavigationProp } from './registration-navigator.react.js';
import {
RegistrationTile,
RegistrationTileHeader,
} from './registration-tile.react.js';
import CommIcon from '../../components/comm-icon.react.js';
import type { NavigationRoute } from '../../navigation/route-names.js';
import { useStyles, useColors } from '../../themes/colors.js';
type Selection = 'ashoat' | 'custom';
type Props = {
+navigation: RegistrationNavigationProp<'KeyserverSelection'>,
+route: NavigationRoute<'KeyserverSelection'>,
};
// eslint-disable-next-line no-unused-vars
function KeyserverSelection(props: Props): React.Node {
const [customKeyserver, setCustomKeyserver] = React.useState('');
const customKeyserverTextInputRef = React.useRef();
const [currentSelection, setCurrentSelection] = React.useState();
const selectAshoat = React.useCallback(() => {
setCurrentSelection('ashoat');
customKeyserverTextInputRef.current?.blur();
}, []);
const customKeyserverEmpty = !customKeyserver;
const selectCustom = React.useCallback(() => {
setCurrentSelection('custom');
if (customKeyserverEmpty) {
customKeyserverTextInputRef.current?.focus();
}
}, [customKeyserverEmpty]);
const onCustomKeyserverFocus = React.useCallback(() => {
setCurrentSelection('custom');
}, []);
+ let buttonState = 'disabled';
+ if (
+ currentSelection === 'ashoat' ||
+ (currentSelection === 'custom' && customKeyserver)
+ ) {
+ buttonState = 'enabled';
+ }
const onSubmit = React.useCallback(() => {}, []);
const styles = useStyles(unboundStyles);
const colors = useColors();
return (
Select a keyserver to join
Chat communities on Comm are hosted on keyservers, which are
user-operated backends.
Keyservers allow Comm to offer strong privacy guarantees without
sacrificing functionality.
ashoat
Ashoat is Comm’s founder, and his keyserver currently hosts most of
the communities on Comm.
Enter a keyserver
-
+
);
}
const unboundStyles = {
container: {
backgroundColor: 'panelBackground',
justifyContent: 'space-between',
flex: 1,
},
header: {
fontSize: 24,
color: 'panelForegroundLabel',
paddingBottom: 16,
},
body: {
fontSize: 15,
lineHeight: 20,
color: 'panelForegroundSecondaryLabel',
paddingBottom: 16,
},
tileTitleText: {
flex: 1,
fontSize: 18,
color: 'panelForegroundLabel',
},
tileBody: {
fontSize: 13,
color: 'panelForegroundSecondaryLabel',
},
cloud: {
marginRight: 8,
},
keyserverInput: {
color: 'panelForegroundLabel',
borderColor: 'panelSecondaryForegroundBorder',
borderWidth: 1,
borderRadius: 4,
padding: 12,
},
};
export default KeyserverSelection;
diff --git a/native/account/registration/registration-button.react.js b/native/account/registration/registration-button.react.js
index ec67ca0f9..fe44581a4 100644
--- a/native/account/registration/registration-button.react.js
+++ b/native/account/registration/registration-button.react.js
@@ -1,37 +1,64 @@
// @flow
import * as React from 'react';
import { Text } from 'react-native';
import Button from '../../components/button.react.js';
import { useStyles } from '../../themes/colors.js';
type Props = {
+onPress: () => mixed,
+label: string,
+ +state?: 'enabled' | 'disabled' | 'loading',
};
function RegistrationButton(props: Props): React.Node {
- const { onPress, label } = props;
+ const { onPress, label, state } = props;
+
const styles = useStyles(unboundStyles);
+ const buttonStyle = React.useMemo(() => {
+ if (state === 'disabled' || state === 'loading') {
+ return [styles.button, styles.disabledButton];
+ } else {
+ return styles.button;
+ }
+ }, [state, styles.button, styles.disabledButton]);
+ const buttonTextStyle = React.useMemo(() => {
+ if (state === 'disabled') {
+ return [styles.buttonText, styles.disabledButtonText];
+ }
+ return styles.buttonText;
+ }, [state, styles.buttonText, styles.disabledButtonText]);
+
return (
-