import {useState} from 'react' import {Keyboard, LogBox, Pressable, TextInput, View} from 'react-native' import {useQueryClient} from '@tanstack/react-query' import {BLUESKY_PROXY_HEADER} from '#/lib/constants' import {useAgent, useSessionApi} from '#/state/session' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {useOnboardingDispatch} from '#/state/shell/onboarding' import {navigate} from '../../../Navigation' LogBox.ignoreAllLogs() /** * This utility component is only included in the test simulator * build. It gives some quick triggers which help improve the pace * of the tests dramatically. */ const BTN = {height: 1, width: 1, backgroundColor: 'red'} /* * This component is mounted inside in * App.tsx, so it fully remounts whenever the account changes (sign-in / * sign-out). If the "proxy configured" flag lived only in React state it would * reset to false on every remount, hiding the sign-in buttons. Keeping it at * module level lets it survive remounts so the sign-in buttons stay visible * across sign-out during multi-account flows. Module state still resets when * the app relaunches with cleared state at the start of each flow, which is the * desired gating behavior. */ let hasConfiguredProxy = false export function TestCtrls() { const agent = useAgent() const queryClient = useQueryClient() const {logoutEveryAccount, login} = useSessionApi() const onboardingDispatch = useOnboardingDispatch() const {setShowLoggedOut} = useLoggedOutViewControls() const [isProxyConfigured, setIsProxyConfigured] = useState(hasConfiguredProxy) const onPressSignInAlice = async () => { console.info('[E2E] Signing in as Alice') await login( { service: 'http://localhost:3000', identifier: 'alice.test', password: 'hunter2', }, 'LoginForm', ) setShowLoggedOut(false) } const onPressSignInBob = async () => { console.info('[E2E] Signing in as Bob') await login( { service: 'http://localhost:3000', identifier: 'bob.test', password: 'hunter2', }, 'LoginForm', ) setShowLoggedOut(false) } const [proxyHeader, setProxyHeader] = useState('') const configureProxy = () => { const header = `${proxyHeader}#bsky_appview` BLUESKY_PROXY_HEADER.set(header) agent.configureProxy(header as any) hasConfiguredProxy = true setIsProxyConfigured(true) Keyboard.dismiss() } return ( setProxyHeader(val)} autoComplete="off" autoCorrect={false} autoCapitalize="none" onSubmitEditing={configureProxy} style={BTN} /> {isProxyConfigured && ( <> )} logoutEveryAccount('Settings')} accessibilityRole="button" style={BTN} /> navigate('Home')} accessibilityRole="button" style={BTN} /> navigate('Settings')} accessibilityRole="button" style={BTN} /> navigate('Moderation')} accessibilityRole="button" style={BTN} /> navigate('Lists')} accessibilityRole="button" style={BTN} /> navigate('Feeds')} accessibilityRole="button" style={BTN} /> navigate('Debug')} accessibilityRole="button" style={BTN} /> queryClient.invalidateQueries({queryKey: ['post-feed']})} accessibilityRole="button" style={BTN} /> setShowLoggedOut(true)} accessibilityRole="button" style={BTN} /> { onboardingDispatch({type: 'start'}) }} accessibilityRole="button" style={BTN} /> ) }