aboutsummaryrefslogtreecommitdiff
path: root/src/components/messages
diff options
context:
space:
mode:
authorIvan Chen <ivan@tagg.id>2021-04-13 19:53:07 -0400
committerGitHub <noreply@github.com>2021-04-13 19:53:07 -0400
commit3cc0e2e342993ce01490a36a43d99f2ab61ccb4f (patch)
treeb57b61c49571c9e4b6d34c67f2f99c9617ff9d93 /src/components/messages
parent93837e23a169e6b17432e4e0dd397bcaa140bb5e (diff)
parent3db3ba5fc35930cea99b2a51042446c0c470af47 (diff)
Merge pull request #362 from IvanIFChen/tma784-message-input-camera
[TMA-784] Message input camera
Diffstat (limited to 'src/components/messages')
-rw-r--r--src/components/messages/ChatInput.tsx101
-rw-r--r--src/components/messages/ChatInputSubmit.tsx49
-rw-r--r--src/components/messages/index.ts2
3 files changed, 117 insertions, 35 deletions
diff --git a/src/components/messages/ChatInput.tsx b/src/components/messages/ChatInput.tsx
index 9aeb9c62..005d4401 100644
--- a/src/components/messages/ChatInput.tsx
+++ b/src/components/messages/ChatInput.tsx
@@ -1,18 +1,14 @@
import React from 'react';
-import {
- Image,
- StyleSheet,
- TextInput,
- TouchableOpacity,
- View,
-} from 'react-native';
+import {Image, StyleSheet, View} from 'react-native';
+import {TouchableOpacity} from 'react-native-gesture-handler';
+import ImagePicker from 'react-native-image-crop-picker';
import {useStore} from 'react-redux';
import {
+ AutoCompleteInput,
MessageInputProps,
+ useAttachmentPickerContext,
useMessageInputContext,
} from 'stream-chat-react-native';
-import UpArrowIcon from '../../assets/icons/up_arrow.svg';
-import {TAGG_LIGHT_BLUE} from '../../constants';
import {RootState} from '../../store/rootReducer';
import {
LocalAttachmentType,
@@ -23,6 +19,8 @@ import {
LocalReactionType,
LocalUserType,
} from '../../types';
+import {normalize} from '../../utils';
+import {ChatInputSubmit} from '../messages';
const ChatInput: React.FC<
MessageInputProps<
@@ -37,7 +35,35 @@ const ChatInput: React.FC<
> = () => {
const state: RootState = useStore().getState();
const avatar = state.user.avatar;
- const {sendMessage, setText, text} = useMessageInputContext();
+ const {sendMessage, text, setText, uploadNewImage} = useMessageInputContext();
+ const {
+ setSelectedImages,
+ selectedImages,
+ openPicker,
+ } = useAttachmentPickerContext();
+
+ const selectImage = () => {
+ ImagePicker.openPicker({
+ cropping: true,
+ freeStyleCropEnabled: true,
+ mediaType: 'photo',
+ multiple: true,
+ // includeBase64: true,
+ })
+ .then((pictures) => {
+ pictures.map((pic) =>
+ uploadNewImage({
+ width: pic.width,
+ height: pic.height,
+ source: 'picker',
+ uri: 'ph://' + pic.localIdentifier,
+ }),
+ );
+ })
+ .catch((error) => {
+ console.log(error);
+ });
+ };
return (
<View style={styles.container}>
@@ -50,18 +76,23 @@ const ChatInput: React.FC<
: require('../../assets/images/avatar-placeholder.png')
}
/>
- <TextInput
- style={styles.text}
- placeholder={'Message...'}
- placeholderTextColor="grey"
- multiline={true}
- value={text}
- onChangeText={setText}
- />
- <View style={styles.submitButton}>
- <TouchableOpacity style={styles.submitButton} onPress={sendMessage}>
- <UpArrowIcon width={35} height={35} color={'white'} />
+ <AutoCompleteInput />
+ <View style={styles.actionButtons}>
+ {/* TODO: Not working, toggled off for now */}
+ {/* <TouchableOpacity onPress={openPicker}> */}
+ {/* <TouchableOpacity onPress={selectImage}>
+ <Image
+ style={{width: normalize(23), height: normalize(23)}}
+ source={require('../../assets/images/camera.png')}
+ />
+ </TouchableOpacity> */}
+ <TouchableOpacity onPress={() => setText('/')}>
+ <Image
+ style={{width: normalize(23), height: normalize(23)}}
+ source={require('../../assets/images/gif.png')}
+ />
</TouchableOpacity>
+ <ChatInputSubmit onPress={sendMessage} outlined={text.length === 0} />
</View>
</View>
</View>
@@ -72,6 +103,7 @@ const styles = StyleSheet.create({
container: {
alignItems: 'center',
width: '100%',
+ top: -10,
},
textContainer: {
width: '95%',
@@ -88,28 +120,27 @@ const styles = StyleSheet.create({
marginHorizontal: '1%',
},
avatar: {
- height: 35,
- width: 35,
+ height: normalize(30),
+ width: normalize(30),
borderRadius: 30,
marginRight: 10,
marginLeft: '3%',
- marginVertical: '2%',
- alignSelf: 'flex-end',
- },
- submitButton: {
- height: 35,
- width: 35,
- backgroundColor: TAGG_LIGHT_BLUE,
- borderRadius: 999,
- justifyContent: 'center',
- alignItems: 'center',
- marginRight: '3%',
- marginVertical: '2%',
+ marginVertical: 5,
alignSelf: 'flex-end',
},
whiteBackround: {
backgroundColor: '#fff',
},
+ actionButtons: {
+ height: normalize(30) + 10,
+ flexDirection: 'row',
+ justifyContent: 'space-evenly',
+ alignItems: 'center',
+ marginRight: 10,
+ width: 100,
+ alignSelf: 'flex-end',
+ // borderWidth: 1,
+ },
});
export default ChatInput;
diff --git a/src/components/messages/ChatInputSubmit.tsx b/src/components/messages/ChatInputSubmit.tsx
new file mode 100644
index 00000000..9e29ad4d
--- /dev/null
+++ b/src/components/messages/ChatInputSubmit.tsx
@@ -0,0 +1,49 @@
+import React from 'react';
+import {StyleSheet, TouchableOpacity} from 'react-native';
+import UpArrowIcon from '../../assets/icons/up_arrow.svg';
+import {TAGG_LIGHT_BLUE} from '../../constants';
+import {normalize} from '../../utils';
+
+interface ChatInputSubmitProps {
+ outlined: boolean;
+ onPress: () => void;
+}
+
+const SIZE = normalize(25);
+
+const ChatInputSubmit: React.FC<ChatInputSubmitProps> = (props) => {
+ const {outlined, onPress} = props;
+
+ return outlined ? (
+ <TouchableOpacity
+ style={[styles.submitButton, styles.outline]}
+ onPress={onPress}>
+ <UpArrowIcon width={SIZE} height={SIZE} color={TAGG_LIGHT_BLUE} />
+ </TouchableOpacity>
+ ) : (
+ <TouchableOpacity
+ style={[styles.submitButton, styles.background]}
+ onPress={onPress}>
+ <UpArrowIcon width={SIZE} height={SIZE} color={'white'} />
+ </TouchableOpacity>
+ );
+};
+
+const styles = StyleSheet.create({
+ submitButton: {
+ height: SIZE,
+ aspectRatio: 1,
+ borderRadius: 999,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ background: {
+ backgroundColor: TAGG_LIGHT_BLUE,
+ },
+ outline: {
+ borderWidth: 1,
+ borderColor: TAGG_LIGHT_BLUE,
+ },
+});
+
+export default ChatInputSubmit;
diff --git a/src/components/messages/index.ts b/src/components/messages/index.ts
index 83ecd2ad..c809d3d1 100644
--- a/src/components/messages/index.ts
+++ b/src/components/messages/index.ts
@@ -1,3 +1,5 @@
export {default as MessagesHeader} from './MessagesHeader';
export {default as ChannelPreview} from './ChannelPreview';
export {default as ChatInput} from './ChatInput';
+export {default as ChatHeader} from './ChatHeader';
+export {default as ChatInputSubmit} from './ChatInputSubmit';