import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useFocusEffect} from '@react-navigation/native' import { createFullHandle, IsValidHandle, validateHandle, } from '#/lib/strings/handles' import {ScreenTransition} from '#/screens/Login/ScreenTransition' import {useSignupContext} from '#/screens/Signup/state' import {atoms as a, useTheme} from '#/alf' import * as TextField from '#/components/forms/TextField' import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At' import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check' import {TimesLarge_Stroke2_Corner0_Rounded as Times} from '#/components/icons/Times' import {Text} from '#/components/Typography' export function StepHandle() { const {_} = useLingui() const t = useTheme() const {state, dispatch} = useSignupContext() const [validCheck, setValidCheck] = React.useState({ handleChars: false, hyphenStartOrEnd: false, frontLength: false, totalLength: true, overall: false, }) useFocusEffect( React.useCallback(() => { setValidCheck(validateHandle(state.handle, state.userDomain)) }, [state.handle, state.userDomain]), ) const onHandleChange = React.useCallback( (value: string) => { if (state.error) { dispatch({type: 'setError', value: ''}) } dispatch({ type: 'setHandle', value, }) }, [dispatch, state.error], ) return ( Your full handle will be{' '} @{createFullHandle(state.handle, state.userDomain)} {state.error ? ( {state.error} ) : undefined} {validCheck.hyphenStartOrEnd ? ( Only contains letters, numbers, and hyphens ) : ( Doesn't begin or end with a hyphen )} {!validCheck.totalLength ? ( No longer than 253 characters ) : ( At least 3 characters )} ) } function IsValidIcon({valid}: {valid: boolean}) { const t = useTheme() if (!valid) { return } return }