import React, {useContext} from 'react'; import {LayoutChangeEvent, Linking, StyleSheet, Text, View} from 'react-native'; import {normalize} from 'react-native-elements'; import {useDispatch, useSelector, useStore} from 'react-redux'; import {TAGG_DARK_BLUE, TOGGLE_BUTTON_TYPE} from '../../constants'; import { acceptFriendRequest, declineFriendRequest, updateUserXFriends, updateUserXProfileAllScreens, } from '../../store/actions'; import {canViewProfile} from '../../utils/users'; import {NO_PROFILE} from '../../store/initialStates'; import {RootState} from '../../store/rootReducer'; import {ScreenType} from '../../types'; import { getUserAsProfilePreviewType, SCREEN_HEIGHT, SCREEN_WIDTH, } from '../../utils'; import {FriendsButton, BasicButton} from '../common'; import ToggleButton from './ToggleButton'; // import {ChatContext} from '../../App'; // import {useNavigation} from '@react-navigation/core'; // import AsyncStorage from '@react-native-community/async-storage'; interface ProfileBodyProps { onLayout: (event: LayoutChangeEvent) => void; isBlocked: boolean; handleBlockUnblock: () => void; userXId: string | undefined; screenType: ScreenType; } const ProfileBody: React.FC = ({ onLayout, isBlocked, handleBlockUnblock, userXId, screenType, }) => { const {profile = NO_PROFILE, user} = useSelector((state: RootState) => userXId ? state.userX[screenType][userXId] : state.user, ); const { biography, website, friendship_status, friendship_requester_id, } = profile; const {id, username, first_name, last_name} = getUserAsProfilePreviewType( user, profile, ); const state: RootState = useStore().getState(); const dispatch = useDispatch(); // const navigation = useNavigation(); // const {chatClient, setChannel} = useContext(ChatContext); const loggedInUserId = state.user.user.userId; const handleAcceptRequest = async () => { await dispatch(acceptFriendRequest({id, username, first_name, last_name})); await dispatch(updateUserXFriends(id, state)); dispatch(updateUserXProfileAllScreens(id, state)); }; const handleDeclineFriendRequest = async () => { await dispatch(declineFriendRequest(id)); dispatch(updateUserXProfileAllScreens(id, state)); }; const canMessage = () => { if ( userXId && !isBlocked && (friendship_status === 'no_record' || friendship_status === 'friends' || (friendship_status === 'requested' && friendship_requester_id === loggedInUserId)) && canViewProfile(state, userXId, screenType) ) { return true; } else { return false; } }; const onPressMessage = async () => { // TODO: Use function from util to create the channel and then navigate to screen // const channelName = username + ' and ' + state.user.user.username; // const chatToken = await AsyncStorage.getItem('chatToken'); // await chatClient.connectUser( // { // id: loggedInUserId, // }, // chatToken, // ); // const channel = chatClient.channel('messaging', { // name: channelName, // members: [loggedInUserId, String(userXId)], // }); // channel.create(); // navigation.navigate('Chat'); console.log('Navigate to ChatScreen'); }; return ( {`@${username}`} {biography.length > 0 && ( {`${biography}`} )} {website.length > 0 && ( { Linking.openURL( website.startsWith('http') ? website : 'http://' + website, ); }}>{`${website}`} )} {userXId && isBlocked && ( )} {userXId && !isBlocked && ( {canMessage() && ( )} )} ); }; const styles = StyleSheet.create({ toggleButtonContainer: { flexDirection: 'row', flex: 1, paddingTop: '3.5%', paddingBottom: '2%', }, simpleRowContainer: {flexDirection: 'row'}, buttonsContainer: { flex: 1, paddingTop: '3.5%', paddingBottom: '2%', width: '50%', height: SCREEN_HEIGHT * 0.1, flexDirection: 'row', justifyContent: 'space-between', }, container: { paddingVertical: '1%', paddingHorizontal: 18, backgroundColor: 'white', }, username: { fontWeight: '600', fontSize: normalize(12), marginBottom: '1%', }, biography: { fontSize: normalize(12), marginBottom: '1.5%', }, website: { fontSize: normalize(12), color: TAGG_DARK_BLUE, marginBottom: '1%', }, }); export default ProfileBody;