From 9a070dd8a4bb269104ca62854d15c1176dc020b1 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sun, 9 Oct 2022 17:58:52 -0700 Subject: [PATCH] added details members --- app/mobile/src/session/details/Details.jsx | 64 +++++++++++++++---- .../src/session/details/Details.styled.js | 36 ++++++++++- .../session/details/memberItem/MemberItem.jsx | 21 ++++++ .../details/memberItem/MemberItem.styled.js | 64 +++++++++++++++++++ .../src/session/details/useDetails.hook.js | 7 +- 5 files changed, 174 insertions(+), 18 deletions(-) create mode 100644 app/mobile/src/session/details/memberItem/MemberItem.jsx create mode 100644 app/mobile/src/session/details/memberItem/MemberItem.styled.js diff --git a/app/mobile/src/session/details/Details.jsx b/app/mobile/src/session/details/Details.jsx index 0c67e36b..2b44ff1a 100644 --- a/app/mobile/src/session/details/Details.jsx +++ b/app/mobile/src/session/details/Details.jsx @@ -1,9 +1,10 @@ -import { View, Text, TouchableOpacity } from 'react-native'; +import { FlatList, View, Text, TouchableOpacity } from 'react-native'; import { styles } from './Details.styled'; import { useDetails } from './useDetails.hook'; import { Logo } from 'utils/Logo'; import Ionicons from '@expo/vector-icons/AntDesign'; import Colors from 'constants/Colors'; +import { MemberItem } from './memberItem/MemberItem'; export function DetailsHeader() { return Topic Settings @@ -13,21 +14,56 @@ export function DetailsBody({ channel, clearConversation }) { const { state, actions } = useDetails(); -console.log(state); + if(state.contacts) { + state.contacts.forEach(c => { + console.log(c.cardId, c.profile); + }); + } return ( - - - - - { state.subject } - { state.mode === 'host' && ( - - )} - - { state.created } - { state.mode } - + + + + + + { state.subject } + { !state.hostId && ( + + )} + + { state.created } + { state.mode } + + + + + { !state.hostId && ( + + Delete Topic + + )} + { !state.hostId && ( + + Edit Membership + + )} + { state.hostId && ( + + Leave Topic + + )} + + + + Members: + + + } + keyExtractor={item => item.cardId} + /> + ) } diff --git a/app/mobile/src/session/details/Details.styled.js b/app/mobile/src/session/details/Details.styled.js index 792b3db6..a10b74d7 100644 --- a/app/mobile/src/session/details/Details.styled.js +++ b/app/mobile/src/session/details/Details.styled.js @@ -19,6 +19,7 @@ export const styles = StyleSheet.create({ flexDirection: 'row', paddingRight: 8, color: Colors.text, + alignItems: 'center', }, created: { fontSize: 16, @@ -30,6 +31,39 @@ export const styles = StyleSheet.create({ }, title: { fontSize: 20, - } + }, + body: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + controls: { + paddingTop: 16, + }, + button: { + width: 128, + backgroundColor: Colors.primary, + borderRadius: 4, + margin: 8, + }, + buttonText: { + width: '100%', + textAlign: 'center', + color: Colors.white, + padding: 4, + }, + members: { + paddingTop: 16, + width: '100%', + borderBottomWidth: 1, + borderColor: Colors.divider, + }, + membersLabel: { + paddingLeft: 16, + width: '100%', + }, + cards: { + width: '100%', + }, }) diff --git a/app/mobile/src/session/details/memberItem/MemberItem.jsx b/app/mobile/src/session/details/memberItem/MemberItem.jsx new file mode 100644 index 00000000..fdcb193a --- /dev/null +++ b/app/mobile/src/session/details/memberItem/MemberItem.jsx @@ -0,0 +1,21 @@ +import { Text, TouchableOpacity, View } from 'react-native'; +import { Logo } from 'utils/Logo'; +import { styles } from './MemberItem.styled'; + +export function MemberItem({ item, openContact }) { + + const select = () => { + openContact({ card: item.cardId }); + }; + + return ( + + + + { item.name } + { item.handle } + + + ); +} + diff --git a/app/mobile/src/session/details/memberItem/MemberItem.styled.js b/app/mobile/src/session/details/memberItem/MemberItem.styled.js new file mode 100644 index 00000000..337cef53 --- /dev/null +++ b/app/mobile/src/session/details/memberItem/MemberItem.styled.js @@ -0,0 +1,64 @@ +import { StyleSheet } from 'react-native'; +import { Colors } from 'constants/Colors'; + +export const styles = StyleSheet.create({ + container: { + width: '100%', + display: 'flex', + flexDirection: 'row', + height: 48, + alignItems: 'center', + borderBottomWidth: 1, + borderColor: Colors.itemDivider, + }, + detail: { + paddingLeft: 12, + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + flexGrow: 1, + flexShrink: 1, + }, + space: { + height: 64, + }, + name: { + color: Colors.text, + fontSize: 14, + }, + handle: { + color: Colors.text, + fontSize: 12, + }, + connected: { + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: Colors.connected, + }, + requested: { + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: Colors.requested, + }, + connecting: { + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: Colors.connecting, + }, + pending: { + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: Colors.pending, + }, + confirmed: { + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: Colors.confirmed, + }, +}) + diff --git a/app/mobile/src/session/details/useDetails.hook.js b/app/mobile/src/session/details/useDetails.hook.js index 49b30e45..795ff028 100644 --- a/app/mobile/src/session/details/useDetails.hook.js +++ b/app/mobile/src/session/details/useDetails.hook.js @@ -8,7 +8,8 @@ export function useDetails() { subject: null, created: null, logo: null, - mode: null, + hostId: null, + contacts: null, }); const conversation = useContext(ConversationContext); @@ -19,8 +20,8 @@ export function useDetails() { } useEffect(() => { - const { subject, created, logo, host } = conversation.state; - updateState({ subject, created, logo, mode: host ? 'guest' : 'host' }); + const { subject, created, logo, host, contacts } = conversation.state; + updateState({ subject, created, logo, hostId: host, contacts: contacts.filter(card => card != null) }); }, [conversation]); const actions = {