packages/@fbcmobile-ui/Components/DataLoadingErrorPane.js (56 lines of code) (raw):
/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow strict-local
 * @format
 */
'use strict';
import * as React from 'react';
import BottomBar from '@fbcmobile/ui/Components/Core/BottomBar';
import Button from '@fbcmobile/ui/Components/Core/Button';
import Text from '@fbcmobile/ui/Components/Core/Text';
import fbt from 'fbt';
import {Colors} from '@fbcmobile/ui/Theme';
import {Dimensions, View} from 'react-native';
import {Icon} from 'react-native-material-ui';
const PADDING = 150; // height of the bottom button
const WINDOW_HEIGHT: number = Dimensions.get('window').height;
type Props = {
  +errorText?: typeof fbt,
  +retry?: () => void,
};
const DataLoadingErrorPane = (props: Props) => {
  const {errorText, retry} = props;
  return (
    <View>
      <View style={styles.error}>
        <Text>
          {errorText ? (
            errorText.toString()
          ) : (
            <fbt desc="Error text showing when loading data fails">
              An error occurred while loading data. Please try again.
            </fbt>
          )}
        </Text>
        <Icon
          name="alert-circle"
          size={40}
          color={Colors.Tomato}
          iconSet="MaterialCommunityIcons"
        />
      </View>
      {retry ? (
        <BottomBar>
          <Button onPress={retry}>
            <fbt desc="Retry button label">Retry</fbt>
          </Button>
        </BottomBar>
      ) : null}
    </View>
  );
};
const styles = {
  error: {
    display: 'flex',
    flexDirection: 'column',
    height: WINDOW_HEIGHT - PADDING,
    alignItems: 'center',
    justifyContent: 'center',
  },
};
export default DataLoadingErrorPane;