about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/view/com/util/error/ErrorScreen.tsx137
1 files changed, 55 insertions, 82 deletions
diff --git a/src/view/com/util/error/ErrorScreen.tsx b/src/view/com/util/error/ErrorScreen.tsx
index 846f4d295..e9b0e50a3 100644
--- a/src/view/com/util/error/ErrorScreen.tsx
+++ b/src/view/com/util/error/ErrorScreen.tsx
@@ -1,4 +1,4 @@
-import {StyleSheet, View} from 'react-native'
+import {View} from 'react-native'
 import {
   FontAwesomeIcon,
   FontAwesomeIconStyle,
@@ -7,12 +7,11 @@ import {msg, Trans} from '@lingui/macro'
 import {useLingui} from '@lingui/react'
 
 import {usePalette} from '#/lib/hooks/usePalette'
-import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-import {useTheme} from '#/lib/ThemeContext'
-import {ViewHeader} from '#/view/com/util/ViewHeader'
-import {Button} from '../forms/Button'
-import {Text} from '../text/Text'
-import {CenteredView} from '../Views'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as ArrowRotateCounterClockwiseIcon} from '#/components/icons/ArrowRotateCounterClockwise'
+import * as Layout from '#/components/Layout'
+import {Text} from '#/components/Typography'
 
 export function ErrorScreen({
   title,
@@ -29,22 +28,32 @@ export function ErrorScreen({
   testID?: string
   showHeader?: boolean
 }) {
-  const theme = useTheme()
-  const {isMobile} = useWebMediaQueries()
+  const t = useTheme()
   const pal = usePalette('default')
   const {_} = useLingui()
 
   return (
-    <>
-      {showHeader && isMobile && (
-        <ViewHeader title={_(msg`Error`)} showBorder />
+    <Layout.Center testID={testID}>
+      {showHeader && (
+        <Layout.Header.Outer>
+          <Layout.Header.BackButton />
+          <Layout.Header.Content>
+            <Layout.Header.TitleText>
+              <Trans>Error</Trans>
+            </Layout.Header.TitleText>
+          </Layout.Header.Content>
+          <Layout.Header.Slot />
+        </Layout.Header.Outer>
       )}
-      <CenteredView testID={testID} style={[styles.outer, pal.view]}>
-        <View style={styles.errorIconContainer}>
+      <View style={[a.px_xl, a.py_2xl]}>
+        <View style={[a.mb_md, a.align_center]}>
           <View
             style={[
-              styles.errorIcon,
-              {backgroundColor: theme.palette.inverted.background},
+              a.rounded_full,
+              {width: 50, height: 50},
+              a.align_center,
+              a.justify_center,
+              {backgroundColor: t.palette.contrast_950},
             ]}>
             <FontAwesomeIcon
               icon="exclamation"
@@ -53,86 +62,50 @@ export function ErrorScreen({
             />
           </View>
         </View>
-        <Text type="title-lg" style={[styles.title, pal.text]}>
+        <Text style={[a.text_center, a.font_heavy, a.text_2xl, a.mb_md]}>
           {title}
         </Text>
-        <Text style={[styles.message, pal.text]}>{message}</Text>
+        <Text style={[a.text_center, a.text_md, a.mb_xl]}>{message}</Text>
         {details && (
-          <Text
-            testID={`${testID}-details`}
-            style={[styles.details, pal.text, pal.viewLight]}>
-            {details}
-          </Text>
+          <View
+            style={[
+              a.w_full,
+              a.border,
+              t.atoms.border_contrast_medium,
+              t.atoms.bg_contrast_25,
+              a.mb_xl,
+              a.py_sm,
+              a.px_lg,
+              a.rounded_xs,
+              a.overflow_hidden,
+            ]}>
+            <Text
+              testID={`${testID}-details`}
+              style={[a.text_center, a.text_md, t.atoms.text_contrast_high]}>
+              {details}
+            </Text>
+          </View>
         )}
         {onPressTryAgain && (
-          <View style={styles.btnContainer}>
+          <View style={[a.align_center]}>
             <Button
               testID="errorScreenTryAgainButton"
-              type="default"
-              style={[styles.btn]}
               onPress={onPressTryAgain}
-              accessibilityLabel={_(msg`Retry`)}
+              variant="solid"
+              color="secondary_inverted"
+              size="small"
+              label={_(msg`Retry`)}
               accessibilityHint={_(
                 msg`Retries the last action, which errored out`,
               )}>
-              <FontAwesomeIcon
-                icon="arrows-rotate"
-                style={pal.link as FontAwesomeIconStyle}
-                size={16}
-              />
-              <Text type="button" style={[styles.btnText, pal.link]}>
+              <ButtonIcon icon={ArrowRotateCounterClockwiseIcon} />
+              <ButtonText>
                 <Trans context="action">Try again</Trans>
-              </Text>
+              </ButtonText>
             </Button>
           </View>
         )}
-      </CenteredView>
-    </>
+      </View>
+    </Layout.Center>
   )
 }
-
-const styles = StyleSheet.create({
-  outer: {
-    flex: 1,
-    paddingVertical: 30,
-    paddingHorizontal: 14,
-  },
-  title: {
-    textAlign: 'center',
-    marginBottom: 10,
-  },
-  message: {
-    textAlign: 'center',
-    marginBottom: 20,
-  },
-  details: {
-    textAlign: 'center',
-    paddingVertical: 10,
-    paddingHorizontal: 14,
-    overflow: 'hidden',
-    marginBottom: 20,
-  },
-  btnContainer: {
-    alignItems: 'center',
-  },
-  btn: {
-    flexDirection: 'row',
-    alignItems: 'center',
-    paddingHorizontal: 16,
-    paddingVertical: 10,
-  },
-  btnText: {
-    marginLeft: 5,
-  },
-  errorIconContainer: {
-    alignItems: 'center',
-    marginBottom: 10,
-  },
-  errorIcon: {
-    borderRadius: 25,
-    width: 50,
-    height: 50,
-    alignItems: 'center',
-    justifyContent: 'center',
-  },
-})