mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
preparing to sync topics
This commit is contained in:
parent
a65c8c1ccd
commit
c6485d5b47
@ -1,9 +1,9 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function addChannel(token, cards, subject, description ) {
|
||||
export async function addChannel(server, token, cards, subject, description ) {
|
||||
let data = { subject, description };
|
||||
let params = { dataType: 'superbasic', data: JSON.stringify(data), groups: [], cards };
|
||||
let channel = await fetchWithTimeout(`/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);
|
||||
return await channel.json();
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function addChannelTopic(token, channelId, message, assets ): string {
|
||||
export async function addChannelTopic(server, token, channelId, message, assets ): string {
|
||||
|
||||
if (message == null && (assets == null || assets.length === 0)) {
|
||||
let topic = await fetchWithTimeout(`/content/channels/${channelId}/topics?agent=${token}`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?agent=${token}`,
|
||||
{ method: 'POST', body: JSON.stringify({}) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
@ -14,7 +14,7 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let topic = await fetchWithTimeout(`/content/channels/${channelId}/topics?agent=${token}&confirm=true`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?agent=${token}&confirm=true`,
|
||||
{ method: 'POST', body: JSON.stringify(subject) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
@ -22,7 +22,7 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
}
|
||||
else {
|
||||
|
||||
let topic = await fetchWithTimeout(`/content/channels/${channelId}/topics?agent=${token}`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?agent=${token}`,
|
||||
{ method: 'POST', body: JSON.stringify({}) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
@ -34,7 +34,7 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
const formData = new FormData();
|
||||
formData.append('asset', asset.image);
|
||||
let transform = encodeURIComponent(JSON.stringify(["ithumb;photo", "icopy;photo"]));
|
||||
let topicAsset = await fetch(`/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -49,7 +49,7 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
formData.append('asset', asset.video);
|
||||
let thumb = 'vthumb;video;' + asset.position;
|
||||
let transform = encodeURIComponent(JSON.stringify(["vlq;video", "vhd;video", thumb]));
|
||||
let topicAsset = await fetch(`/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -64,7 +64,7 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
const formData = new FormData();
|
||||
formData.append('asset', asset.audio);
|
||||
let transform = encodeURIComponent(JSON.stringify(["acopy;audio"]));
|
||||
let topicAsset = await fetch(`/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&agent=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -80,11 +80,11 @@ export async function addChannelTopic(token, channelId, message, assets ): strin
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let unconfirmed = await fetchWithTimeout(`/content/channels/${channelId}/topics/${slot.id}/subject?agent=${token}`,
|
||||
let unconfirmed = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${slot.id}/subject?agent=${token}`,
|
||||
{ method: 'PUT', body: JSON.stringify(subject) });
|
||||
checkResponse(unconfirmed);
|
||||
|
||||
let confirmed = await fetchWithTimeout(`/content/channels/${channelId}/topics/${slot.id}/confirmed?agent=${token}`,
|
||||
let confirmed = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${slot.id}/confirmed?agent=${token}`,
|
||||
{ method: 'PUT', body: JSON.stringify('confirmed') });
|
||||
checkResponse(confirmed);
|
||||
return slot.id;
|
||||
|
@ -1,13 +1,8 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function addContactChannelTopic(server, token, channelId, message, assets ) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`
|
||||
}
|
||||
|
||||
if (message == null && (assets == null || assets.length === 0)) {
|
||||
let topic = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics?contact=${token}`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?contact=${token}`,
|
||||
{ method: 'POST', body: JSON.stringify({}) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
@ -18,14 +13,14 @@ export async function addContactChannelTopic(server, token, channelId, message,
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let topic = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics?contact=${token}&confirm=true`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?contact=${token}&confirm=true`,
|
||||
{ method: 'POST', body: JSON.stringify(subject) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
return slot.id;
|
||||
}
|
||||
else {
|
||||
let topic = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics?contact=${token}`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?contact=${token}`,
|
||||
{ method: 'POST', body: JSON.stringify({}) });
|
||||
checkResponse(topic);
|
||||
let slot = await topic.json();
|
||||
@ -37,7 +32,7 @@ export async function addContactChannelTopic(server, token, channelId, message,
|
||||
const formData = new FormData();
|
||||
formData.append('asset', asset.image);
|
||||
let transform = encodeURIComponent(JSON.stringify(["ithumb;photo", "icopy;photo"]));
|
||||
let topicAsset = await fetch(`${host}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -52,7 +47,7 @@ export async function addContactChannelTopic(server, token, channelId, message,
|
||||
formData.append('asset', asset.video);
|
||||
let thumb = "vthumb;video;" + asset.position
|
||||
let transform = encodeURIComponent(JSON.stringify(["vhd;video", "vlq;video", thumb]));
|
||||
let topicAsset = await fetch(`${host}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -67,7 +62,7 @@ export async function addContactChannelTopic(server, token, channelId, message,
|
||||
const formData = new FormData();
|
||||
formData.append('asset', asset.audio);
|
||||
let transform = encodeURIComponent(JSON.stringify(["acopy;audio"]));
|
||||
let topicAsset = await fetch(`${host}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
let topicAsset = await fetch(`https://${server}/content/channels/${channelId}/topics/${slot.id}/assets?transforms=${transform}&contact=${token}`, { method: 'POST', body: formData });
|
||||
checkResponse(topicAsset);
|
||||
let assetEntry = await topicAsset.json();
|
||||
message.assets.push({
|
||||
@ -83,11 +78,11 @@ export async function addContactChannelTopic(server, token, channelId, message,
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let unconfirmed = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics/${slot.id}/subject?contact=${token}`,
|
||||
let unconfirmed = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${slot.id}/subject?contact=${token}`,
|
||||
{ method: 'PUT', body: JSON.stringify(subject) });
|
||||
checkResponse(unconfirmed);
|
||||
|
||||
let confirmed = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics/${slot.id}/confirmed?contact=${token}`,
|
||||
let confirmed = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${slot.id}/confirmed?contact=${token}`,
|
||||
{ method: 'PUT', body: JSON.stringify('confirmed') });
|
||||
checkResponse(confirmed);
|
||||
return slot.id;
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function clearChannelCard(token, channelId, cardId ) {
|
||||
let channel = await fetchWithTimeout(`/content/channels/${channelId}/cards/${cardId}?agent=${token}`, {method: 'DELETE'});
|
||||
export async function clearChannelCard(server, token, channelId, cardId ) {
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/cards/${cardId}?agent=${token}`, {method: 'DELETE'});
|
||||
checkResponse(channel);
|
||||
return await channel.json();
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function getChannelTopic(token, channelId, topicId) {
|
||||
let topic = await fetchWithTimeout(`/content/channels/${channelId}/topics/${topicId}/detail?agent=${token}`,
|
||||
export async function getChannelTopic(server, token, channelId, topicId) {
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}/detail?agent=${token}`,
|
||||
{ method: 'GET' });
|
||||
checkResponse(topic)
|
||||
return await topic.json()
|
||||
|
@ -1,4 +1,4 @@
|
||||
export function getChannelTopicAssetUrl(token, channelId, topicId, assetId) {
|
||||
return `/content/channels/${channelId}/topics/${topicId}/assets/${assetId}?agent=${token}`
|
||||
export function getChannelTopicAssetUrl(server, token, channelId, topicId, assetId) {
|
||||
return `https://${server}/content/channels/${channelId}/topics/${topicId}/assets/${assetId}?agent=${token}`
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function getChannelTopics(token, channelId, revision, count, begin, end) {
|
||||
export async function getChannelTopics(server, token, channelId, revision, count, begin, end) {
|
||||
let rev = ''
|
||||
if (revision != null) {
|
||||
rev = `&revision=${revision}`
|
||||
@ -17,7 +17,7 @@ export async function getChannelTopics(token, channelId, revision, count, begin,
|
||||
if (end != null) {
|
||||
edn = `&end=${end}`
|
||||
}
|
||||
let topics = await fetchWithTimeout(`/content/channels/${channelId}/topics?agent=${token}${rev}${cnt}${bgn}${edn}`,
|
||||
let topics = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?agent=${token}${rev}${cnt}${bgn}${edn}`,
|
||||
{ method: 'GET' });
|
||||
checkResponse(topics)
|
||||
return {
|
||||
|
@ -1,12 +1,7 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function getContactChannelTopic(server, token, channelId, topicId) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
let topic = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics/${topicId}/detail?contact=${token}`,
|
||||
let topic = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}/detail?contact=${token}`,
|
||||
{ method: 'GET' });
|
||||
checkResponse(topic)
|
||||
return await topic.json()
|
||||
|
@ -1,9 +1,4 @@
|
||||
export function getContactChannelTopicAssetUrl(server, token, channelId, topicId, assetId) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
return `${host}/content/channels/${channelId}/topics/${topicId}/assets/${assetId}?contact=${token}`
|
||||
return `https://${server}/content/channels/${channelId}/topics/${topicId}/assets/${assetId}?contact=${token}`
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,6 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function getContactChannelTopics(server, token, channelId, revision, count, begin, end) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
let rev = ''
|
||||
if (revision != null) {
|
||||
rev = `&revision=${revision}`
|
||||
@ -22,7 +17,7 @@ export async function getContactChannelTopics(server, token, channelId, revision
|
||||
if (end != null) {
|
||||
edn = `&end=${end}`
|
||||
}
|
||||
let topics = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics?contact=${token}${rev}${cnt}${bgn}${edn}`,
|
||||
let topics = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics?contact=${token}${rev}${cnt}${bgn}${edn}`,
|
||||
{ method: 'GET' });
|
||||
checkResponse(topics)
|
||||
return {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function removeChannel(token, channelId) {
|
||||
export async function removeChannel(server, token, channelId) {
|
||||
|
||||
let channel = await fetchWithTimeout(`/content/channels/${channelId}?agent=${token}`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}?agent=${token}`,
|
||||
{ method: 'DELETE' });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function removeChannelTopic(token, channelId, topicId) {
|
||||
export async function removeChannelTopic(server, token, channelId, topicId) {
|
||||
|
||||
let channel = await fetchWithTimeout(`/content/channels/${channelId}/topics/${topicId}?agent=${token}`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}?agent=${token}`,
|
||||
{ method: 'DELETE' });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -1,12 +1,7 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function removeContactChannel(server, token, channelId) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
let channel = await fetchWithTimeout(`${host}/content/channels/${channelId}?contact=${token}`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}?contact=${token}`,
|
||||
{ method: 'DELETE' });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -1,12 +1,7 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function removeContactChannelTopic(server, token, channelId, topicId) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
let channel = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics/${topicId}?contact=${token}`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}?contact=${token}`,
|
||||
{ method: 'DELETE' });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function setChannelSubject(token, channelId, subject ) {
|
||||
export async function setChannelSubject(server, token, channelId, subject ) {
|
||||
let data = { subject };
|
||||
let params = { dataType: 'superbasic', data: JSON.stringify(data) };
|
||||
let channel = await fetchWithTimeout(`/content/channels/${channelId}/subject?agent=${token}`, { method: 'PUT', body: JSON.stringify(params)} );
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/subject?agent=${token}`, { method: 'PUT', body: JSON.stringify(params)} );
|
||||
checkResponse(channel);
|
||||
return await channel.json();
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function setChannelTopicSubject(token, channelId, topicId, data) {
|
||||
export async function setChannelTopicSubject(server, token, channelId, topicId, data) {
|
||||
let subject = { data: JSON.stringify(data, (key, value) => {
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let channel = await fetchWithTimeout(`/content/channels/${channelId}/topics/${topicId}/subject?agent=${token}&confirm=true`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}/subject?agent=${token}&confirm=true`,
|
||||
{ method: 'PUT', body: JSON.stringify(subject) });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -1,16 +1,11 @@
|
||||
import { checkResponse, fetchWithTimeout } from './fetchUtil';
|
||||
|
||||
export async function setContactChannelTopicSubject(server, token, channelId, topicId, data) {
|
||||
let host = "";
|
||||
if (server) {
|
||||
host = `https://${server}`;
|
||||
}
|
||||
|
||||
let subject = { data: JSON.stringify(data, (key, value) => {
|
||||
if (value !== null) return value
|
||||
}), datatype: 'superbasictopic' };
|
||||
|
||||
let channel = await fetchWithTimeout(`${host}/content/channels/${channelId}/topics/${topicId}/subject?contact=${token}&confirm=true`,
|
||||
let channel = await fetchWithTimeout(`https://${server}/content/channels/${channelId}/topics/${topicId}/subject?contact=${token}&confirm=true`,
|
||||
{ method: 'PUT', body: JSON.stringify(subject) });
|
||||
checkResponse(channel);
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import { getCardProfile } from 'api/getCardProfile';
|
||||
import { getCardDetail } from 'api/getCardDetail';
|
||||
|
||||
import { getContactChannels } from 'api/getContactChannels';
|
||||
import { getContactChannelTopics } from 'api/getContactChannelTopics';
|
||||
import { getContactChannelDetail } from 'api/getContactChannelDetail';
|
||||
import { getContactChannelSummary } from 'api/getContactChannelSummary';
|
||||
import { getCardImageUrl } from 'api/getCardImageUrl';
|
||||
@ -18,6 +17,14 @@ import { setCardOpenMessage } from 'api/setCardOpenMessage';
|
||||
import { getCardCloseMessage } from 'api/getCardCloseMessage';
|
||||
import { setCardCloseMessage } from 'api/setCardCloseMessage';
|
||||
|
||||
import { getContactChannelTopic } from 'api/getContactChannelTopic';
|
||||
import { getContactChannelTopics } from 'api/getContactChannelTopics';
|
||||
import { getContactChannelTopicAssetUrl } from 'api/getContactChannelTopicAssetUrl';
|
||||
import { addContactChannelTopic } from 'api/addContactChannelTopic';
|
||||
import { setContactChannelTopicSubject } from 'api/setContactChannelTopicSubject';
|
||||
import { removeContactChannel } from 'api/removeContactChannel';
|
||||
import { removeContactChannelTopic } from 'api/removeContactChannelTopic';
|
||||
|
||||
export function useCardContext() {
|
||||
const [state, setState] = useState({
|
||||
cards: new Map(),
|
||||
@ -162,6 +169,17 @@ export function useCardContext() {
|
||||
}
|
||||
}
|
||||
}
|
||||
const setCardChannelSyncRevision = (cardId, channelId, revision) => {
|
||||
let card = cards.current.get(cardId);
|
||||
if (card) {
|
||||
let channel = card.channels.get(channelId);
|
||||
if (channel) {
|
||||
channel.syncRevision = revision;
|
||||
card.channels.set(channelId, channel);
|
||||
cards.current.set(cardId, card);
|
||||
}
|
||||
}
|
||||
}
|
||||
const clearCardChannel = (cardId, channelId) => {
|
||||
let card = cards.current.get(cardId);
|
||||
if (card) {
|
||||
@ -404,34 +422,46 @@ export function useCardContext() {
|
||||
await store.actions.clearCardItemBlocked(guid, cardId);
|
||||
updateState({ cards: cards.current });
|
||||
},
|
||||
getSyncRevision: async (cardId, channelId) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.getCardChannelItemSyncRevision(guid, cardId, channelId);
|
||||
},
|
||||
setSyncRevision: async (cardId, channelId, revision) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.setCardChannelItemSyncRevision(guid, cardId, channelId, revision);
|
||||
await store.actions.setCardChannelItemSyncRevision(guid, cardId, channelId, revision);
|
||||
setCardChannelSyncRevision(cardId, channelId, revision);
|
||||
updateState({ cards: cards.current });
|
||||
},
|
||||
getTopicItems: async (cardId, channelId) => {
|
||||
getChannelTopicItems: async (cardId, channelId) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.getCardChannelTopicItems(guid, cardId, channelId);
|
||||
},
|
||||
getTopicDeltaItems: async (cardId, channelId, revision) => {
|
||||
getChannelTopicDeltaItems: async (cardId, channelId, revision) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.getCardChannelTopicDeltaItems(guid, cardId, channelId, revision);
|
||||
},
|
||||
setTopicItem: async (cardId, channelId, topicId, channelRevision, topic) => {
|
||||
setChannelTopicItem: async (cardId, channelId, topicId, channelRevision, topic) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.setCardChannelTopicItem(guid, cardId, channelId, topicId, channelRevision, topic);
|
||||
},
|
||||
clearTopicItem: async (cardId, channelId, topicId) => {
|
||||
clearChannelTopicItem: async (cardId, channelId, topicId) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.clearCardChannelTopicItem(guid, cardId, channelId, topicId);
|
||||
},
|
||||
clearTopicItems: async (cardId, channelId) => {
|
||||
clearChannelTopicItems: async (cardId, channelId) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.clearCardChannelTopicItems(guid, cardId, channelId);
|
||||
},
|
||||
getChannelTopic: async (cardId, channelId, topicId) => {
|
||||
},
|
||||
getChannelTopics: async (cardId, channelId) => {
|
||||
},
|
||||
getChannelTopicAssetUrl: async (cardId, channelId, assetId) => {
|
||||
},
|
||||
addChannelTopic: async (cardId, channelId, message, assets) => {
|
||||
},
|
||||
setChannelTopicSubject: async (cardId, channelId, topicId, data) => {
|
||||
},
|
||||
removeChannel: async (cardId, channelId) => {
|
||||
},
|
||||
removeChannelTopic: async (cardId, channelId, topicId) => {
|
||||
},
|
||||
}
|
||||
|
||||
return { state, actions }
|
||||
|
@ -3,6 +3,17 @@ import { StoreContext } from 'context/StoreContext';
|
||||
import { getChannels } from 'api/getChannels';
|
||||
import { getChannelDetail } from 'api/getChannelDetail';
|
||||
import { getChannelSummary } from 'api/getChannelSummary';
|
||||
import { addChannel } from 'api/addChannel';
|
||||
import { removeChannel } from 'api/removeChannel';
|
||||
import { removeChannelTopic } from 'api/removeChannelTopic';
|
||||
import { setChannelTopicSubject } from 'api/setChannelTopicSubject';
|
||||
import { addChannelTopic } from 'api/addChannelTopic';
|
||||
import { getChannelTopics } from 'api/getChannelTopics';
|
||||
import { getChannelTopic } from 'api/getChannelTopic';
|
||||
import { getChannelTopicAssetUrl } from 'api/getChannelTopicAssetUrl';
|
||||
import { setChannelSubject } from 'api/setChannelSubject';
|
||||
import { setChannelCard } from 'api/setChannelCard';
|
||||
import { clearChannelCard } from 'api/clearChannelCard';
|
||||
|
||||
export function useChannelContext() {
|
||||
const [state, setState] = useState({
|
||||
@ -63,6 +74,13 @@ export function useChannelContext() {
|
||||
channels.current.set(channelId, channel);
|
||||
}
|
||||
}
|
||||
const setChannelSyncRevision = (channelId, revision) => {
|
||||
let channel = channels.current.get(channelId);
|
||||
if (channel) {
|
||||
channel.syncRevision = revision;
|
||||
channels.current.set(channelId, channel);
|
||||
}
|
||||
}
|
||||
|
||||
const sync = async () => {
|
||||
|
||||
@ -156,13 +174,11 @@ export function useChannelContext() {
|
||||
setChannelReadRevision(channelId, rev);
|
||||
updateState({ channels: channels.current });
|
||||
},
|
||||
getSyncRevision: async (channelId) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.getChannelItemSyncRevision(guid, channelId);
|
||||
},
|
||||
setSyncRevision: async (channelId, revision) => {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.setChannelItemSyncRevision(guid, channelId, revision);
|
||||
await store.actions.setChannelItemSyncRevision(guid, channelId, revision);
|
||||
setChannelSyncRevision(channelId, revision);
|
||||
updateState({ channels: channels.current });
|
||||
},
|
||||
getTopicItems: async (channelId) => {
|
||||
const { guid } = session.current;
|
||||
@ -184,7 +200,20 @@ export function useChannelContext() {
|
||||
const { guid } = session.current;
|
||||
return await store.actions.clearChannelTopicItems(guid, channelId);
|
||||
},
|
||||
|
||||
getTopic: async (channelId, topicId) => {
|
||||
},
|
||||
getTopics: async (channelId) => {
|
||||
},
|
||||
getTopicAssetUrl: async (channelId, assetId) => {
|
||||
},
|
||||
addTopic: async (channelId, message, assets) => {
|
||||
},
|
||||
setTopicSubject: async (channelId, topicId, data) => {
|
||||
},
|
||||
remove: async (channelId) => {
|
||||
},
|
||||
removeTopic: async (channelId, topicId) => {
|
||||
},
|
||||
}
|
||||
|
||||
return { state, actions }
|
||||
|
@ -17,31 +17,99 @@ export function useConversationContext() {
|
||||
const profile = useContext(ProfileContext);
|
||||
const topics = useRef(new Map());
|
||||
const revision = useRef(0);
|
||||
const detailRevision = useRef(0);
|
||||
const syncRevision = useRef(0);
|
||||
const syncing = useRef(false);
|
||||
const cardId = useRef(null);
|
||||
const channelId = useRef(null);
|
||||
const conversationId = useRef(null);
|
||||
const setView = useRef(0);
|
||||
|
||||
const updateState = (value) => {
|
||||
setState((s) => ({ ...s, ...value }))
|
||||
}
|
||||
|
||||
const getTopicItems = async (cardId, channelId) => {
|
||||
if (cardId) {
|
||||
return await card.actions.getChannelTopicItems(cardId, channelId);
|
||||
}
|
||||
return await channel.actions.getTopicItems(channelId);
|
||||
}
|
||||
const getTopicDeltaItems = async (cardId, channelId, revision) => {
|
||||
if (cardId) {
|
||||
return await card.actions.getChannelTopicDeltaItems(cardId, channelId, revision);
|
||||
}
|
||||
return await channel.actions.getTopicDeltaItems(channelId, revision);
|
||||
}
|
||||
const setTopicItem = async (cardId, channelId, revision, topic) => {
|
||||
if (cardId) {
|
||||
return await card.actions.setChannelTopicItem(cardId, channelId, revision, topic);
|
||||
}
|
||||
return await channel.actions.setTopicItem(channelId, revision, topic);
|
||||
}
|
||||
const clearTopicItem = async (cardId, channelId, topicId) => {
|
||||
if (cardId) {
|
||||
return await card.actions.clearChannelTopicItem(cardId, channelId, topicId);
|
||||
}
|
||||
return await channel.actions.clearTopicItem(channelId, topicId);
|
||||
}
|
||||
const getTopic = async (cardId, channelId, topicId) => {
|
||||
}
|
||||
const getTopics = async (cardId, channelId) => {
|
||||
}
|
||||
const getTopicAssetUrl = async (cardId, channelId, assetId) => {
|
||||
}
|
||||
const addTopic = async (cardId, channelId, message, asssets) => {
|
||||
}
|
||||
const setTopicSubject = async (cardId, channelId, topicId, data) => {
|
||||
}
|
||||
const removeChannel = async (cardId, channelId) => {
|
||||
}
|
||||
const removeChannelTopic = async (cardId, channelId, topicId) => {
|
||||
}
|
||||
|
||||
const sync = async () => {
|
||||
const curView = setView.current;
|
||||
const item = getChannel(cardId.current, channelId.current);
|
||||
if (!syncing.current && item?.revision !== revision.current) {
|
||||
if (!syncing.current && conversationId.current) {
|
||||
const { cardId, channelId } = conversationId.current;
|
||||
const item = getChannel(cardId, channelId);
|
||||
if (item && (item.revision !== revision.current || item.syncRevision != syncRevision.current)) {
|
||||
syncing.current = true;
|
||||
|
||||
// stuff
|
||||
setChannel(item);
|
||||
|
||||
// set channel details
|
||||
if (detailRevision.current != item.detailRevision) {
|
||||
if (curView === setView.current) {
|
||||
revision.current = item?.revision;
|
||||
setChannel(item);
|
||||
detailRevision.current = item.detailRevision;
|
||||
}
|
||||
}
|
||||
|
||||
// set channel topics
|
||||
if (syncRevision.current != item.syncRevision) {
|
||||
if (syncRevision.current) {
|
||||
const topics = getTopicDeltaItems(cardId, channelId);
|
||||
}
|
||||
else {
|
||||
const topics = getTopicItems(cardId, channelId);
|
||||
}
|
||||
if (curView === setView.current) {
|
||||
syncRevision.current = item.syncRevision;
|
||||
}
|
||||
}
|
||||
|
||||
// sync from server to store
|
||||
if (item.topicRevision !== item.syncRevision) {
|
||||
console.log("pull latest topics");
|
||||
}
|
||||
|
||||
// update revision
|
||||
if (curView === setView.current) {
|
||||
revision.current = item.revision;
|
||||
}
|
||||
|
||||
syncing.current = false;
|
||||
sync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getCard = (guid) => {
|
||||
let contact = null
|
||||
@ -134,12 +202,20 @@ export function useConversationContext() {
|
||||
|
||||
const actions = {
|
||||
setChannel: (channel) => {
|
||||
if (channel.cardId !== cardId.current || channel.channelId !== channelId.current) {
|
||||
if (channel == null) {
|
||||
setView.current++;
|
||||
revision.current = 0;
|
||||
conversationId.current = null;
|
||||
updateState({ subject: null, logo: null, contacts: [], topics: [] });
|
||||
}
|
||||
else if (channel.cardId !== conversationId.current?.cardId || channel.channelId !== conversationId.current?.channelId) {
|
||||
setView.current++;
|
||||
conversationId.current = channel;
|
||||
updateState({ subject: null, logo: null, contacts: [], topics: [] });
|
||||
|
||||
revision.current = null;
|
||||
detailRevision.current = null;
|
||||
syncRevision.current = null;
|
||||
topics.current = new Map();
|
||||
channelId.current = channel.channelId;
|
||||
cardId.current = channel.cardId;
|
||||
sync();
|
||||
}
|
||||
},
|
||||
|
@ -186,9 +186,6 @@ export function useStoreContext() {
|
||||
setChannelItemReadRevision: async (guid, channelId, revision) => {
|
||||
await db.current.executeSql(`UPDATE channel_${guid} set read_revision=? where channel_id=?`, [revision, channelId]);
|
||||
},
|
||||
getChannelItemSyncRevision: async (guid, cardId, channelId) => {
|
||||
return getValue(`SELECT sync_revision as value FROM channel_${guid} where channel_id=?`, [channelId]);
|
||||
},
|
||||
setChannelItemSyncRevision: async (guid, channelId, revision) => {
|
||||
await db.current.executeSql(`UPDATE channel_${guid} set sync_revision=? where channel_id=?`, [revision, channelId]);
|
||||
},
|
||||
@ -210,13 +207,14 @@ export function useStoreContext() {
|
||||
};
|
||||
},
|
||||
getChannelItems: async (guid) => {
|
||||
const values = await getAppValues(db.current, `SELECT channel_id, read_revision, revision, detail_revision, topic_revision, detail, summary FROM channel_${guid}`, []);
|
||||
const values = await getAppValues(db.current, `SELECT channel_id, read_revision, revision, sync_revision, detail_revision, topic_revision, detail, summary FROM channel_${guid}`, []);
|
||||
return values.map(channel => ({
|
||||
channelId: channel.channel_id,
|
||||
revision: channel.revision,
|
||||
readRevision: channel.read_revision,
|
||||
detailRevision: channel.detail_revision,
|
||||
topicRevision: channel.topic_revision,
|
||||
syncRevsion: channel.sync_revision,
|
||||
detail: decodeObject(channel.detail),
|
||||
summary: decodeObject(channel.summary),
|
||||
}));
|
||||
@ -265,9 +263,6 @@ export function useStoreContext() {
|
||||
setCardChannelItemReadRevision: async (guid, cardId, channelId, revision) => {
|
||||
await db.current.executeSql(`UPDATE card_channel_${guid} set read_revision=? where card_id=? and channel_id=?`, [revision, cardId, channelId]);
|
||||
},
|
||||
getCardChannelItemSyncRevision: async (guid, cardId, channelId) => {
|
||||
return getValue(`SELECT sync_revision as value FROM card_channel_${guid} where card_id=? and channel_id=?`, [cardId, channelId]);
|
||||
},
|
||||
setCardChannelItemSyncRevision: async (guid, cardId, channelId, revision) => {
|
||||
await db.current.executeSql(`UPDATE card_channel_${guid} set sync_revision=? where card_id=? and channel_id=?`, [revision, cardId, channelId]);
|
||||
},
|
||||
@ -289,7 +284,7 @@ export function useStoreContext() {
|
||||
};
|
||||
},
|
||||
getCardChannelItems: async (guid) => {
|
||||
const values = await getAppValues(db.current, `SELECT card_id, channel_id, read_revision, revision, blocked, detail_revision, topic_revision, detail, summary FROM card_channel_${guid}`, []);
|
||||
const values = await getAppValues(db.current, `SELECT card_id, channel_id, read_revision, sync_revision, revision, blocked, detail_revision, topic_revision, detail, summary FROM card_channel_${guid}`, []);
|
||||
return values.map(channel => ({
|
||||
cardId: channel.card_id,
|
||||
channelId: channel.channel_id,
|
||||
@ -297,6 +292,7 @@ export function useStoreContext() {
|
||||
readRevision: channel.read_revision,
|
||||
detailRevision: channel.detail_revision,
|
||||
topicRevision: channel.topic_revision,
|
||||
syncRevision: channel.sync_revision,
|
||||
detail: decodeObject(channel.detail),
|
||||
summary: decodeObject(channel.summary),
|
||||
blocked: channel.blocked,
|
||||
@ -388,11 +384,4 @@ async function getAppValues(sql: SQLite.SQLiteDatabase, query: string, params) {
|
||||
return values;
|
||||
}
|
||||
|
||||
async function getValue(sql: SQLite.SQLiteDatabase, query: string, params) {
|
||||
const res = await sql.executeSql(query, params);
|
||||
if (hasResult(res)) {
|
||||
return res[0].rows.item(0).value
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { View, TouchableOpacity, Text } from 'react-native';
|
||||
import { useState, useEffect } from 'react';
|
||||
import { useState, useEffect, useContext } from 'react';
|
||||
import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
|
||||
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
|
||||
import { createDrawerNavigator } from '@react-navigation/drawer';
|
||||
@ -21,6 +21,7 @@ import { Welcome } from './welcome/Welcome';
|
||||
import { ChannelsTitle, ChannelsBody, Channels } from './channels/Channels';
|
||||
import { useChannels } from './channels/useChannels.hook';
|
||||
import { CommonActions } from '@react-navigation/native';
|
||||
import { ConversationContext } from 'context/ConversationContext';
|
||||
|
||||
const ConversationStack = createStackNavigator();
|
||||
const ProfileStack = createStackNavigator();
|
||||
@ -77,6 +78,11 @@ export function Session() {
|
||||
}
|
||||
|
||||
const channels = useChannels();
|
||||
const conversation = useContext(ConversationContext);
|
||||
|
||||
useEffect(() => {
|
||||
conversation.actions.setChannel(selected);
|
||||
}, [selected]);
|
||||
|
||||
return (
|
||||
<ConversationStack.Navigator screenOptions={({ route }) => ({ headerShown: true, headerTintColor: Colors.primary })}>
|
||||
|
@ -15,10 +15,6 @@ export function useConversation(cardId, channelId) {
|
||||
setState((s) => ({ ...s, ...value }));
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
conversation.actions.setChannel({ cardId, channelId });
|
||||
}, [cardId, channelId]);
|
||||
|
||||
useEffect(() => {
|
||||
const { topics, subject, logo } = conversation.state;
|
||||
updateState({ topics, subject, logo });
|
||||
|
Loading…
Reference in New Issue
Block a user