set read marker

This commit is contained in:
Roland Osborne 2022-10-04 11:52:22 -07:00
parent db7eff8a51
commit 720e242c79
5 changed files with 23 additions and 29 deletions

View File

@ -365,7 +365,7 @@ export function useCardContext() {
curRevision.current = rev; curRevision.current = rev;
sync(); sync();
}, },
setReadRevision: async (cardId, channelId, rev) => { setChannelReadRevision: async (cardId, channelId, rev) => {
await store.actions.setCardChannelItemReadRevision(session.current.guid, cardId, channelId, rev); await store.actions.setCardChannelItemReadRevision(session.current.guid, cardId, channelId, rev);
setCardChannelReadRevision(cardId, channelId, rev); setCardChannelReadRevision(cardId, channelId, rev);
updateState({ cards: cards.current }); updateState({ cards: cards.current });

View File

@ -259,19 +259,26 @@ console.log("update:", topics.current.size);
}, [card, channel]); }, [card, channel]);
const actions = { const actions = {
setChannel: (channel) => { setChannel: (selected) => {
if (channel == null) { if (selected == null) {
setView.current++; setView.current++;
conversationId.current = null; conversationId.current = null;
reset.current = true; reset.current = true;
updateState({ subject: null, logo: null, contacts: [], topics: new Map() }); updateState({ subject: null, logo: null, contacts: [], topics: new Map() });
} }
else if (channel.cardId !== conversationId.current?.cardId || channel.channelId !== conversationId.current?.channelId) { else if (selected.cardId !== conversationId.current?.cardId || selected.channelId !== conversationId.current?.channelId) {
setView.current++; setView.current++;
conversationId.current = channel; conversationId.current = selected;
reset.current = true; reset.current = true;
updateState({ subject: null, logo: null, contacts: [], topics: new Map() }); updateState({ subject: null, logo: null, contacts: [], topics: new Map() });
sync(); sync();
const { cardId, channelId, revision } = selected;
if (cardId) {
card.actions.setChannelReadRevision(cardId, channelId, revision);
}
else {
channel.actions.setReadRevision(channelId, revision);
}
} }
}, },
} }

View File

@ -37,27 +37,12 @@ export function Session() {
const { state, actions } = useSession(); const { state, actions } = useSession();
const openCards = (nav) => {
nav.openDrawer();
}
const closeCards = (nav) => {}
const openProfile = (nav) => {
nav.openDrawer();
}
const closeProfile = (nav) => {}
const openContact = (nav, cardId) => {}
const closeContact = (nav) => {}
const openConversation = (nav, cardId, channelId) => {}
const closeConversation = (nav) => {}
const openDetails = (nav, cardId, channeId) => {}
const closeDetails = (nav) => {}
// tabbed containers // tabbed containers
const ConversationStackScreen = () => { const ConversationStackScreen = () => {
const [selected, setSelected] = useState(null); const [selected, setSelected] = useState(null);
const setConversation = (navigation, cardId, channelId) => { const setConversation = (navigation, cardId, channelId, revision) => {
setSelected({ cardId, channelId }); setSelected({ cardId, channelId, revision });
navigation.navigate('conversation'); navigation.navigate('conversation');
} }
const clearConversation = (navigation) => { const clearConversation = (navigation) => {
@ -91,7 +76,7 @@ export function Session() {
headerBackTitleVisible: false, headerBackTitleVisible: false,
headerTitle: (props) => <ChannelsTitle state={channels.state} actions={channels.actions} /> headerTitle: (props) => <ChannelsTitle state={channels.state} actions={channels.actions} />
}}> }}>
{(props) => <ChannelsBody state={channels.state} actions={channels.actions} openConversation={(cardId, channelId) => setConversation(props.navigation, cardId, channelId)} />} {(props) => <ChannelsBody state={channels.state} actions={channels.actions} openConversation={(cardId, channelId, revision) => setConversation(props.navigation, cardId, channelId, revision)} />}
</ConversationStack.Screen> </ConversationStack.Screen>
<ConversationStack.Screen name="conversation" options={{ <ConversationStack.Screen name="conversation" options={{
headerStyle: { backgroundColor: Colors.titleBackground }, headerStyle: { backgroundColor: Colors.titleBackground },
@ -166,8 +151,8 @@ export function Session() {
const HomeScreen = ({ cardNav, registryNav, detailNav, contactNav, profileNav, setDetails, resetConversation, clearReset }) => { const HomeScreen = ({ cardNav, registryNav, detailNav, contactNav, profileNav, setDetails, resetConversation, clearReset }) => {
const [channel, setChannel] = useState(null); const [channel, setChannel] = useState(null);
const setConversation = (cardId, channelId) => { const setConversation = (cardId, channelId, revision) => {
setChannel({ cardId, channelId }); setChannel({ cardId, channelId, revision });
}; };
const clearConversation = () => { const clearConversation = () => {
setChannel(null); setChannel(null);

View File

@ -8,7 +8,7 @@ export function ChannelItem({ item, openConversation }) {
const { state, actions } = useChannelItem(item); const { state, actions } = useChannelItem(item);
return ( return (
<TouchableOpacity style={styles.container} activeOpacity={1} onPress={() => openConversation(item.cardId, item.channelId)}> <TouchableOpacity style={styles.container} activeOpacity={1} onPress={() => openConversation(item.cardId, item.channelId, item.revision)}>
<Logo src={item.logo} width={32} height={32} radius={6} /> <Logo src={item.logo} width={32} height={32} radius={6} />
<View style={styles.detail}> <View style={styles.detail}>
<Text style={styles.subject} numberOfLines={1} ellipsizeMode={'tail'}>{ item.subject }</Text> <Text style={styles.subject} numberOfLines={1} ellipsizeMode={'tail'}>{ item.subject }</Text>

View File

@ -124,7 +124,9 @@ export function useChannels() {
} }
} }
return { cardId: item.cardId, channelId: item.channelId, contacts, logo, subject, message, updated, revision: item.revision }; const timestamp = item?.summary?.lastTopic?.created;
return { cardId: item.cardId, channelId: item.channelId, contacts, logo, subject, message, updated, revision: item.revision, timestamp };
} }
useEffect(() => { useEffect(() => {
@ -152,8 +154,8 @@ export function useChannels() {
}); });
const sorted = filtered.sort((a, b) => { const sorted = filtered.sort((a, b) => {
const aCreated = a?.summary?.lastTopic?.created; const aCreated = a?.timestamp;
const bCreated = b?.summary?.lastTopic?.created; const bCreated = b?.timestamp;
if (aCreated === bCreated) { if (aCreated === bCreated) {
return 0; return 0;
} }