Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Improve handling around connection failures during login

+29 -9
+8 -1
src/view/com/login/CreateAccount.tsx
··· 32 32 const [isProcessing, setIsProcessing] = useState<boolean>(false) 33 33 const [serviceUrl, setServiceUrl] = useState<string>(DEFAULT_SERVICE) 34 34 const [error, setError] = useState<string>('') 35 + const [retryDescribeTrigger, setRetryDescribeTrigger] = useState<any>({}) 35 36 const [serviceDescription, setServiceDescription] = useState< 36 37 ServiceDescription | undefined 37 38 >(undefined) ··· 66 67 return () => { 67 68 aborted = true 68 69 } 69 - }, [serviceUrl, store.session, store.log]) 70 + }, [serviceUrl, store.session, store.log, retryDescribeTrigger]) 71 + 72 + const onPressRetryConnect = () => setRetryDescribeTrigger({}) 70 73 71 74 const onPressSelectService = () => { 72 75 store.shell.openModal(new ServerInputModal(serviceUrl, setServiceUrl)) ··· 342 345 ) : ( 343 346 <Text style={[s.white, s.f18, s.bold, s.pr5]}>Next</Text> 344 347 )} 348 + </TouchableOpacity> 349 + ) : !serviceDescription && error ? ( 350 + <TouchableOpacity onPress={onPressRetryConnect}> 351 + <Text style={[s.white, s.f18, s.bold, s.pr5]}>Retry</Text> 345 352 </TouchableOpacity> 346 353 ) : !serviceDescription ? ( 347 354 <>
+21 -8
src/view/com/login/Signin.tsx
··· 30 30 export const Signin = ({onPressBack}: {onPressBack: () => void}) => { 31 31 const store = useStores() 32 32 const [error, setError] = useState<string>('') 33 + const [retryDescribeTrigger, setRetryDescribeTrigger] = useState<any>({}) 33 34 const [serviceUrl, setServiceUrl] = useState<string>(DEFAULT_SERVICE) 34 35 const [serviceDescription, setServiceDescription] = useState< 35 36 ServiceDescription | undefined ··· 63 64 return () => { 64 65 aborted = true 65 66 } 66 - }, [store.session, store.log, serviceUrl]) 67 + }, [store.session, store.log, serviceUrl, retryDescribeTrigger]) 68 + 69 + const onPressRetryConnect = () => setRetryDescribeTrigger({}) 67 70 68 71 return ( 69 72 <KeyboardAvoidingView behavior="padding" style={{flex: 1}}> ··· 80 83 setServiceUrl={setServiceUrl} 81 84 onPressBack={onPressBack} 82 85 onPressForgotPassword={gotoForm(Forms.ForgotPassword)} 86 + onPressRetryConnect={onPressRetryConnect} 83 87 /> 84 88 ) : undefined} 85 89 {currentForm === Forms.ForgotPassword ? ( ··· 118 122 serviceDescription, 119 123 setError, 120 124 setServiceUrl, 125 + onPressRetryConnect, 121 126 onPressBack, 122 127 onPressForgotPassword, 123 128 }: { ··· 127 132 serviceDescription: ServiceDescription | undefined 128 133 setError: (v: string) => void 129 134 setServiceUrl: (v: string) => void 135 + onPressRetryConnect: () => void 130 136 onPressBack: () => void 131 137 onPressForgotPassword: () => void 132 138 }) => { ··· 185 191 } 186 192 } 187 193 194 + const isReady = !!serviceDescription && !!handle && !!password 188 195 return ( 189 196 <> 190 197 <View style={styles.group}> ··· 252 259 <Text style={[s.white, s.f18, s.pl5]}>Back</Text> 253 260 </TouchableOpacity> 254 261 <View style={s.flex1} /> 255 - <TouchableOpacity onPress={onPressNext}> 256 - {!serviceDescription || isProcessing ? ( 262 + {!serviceDescription && error ? ( 263 + <TouchableOpacity onPress={onPressRetryConnect}> 264 + <Text style={[s.white, s.f18, s.bold, s.pr5]}>Retry</Text> 265 + </TouchableOpacity> 266 + ) : !serviceDescription ? ( 267 + <> 257 268 <ActivityIndicator color="#fff" /> 258 - ) : ( 269 + <Text style={[s.white, s.f18, s.pl10]}>Connecting...</Text> 270 + </> 271 + ) : isProcessing ? ( 272 + <ActivityIndicator color="#fff" /> 273 + ) : isReady ? ( 274 + <TouchableOpacity onPress={onPressNext}> 259 275 <Text style={[s.white, s.f18, s.bold, s.pr5]}>Next</Text> 260 - )} 261 - </TouchableOpacity> 262 - {!serviceDescription || isProcessing ? ( 263 - <Text style={[s.white, s.f18, s.pl10]}>Connecting...</Text> 276 + </TouchableOpacity> 264 277 ) : undefined} 265 278 </View> 266 279 </>