@amityco/ts-sdk 0.0.1-beta.38 → 0.0.1-beta.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@types/core/model.d.ts +2 -0
- package/dist/@types/core/model.d.ts.map +1 -1
- package/dist/@types/domains/channel.d.ts +2 -2
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/@types/domains/feed.d.ts +1 -2
- package/dist/@types/domains/feed.d.ts.map +1 -1
- package/dist/@types/domains/message.d.ts +1 -1
- package/dist/@types/domains/message.d.ts.map +1 -1
- package/dist/@types/domains/post.d.ts +1 -1
- package/dist/@types/domains/post.d.ts.map +1 -1
- package/dist/@types/domains/user.d.ts +8 -0
- package/dist/@types/domains/user.d.ts.map +1 -1
- package/dist/channel/observers/liveChannels.d.ts.map +1 -1
- package/dist/client/api/connectClient.d.ts.map +1 -1
- package/dist/core/model/idResolvers.d.ts.map +1 -1
- package/dist/core/model/identifyModel.d.ts.map +1 -1
- package/dist/core/model/index.d.ts.map +1 -1
- package/dist/core/query/filtering.d.ts +10 -0
- package/dist/core/query/filtering.d.ts.map +1 -1
- package/dist/core/query/paging.d.ts +2 -2
- package/dist/core/query/paging.d.ts.map +1 -1
- package/dist/core/query/tests/paging.test.d.ts +2 -0
- package/dist/core/query/tests/paging.test.d.ts.map +1 -0
- package/dist/index.cjs.js +180 -71
- package/dist/index.esm.js +178 -71
- package/dist/index.umd.js +4 -4
- package/dist/message/api/queryMessages.d.ts +2 -2
- package/dist/message/api/queryMessages.d.ts.map +1 -1
- package/dist/post/observers/livePosts.d.ts +2 -2
- package/dist/post/observers/livePosts.d.ts.map +1 -1
- package/dist/report/api/createReport.d.ts.map +1 -1
- package/dist/report/api/deleteReport.d.ts.map +1 -1
- package/dist/report/api/tests/createReport.test.d.ts +2 -0
- package/dist/report/api/tests/createReport.test.d.ts.map +1 -0
- package/dist/report/api/tests/deleteReport.test.d.ts +2 -0
- package/dist/report/api/tests/deleteReport.test.d.ts.map +1 -0
- package/dist/user/api/queryUsers.d.ts +1 -6
- package/dist/user/api/queryUsers.d.ts.map +1 -1
- package/dist/user/observers/index.d.ts +1 -0
- package/dist/user/observers/index.d.ts.map +1 -1
- package/dist/user/observers/liveUsers.d.ts +18 -0
- package/dist/user/observers/liveUsers.d.ts.map +1 -0
- package/dist/user/observers/tests/liveUsers.test.d.ts +2 -0
- package/dist/user/observers/tests/liveUsers.test.d.ts.map +1 -0
- package/dist/utils/liveObject.d.ts +1 -1
- package/dist/utils/liveObject.d.ts.map +1 -1
- package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
- package/dist/utils/tests/dummy/feed.d.ts +21 -0
- package/dist/utils/tests/dummy/feed.d.ts.map +1 -0
- package/dist/utils/tests/dummy/index.d.ts +1 -0
- package/dist/utils/tests/dummy/index.d.ts.map +1 -1
- package/dist/utils/tests/dummy/post.d.ts +9 -0
- package/dist/utils/tests/dummy/post.d.ts.map +1 -1
- package/dist/utils/tests/dummy/user.d.ts +63 -0
- package/dist/utils/tests/dummy/user.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/model.ts +4 -0
- package/src/@types/domains/channel.ts +2 -2
- package/src/@types/domains/feed.ts +1 -3
- package/src/@types/domains/message.ts +4 -1
- package/src/@types/domains/post.ts +1 -1
- package/src/@types/domains/user.ts +14 -0
- package/src/cache/api/tests/ingestInCache.test.ts +2 -0
- package/src/channel/observers/liveChannels.ts +29 -24
- package/src/client/api/connectClient.ts +0 -2
- package/src/core/model/idResolvers.ts +2 -0
- package/src/core/model/identifyModel.ts +1 -0
- package/src/core/model/index.ts +2 -0
- package/src/core/query/filtering.ts +33 -3
- package/src/core/query/paging.ts +5 -4
- package/src/core/query/tests/paging.test.ts +66 -0
- package/src/message/api/queryMessages.ts +7 -7
- package/src/message/api/tests/queryMessages.test.ts +6 -6
- package/src/message/tests/observers/liveMessages.test.ts +4 -4
- package/src/post/observers/livePosts.ts +14 -22
- package/src/post/observers/tests/livePosts.test.ts +65 -8
- package/src/report/api/createReport.ts +1 -6
- package/src/report/api/deleteReport.ts +2 -6
- package/src/report/api/tests/createReport.test.ts +93 -0
- package/src/report/api/tests/deleteReport.test.ts +93 -0
- package/src/user/api/queryUsers.ts +1 -6
- package/src/user/observers/index.ts +1 -0
- package/src/user/observers/liveUsers.ts +162 -0
- package/src/user/observers/tests/liveUsers.test.ts +202 -0
- package/src/utils/tests/dummy/channel.ts +1 -0
- package/src/utils/tests/dummy/feed.ts +13 -0
- package/src/utils/tests/dummy/index.ts +2 -0
- package/src/utils/tests/dummy/post.ts +6 -2
- package/src/utils/tests/dummy/user.ts +36 -0
package/dist/index.esm.js
CHANGED
|
@@ -163,14 +163,14 @@ const partialMatch = (predicate, candidate) => {
|
|
|
163
163
|
const checkIfShouldGoesToTombstone = (errorCode) => [400400 /* Amity.ServerError.ITEM_NOT_FOUND */, 400300 /* Amity.ServerError.FORBIDDEN */].includes(errorCode);
|
|
164
164
|
|
|
165
165
|
/**
|
|
166
|
-
* Type guard to find if the a given decoded backend token uses "skip
|
|
166
|
+
* Type guard to find if the a given decoded backend token uses "skip" pagination style
|
|
167
167
|
*
|
|
168
168
|
* @param json any json object as extracted from the backend
|
|
169
169
|
* @returns success boolean if the token has either "skip" or "limit" props
|
|
170
170
|
*
|
|
171
171
|
* @hidden
|
|
172
172
|
*/
|
|
173
|
-
const
|
|
173
|
+
const isSkip = (json) => ['skip'].some(prop => prop in json);
|
|
174
174
|
/**
|
|
175
175
|
* Type guard to find if the a given decoded backend token uses "after/before" pagination style
|
|
176
176
|
*
|
|
@@ -270,7 +270,7 @@ const toPage = (token) => {
|
|
|
270
270
|
return undefined;
|
|
271
271
|
// don't try catch, let it throw
|
|
272
272
|
const json = JSON.parse(decode(token));
|
|
273
|
-
if (
|
|
273
|
+
if (isSkip(json)) {
|
|
274
274
|
return {
|
|
275
275
|
after: json.skip,
|
|
276
276
|
limit: json.limit,
|
|
@@ -497,6 +497,7 @@ const idResolvers = {
|
|
|
497
497
|
stream: ({ streamId }) => streamId,
|
|
498
498
|
follow: ({ from, to }) => `${from}#${to}`,
|
|
499
499
|
followCount: ({ userId }) => userId,
|
|
500
|
+
feed: ({ targetId, feedId }) => `${targetId}#${feedId}`,
|
|
500
501
|
};
|
|
501
502
|
/**
|
|
502
503
|
* Retrieve the id resolver matching a domain name
|
|
@@ -534,6 +535,7 @@ const CRITERIAS = {
|
|
|
534
535
|
stream: ['streamId'],
|
|
535
536
|
follow: ['from', 'to'],
|
|
536
537
|
followCount: ['userId', 'followerCount'],
|
|
538
|
+
feed: ['feedId', 'feedType'],
|
|
537
539
|
};
|
|
538
540
|
/** @hidden */
|
|
539
541
|
const hasKeys = (object, needles) => {
|
|
@@ -594,6 +596,7 @@ const PAYLOAD2MODEL = {
|
|
|
594
596
|
videoStreamings: 'stream',
|
|
595
597
|
follows: 'follow',
|
|
596
598
|
followCounts: 'followCount',
|
|
599
|
+
feeds: 'feed',
|
|
597
600
|
};
|
|
598
601
|
/** hidden */
|
|
599
602
|
const hasUpdates = (prevData, nextData) => {
|
|
@@ -1060,10 +1063,36 @@ const filterByChannelMembership = (collection, membership, userId) => {
|
|
|
1060
1063
|
'get',
|
|
1061
1064
|
channelUserCacheKey,
|
|
1062
1065
|
])) === null || _a === void 0 ? void 0 : _a.data;
|
|
1063
|
-
if (membership === 'member'
|
|
1064
|
-
return
|
|
1066
|
+
if (membership === 'member') {
|
|
1067
|
+
return channelUser && channelUser.membership !== 'none';
|
|
1065
1068
|
}
|
|
1066
|
-
|
|
1069
|
+
// only membership value remainging is 'notMember'
|
|
1070
|
+
return !channelUser || channelUser.membership === 'none';
|
|
1071
|
+
});
|
|
1072
|
+
};
|
|
1073
|
+
/**
|
|
1074
|
+
* Filter a channel collection by membership of the userId
|
|
1075
|
+
*
|
|
1076
|
+
* @param collection the channel collection to filter
|
|
1077
|
+
* @param feedType to be filtered by
|
|
1078
|
+
* @returns a filtered collection with items only matching the criteria
|
|
1079
|
+
*
|
|
1080
|
+
* @hidden
|
|
1081
|
+
*/
|
|
1082
|
+
const filterByFeedType = (collection, feedType) => {
|
|
1083
|
+
/*
|
|
1084
|
+
* It is possible that the targetId & feedId are the same for most of the posts
|
|
1085
|
+
* But since cache is in-memory, i've avoided memoizing, to avoid premature
|
|
1086
|
+
* optimization. Can be revisited if performance issues arise
|
|
1087
|
+
*/
|
|
1088
|
+
return collection.filter(({ targetId, feedId }) => {
|
|
1089
|
+
var _a;
|
|
1090
|
+
const feed = (_a = pullFromCache([
|
|
1091
|
+
'feed',
|
|
1092
|
+
'get',
|
|
1093
|
+
getResolver('feed')({ targetId, feedId }),
|
|
1094
|
+
])) === null || _a === void 0 ? void 0 : _a.data;
|
|
1095
|
+
return feed && feed.feedType === feedType;
|
|
1067
1096
|
});
|
|
1068
1097
|
};
|
|
1069
1098
|
|
|
@@ -20806,7 +20835,7 @@ const connectClient = async (params, sessionHandler, config) => {
|
|
|
20806
20835
|
setSessionState(state);
|
|
20807
20836
|
disconnectClient();
|
|
20808
20837
|
subscriptions.forEach(fn => fn());
|
|
20809
|
-
})
|
|
20838
|
+
}));
|
|
20810
20839
|
return client.ws.connected;
|
|
20811
20840
|
};
|
|
20812
20841
|
|
|
@@ -21495,6 +21524,101 @@ const liveUser = (userId, callback) => {
|
|
|
21495
21524
|
]);
|
|
21496
21525
|
};
|
|
21497
21526
|
|
|
21527
|
+
/**
|
|
21528
|
+
* ```js
|
|
21529
|
+
* import { liveUsers } from '@amityco/ts-sdk'
|
|
21530
|
+
*
|
|
21531
|
+
* let users = []
|
|
21532
|
+
* const unsub = liveUsers({}, response => merge(users, response.data))
|
|
21533
|
+
* ```
|
|
21534
|
+
*
|
|
21535
|
+
* Observe all mutations on a list of {@link Amity.User}s
|
|
21536
|
+
*
|
|
21537
|
+
* @param params for querying users
|
|
21538
|
+
* @param callback the function to call when new data are available
|
|
21539
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the users
|
|
21540
|
+
*
|
|
21541
|
+
* @category Category Live Collection
|
|
21542
|
+
*/
|
|
21543
|
+
const liveUsers = (params, callback, config) => {
|
|
21544
|
+
const { log, cache } = getActiveClient();
|
|
21545
|
+
if (!cache) {
|
|
21546
|
+
console.log(ENABLE_CACHE_MESSAGE);
|
|
21547
|
+
}
|
|
21548
|
+
const timestamp = Date.now();
|
|
21549
|
+
log(`liveUsers(tmpid: ${timestamp}) > listen`);
|
|
21550
|
+
const { limit: queryLimit } = params, queryParams = __rest(params, ["limit"]);
|
|
21551
|
+
const limit = queryLimit !== null && queryLimit !== void 0 ? queryLimit : COLLECTION_DEFAULT_PAGINATION_LIMIT;
|
|
21552
|
+
const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config !== null && config !== void 0 ? config : {};
|
|
21553
|
+
const disposers = [];
|
|
21554
|
+
const cacheKey = ['user', 'collection', {}];
|
|
21555
|
+
const responder = (data) => {
|
|
21556
|
+
var _a, _b;
|
|
21557
|
+
let users = (_a = data.data
|
|
21558
|
+
.map(userId => pullFromCache(['user', 'get', userId]))
|
|
21559
|
+
.filter(Boolean)
|
|
21560
|
+
.map(({ data }) => data)) !== null && _a !== void 0 ? _a : [];
|
|
21561
|
+
users = filterByPropEquality(users, 'displayName', params.displayName);
|
|
21562
|
+
switch (params.sortBy) {
|
|
21563
|
+
case 'firstCreated':
|
|
21564
|
+
users = users.sort(sortByFirstCreated);
|
|
21565
|
+
break;
|
|
21566
|
+
case 'lastCreated':
|
|
21567
|
+
users = users.sort(sortByLastCreated);
|
|
21568
|
+
break;
|
|
21569
|
+
default:
|
|
21570
|
+
users = users
|
|
21571
|
+
// this needs to be aligned with the backend data type
|
|
21572
|
+
.map(u => (u.displayName ? u : Object.assign(Object.assign({}, u), { displayName: '' })))
|
|
21573
|
+
// @ts-ignore
|
|
21574
|
+
.sort(sortByDisplayName);
|
|
21575
|
+
}
|
|
21576
|
+
callback({
|
|
21577
|
+
onNextPage: onFetch,
|
|
21578
|
+
data: users,
|
|
21579
|
+
hasNextPage: !!((_b = data.params) === null || _b === void 0 ? void 0 : _b.page),
|
|
21580
|
+
loading: data.loading,
|
|
21581
|
+
error: data.error,
|
|
21582
|
+
});
|
|
21583
|
+
};
|
|
21584
|
+
const realtimeRouter = (_) => (user) => {
|
|
21585
|
+
var _a;
|
|
21586
|
+
const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
21587
|
+
if (!collection)
|
|
21588
|
+
return;
|
|
21589
|
+
collection.data = [...new Set([user.userId, ...collection.data])];
|
|
21590
|
+
pushToCache(cacheKey, collection);
|
|
21591
|
+
responder(collection);
|
|
21592
|
+
};
|
|
21593
|
+
const onFetch = () => {
|
|
21594
|
+
var _a, _b, _c;
|
|
21595
|
+
const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
21596
|
+
const users = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
|
|
21597
|
+
if (users.length > 0 && !(collection === null || collection === void 0 ? void 0 : collection.params.page))
|
|
21598
|
+
return;
|
|
21599
|
+
const query = createQuery(queryUsers, Object.assign(Object.assign({}, queryParams), { page: (_c = collection === null || collection === void 0 ? void 0 : collection.params.page) !== null && _c !== void 0 ? _c : { limit } }));
|
|
21600
|
+
runQuery(query, ({ data: result, error, loading, nextPage: page }) => {
|
|
21601
|
+
const data = {
|
|
21602
|
+
loading,
|
|
21603
|
+
error,
|
|
21604
|
+
params: { page },
|
|
21605
|
+
data: users,
|
|
21606
|
+
};
|
|
21607
|
+
if (result) {
|
|
21608
|
+
data.data = [...new Set([...users, ...result.map(getResolver('user'))])];
|
|
21609
|
+
}
|
|
21610
|
+
pushToCache(cacheKey, data);
|
|
21611
|
+
responder(data);
|
|
21612
|
+
}, queryOptions(policy));
|
|
21613
|
+
};
|
|
21614
|
+
disposers.push(onUserUpdated(realtimeRouter()), onUserDeleted(realtimeRouter()), onUserFlagged(realtimeRouter()), onUserUnflagged(realtimeRouter()), onUserFlagCleared(realtimeRouter()));
|
|
21615
|
+
onFetch();
|
|
21616
|
+
return () => {
|
|
21617
|
+
log(`liveUsers(tmpid: ${timestamp}) > dispose`);
|
|
21618
|
+
disposers.forEach(fn => fn());
|
|
21619
|
+
};
|
|
21620
|
+
};
|
|
21621
|
+
|
|
21498
21622
|
/**
|
|
21499
21623
|
* ```js
|
|
21500
21624
|
* import { observeUser } from '@amityco/ts-sdk'
|
|
@@ -22176,8 +22300,8 @@ const queryMessages = async (query) => {
|
|
|
22176
22300
|
pushToCache(cacheKey, { messages: messages.map(getResolver('message')), paging });
|
|
22177
22301
|
}
|
|
22178
22302
|
fireEvent('local.message.fetched', { messages });
|
|
22179
|
-
const nextPage =
|
|
22180
|
-
const prevPage =
|
|
22303
|
+
const nextPage = toPageRaw(paging.next);
|
|
22304
|
+
const prevPage = toPageRaw(paging.previous);
|
|
22181
22305
|
return { data: messages, cachedAt, prevPage, nextPage };
|
|
22182
22306
|
};
|
|
22183
22307
|
/**
|
|
@@ -22208,8 +22332,8 @@ queryMessages.locally = (query) => {
|
|
|
22208
22332
|
.map(messageId => pullFromCache(['message', 'get', messageId]))
|
|
22209
22333
|
.filter(Boolean)
|
|
22210
22334
|
.map(({ data }) => data);
|
|
22211
|
-
const prevPage =
|
|
22212
|
-
const nextPage =
|
|
22335
|
+
const prevPage = toPageRaw(data === null || data === void 0 ? void 0 : data.paging.previous);
|
|
22336
|
+
const nextPage = toPageRaw(data === null || data === void 0 ? void 0 : data.paging.next);
|
|
22213
22337
|
return messages.length === ((_b = data === null || data === void 0 ? void 0 : data.messages) === null || _b === void 0 ? void 0 : _b.length)
|
|
22214
22338
|
? { data: messages, cachedAt, prevPage, nextPage }
|
|
22215
22339
|
: undefined;
|
|
@@ -24854,13 +24978,7 @@ const createReport = async (referenceType, referenceId) => {
|
|
|
24854
24978
|
const { data } = await client.http.post(getAPIUrl());
|
|
24855
24979
|
if (client.cache)
|
|
24856
24980
|
ingestInCache(referenceType === 'message' ? prepareMessagePayload(data) : data);
|
|
24857
|
-
|
|
24858
|
-
fireEvent('message.flagged', data);
|
|
24859
|
-
}
|
|
24860
|
-
else {
|
|
24861
|
-
// @ts-ignore
|
|
24862
|
-
fireEvent(`${referenceType}.flagged`, data);
|
|
24863
|
-
}
|
|
24981
|
+
fireEvent(`${referenceType}.flagged`, data);
|
|
24864
24982
|
return !!data;
|
|
24865
24983
|
};
|
|
24866
24984
|
|
|
@@ -24893,13 +25011,8 @@ const deleteReport = async (referenceType, referenceId) => {
|
|
|
24893
25011
|
const { data } = await client.http.delete(getAPIUrl());
|
|
24894
25012
|
if (client.cache)
|
|
24895
25013
|
ingestInCache(referenceType === 'message' ? prepareMessagePayload(data) : data);
|
|
24896
|
-
|
|
24897
|
-
|
|
24898
|
-
}
|
|
24899
|
-
else {
|
|
24900
|
-
// @ts-ignore
|
|
24901
|
-
fireEvent(`${referenceType}.unflagged`, data);
|
|
24902
|
-
}
|
|
25014
|
+
// @ts-ignore
|
|
25015
|
+
fireEvent(`${referenceType}.unflagged`, data);
|
|
24903
25016
|
return !!data;
|
|
24904
25017
|
};
|
|
24905
25018
|
|
|
@@ -26341,22 +26454,29 @@ const liveChannels = (params, callback, config) => {
|
|
|
26341
26454
|
if (params.membership && userId) {
|
|
26342
26455
|
channels = filterByChannelMembership(channels, params.membership, userId);
|
|
26343
26456
|
}
|
|
26344
|
-
|
|
26345
|
-
|
|
26346
|
-
|
|
26347
|
-
|
|
26348
|
-
|
|
26349
|
-
|
|
26350
|
-
|
|
26351
|
-
|
|
26352
|
-
|
|
26353
|
-
|
|
26354
|
-
|
|
26355
|
-
|
|
26356
|
-
|
|
26357
|
-
|
|
26358
|
-
|
|
26359
|
-
|
|
26457
|
+
switch (params.sortBy) {
|
|
26458
|
+
case 'firstCreated':
|
|
26459
|
+
channels = channels.sort(sortByFirstCreated);
|
|
26460
|
+
break;
|
|
26461
|
+
case 'lastCreated':
|
|
26462
|
+
channels = channels.sort(sortByLastCreated);
|
|
26463
|
+
break;
|
|
26464
|
+
case 'displayName':
|
|
26465
|
+
/*
|
|
26466
|
+
* The server returns channels with empty | null displayName's first before
|
|
26467
|
+
* returning sorted list of channels with displayNames
|
|
26468
|
+
*
|
|
26469
|
+
* This section needs to be updated as displayNames can be null as well
|
|
26470
|
+
*/
|
|
26471
|
+
channels = channels
|
|
26472
|
+
// this needs to be aligned with the backend data type
|
|
26473
|
+
.map(c => (c.displayName ? c : Object.assign(Object.assign({}, c), { displayName: '' })))
|
|
26474
|
+
// @ts-ignore
|
|
26475
|
+
.sort(sortByDisplayName);
|
|
26476
|
+
break;
|
|
26477
|
+
default:
|
|
26478
|
+
channels = channels.sort(sortByLastActivity);
|
|
26479
|
+
break;
|
|
26360
26480
|
}
|
|
26361
26481
|
callback({
|
|
26362
26482
|
onNextPage: onFetch,
|
|
@@ -26366,17 +26486,12 @@ const liveChannels = (params, callback, config) => {
|
|
|
26366
26486
|
error: data.error,
|
|
26367
26487
|
});
|
|
26368
26488
|
};
|
|
26369
|
-
const realtimeRouter = (
|
|
26489
|
+
const realtimeRouter = (_) => (channel) => {
|
|
26370
26490
|
var _a;
|
|
26371
26491
|
const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
26372
26492
|
if (!collection)
|
|
26373
26493
|
return;
|
|
26374
|
-
|
|
26375
|
-
collection.data = collection.data.filter(c => c !== channel.channelId);
|
|
26376
|
-
}
|
|
26377
|
-
else {
|
|
26378
|
-
collection.data = [...new Set([channel.channelId, ...collection.data])];
|
|
26379
|
-
}
|
|
26494
|
+
collection.data = [...new Set([channel.channelId, ...collection.data])];
|
|
26380
26495
|
pushToCache(cacheKey, collection);
|
|
26381
26496
|
responder(collection);
|
|
26382
26497
|
};
|
|
@@ -26401,7 +26516,7 @@ const liveChannels = (params, callback, config) => {
|
|
|
26401
26516
|
responder(data);
|
|
26402
26517
|
}, queryOptions(policy));
|
|
26403
26518
|
};
|
|
26404
|
-
disposers.push(onChannelCreated(realtimeRouter(
|
|
26519
|
+
disposers.push(onChannelCreated(realtimeRouter()), onChannelDeleted(realtimeRouter()), onChannelUpdated(realtimeRouter()), onChannelMuted(realtimeRouter()), onChannelJoined(realtimeRouter()), onChannelLeft(realtimeRouter()), onChannelMemberAdded(realtimeRouter()), onChannelMemberRemoved(realtimeRouter()), onMessageCreated(() => null));
|
|
26405
26520
|
onFetch();
|
|
26406
26521
|
return () => {
|
|
26407
26522
|
log(`liveChannels(tmpid: ${timestamp}) > dispose`);
|
|
@@ -28895,8 +29010,8 @@ const livePost = (postId, callback) => {
|
|
|
28895
29010
|
*
|
|
28896
29011
|
* Observe all mutations on a list of {@link Amity.Post} for a given target object
|
|
28897
29012
|
*
|
|
28898
|
-
* @param targetType the type of the target
|
|
28899
|
-
* @param targetId the ID of the target
|
|
29013
|
+
* @param param.targetType the type of the target
|
|
29014
|
+
* @param param.targetId the ID of the target
|
|
28900
29015
|
* @param callback the function to call when new data are available
|
|
28901
29016
|
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
28902
29017
|
*
|
|
@@ -28930,6 +29045,9 @@ const livePosts = (params, callback, config) => {
|
|
|
28930
29045
|
if (params.tags) {
|
|
28931
29046
|
posts = posts.filter(p => { var _a; return (_a = p.tags) === null || _a === void 0 ? void 0 : _a.some(t => { var _a; return (_a = params.tags) === null || _a === void 0 ? void 0 : _a.includes(t); }); });
|
|
28932
29047
|
}
|
|
29048
|
+
if (params.targetType === 'community' && params.feedType) {
|
|
29049
|
+
posts = filterByFeedType(posts, params.feedType);
|
|
29050
|
+
}
|
|
28933
29051
|
callback({
|
|
28934
29052
|
onNextPage: onFetch,
|
|
28935
29053
|
data: posts,
|
|
@@ -28943,27 +29061,16 @@ const livePosts = (params, callback, config) => {
|
|
|
28943
29061
|
const collection = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
28944
29062
|
if (params.targetId !== post.targetId || params.targetType !== post.targetType || !collection)
|
|
28945
29063
|
return;
|
|
28946
|
-
if (['onCreate', 'onApproved'].includes(action)) {
|
|
28947
|
-
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
28948
|
-
}
|
|
28949
|
-
else if (['onDelete', 'onDeclined'].includes(action)) {
|
|
28950
|
-
collection.data = collection.data.filter(p => p !== post.postId);
|
|
28951
|
-
/*
|
|
28952
|
-
* if isDeleted is true, collection should add deleted items to the
|
|
28953
|
-
* begining of the collection
|
|
28954
|
-
*/
|
|
28955
|
-
if (params.isDeleted)
|
|
28956
|
-
collection.data.unshift(post.postId);
|
|
28957
|
-
}
|
|
28958
29064
|
/*
|
|
28959
|
-
*
|
|
28960
|
-
*
|
|
28961
|
-
* The responder should pull the feed from cache once available and should
|
|
28962
|
-
* match the collection to feedType param
|
|
28963
|
-
* https://ekoapp.atlassian.net/browse/ASC-9382
|
|
29065
|
+
* This is not ideal, but currently this is the only way to update the
|
|
29066
|
+
* collection on post declined
|
|
28964
29067
|
*/
|
|
28965
|
-
if (
|
|
28966
|
-
collection.data = collection.data.filter(
|
|
29068
|
+
if (action === 'onDeclined') {
|
|
29069
|
+
collection.data = collection.data.filter(postId => postId !== post.postId);
|
|
29070
|
+
}
|
|
29071
|
+
else {
|
|
29072
|
+
collection.data = [...new Set([post.postId, ...collection.data])];
|
|
29073
|
+
}
|
|
28967
29074
|
pushToCache(cacheKey, collection);
|
|
28968
29075
|
responder(collection);
|
|
28969
29076
|
};
|
|
@@ -29791,4 +29898,4 @@ const createUserToken = async (apiKey, apiRegion, params) => {
|
|
|
29791
29898
|
return { accessToken: data.accessToken };
|
|
29792
29899
|
};
|
|
29793
29900
|
|
|
29794
|
-
export { API_REGIONS, CommunityPostSettingMaps, CommunityPostSettings, ContentFeedType, DefaultCommunityPostSetting, FileType, MessageContentType, PostContentType, SubscriptionLevels, VERSION$1 as VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, acceptFollower, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRoles, addReaction, approvePost, backupCache, banChannelMembers, closePoll, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createImage, createMessage, createPoll, createPost, createQuery, createReport, createStream, createSubChannel, createUserToken, createVideo, declineFollower, declinePost, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePoll, deletePost, deleteReport, deleteStream, deleteSubChannel, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByChannelMembership, filterByPropEquality, filterByPropInclusion, follow, getActiveClient, getCategory, getChannel, getChannelTopic, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFeedSettings, getFile, getFollowInfo, getMessage, getMessageTopic, getMessages, getMyFollowersTopic, getMyFollowingsTopic, getNetworkTopic, getPoll, getPost, getPostTopic, getPosts, getRecommendedCommunities, getRole, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStream, getSubChannel, getSubChannelTopic, getSubChannels, getTopTrendingCommunities, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe,
|
|
29901
|
+
export { API_REGIONS, CommunityPostSettingMaps, CommunityPostSettings, ContentFeedType, DefaultCommunityPostSetting, FileType, MessageContentType, PostContentType, SubscriptionLevels, VERSION$1 as VERSION, VideoResolution, VideoSize, VideoTranscodingStatus, acceptFollower, addChannelMembers, addChannelMembersRole, addCommunityMembers, addCommunityMembersRoles, addReaction, approvePost, backupCache, banChannelMembers, closePoll, connectClient, createChannel, createClient, createComment, createCommunity, createFile, createImage, createMessage, createPoll, createPost, createQuery, createReport, createStream, createSubChannel, createUserToken, createVideo, declineFollower, declinePost, deleteChannel, deleteComment, deleteCommunity, deleteFile, deleteMessage, deletePoll, deletePost, deleteReport, deleteStream, deleteSubChannel, disableCache, disconnectClient, disposeStream, dropFromCache, enableCache, fileUrlWithSize, filterByChannelMembership, filterByFeedType, filterByPropEquality, filterByPropInclusion, follow, getActiveClient, getCategory, getChannel, getChannelTopic, getChannels, getComment, getCommentTopic, getComments, getCommunities, getCommunity, getCommunityTopic, getFeedSettings, getFile, getFollowInfo, getMessage, getMessageTopic, getMessages, getMyFollowersTopic, getMyFollowingsTopic, getNetworkTopic, getPoll, getPost, getPostTopic, getPosts, getRecommendedCommunities, getRole, getSmartFeedChannelTopic, getSmartFeedMessageTopic, getSmartFeedSubChannelTopic, getStream, getSubChannel, getSubChannelTopic, getSubChannels, getTopTrendingCommunities, getUser, getUserTopic, getUsers, isAfterBefore, isAfterBeforeRaw, isCachable, isConnected, isFetcher, isFresh, isLocal, isMutator, isOffline, isPaged, isReportedByMe, isSkip, joinChannel, joinCommunity, leaveChannel, leaveCommunity, liveCategories, liveChannel, liveChannelMembers, liveChannels, liveComment, liveComments, liveCommunities, liveFollowers, liveFollowings, liveMessage, liveMessages, livePost, livePosts, liveReactions, liveSubChannel, liveSubChannels, liveUser, liveUsers, mergeInCache, observeChannel, observeChannels, observeComment, observeComments, observeCommunity, observeFile, observeFollowInfo, observeFollowers, observeFollowings, observeMessage, observeMessages, observePoll, observePost, observePosts, observeUser, onChannelCreated, onChannelDeleted, onChannelJoined, onChannelLeft, onChannelMemberAdded, onChannelMemberBanned, onChannelMemberRemoved, onChannelMemberUnbanned, onChannelMuted, onChannelUpdated, onClientBanned, onClientDisconnected, onCommentCreated, onCommentDeleted, onCommentFlagged, onCommentReactionAdded, onCommentReactionRemoved, onCommentUnflagged, onCommentUpdated, onCommunityCreated, onCommunityDeleted, onCommunityJoined, onCommunityLeft, onCommunityUpdated, onCommunityUserAdded, onCommunityUserBanned, onCommunityUserChanged, onCommunityUserRemoved, onCommunityUserUnbanned, onConnectionError, onFollowInfoUpdated, onFollowRequestAccepted, onFollowRequestCanceled, onFollowRequestDeclined, onFollowerDeleted, onFollowerRequested, onMessageCreated, onMessageDeleted, onMessageFlagCleared, onMessageFlagged, onMessageReactionAdded, onMessageReactionRemoved, onMessageUnflagged, onMessageUpdated, onPollDeleted, onPollUpdated, onPostApproved, onPostCreated, onPostDeclined, onPostDeleted, onPostFlagged, onPostReactionAdded, onPostReactionRemoved, onPostUnflagged, onPostUpdated, onReactionAdded, onReactionRemoved, onReactorAdded, onReactorRemoved, onSessionStateChange, onStreamRecorded, onStreamStarted, onStreamStopped, onSubChannelCreated, onSubChannelDeleted, onSubChannelUpdated, onUserDeleted, onUserFlagCleared, onUserFlagged, onUserFollowed, onUserUnflagged, onUserUnfollowed, onUserUpdated, pullFromCache, pushToCache, queryCache, queryCategories, queryChannelMembers, queryChannels, queryComments, queryCommunities, queryCommunityMembers, queryFollowers, queryFollowings, queryGlobalFeed, queryMessages, queryOptions, queryPosts, queryReactions, queryRoles, queryStreams, querySubChannels, queryUsers, removeChannelMembers, removeChannelMembersRole, removeCommunityMembers, removeCommunityMembersRoles, removeReaction, renewal, restoreCache, runQuery, sortByChannelSegment, sortByDisplayName, sortByFirstCreated, sortByLastActivity, sortByLastCreated, sortByName, sortBySegmentNumber, startReading, stopReading, subscribeTopic, toPage, toPageRaw, toToken, unbanChannelMembers, unfollow, updateChannel, updateComment, updateCommunity, updateMessage, updatePost, updateStream, updateSubChannel, updateUser, upsertInCache, votePoll, wipeCache };
|