about summary refs log tree commit diff
path: root/src/view/com/util/EmptyStateWithButton.tsx
blob: fcac6df0865d588e61305b57bc170313e3281d34 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import {StyleSheet, View} from 'react-native'
import {IconProp} from '@fortawesome/fontawesome-svg-core'
import {
  FontAwesomeIcon,
  FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'

import {usePalette} from '#/lib/hooks/usePalette'
import {s} from '#/lib/styles'
import {Button} from './forms/Button'
import {Text} from './text/Text'

interface Props {
  testID?: string
  icon: IconProp
  message: string
  buttonLabel: string
  onPress: () => void
}

export function EmptyStateWithButton(props: Props) {
  const pal = usePalette('default')
  const palInverted = usePalette('inverted')

  return (
    <View testID={props.testID} style={styles.container}>
      <View style={styles.iconContainer}>
        <FontAwesomeIcon
          icon={props.icon}
          style={[styles.icon, pal.text]}
          size={62}
        />
      </View>
      <Text type="xl-medium" style={[s.textCenter, pal.text]}>
        {props.message}
      </Text>
      <View style={styles.btns}>
        <Button
          testID={props.testID ? `${props.testID}-button` : undefined}
          type="inverted"
          style={styles.btn}
          onPress={props.onPress}>
          <FontAwesomeIcon
            icon="plus"
            style={palInverted.text as FontAwesomeIconStyle}
            size={14}
          />
          <Text type="lg-medium" style={palInverted.text}>
            {props.buttonLabel}
          </Text>
        </Button>
      </View>
    </View>
  )
}
const styles = StyleSheet.create({
  container: {
    height: '100%',
    paddingVertical: 40,
    paddingHorizontal: 30,
  },
  iconContainer: {
    marginBottom: 16,
  },
  icon: {
    marginLeft: 'auto',
    marginRight: 'auto',
  },
  btns: {
    flexDirection: 'row',
    justifyContent: 'center',
  },
  btn: {
    gap: 10,
    marginVertical: 20,
    flexDirection: 'row',
    alignItems: 'center',
    paddingVertical: 14,
    paddingHorizontal: 24,
    borderRadius: 30,
  },
  notice: {
    borderRadius: 12,
    paddingHorizontal: 12,
    paddingVertical: 10,
    marginHorizontal: 30,
  },
})