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;
|