mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
support topic creation
This commit is contained in:
parent
fc6898fe68
commit
c279408d0a
@ -1,7 +1,7 @@
|
|||||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||||
|
|
||||||
export async function addChannel(server, token, cards, subject, description ) {
|
export async function addChannel(server, token, subject, cards ) {
|
||||||
let data = { subject, description };
|
let data = { subject };
|
||||||
let params = { dataType: 'superbasic', data: JSON.stringify(data), groups: [], cards };
|
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)} );
|
let channel = await fetchWithTimeout(`https://${server}/content/channels?agent=${token}`, { method: 'POST', body: JSON.stringify(params)} );
|
||||||
checkResponse(channel);
|
checkResponse(channel);
|
||||||
|
@ -111,7 +111,6 @@ export function useChannelContext() {
|
|||||||
const { detailRevision, topicRevision, channelDetail, channelSummary } = channel.data;
|
const { detailRevision, topicRevision, channelDetail, channelSummary } = channel.data;
|
||||||
const view = await store.actions.getChannelItemView(guid, channel.id);
|
const view = await store.actions.getChannelItemView(guid, channel.id);
|
||||||
if (view == null) {
|
if (view == null) {
|
||||||
console.log('alert: expected channel not synced');
|
|
||||||
let assembled = JSON.parse(JSON.stringify(channel));
|
let assembled = JSON.parse(JSON.stringify(channel));
|
||||||
assembled.data.channelDetail = await getChannelDetail(server, appToken, channel.id);
|
assembled.data.channelDetail = await getChannelDetail(server, appToken, channel.id);
|
||||||
assembled.data.channelSummary = await getChannelSummary(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;
|
const { server, appToken } = session.current;
|
||||||
return await removeChannel(server, appToken, channelId);
|
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) => {
|
removeTopic: async (channelId, topicId) => {
|
||||||
const { server, appToken } = session.current;
|
const { server, appToken } = session.current;
|
||||||
return await removeChannelTopic(server, appToken, channelId, topicId);
|
return await removeChannelTopic(server, appToken, channelId, topicId);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { useContext } from 'react';
|
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 { styles } from './Channels.styled';
|
||||||
import { useChannels } from './useChannels.hook';
|
import { useChannels } from './useChannels.hook';
|
||||||
import Ionicons from '@expo/vector-icons/AntDesign';
|
import Ionicons from '@expo/vector-icons/AntDesign';
|
||||||
@ -26,6 +26,22 @@ export function ChannelsTitle({ state, actions }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function ChannelsBody({ state, actions, openConversation }) {
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
<FlatList style={styles.channels}
|
<FlatList style={styles.channels}
|
||||||
@ -44,7 +60,7 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
|||||||
<View style={styles.addContainer}>
|
<View style={styles.addContainer}>
|
||||||
<Text style={styles.addHeader}>New Topic:</Text>
|
<Text style={styles.addHeader}>New Topic:</Text>
|
||||||
<View style={styles.inputField}>
|
<View style={styles.inputField}>
|
||||||
<TextInput style={styles.input} value={state.subjectUpdate} onChangeText={actions.setSubjectUpdate}
|
<TextInput style={styles.input} value={state.addSubject} onChangeText={actions.setAddSubject}
|
||||||
autoCapitalize="words" placeholder="Subject" />
|
autoCapitalize="words" placeholder="Subject" />
|
||||||
</View>
|
</View>
|
||||||
<Text style={styles.label}>Members:</Text>
|
<Text style={styles.label}>Members:</Text>
|
||||||
@ -56,7 +72,8 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
|||||||
{ state.connected.length > 0 && (
|
{ state.connected.length > 0 && (
|
||||||
<FlatList style={styles.addMembers}
|
<FlatList style={styles.addMembers}
|
||||||
data={state.connected}
|
data={state.connected}
|
||||||
renderItem={({ item }) => <AddMember members={[]} item={item} />}
|
renderItem={({ item }) => <AddMember members={state.addMembers} item={item}
|
||||||
|
setCard={actions.setAddMember} clearCard={actions.clearAddMember} />}
|
||||||
keyExtractor={item => item.cardId}
|
keyExtractor={item => item.cardId}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@ -64,8 +81,8 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
|||||||
<TouchableOpacity style={styles.cancel} onPress={actions.hideAdding}>
|
<TouchableOpacity style={styles.cancel} onPress={actions.hideAdding}>
|
||||||
<Text>Cancel</Text>
|
<Text>Cancel</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
<TouchableOpacity style={styles.save} onPress={actions.hideAdding}>
|
<TouchableOpacity style={styles.save} onPress={addTopic}>
|
||||||
<Text style={styles.saveText}>Save</Text>
|
<Text style={styles.saveText}>Create</Text>
|
||||||
</TouchableOpacity>
|
</TouchableOpacity>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
@ -4,11 +4,17 @@ import { styles } from './AddMember.styled';
|
|||||||
import { useAddMember } from './useAddMember.hook';
|
import { useAddMember } from './useAddMember.hook';
|
||||||
import Colors from 'constants/Colors';
|
import Colors from 'constants/Colors';
|
||||||
|
|
||||||
export function AddMember({ members, item }) {
|
export function AddMember({ members, item, setCard, clearCard }) {
|
||||||
|
|
||||||
const { state, actions } = useAddMember(item, members);
|
const { state, actions } = useAddMember(item, members);
|
||||||
|
|
||||||
const setMember = () => {
|
const setMember = (set) => {
|
||||||
|
if (set) {
|
||||||
|
setCard(item.cardId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clearCard(item.cardId);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -18,7 +18,7 @@ export function useAddMember(item, members) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const member = members.filter(contact => item.cardId === contact.cardId);
|
const member = members.filter(contact => item.cardId === contact);
|
||||||
updateState({ member: member.length > 0 });
|
updateState({ member: member.length > 0 });
|
||||||
}, [members]);
|
}, [members]);
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ export function useChannels() {
|
|||||||
filter: null,
|
filter: null,
|
||||||
adding: false,
|
adding: false,
|
||||||
connected: [],
|
connected: [],
|
||||||
|
addSubject: null,
|
||||||
|
addMembers: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const items = useRef([]);
|
const items = useRef([]);
|
||||||
@ -186,12 +188,24 @@ export function useChannels() {
|
|||||||
setFilter: (filter) => {
|
setFilter: (filter) => {
|
||||||
updateState({ 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: () => {
|
showAdding: () => {
|
||||||
updateState({ adding: true });
|
updateState({ adding: true, addSubject: null, addMembers: [] });
|
||||||
},
|
},
|
||||||
hideAdding: () => {
|
hideAdding: () => {
|
||||||
updateState({ adding: false });
|
updateState({ adding: false });
|
||||||
},
|
},
|
||||||
|
addTopic: async () => {
|
||||||
|
return await channel.actions.add(state.addSubject, state.addMembers);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return { state, actions };
|
return { state, actions };
|
||||||
|
Loading…
Reference in New Issue
Block a user