aboutsummaryrefslogtreecommitdiff
path: root/src/screens/chat/ChatScreen.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/screens/chat/ChatScreen.tsx')
-rw-r--r--src/screens/chat/ChatScreen.tsx161
1 files changed, 30 insertions, 131 deletions
diff --git a/src/screens/chat/ChatScreen.tsx b/src/screens/chat/ChatScreen.tsx
index 682906ee..161bd07d 100644
--- a/src/screens/chat/ChatScreen.tsx
+++ b/src/screens/chat/ChatScreen.tsx
@@ -1,24 +1,20 @@
import {useBottomTabBarHeight} from '@react-navigation/bottom-tabs';
import {StackNavigationProp} from '@react-navigation/stack';
-import React, {useContext} from 'react';
-import {Image, StyleSheet, Text, View} from 'react-native';
-import {SafeAreaView} from 'react-native-safe-area-context';
-import {useStore} from 'react-redux';
+import React, {useContext, useEffect} from 'react';
+import {StyleSheet} from 'react-native';
+import {SafeAreaView, useSafeAreaInsets} from 'react-native-safe-area-context';
import {
Channel,
Chat,
MessageInput,
MessageList,
- OverlayProvider,
- useMessageContext,
+ useAttachmentPickerContext,
} from 'stream-chat-react-native';
import {ChatContext} from '../../App';
-import ChatHeader from '../../components/messages/ChatHeader';
-import {TAGG_LIGHT_BLUE} from '../../constants';
+import {ChatHeader, ChatInput, TabsGradient} from '../../components';
import {MainStackParams} from '../../routes';
-import {RootState} from '../../store/rootReducer';
import {ScreenType} from '../../types';
-import {isIPhoneX, SCREEN_WIDTH} from '../../utils';
+import {HeaderHeight, isIPhoneX} from '../../utils';
type ChatScreenNavigationProp = StackNavigationProp<MainStackParams, 'Chat'>;
interface ChatScreenProps {
@@ -29,9 +25,9 @@ interface ChatScreenProps {
*/
const ChatScreen: React.FC<ChatScreenProps> = () => {
const {channel, chatClient} = useContext(ChatContext);
- const state: RootState = useStore().getState();
- const loggedInUserId = state.user.user.userId;
const tabbarHeight = useBottomTabBarHeight();
+ const {setTopInset} = useAttachmentPickerContext();
+ const insets = useSafeAreaInsets();
const chatTheme = {
messageList: {
@@ -39,52 +35,17 @@ const ChatScreen: React.FC<ChatScreenProps> = () => {
backgroundColor: 'white',
},
},
+ messageInput: {
+ container: {
+ backgroundColor: '#f8f8f8',
+ height: 70,
+ },
+ },
};
- const isOwnMessage = (message) => {
- if (message.user.id === loggedInUserId) {
- return true;
- } else {
- return false;
- }
- };
-
- const OwnMessageBubble = ({message}) => (
- <View style={[styles.mainBubbleContainer, styles.mainOwnBubbleContainer]}>
- <View style={styles.ownBubbleContainer}>
- <View style={styles.ownBubble}>
- <Text style={styles.messageText}>{message.text}</Text>
- </View>
- </View>
- {/* TODO: Timestamp */}
- </View>
- );
-
- const UserXMessageBubble = ({message}) => (
- <View style={[styles.mainBubbleContainer, styles.mainUserXBubbleContainer]}>
- <Image
- style={styles.avatar}
- source={
- message.user.thumbnail_url
- ? {uri: message.user.thumbnail_url}
- : require('../../assets/images/avatar-placeholder.png')
- }
- />
- <View style={styles.userXBubble}>
- <Text style={styles.messageText}>{message.text}</Text>
- </View>
- {/* TODO: Timestamp */}
- </View>
- );
-
- const CustomMessageUIComponent = () => {
- const {message} = useMessageContext();
- if (isOwnMessage(message)) {
- return <OwnMessageBubble message={message} />;
- } else {
- return <UserXMessageBubble message={message} />;
- }
- };
+ useEffect(() => {
+ setTopInset(insets.top + HeaderHeight);
+ });
return (
<SafeAreaView
@@ -95,23 +56,20 @@ const ChatScreen: React.FC<ChatScreenProps> = () => {
]}>
<ChatHeader screenType={ScreenType.Chat} />
<Chat client={chatClient} style={chatTheme}>
- <OverlayProvider topInset={0} bottomInset={0}>
- <Channel
- channel={channel}
- keyboardVerticalOffset={0}
- OverlayReactionList={() => null}
- // MessageSimple={CustomMessageUIComponent}
- messageActions={({copyMessage, deleteMessage}) => [
- copyMessage,
- deleteMessage,
- ]}
- // AttachButton={() => null}
- >
- <MessageList onThreadSelect={() => {}} />
- <MessageInput />
- </Channel>
- </OverlayProvider>
+ <Channel
+ channel={channel}
+ keyboardVerticalOffset={0}
+ OverlayReactionList={() => null}
+ messageActions={({copyMessage, deleteMessage}) => [
+ copyMessage,
+ deleteMessage,
+ ]}>
+ <MessageList onThreadSelect={() => {}} />
+ {/* <MessageInput /> */}
+ <MessageInput Input={ChatInput} />
+ </Channel>
</Chat>
+ <TabsGradient />
</SafeAreaView>
);
};
@@ -121,65 +79,6 @@ const styles = StyleSheet.create({
backgroundColor: 'white',
flex: 1,
},
-
- submitButton: {
- height: 35,
- width: 35,
- backgroundColor: TAGG_LIGHT_BLUE,
- borderRadius: 999,
- justifyContent: 'center',
- alignItems: 'center',
- bottom: -5,
- alignSelf: 'flex-end',
- },
- messageText: {
- width: 196,
- paddingHorizontal: 23,
- paddingTop: 7.35,
- paddingBottom: 12,
- },
- mainBubbleContainer: {
- marginVertical: 1,
- width: SCREEN_WIDTH,
- flexDirection: 'row',
- },
- mainOwnBubbleContainer: {
- justifyContent: 'flex-end', // Different
- marginTop: 22,
- },
- mainUserXBubbleContainer: {
- justifyContent: 'flex-start',
- },
- avatar: {
- width: 40,
- height: 40,
- borderRadius: 20,
- right: -19,
- zIndex: 1,
- position: 'absolute',
- top: 0,
- left: 0,
- },
- ownBubbleContainer: {width: 241, marginBottom: 9},
- ownBubble: {
- maxWidth: 270,
- backgroundColor: '#DEE6F4',
- borderColor: '#DEE6F4',
- borderWidth: 1,
- borderRadius: 10,
- alignSelf: 'center',
- },
- userXBubble: {
- maxWidth: 235,
- backgroundColor: '#E4F0F2',
- borderColor: '#E4F0F2',
- borderWidth: 1,
- borderRadius: 10,
- zIndex: 0,
- alignSelf: 'flex-end',
- marginLeft: 25,
- marginTop: 14,
- },
});
export default ChatScreen;