From 5941aa7ff37294aeb467cfbc056364986a1c202d Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Fri, 30 Sep 2022 15:08:51 -0700 Subject: [PATCH] adding support for new topics --- .../src/session/conversation/Conversation.jsx | 38 ++++++++------- .../conversation/Conversation.styled.js | 23 ++++++++- .../conversation/addTopic/AddTopic.jsx | 32 +++++++++++++ .../conversation/addTopic/AddTopic.styled.js | 47 +++++++++++++++++++ .../conversation/addTopic/useAddTopic.hook.js | 24 ++++++++++ .../conversation/useConversation.hook.js | 2 +- 6 files changed, 146 insertions(+), 20 deletions(-) create mode 100644 app/mobile/src/session/conversation/addTopic/AddTopic.jsx create mode 100644 app/mobile/src/session/conversation/addTopic/AddTopic.styled.js create mode 100644 app/mobile/src/session/conversation/addTopic/useAddTopic.hook.js diff --git a/app/mobile/src/session/conversation/Conversation.jsx b/app/mobile/src/session/conversation/Conversation.jsx index 4310bcaf..c8155ccb 100644 --- a/app/mobile/src/session/conversation/Conversation.jsx +++ b/app/mobile/src/session/conversation/Conversation.jsx @@ -1,4 +1,4 @@ -import { View, TouchableOpacity, Text, } from 'react-native'; +import { TextInput, View, TouchableOpacity, Text, } from 'react-native'; import { FlatList, ScrollView } from '@stream-io/flat-list-mvcp'; import { useState, useRef } from 'react'; import { useConversation } from './useConversation.hook'; @@ -7,10 +7,11 @@ import { useNavigation } from '@react-navigation/native'; import Ionicons from '@expo/vector-icons/AntDesign'; import Colors from 'constants/Colors'; import { SafeAreaView } from 'react-native-safe-area-context'; +import { AddTopic } from './addTopic/AddTopic'; -export function ConversationHeader({ channel, closeConversation, openDetails }) { +export function ConversationHeader({ closeConversation, openDetails }) { const navigation = useNavigation(); - const { state, actions } = useConversation(channel?.cardId, channel?.channelId); + const { state, actions } = useConversation(); const setDetails = () => { openDetails(navigation); @@ -31,26 +32,29 @@ export function ConversationHeader({ channel, closeConversation, openDetails }) ); } -export function ConversationBody({ channel }) { - const { state, actions } = useConversation(channel?.cardId, channel?.channelId); +export function ConversationBody() { + const { state, actions } = useConversation(); return ( - ITEM { item?.detail?.data }} - keyExtractor={item => item.topicId} - /> + + ITEM { item?.detail?.data }} + keyExtractor={item => item.topicId} + /> + + ); } -export function Conversation({ channel, closeConversation, openDetails }) { - - const { state, actions } = useConversation(channel?.cardId, channel?.channelId); +export function Conversation({ closeConversation, openDetails }) { + const { state, actions } = useConversation(); + return ( - + { state.subject } @@ -58,7 +62,7 @@ export function Conversation({ channel, closeConversation, openDetails }) { - + diff --git a/app/mobile/src/session/conversation/Conversation.styled.js b/app/mobile/src/session/conversation/Conversation.styled.js index 0313b584..2789c007 100644 --- a/app/mobile/src/session/conversation/Conversation.styled.js +++ b/app/mobile/src/session/conversation/Conversation.styled.js @@ -51,8 +51,27 @@ export const styles = StyleSheet.create({ flexGrow: 1, justifyContent: 'flex-end', alignItems: 'flex-end', - paddingRight: 32, - paddingLeft: 16, + }, + add: { + borderTopWidth: 1, + borderColor: Colors.divider, + display: 'flex', + flexDirection: 'column', + }, + addButtons: { + display: 'flex', + flexDirection: 'row', + }, + addButton: { + width: 24, + height: 24, + }, + input: { + margin: 8, + padding: 8, + borderRadius: 4, + backgroundColor: Colors.white, + maxHeight: 64, }, }) diff --git a/app/mobile/src/session/conversation/addTopic/AddTopic.jsx b/app/mobile/src/session/conversation/addTopic/AddTopic.jsx new file mode 100644 index 00000000..3730c249 --- /dev/null +++ b/app/mobile/src/session/conversation/addTopic/AddTopic.jsx @@ -0,0 +1,32 @@ +import { TextInput, View, TouchableOpacity, Text, } from 'react-native'; +import { useState, useRef } from 'react'; +import { useAddTopic } from './useAddTopic.hook'; +import { styles } from './AddTopic.styled'; +import Ionicons from '@expo/vector-icons/AntDesign'; +import Colors from 'constants/Colors'; +import { SafeAreaView } from 'react-native-safe-area-context'; + +export function AddTopic() { + + const { state, actions } = useAddTopic(); + + return ( + + + + + + + + + + + + + + + + ); +} + diff --git a/app/mobile/src/session/conversation/addTopic/AddTopic.styled.js b/app/mobile/src/session/conversation/addTopic/AddTopic.styled.js new file mode 100644 index 00000000..f5e93319 --- /dev/null +++ b/app/mobile/src/session/conversation/addTopic/AddTopic.styled.js @@ -0,0 +1,47 @@ +import { StyleSheet } from 'react-native'; +import { Colors } from 'constants/Colors'; + +export const styles = StyleSheet.create({ + add: { + borderTopWidth: 1, + borderColor: Colors.divider, + display: 'flex', + flexDirection: 'column', + }, + addButtons: { + display: 'flex', + flexDirection: 'row', + marginLeft: 8, + marginRight: 8, + marginBottom: 16, + }, + addButton: { + width: 32, + height: 32, + backgroundColor: Colors.white, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + borderWidth: 1, + borderColor: Colors.divider, + borderRadius: 2, + }, + input: { + margin: 8, + padding: 8, + borderRadius: 4, + borderWidth: 1, + borderColor: Colors.divider, + backgroundColor: Colors.white, + maxHeight: 96, + minHeight: 48, + }, + space: { + borderWidth: 1, + borderColor: Colors.divider, + height: 32, + marginLeft: 8, + marginRight: 8, + }, +}) + diff --git a/app/mobile/src/session/conversation/addTopic/useAddTopic.hook.js b/app/mobile/src/session/conversation/addTopic/useAddTopic.hook.js new file mode 100644 index 00000000..df7b47c7 --- /dev/null +++ b/app/mobile/src/session/conversation/addTopic/useAddTopic.hook.js @@ -0,0 +1,24 @@ +import { useState, useEffect, useContext } from 'react'; +import { ConversationContext } from 'context/ConversationContext'; + +export function useAddTopic(cardId, channelId) { + + const [state, setState] = useState({ + message: null, + }); + + const conversation = useContext(ConversationContext); + + const updateState = (value) => { + setState((s) => ({ ...s, ...value })); + } + + const actions = { + setMessage: (message) => { + updateState({ message }); + }, + }; + + return { state, actions }; +} + diff --git a/app/mobile/src/session/conversation/useConversation.hook.js b/app/mobile/src/session/conversation/useConversation.hook.js index 8d0d440c..824b7539 100644 --- a/app/mobile/src/session/conversation/useConversation.hook.js +++ b/app/mobile/src/session/conversation/useConversation.hook.js @@ -1,7 +1,7 @@ import { useState, useEffect, useContext } from 'react'; import { ConversationContext } from 'context/ConversationContext'; -export function useConversation(cardId, channelId) { +export function useConversation() { const [state, setState] = useState({ topics: [],