/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import React from 'react'; import {styled, FlexColumn, FlexRow, Text, Glyph, colors} from 'flipper'; const Container = styled(FlexColumn)({ height: '100%', width: '100%', justifyContent: 'center', alignItems: 'center', backgroundColor: colors.light02, }); const Welcome = styled(FlexColumn)({ width: 460, background: colors.white, borderRadius: 10, boxShadow: '0 1px 3px rgba(0,0,0,0.25)', overflow: 'hidden', transition: '0.6s all ease-out', }); const Title = styled(Text)({ fontSize: 24, fontWeight: 300, textAlign: 'center', color: colors.light50, marginTop: 16, marginBottom: 16, }); const Item = styled(FlexRow)({ padding: 10, alignItems: 'center', borderTop: `1px solid ${colors.light10}`, }); const ItemTitle = styled(Text)({ color: colors.light50, fontSize: 14, lineHeight: '20px', }); const Bold = styled(Text)({ fontWeight: 600, }); const Icon = styled(Glyph)({ marginRight: 11, marginLeft: 6, }); // As more known failures are found, add them to this list with better error information. const KNOWN_FAILURE_MESSAGES: Record< string, Record<'message' | 'hint', string> > = { 'Failed to fetch': { // This is the error that is returned specifcally when Metro is turned off. message: 'Metro disconnected.', hint: 'Please check that metro is running and Flipper can connect to it.', }, default: { // All we really know in this case is that we can't connect to metro. // Do not try and be more specific here. message: 'Cannot connect to Metro.', hint: 'Please check that metro is running and Flipper can connect to it.', }, }; function getReason(error: Error) { let failure_message = KNOWN_FAILURE_MESSAGES.default; if (error != null && KNOWN_FAILURE_MESSAGES[error.message]) { failure_message = KNOWN_FAILURE_MESSAGES[error.message]; } return ( {failure_message.message} {failure_message.hint} ); } type Props = Readonly<{ error: Error; }>; export default function ErrorScreen(props: Props) { return ( Hermes Debugger Error {getReason(props.error)} ); }