Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

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

at fbd1138d97dda2df66bee13ad3ca6e83d55ebc25 123 lines 4.0 kB view raw
1import React from 'react' 2import {View} from 'react-native' 3import {useSafeAreaInsets} from 'react-native-safe-area-context' 4import {msg} from '@lingui/macro' 5import {useLingui} from '@lingui/react' 6 7import {PressableScale} from '#/lib/custom-animations/PressableScale' 8import {logEvent} from '#/lib/statsig/statsig' 9import { 10 useLoggedOutView, 11 useLoggedOutViewControls, 12} from '#/state/shell/logged-out' 13import {useSetMinimalShellMode} from '#/state/shell/minimal-mode' 14import {ErrorBoundary} from '#/view/com/util/ErrorBoundary' 15import {Login} from '#/screens/Login' 16import {Signup} from '#/screens/Signup' 17import {LandingScreen} from '#/screens/StarterPack/StarterPackLandingScreen' 18import {atoms as a, native, tokens, useTheme} from '#/alf' 19import {Button, ButtonIcon} from '#/components/Button' 20import {TimesLarge_Stroke2_Corner0_Rounded as XIcon} from '#/components/icons/Times' 21import {SplashScreen} from './SplashScreen' 22 23enum ScreenState { 24 S_LoginOrCreateAccount, 25 S_Login, 26 S_CreateAccount, 27 S_StarterPack, 28} 29export {ScreenState as LoggedOutScreenState} 30 31export function LoggedOut({onDismiss}: {onDismiss?: () => void}) { 32 const {_} = useLingui() 33 const t = useTheme() 34 const insets = useSafeAreaInsets() 35 const setMinimalShellMode = useSetMinimalShellMode() 36 const {requestedAccountSwitchTo} = useLoggedOutView() 37 const [screenState, setScreenState] = React.useState<ScreenState>(() => { 38 if (requestedAccountSwitchTo === 'new') { 39 return ScreenState.S_CreateAccount 40 } else if (requestedAccountSwitchTo === 'starterpack') { 41 return ScreenState.S_StarterPack 42 } else if (requestedAccountSwitchTo != null) { 43 return ScreenState.S_Login 44 } else { 45 return ScreenState.S_LoginOrCreateAccount 46 } 47 }) 48 const {clearRequestedAccount} = useLoggedOutViewControls() 49 50 React.useEffect(() => { 51 setMinimalShellMode(true) 52 }, [setMinimalShellMode]) 53 54 const onPressDismiss = React.useCallback(() => { 55 if (onDismiss) { 56 onDismiss() 57 } 58 clearRequestedAccount() 59 }, [clearRequestedAccount, onDismiss]) 60 61 return ( 62 <View 63 testID="noSessionView" 64 style={[ 65 a.util_screen_outer, 66 t.atoms.bg, 67 {paddingTop: insets.top, paddingBottom: insets.bottom}, 68 ]}> 69 <ErrorBoundary> 70 {onDismiss && screenState === ScreenState.S_LoginOrCreateAccount ? ( 71 <Button 72 label={_(msg`Go back`)} 73 variant="solid" 74 color="secondary_inverted" 75 size="small" 76 shape="round" 77 PressableComponent={native(PressableScale)} 78 style={[ 79 a.absolute, 80 { 81 top: insets.top + tokens.space.xl, 82 right: tokens.space.xl, 83 zIndex: 100, 84 }, 85 ]} 86 onPress={onPressDismiss}> 87 <ButtonIcon icon={XIcon} /> 88 </Button> 89 ) : null} 90 91 {screenState === ScreenState.S_StarterPack ? ( 92 <LandingScreen setScreenState={setScreenState} /> 93 ) : screenState === ScreenState.S_LoginOrCreateAccount ? ( 94 <SplashScreen 95 onPressSignin={() => { 96 setScreenState(ScreenState.S_Login) 97 logEvent('splash:signInPressed', {}) 98 }} 99 onPressCreateAccount={() => { 100 setScreenState(ScreenState.S_CreateAccount) 101 logEvent('splash:createAccountPressed', {}) 102 }} 103 /> 104 ) : undefined} 105 {screenState === ScreenState.S_Login ? ( 106 <Login 107 onPressBack={() => { 108 setScreenState(ScreenState.S_LoginOrCreateAccount) 109 clearRequestedAccount() 110 }} 111 /> 112 ) : undefined} 113 {screenState === ScreenState.S_CreateAccount ? ( 114 <Signup 115 onPressBack={() => 116 setScreenState(ScreenState.S_LoginOrCreateAccount) 117 } 118 /> 119 ) : undefined} 120 </ErrorBoundary> 121 </View> 122 ) 123}