aboutsummaryrefslogtreecommitdiff
path: root/src/components/messages/MessageButton.tsx
blob: 5ac42c4c807b81f27db7e320c0334dbed65d599a (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
import React from 'react';
import {Fragment, useContext} from 'react';
import {useStore} from 'react-redux';
import {ChatContext} from '../../App';
import {RootState} from '../../store/rootReducer';
import {FriendshipStatusType} from '../../types';
import {createChannel} from '../../utils';
import {Alert, StyleProp, TextStyle, ViewStyle} from 'react-native';
import {BasicButton} from '../common';
import {useNavigation} from '@react-navigation/native';
import {ERROR_UNABLE_CONNECT_CHAT} from '../../constants/strings';

interface MessageButtonProps {
  userXId: string;
  isBlocked: boolean;
  friendship_status: FriendshipStatusType;
  friendship_requester_id?: string;
  solid?: boolean;
  externalStyles?: Record<string, StyleProp<ViewStyle | TextStyle>>;
}

const MessageButton: React.FC<MessageButtonProps> = ({
  userXId,
  isBlocked,
  friendship_status,
  friendship_requester_id,
  solid,
  externalStyles,
}) => {
  const navigation = useNavigation();
  const {chatClient, setChannel} = useContext(ChatContext);

  const state: RootState = useStore().getState();
  const loggedInUserId = state.user.user.userId;

  const canMessage = () => {
    if (
      userXId &&
      !isBlocked &&
      (friendship_status === 'no_record' ||
        friendship_status === 'friends' ||
        (friendship_status === 'requested' &&
          friendship_requester_id === loggedInUserId))
    ) {
      return true;
    } else {
      return false;
    }
  };

  const onPressMessage = async () => {
    if (chatClient.user && userXId) {
      const channel = await createChannel(loggedInUserId, userXId, chatClient);
      setChannel(channel);
      navigation.navigate('Chat');
    } else {
      Alert.alert(ERROR_UNABLE_CONNECT_CHAT);
    }
  };

  return canMessage() ? (
    <BasicButton
      title={'Message'}
      onPress={onPressMessage}
      externalStyles={externalStyles}
      solid={solid ? solid : false}
    />
  ) : (
    <Fragment />
  );
};

export default MessageButton;