diff options
author | Shravya Ramesh <shravs1208@gmail.com> | 2021-04-14 16:46:33 -0700 |
---|---|---|
committer | Shravya Ramesh <shravs1208@gmail.com> | 2021-04-14 16:46:33 -0700 |
commit | 0dc9a8cc06ec8e0208989ceb007faad201d89f28 (patch) | |
tree | 838f22ea154fdbf2f15cf99da517fc76c8440f5e | |
parent | 6e3f218e4c86900545d6cc7881f93d566d977b15 (diff) |
refactored
-rw-r--r-- | src/components/messages/MessageAvatar.tsx | 44 | ||||
-rw-r--r-- | src/components/messages/TypingIndicator.tsx | 30 | ||||
-rw-r--r-- | src/components/messages/index.ts | 2 | ||||
-rw-r--r-- | src/screens/chat/ChatScreen.tsx | 78 |
4 files changed, 87 insertions, 67 deletions
diff --git a/src/components/messages/MessageAvatar.tsx b/src/components/messages/MessageAvatar.tsx new file mode 100644 index 00000000..d275eae5 --- /dev/null +++ b/src/components/messages/MessageAvatar.tsx @@ -0,0 +1,44 @@ +import React, {useContext} from 'react'; +import {Image, StyleSheet, View} from 'react-native'; +import {getMember, normalize} from '../../utils'; +import {useMessageContext} from 'stream-chat-react-native-core'; +import {useStore} from 'react-redux'; +import {ChatContext} from '../../App'; + +const MessageAvatar: React.FC = () => { + const {channel} = useContext(ChatContext); + const state = useStore().getState(); + const member = getMember(channel, state); + const message = useMessageContext(); + + return ( + <View style={styles.messageAvatarContainer}> + {message.lastGroupMessage === true && ( + <Image + style={styles.messageAvatar} + source={ + member + ? {uri: member.user?.thumbnail_url} + : require('../../assets/images/avatar-placeholder.png') + } + /> + )} + </View> + ); +}; + +const styles = StyleSheet.create({ + messageAvatarContainer: { + width: normalize(20), + zIndex: 1, + bottom: 20, + marginRight: '2%', + }, + messageAvatar: { + borderRadius: 50, + width: normalize(18), + height: normalize(18), + }, +}); + +export default MessageAvatar; diff --git a/src/components/messages/TypingIndicator.tsx b/src/components/messages/TypingIndicator.tsx new file mode 100644 index 00000000..be7141a2 --- /dev/null +++ b/src/components/messages/TypingIndicator.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import {View, Image, StyleSheet} from 'react-native'; +import {SCREEN_WIDTH} from '../../utils'; + +const TypingIndicator: React.FC = () => { + return ( + <View style={styles.typingIndicatorContainer}> + <Image + source={require('../../assets/gifs/loading-animation.gif')} + style={{width: 88, height: 49}} + /> + </View> + ); +}; + +const styles = StyleSheet.create({ + typingIndicatorContainer: { + backgroundColor: '#E4F0F2', + width: 88, + height: 32, + borderRadius: 10, + marginBottom: 10, + marginLeft: SCREEN_WIDTH * 0.09, + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, +}); + +export default TypingIndicator; diff --git a/src/components/messages/index.ts b/src/components/messages/index.ts index c809d3d1..d08e9454 100644 --- a/src/components/messages/index.ts +++ b/src/components/messages/index.ts @@ -3,3 +3,5 @@ export {default as ChannelPreview} from './ChannelPreview'; export {default as ChatInput} from './ChatInput'; export {default as ChatHeader} from './ChatHeader'; export {default as ChatInputSubmit} from './ChatInputSubmit'; +export {default as MessageAvatar} from './MessageAvatar'; +export {default as TypingIndicator} from './TypingIndicator'; diff --git a/src/screens/chat/ChatScreen.tsx b/src/screens/chat/ChatScreen.tsx index 418638b7..656c1c47 100644 --- a/src/screens/chat/ChatScreen.tsx +++ b/src/screens/chat/ChatScreen.tsx @@ -1,9 +1,8 @@ import {useBottomTabBarHeight} from '@react-navigation/bottom-tabs'; import {StackNavigationProp} from '@react-navigation/stack'; import React, {useContext, useEffect} from 'react'; -import {Image, StyleSheet, View} from 'react-native'; +import {StyleSheet} from 'react-native'; import {SafeAreaView, useSafeAreaInsets} from 'react-native-safe-area-context'; -import {useStore} from 'react-redux'; import { Channel, Chat, @@ -12,19 +11,18 @@ import { MessageList, useAttachmentPickerContext, Theme, - useMessageContext, } from 'stream-chat-react-native'; import {ChatContext} from '../../App'; -import {ChatHeader, ChatInput, TabsGradient} from '../../components'; +import { + ChatHeader, + ChatInput, + MessageAvatar, + TabsGradient, + TypingIndicator, +} from '../../components'; import {MainStackParams} from '../../routes'; import {ScreenType} from '../../types'; -import { - getMember, - HeaderHeight, - isIPhoneX, - normalize, - SCREEN_WIDTH, -} from '../../utils'; +import {HeaderHeight, isIPhoneX, normalize, SCREEN_WIDTH} from '../../utils'; type ChatScreenNavigationProp = StackNavigationProp<MainStackParams, 'Chat'>; interface ChatScreenProps { @@ -38,9 +36,6 @@ const ChatScreen: React.FC<ChatScreenProps> = () => { const tabbarHeight = useBottomTabBarHeight(); const {setTopInset} = useAttachmentPickerContext(); const insets = useSafeAreaInsets(); - const state = useStore().getState(); - const member = getMember(channel, state); - const chatTheme: DeepPartial<Theme> = { messageList: { container: { @@ -111,35 +106,6 @@ const ChatScreen: React.FC<ChatScreenProps> = () => { setTopInset(insets.top + HeaderHeight); }); - const CustomTypingIndicator = () => { - return ( - <View style={styles.typingIndicatorContainer}> - <Image - source={require('../../assets/gifs/loading-animation.gif')} - style={{width: 88, height: 49}} - /> - </View> - ); - }; - - const CustomMessageAvatar = () => { - const message = useMessageContext(); - return ( - <View style={styles.messageAvatarContainer}> - {message.lastGroupMessage === true && ( - <Image - style={styles.messageAvatar} - source={ - member - ? {uri: member.user?.thumbnail_url} - : require('../../assets/images/avatar-placeholder.png') - } - /> - )} - </View> - ); - }; - return ( <SafeAreaView style={[ @@ -157,9 +123,9 @@ const ChatScreen: React.FC<ChatScreenProps> = () => { copyMessage, deleteMessage, ]} - TypingIndicator={CustomTypingIndicator} + TypingIndicator={TypingIndicator} myMessageTheme={loggedInUsersMessageTheme} - MessageAvatar={CustomMessageAvatar}> + MessageAvatar={MessageAvatar}> <MessageList onThreadSelect={() => {}} /> {/* <MessageInput /> */} <MessageInput Input={ChatInput} /> @@ -175,28 +141,6 @@ const styles = StyleSheet.create({ backgroundColor: 'white', flex: 1, }, - typingIndicatorContainer: { - backgroundColor: '#E4F0F2', - width: 88, - height: 32, - borderRadius: 10, - marginBottom: 10, - marginLeft: SCREEN_WIDTH * 0.09, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - }, - messageAvatarContainer: { - width: normalize(20), - zIndex: 1, - bottom: 20, - marginRight: '2%', - }, - messageAvatar: { - borderRadius: 50, - width: normalize(18), - height: normalize(18), - }, }); export default ChatScreen; |