aboutsummaryrefslogtreecommitdiff
path: root/src/components/messages/ChatHeader.tsx
blob: 2bc096ecdf0b6f701a872b7f40c1972cb8c3d58b (plain)
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
import React, {useContext} from 'react';
import {Image, StyleSheet, View} from 'react-native';
import {Text} from 'react-native-animatable';
import {useStore} from 'react-redux';
import {ChatContext} from '../../App';
import {ChatHeaderHeight, normalize, StatusBarHeight} from '../../utils';
import {formatLastSeenText, getMember, isOnline} from '../../utils/messages';

type ChatHeaderProps = {};

const ChatHeader: React.FC<ChatHeaderProps> = () => {
  const {channel} = useContext(ChatContext);
  const state = useStore().getState();
  const member = getMember(channel, state);
  const online = isOnline(member?.user?.last_active);
  const lastSeen = formatLastSeenText(member?.user?.last_active);

  return (
    <View style={styles.container}>
      <View>
        <Image
          style={styles.avatar}
          source={
            member
              ? {uri: member.user?.thumbnail_url}
              : require('../../assets/images/avatar-placeholder.png')
          }
        />
        {online && <View style={styles.online} />}
      </View>
      <View style={styles.content}>
        <Text style={styles.name} numberOfLines={1}>
          {member?.user?.first_name} {member?.user?.last_name}
        </Text>
        <Text style={styles.lastSeen}>{lastSeen}</Text>
      </View>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    height: ChatHeaderHeight - StatusBarHeight,
    flexDirection: 'row',
    alignItems: 'center',
    paddingLeft: '15%',
  },
  avatar: {
    width: normalize(40),
    height: normalize(40),
    borderRadius: normalize(40) / 2,
  },
  online: {
    position: 'absolute',
    backgroundColor: '#6EE7E7',
    width: normalize(16),
    height: normalize(16),
    borderRadius: normalize(16) / 2,
    borderColor: 'white',
    borderWidth: 3,
    top: 0,
    right: 0,
  },
  content: {
    flex: 1,
    height: '80%',
    justifyContent: 'space-between',
    flexDirection: 'column',
    marginLeft: '5%',
  },
  name: {
    fontWeight: '700',
    fontSize: normalize(15),
    lineHeight: normalize(18),
  },
  lastSeen: {
    color: '#828282',
    fontWeight: '500',
    fontSize: normalize(12),
    lineHeight: normalize(14),
  },
});

export default ChatHeader;