import React from 'react'; import { ScrollView, StyleSheet, TextInput, View } from 'react-native'; import { Linking } from 'expo'; import Button from '../components/Button'; import MonoText from '../components/MonoText'; import Colors from '../constants/Colors'; class TextInputButton extends React.Component< { text: string }, { text: string; parsed: string; canOpen: boolean } > { constructor(props: { text: string }) { super(props); this.state = { text: props.text, parsed: '', canOpen: false, }; } componentDidMount() { this.onChangeText(this.props.text); } onChangeText = async (text: string) => { let parsedTextResult = ''; const canOpenURL = await Linking.canOpenURL(text); if (canOpenURL) { const parsedText = await Linking.parse(text); parsedTextResult = JSON.stringify(parsedText, null, 2); } this.setState({ text, parsed: parsedTextResult, canOpen: canOpenURL }); } handleClick = async () => { const { text } = this.state; try { const supported = await Linking.canOpenURL(text); if (supported) { Linking.openURL(text); } else { const message = `Don't know how to open URI: ${text}`; console.log(message); alert(message); } } catch ({ message }) { console.error(message); } } render() { const { text, parsed, canOpen } = this.state; const buttonTitle = canOpen ? 'Open 😁' : 'Cannot Open 😕'; return (