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';
|
||||
|
||||
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);
|
||||
|
@ -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);
|
||||
|
@ -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 (
|
||||
<>
|
||||
<FlatList style={styles.channels}
|
||||
@ -44,7 +60,7 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
||||
<View style={styles.addContainer}>
|
||||
<Text style={styles.addHeader}>New Topic:</Text>
|
||||
<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" />
|
||||
</View>
|
||||
<Text style={styles.label}>Members:</Text>
|
||||
@ -56,7 +72,8 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
||||
{ state.connected.length > 0 && (
|
||||
<FlatList style={styles.addMembers}
|
||||
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}
|
||||
/>
|
||||
)}
|
||||
@ -64,8 +81,8 @@ export function ChannelsBody({ state, actions, openConversation }) {
|
||||
<TouchableOpacity style={styles.cancel} onPress={actions.hideAdding}>
|
||||
<Text>Cancel</Text>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity style={styles.save} onPress={actions.hideAdding}>
|
||||
<Text style={styles.saveText}>Save</Text>
|
||||
<TouchableOpacity style={styles.save} onPress={addTopic}>
|
||||
<Text style={styles.saveText}>Create</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
|
@ -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 (
|
||||
|
@ -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]);
|
||||
|
||||
|
@ -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 };
|
||||
|
Loading…
Reference in New Issue
Block a user