import React from 'react'; import { ActivityIndicator, PixelRatio, StyleSheet, Text, TouchableOpacity, View, } from 'react-native'; import Colors from '../constants/Colors'; import MonoText from './MonoText'; type SimpleActionDemoProps = { title: string; action: (setValue: (value: any) => any) => any; }; export default function SimpleActionDemo(props: SimpleActionDemoProps) { const [loading, setLoading] = React.useState(false); const [value, setValue] = React.useState(undefined); const runAction = React.useCallback(async () => { setLoading(true); try { const value = await props.action(setValue); setValue(value); } catch (error) { setValue(error); } setLoading(false); }, [props.action]); const monoContainerStyle = value instanceof Error ? styles.demoMonoContainerError : null; return ( {props.title} {loading && } {value !== undefined && ( {JSON.stringify(value, null, 2)} )} ); } const styles = StyleSheet.create({ demoContainer: { paddingHorizontal: 10, borderColor: Colors.border, borderBottomWidth: 1.0 / PixelRatio.get(), }, demoHeaderContainer: { flexDirection: 'row', paddingVertical: 10, }, demoHeader: { fontWeight: 'bold', color: Colors.tintColor, }, demoActivityIndicator: { flex: 1, flexDirection: 'row', justifyContent: 'flex-end', paddingRight: 10, }, demoMonoContainerError: { borderColor: Colors.errorBackground, }, });