import Constants from 'expo-constants';
import React from 'react';
import { ScrollView, View } from 'react-native';
import HeadingText from '../components/HeadingText';
import MonoText from '../components/MonoText';
import Colors from '../constants/Colors';
interface State {
value?: string | (() => void);
error?: Error;
}
class ExpoConstant extends React.Component<{ value?: any; name: string }, State> {
readonly state: State = {};
componentDidMount() {
this.updateValue();
}
async updateValue() {
let value = this.props.value;
if (!value) {
value = Constants[this.props.name];
}
if (typeof value === 'function') {
try {
value = await this.props.value();
} catch (error) {
console.error(error);
this.setState({ error: error.message });
}
}
if (typeof value === 'object') {
value = JSON.stringify(value, null, 2);
} else if (typeof value === 'boolean') {
value = value ? 'true' : 'false';
}
this.setState({ value });
}
render() {
const { value, error } = this.state;
const { name } = this.props;
if (!value || typeof value === 'function') {
return null;
}
return (
{name}
{error?.message ?? value}
);
}
}
// Ignore deprecated properties
const IGNORED_CONSTANTS = ['__unsafeNoWarnManifest', 'linkingUrl'];
export default class ConstantsScreen extends React.PureComponent {
render() {
return (
{Object.keys(Constants)
.filter((value) => !IGNORED_CONSTANTS.includes(value))
.sort()
.map((key) => {
if (typeof Constants[key] === 'function') return null;
return ;
})}
Constants.getWebViewUserAgentAsync()} />
);
}
}