aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShravya Ramesh <shravs1208@gmail.com>2021-04-14 16:46:33 -0700
committerShravya Ramesh <shravs1208@gmail.com>2021-04-14 16:46:33 -0700
commit0dc9a8cc06ec8e0208989ceb007faad201d89f28 (patch)
tree838f22ea154fdbf2f15cf99da517fc76c8440f5e /src
parent6e3f218e4c86900545d6cc7881f93d566d977b15 (diff)
refactored
Diffstat (limited to 'src')
-rw-r--r--src/components/messages/MessageAvatar.tsx44
-rw-r--r--src/components/messages/TypingIndicator.tsx30
-rw-r--r--src/components/messages/index.ts2
-rw-r--r--src/screens/chat/ChatScreen.tsx78
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;