about summary refs log tree commit diff
path: root/src/view/com/notifications/InvitedUsers.tsx
blob: 2c44eb5b5e90221e1285bd7f788bf263f87a48b3 (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import React from 'react'
import {
  FontAwesomeIcon,
  FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
import {StyleSheet, View} from 'react-native'
import {observer} from 'mobx-react-lite'
import {AppBskyActorDefs} from '@atproto/api'
import {UserAvatar} from '../util/UserAvatar'
import {Text} from '../util/text/Text'
import {Link, TextLink} from '../util/Link'
import {Button} from '../util/forms/Button'
import {FollowButton} from '../profile/FollowButton'
import {CenteredView} from '../util/Views.web'
import {useStores} from 'state/index'
import {usePalette} from 'lib/hooks/usePalette'
import {s} from 'lib/styles'

export const InvitedUsers = observer(() => {
  const store = useStores()
  return (
    <CenteredView>
      {store.invitedUsers.profiles.map(profile => (
        <InvitedUser key={profile.did} profile={profile} />
      ))}
    </CenteredView>
  )
})

function InvitedUser({
  profile,
}: {
  profile: AppBskyActorDefs.ProfileViewDetailed
}) {
  const pal = usePalette('default')
  const store = useStores()

  const onPressDismiss = React.useCallback(() => {
    store.invitedUsers.markSeen(profile.did)
  }, [store, profile])

  return (
    <View
      testID="invitedUser"
      style={[
        styles.layout,
        {
          backgroundColor: pal.colors.unreadNotifBg,
          borderColor: pal.colors.unreadNotifBorder,
        },
      ]}>
      <View style={styles.layoutIcon}>
        <FontAwesomeIcon
          icon="user-plus"
          size={24}
          style={[styles.icon, s.blue3 as FontAwesomeIconStyle]}
        />
      </View>
      <View style={s.flex1}>
        <Link href={`/profile/${profile.handle}`}>
          <UserAvatar avatar={profile.avatar} size={35} />
        </Link>
        <Text style={[styles.desc, pal.text]}>
          <TextLink
            type="md-bold"
            style={pal.text}
            href={`/profile/${profile.handle}`}
            text={profile.displayName || profile.handle}
          />{' '}
          joined using your invite code!
        </Text>
        <View style={styles.btns}>
          <FollowButton
            unfollowedType="primary"
            followedType="primary-light"
            did={profile.did}
          />
          <Button
            testID="dismissBtn"
            type="primary-light"
            label="Dismiss"
            onPress={onPressDismiss}
          />
        </View>
      </View>
    </View>
  )
}

const styles = StyleSheet.create({
  layout: {
    flexDirection: 'row',
    borderTopWidth: 1,
    padding: 10,
  },
  layoutIcon: {
    width: 70,
    alignItems: 'flex-end',
    paddingTop: 2,
  },
  icon: {
    marginRight: 10,
    marginTop: 4,
  },
  desc: {
    paddingVertical: 6,
  },
  btns: {
    flexDirection: 'row',
    gap: 10,
  },
})