diff --git a/app/mobile/src/api/addChannel.js b/app/mobile/src/api/addChannel.js index a9ebb69b..435dd5dc 100644 --- a/app/mobile/src/api/addChannel.js +++ b/app/mobile/src/api/addChannel.js @@ -1,7 +1,7 @@ import { checkResponse, fetchWithTimeout } from './fetchUtil'; -export async function addChannel(server, token, cards, subject, description ) { - let data = { subject, description }; +export async function addChannel(server, token, subject, cards ) { + let data = { subject }; let params = { dataType: 'superbasic', data: JSON.stringify(data), groups: [], cards }; let channel = await fetchWithTimeout(`https://${server}/content/channels?agent=${token}`, { method: 'POST', body: JSON.stringify(params)} ); checkResponse(channel); diff --git a/app/mobile/src/context/useChannelContext.hook.js b/app/mobile/src/context/useChannelContext.hook.js index 65fb2a5b..80478915 100644 --- a/app/mobile/src/context/useChannelContext.hook.js +++ b/app/mobile/src/context/useChannelContext.hook.js @@ -111,7 +111,6 @@ export function useChannelContext() { const { detailRevision, topicRevision, channelDetail, channelSummary } = channel.data; const view = await store.actions.getChannelItemView(guid, channel.id); if (view == null) { - console.log('alert: expected channel not synced'); let assembled = JSON.parse(JSON.stringify(channel)); assembled.data.channelDetail = await getChannelDetail(server, appToken, channel.id); assembled.data.channelSummary = await getChannelSummary(server, appToken, channel.id); @@ -261,6 +260,10 @@ export function useChannelContext() { const { server, appToken } = session.current; return await removeChannel(server, appToken, channelId); }, + add: async (subject, cards) => { + const { server, appToken } = session.current; + return await addChannel(server, appToken, subject, cards); + }, removeTopic: async (channelId, topicId) => { const { server, appToken } = session.current; return await removeChannelTopic(server, appToken, channelId, topicId); diff --git a/app/mobile/src/session/channels/Channels.jsx b/app/mobile/src/session/channels/Channels.jsx index f2fbf85e..2d55fbfa 100644 --- a/app/mobile/src/session/channels/Channels.jsx +++ b/app/mobile/src/session/channels/Channels.jsx @@ -1,5 +1,5 @@ import { useContext } from 'react'; -import { FlatList, Modal, KeyboardAvoidingView, ScrollView, View, TextInput, TouchableOpacity, Text } from 'react-native'; +import { Alert, FlatList, Modal, KeyboardAvoidingView, ScrollView, View, TextInput, TouchableOpacity, Text } from 'react-native'; import { styles } from './Channels.styled'; import { useChannels } from './useChannels.hook'; import Ionicons from '@expo/vector-icons/AntDesign'; @@ -26,6 +26,22 @@ export function ChannelsTitle({ state, actions }) { } export function ChannelsBody({ state, actions, openConversation }) { + + const addTopic = async () => { + try { + const channel = await actions.addTopic(); + actions.hideAdding(); + openConversation(null, channel.id) + } + catch (err) { + console.log(err); + Alert.alert( + 'Failed to Create Topic', + 'Please try again.' + ) + } + } + return ( <> New Topic: - Members: @@ -56,7 +72,8 @@ export function ChannelsBody({ state, actions, openConversation }) { { state.connected.length > 0 && ( } + renderItem={({ item }) => } keyExtractor={item => item.cardId} /> )} @@ -64,8 +81,8 @@ export function ChannelsBody({ state, actions, openConversation }) { Cancel - - Save + + Create diff --git a/app/mobile/src/session/channels/addMember/AddMember.jsx b/app/mobile/src/session/channels/addMember/AddMember.jsx index 884ccdc3..7c02bcac 100644 --- a/app/mobile/src/session/channels/addMember/AddMember.jsx +++ b/app/mobile/src/session/channels/addMember/AddMember.jsx @@ -4,11 +4,17 @@ import { styles } from './AddMember.styled'; import { useAddMember } from './useAddMember.hook'; import Colors from 'constants/Colors'; -export function AddMember({ members, item }) { +export function AddMember({ members, item, setCard, clearCard }) { const { state, actions } = useAddMember(item, members); - const setMember = () => { + const setMember = (set) => { + if (set) { + setCard(item.cardId); + } + else { + clearCard(item.cardId); + } }; return ( diff --git a/app/mobile/src/session/channels/addMember/useAddMember.hook.js b/app/mobile/src/session/channels/addMember/useAddMember.hook.js index 74bae60e..4bc6e013 100644 --- a/app/mobile/src/session/channels/addMember/useAddMember.hook.js +++ b/app/mobile/src/session/channels/addMember/useAddMember.hook.js @@ -18,7 +18,7 @@ export function useAddMember(item, members) { } useEffect(() => { - const member = members.filter(contact => item.cardId === contact.cardId); + const member = members.filter(contact => item.cardId === contact); updateState({ member: member.length > 0 }); }, [members]); diff --git a/app/mobile/src/session/channels/useChannels.hook.js b/app/mobile/src/session/channels/useChannels.hook.js index 5bf2357a..6433b486 100644 --- a/app/mobile/src/session/channels/useChannels.hook.js +++ b/app/mobile/src/session/channels/useChannels.hook.js @@ -16,6 +16,8 @@ export function useChannels() { filter: null, adding: false, connected: [], + addSubject: null, + addMembers: [], }); const items = useRef([]); @@ -186,12 +188,24 @@ export function useChannels() { setFilter: (filter) => { updateState({ filter }); }, + setAddSubject: (addSubject) => { + updateState({ addSubject }); + }, + setAddMember: (cardId) => { + updateState({ addMembers: [ ...state.addMembers, cardId ] }); + }, + clearAddMember: (cardId) => { + updateState({ addMembers: state.addMembers.filter(item => item !== cardId) }); + }, showAdding: () => { - updateState({ adding: true }); + updateState({ adding: true, addSubject: null, addMembers: [] }); }, hideAdding: () => { updateState({ adding: false }); }, + addTopic: async () => { + return await channel.actions.add(state.addSubject, state.addMembers); + } }; return { state, actions };