@amityco/ts-sdk-react-native 6.32.7-289cad7.0 → 6.32.7-686c44c.0
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/events.d.ts +16 -2
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/payload.d.ts +3 -0
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/domains/message.d.ts +1 -0
- package/dist/@types/domains/message.d.ts.map +1 -1
- package/dist/@types/domains/pinnedPost.d.ts +1 -0
- package/dist/@types/domains/pinnedPost.d.ts.map +1 -1
- package/dist/@types/domains/reaction.d.ts +8 -2
- package/dist/@types/domains/reaction.d.ts.map +1 -1
- package/dist/@types/domains/user.d.ts +4 -0
- package/dist/@types/domains/user.d.ts.map +1 -1
- package/dist/communityRepository/communityMembership/events/utils.d.ts.map +1 -1
- package/dist/communityRepository/utils/communityWithMembership.d.ts.map +1 -1
- package/dist/feedRepository/api/queryGlobalFeed.d.ts.map +1 -1
- package/dist/index.cjs.js +919 -570
- package/dist/index.esm.js +919 -570
- package/dist/index.umd.js +3 -3
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.d.ts +13 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.d.ts.map +1 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.d.ts +13 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.d.ts.map +1 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.d.ts +15 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.d.ts.map +1 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts.d.ts +10 -0
- package/dist/postRepository/observers/getGlobalPinnedPosts.d.ts.map +1 -0
- package/dist/postRepository/observers/index.d.ts +1 -0
- package/dist/postRepository/observers/index.d.ts.map +1 -1
- package/dist/reactionRepository/api/addReaction.d.ts.map +1 -1
- package/dist/reactionRepository/api/removeReaction.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactorAddedLocal.d.ts +19 -0
- package/dist/reactionRepository/events/onReactorAddedLocal.d.ts.map +1 -0
- package/dist/reactionRepository/events/onReactorRemovedLocal.d.ts +19 -0
- package/dist/reactionRepository/events/onReactorRemovedLocal.d.ts.map +1 -0
- package/dist/reactionRepository/observers/getReactions/ReactionLiveCollectionController.d.ts +13 -0
- package/dist/reactionRepository/observers/getReactions/ReactionLiveCollectionController.d.ts.map +1 -0
- package/dist/reactionRepository/observers/getReactions/ReactionPaginationController.d.ts +5 -0
- package/dist/reactionRepository/observers/getReactions/ReactionPaginationController.d.ts.map +1 -0
- package/dist/reactionRepository/observers/getReactions/ReactionQueryStreamController.d.ts +14 -0
- package/dist/reactionRepository/observers/getReactions/ReactionQueryStreamController.d.ts.map +1 -0
- package/dist/reactionRepository/observers/{getReactions.d.ts → getReactions/getReactions.d.ts} +1 -1
- package/dist/reactionRepository/observers/getReactions/getReactions.d.ts.map +1 -0
- package/dist/reactionRepository/observers/getReactions/index.d.ts +2 -0
- package/dist/reactionRepository/observers/getReactions/index.d.ts.map +1 -0
- package/dist/reactionRepository/observers/index.d.ts +1 -1
- package/dist/reactionRepository/observers/index.d.ts.map +1 -1
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.d.ts.map +1 -1
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts +1 -1
- package/dist/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.d.ts.map +1 -1
- package/dist/userRepository/constants/index.d.ts +5 -0
- package/dist/userRepository/constants/index.d.ts.map +1 -0
- package/dist/userRepository/index.d.ts +1 -0
- package/dist/userRepository/index.d.ts.map +1 -1
- package/dist/userRepository/observers/getBlockedUsers/BlockedUserLiveCollectionController.d.ts.map +1 -1
- package/dist/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.d.ts +3 -2
- package/dist/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.d.ts.map +1 -1
- package/dist/utils/linkedObject/messageLinkedObject.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/@types/core/events.ts +18 -6
- package/src/@types/core/payload.ts +4 -0
- package/src/@types/domains/message.ts +1 -0
- package/src/@types/domains/pin.ts +1 -1
- package/src/@types/domains/pinnedPost.ts +2 -0
- package/src/@types/domains/reaction.ts +9 -3
- package/src/@types/domains/user.ts +6 -0
- package/src/communityRepository/communityMembership/events/utils.ts +4 -2
- package/src/communityRepository/utils/communityWithMembership.ts +15 -8
- package/src/feedRepository/api/queryGlobalFeed.ts +4 -1
- package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostLiveCollectionController.ts +96 -0
- package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostPaginationController.ts +19 -0
- package/src/postRepository/observers/getGlobalPinnedPosts/GlobalPinnedPostQueryStreamController.ts +88 -0
- package/src/postRepository/observers/getGlobalPinnedPosts.ts +42 -0
- package/src/postRepository/observers/index.ts +1 -0
- package/src/reactionRepository/api/addReaction.ts +23 -1
- package/src/reactionRepository/api/removeReaction.ts +25 -2
- package/src/reactionRepository/events/onReactorAddedLocal.ts +95 -0
- package/src/reactionRepository/events/onReactorRemovedLocal.ts +94 -0
- package/src/reactionRepository/observers/getReactions/ReactionLiveCollectionController.ts +111 -0
- package/src/reactionRepository/observers/getReactions/ReactionPaginationController.ts +30 -0
- package/src/reactionRepository/observers/getReactions/ReactionQueryStreamController.ts +92 -0
- package/src/reactionRepository/observers/getReactions/getReactions.ts +57 -0
- package/src/reactionRepository/observers/getReactions/index.ts +1 -0
- package/src/reactionRepository/observers/index.ts +1 -1
- package/src/storyRepository/events/onStoryReactionAdded.ts +3 -3
- package/src/storyRepository/events/onStoryReactionRemoved.ts +3 -3
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts +5 -0
- package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.ts +5 -2
- package/src/userRepository/constants/index.ts +4 -0
- package/src/userRepository/index.ts +1 -0
- package/src/userRepository/observers/getBlockedUsers/BlockedUserLiveCollectionController.ts +12 -1
- package/src/userRepository/observers/getBlockedUsers/BlockedUserQueryStreamController.ts +13 -5
- package/src/userRepository/relationship/follow/observers/getFollowers/FollowerLiveCollectionController.ts +1 -1
- package/src/userRepository/relationship/follow/observers/getFollowings/FollowingLiveCollectionController.ts +1 -1
- package/src/utils/linkedObject/messageLinkedObject.ts +4 -0
- package/dist/reactionRepository/observers/getReactions.d.ts.map +0 -1
- package/src/reactionRepository/observers/getReactions.ts +0 -146
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { QueryStreamController } from '~/core/liveCollection/QueryStreamController';
|
|
2
|
+
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
3
|
+
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
4
|
+
import { getResolver } from '~/core/model';
|
|
5
|
+
import { getActiveClient } from '~/client';
|
|
6
|
+
|
|
7
|
+
export class ReactionQueryStreamController extends QueryStreamController<
|
|
8
|
+
Amity.ReactionPayload,
|
|
9
|
+
Amity.ReactionLiveCollection
|
|
10
|
+
> {
|
|
11
|
+
private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
|
|
12
|
+
|
|
13
|
+
private preparePayload: (response: Amity.ReactionPayload) => Amity.ReactionPayload;
|
|
14
|
+
|
|
15
|
+
constructor(
|
|
16
|
+
query: Amity.ReactionLiveCollection,
|
|
17
|
+
cacheKey: string[],
|
|
18
|
+
notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
|
|
19
|
+
preparePayload: (response: Amity.ReactionPayload) => Amity.ReactionPayload,
|
|
20
|
+
) {
|
|
21
|
+
super(query, cacheKey);
|
|
22
|
+
this.notifyChange = notifyChange;
|
|
23
|
+
this.preparePayload = preparePayload;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async saveToMainDB(response: Amity.ReactionPayload) {
|
|
27
|
+
const processedPayload = await this.preparePayload(response);
|
|
28
|
+
|
|
29
|
+
const client = getActiveClient();
|
|
30
|
+
const cachedAt = client.cache && Date.now();
|
|
31
|
+
|
|
32
|
+
if (client.cache) {
|
|
33
|
+
const { reactions, ...restPayload } = processedPayload;
|
|
34
|
+
ingestInCache(
|
|
35
|
+
{
|
|
36
|
+
...restPayload,
|
|
37
|
+
reactions,
|
|
38
|
+
reactors: reactions[0]?.reactors,
|
|
39
|
+
},
|
|
40
|
+
{ cachedAt },
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
appendToQueryStream(
|
|
46
|
+
response: Amity.ReactionPayload & Partial<Amity.Pagination>,
|
|
47
|
+
direction: Amity.LiveCollectionPageDirection,
|
|
48
|
+
refresh = false,
|
|
49
|
+
) {
|
|
50
|
+
const reactors = response.reactions[0]?.reactors ?? [];
|
|
51
|
+
|
|
52
|
+
if (refresh) {
|
|
53
|
+
pushToCache(this.cacheKey, {
|
|
54
|
+
data: reactors.map(getResolver('reactor')),
|
|
55
|
+
});
|
|
56
|
+
} else {
|
|
57
|
+
const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(this.cacheKey)?.data;
|
|
58
|
+
|
|
59
|
+
const reactions = collection?.data ?? [];
|
|
60
|
+
|
|
61
|
+
pushToCache(this.cacheKey, {
|
|
62
|
+
...collection,
|
|
63
|
+
data: [...new Set([...reactions, ...reactors.map(getResolver('reactor'))])],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
reactor(action: Amity.ReactionActionTypeEnum) {
|
|
69
|
+
return (reaction: Amity.InternalReactor) => {
|
|
70
|
+
const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(this.cacheKey)?.data;
|
|
71
|
+
if (!collection) return;
|
|
72
|
+
|
|
73
|
+
if (action === Amity.ReactionActionTypeEnum.OnAdded) {
|
|
74
|
+
collection.data = [...new Set([reaction.reactionId, ...collection.data])];
|
|
75
|
+
} else if (action === Amity.ReactionActionTypeEnum.OnRemoved) {
|
|
76
|
+
collection.data = collection.data.filter(p => p !== reaction.reactionId);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
pushToCache(this.cacheKey, collection);
|
|
80
|
+
this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
subscribeRTE(
|
|
85
|
+
createSubscriber: {
|
|
86
|
+
fn: (reactor: (reaction: Amity.InternalReactor) => void) => Amity.Unsubscriber;
|
|
87
|
+
action: Amity.ReactionActionTypeEnum;
|
|
88
|
+
}[],
|
|
89
|
+
) {
|
|
90
|
+
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* eslint-disable no-use-before-define */
|
|
2
|
+
|
|
3
|
+
import { getActiveClient } from '~/client/api';
|
|
4
|
+
import { dropFromCache } from '~/cache/api';
|
|
5
|
+
import { ReactionLiveCollectionController } from './ReactionLiveCollectionController';
|
|
6
|
+
|
|
7
|
+
/* begin_public_function
|
|
8
|
+
id: reaction.query
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* ```js
|
|
12
|
+
* import { getReactions } from '@amityco/ts-sdk'
|
|
13
|
+
*
|
|
14
|
+
* let reactions = []
|
|
15
|
+
* const unsub = liveReactions({
|
|
16
|
+
* referenceId: Amity.Reaction['referenceId'],
|
|
17
|
+
* referenceType: Amity.Reaction['referenceType'],
|
|
18
|
+
* }, response => merge(reactions, response.data))
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Observe all mutations on a list of {@link Amity.InternalReactor} for a given target object
|
|
22
|
+
*
|
|
23
|
+
* @param params for querying reactions
|
|
24
|
+
* @param callback the function to call when new data are available
|
|
25
|
+
* @param config the live collection configuration
|
|
26
|
+
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
27
|
+
*
|
|
28
|
+
* @category Reactions Live Collection
|
|
29
|
+
*/
|
|
30
|
+
export const getReactions = (
|
|
31
|
+
params: Amity.ReactionLiveCollection,
|
|
32
|
+
callback: Amity.LiveCollectionCallback<Amity.Reactor>,
|
|
33
|
+
config?: Amity.LiveCollectionConfig,
|
|
34
|
+
): Amity.Unsubscriber => {
|
|
35
|
+
const { log, cache } = getActiveClient();
|
|
36
|
+
|
|
37
|
+
// if (!cache) {
|
|
38
|
+
// console.log('For using Live Collection feature you need to enable Cache!');
|
|
39
|
+
// }
|
|
40
|
+
|
|
41
|
+
const timestamp = Date.now();
|
|
42
|
+
log(`getReactions(tmpid: ${timestamp}) > listen`);
|
|
43
|
+
|
|
44
|
+
const reactionLiveCollection = new ReactionLiveCollectionController(params, callback);
|
|
45
|
+
const disposers = reactionLiveCollection.startSubscription();
|
|
46
|
+
const cacheKey = reactionLiveCollection.getCacheKey();
|
|
47
|
+
|
|
48
|
+
disposers.push(() => {
|
|
49
|
+
dropFromCache(cacheKey);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return () => {
|
|
53
|
+
log(`getReactions(tmpid: ${timestamp}) > dispose`);
|
|
54
|
+
disposers.forEach(fn => fn());
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/* end_public_function */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './getReactions';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { getReactions } from './getReactions';
|
|
@@ -30,9 +30,9 @@ export const onStoryReactionAdded = (callback: Amity.Listener<Amity.InternalStor
|
|
|
30
30
|
export const onStoryReactionAddedLocal = (callback: Amity.Listener<Amity.InternalStory[]>) => {
|
|
31
31
|
const client = getActiveClient();
|
|
32
32
|
|
|
33
|
-
const filter = async (payload: Amity.
|
|
34
|
-
ingestInCache(payload);
|
|
35
|
-
callback(payload.
|
|
33
|
+
const filter = async (payload: Amity.LocalEvents['local.story.reactionAdded']) => {
|
|
34
|
+
ingestInCache({ stories: [payload.story] });
|
|
35
|
+
callback([payload.story]);
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const disposers = [
|
|
@@ -30,9 +30,9 @@ export const onStoryReactionRemoved = (callback: Amity.Listener<Amity.InternalSt
|
|
|
30
30
|
export const onStoryReactionRemovedLocal = (callback: Amity.Listener<Amity.InternalStory[]>) => {
|
|
31
31
|
const client = getActiveClient();
|
|
32
32
|
|
|
33
|
-
const filter = async (payload: Amity.
|
|
34
|
-
ingestInCache(payload);
|
|
35
|
-
callback(payload.
|
|
33
|
+
const filter = async (payload: Amity.LocalEvents['local.story.reactionAdded']) => {
|
|
34
|
+
ingestInCache({ stories: [payload.story] });
|
|
35
|
+
callback([payload.story]);
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const disposers = [
|
package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryLiveCollectionController.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { onStoryDeleted, onStoryDeletedLocal } from '~/storyRepository/events/on
|
|
|
10
10
|
import { onStoryError } from '~/storyRepository/events/onStoryError';
|
|
11
11
|
import { GlobalStoryQueryStreamController } from './GlobalStoryQueryStreamController';
|
|
12
12
|
import { GlobalStoryPageController } from './GlobalStoryPageController';
|
|
13
|
+
import { prepareCommunityPayload } from '~/communityRepository/utils';
|
|
13
14
|
|
|
14
15
|
type StoryTargetBySeenState = {
|
|
15
16
|
seen: Amity.StoryTarget[];
|
|
@@ -44,6 +45,10 @@ export class GlobalStoryLiveCollectionController extends LiveCollectionControlle
|
|
|
44
45
|
this.cacheKey,
|
|
45
46
|
this.notifyChange.bind(this),
|
|
46
47
|
paginationController,
|
|
48
|
+
(data: Amity.GlobalStoryFeedPayload) => {
|
|
49
|
+
const { feeds, ...rest } = prepareCommunityPayload({ ...data, feeds: [] });
|
|
50
|
+
return { ...data, ...rest };
|
|
51
|
+
},
|
|
47
52
|
);
|
|
48
53
|
|
|
49
54
|
this.paginationController = paginationController;
|
package/src/storyRepository/observers/getGlobalStoryTargets/GlobalStoryQueryStreamController.ts
CHANGED
|
@@ -20,7 +20,9 @@ export class GlobalStoryQueryStreamController extends QueryStreamController<
|
|
|
20
20
|
> {
|
|
21
21
|
private notifyChange: (params: Amity.LiveCollectionNotifyParams) => void;
|
|
22
22
|
|
|
23
|
-
private preparePayload: (
|
|
23
|
+
private preparePayload: (
|
|
24
|
+
response: Amity.GlobalStoryFeedPayload,
|
|
25
|
+
) => Amity.ProcessedGlobalStoryFeed;
|
|
24
26
|
|
|
25
27
|
private paginationController: GlobalStoryPageController;
|
|
26
28
|
|
|
@@ -29,13 +31,14 @@ export class GlobalStoryQueryStreamController extends QueryStreamController<
|
|
|
29
31
|
cacheKey: string[],
|
|
30
32
|
notifyChange: (params: Amity.LiveCollectionNotifyParams) => void,
|
|
31
33
|
paginationController: GlobalStoryPageController,
|
|
34
|
+
preparePayload: (response: Amity.GlobalStoryFeedPayload) => Amity.ProcessedGlobalStoryFeed,
|
|
32
35
|
) {
|
|
33
36
|
super(query, cacheKey);
|
|
34
37
|
this.notifyChange = notifyChange;
|
|
35
38
|
this.paginationController = paginationController;
|
|
36
39
|
|
|
37
40
|
// Fix ESLint, "Expected 'this' to be used by class method"
|
|
38
|
-
this.preparePayload =
|
|
41
|
+
this.preparePayload = preparePayload;
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
saveToMainDB(response: Amity.GlobalStoryFeedPayload) {
|
|
@@ -8,6 +8,9 @@ import { prepareBlockedUserPayload } from '~/userRepository/utils/prepareBlocked
|
|
|
8
8
|
import { LinkedObject } from '~/utils/linkedObject';
|
|
9
9
|
import { onUserDeleted } from '~/userRepository/events';
|
|
10
10
|
import { EnumUserActions } from '../enums';
|
|
11
|
+
import { onLocalUserFollowed, onUserFollowed } from '~/userRepository/relationship/follow/events';
|
|
12
|
+
import { convertEventPayload } from '~/utils/event';
|
|
13
|
+
import { EnumFollowActions } from '~/userRepository/relationship/follow/enums';
|
|
11
14
|
|
|
12
15
|
export class BlockedUserLiveCollectionController extends LiveCollectionController<
|
|
13
16
|
'blockUser',
|
|
@@ -69,6 +72,15 @@ export class BlockedUserLiveCollectionController extends LiveCollectionControlle
|
|
|
69
72
|
fn: onUserDeleted,
|
|
70
73
|
action: EnumUserActions.OnUserDeleted,
|
|
71
74
|
},
|
|
75
|
+
// In the case of unblocking a user, we need to subscribe to the follow events
|
|
76
|
+
{
|
|
77
|
+
fn: convertEventPayload(onLocalUserFollowed, 'to', 'user'),
|
|
78
|
+
action: EnumFollowActions.OnFollowed,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
fn: convertEventPayload(onUserFollowed, 'to', 'user'),
|
|
82
|
+
action: EnumFollowActions.OnFollowed,
|
|
83
|
+
},
|
|
72
84
|
]);
|
|
73
85
|
}
|
|
74
86
|
|
|
@@ -83,7 +95,6 @@ export class BlockedUserLiveCollectionController extends LiveCollectionControlle
|
|
|
83
95
|
.map(({ data }) => data)
|
|
84
96
|
.map(LinkedObject.user) ?? [],
|
|
85
97
|
);
|
|
86
|
-
|
|
87
98
|
if (!this.shouldNotify(data) && origin === 'event') return;
|
|
88
99
|
|
|
89
100
|
this.callback({
|
|
@@ -4,6 +4,7 @@ import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
|
4
4
|
import { getResolver } from '~/core/model';
|
|
5
5
|
import { getActiveClient } from '~/client';
|
|
6
6
|
import { EnumUserActions } from '../enums';
|
|
7
|
+
import { EnumFollowActions } from '~/userRepository/relationship/follow/enums';
|
|
7
8
|
|
|
8
9
|
export class BlockedUserQueryStreamController extends QueryStreamController<
|
|
9
10
|
Amity.BlockedUserPayload,
|
|
@@ -56,11 +57,18 @@ export class BlockedUserQueryStreamController extends QueryStreamController<
|
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
reactor(action: EnumUserActions) {
|
|
60
|
-
return (
|
|
61
|
-
|
|
60
|
+
reactor(action: EnumUserActions | EnumFollowActions) {
|
|
61
|
+
return (targetUser: Amity.InternalUser) => {
|
|
62
|
+
if (action === EnumFollowActions.OnFollowed) {
|
|
63
|
+
const collection = pullFromCache<Amity.BlockedUserLiveCollectionCache>(this.cacheKey)?.data;
|
|
64
|
+
const updatedCollection = collection?.data.filter(id => id !== targetUser.userId);
|
|
65
|
+
|
|
66
|
+
pushToCache(this.cacheKey, {
|
|
67
|
+
...collection,
|
|
68
|
+
data: updatedCollection,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
62
71
|
|
|
63
|
-
pushToCache(this.cacheKey, collection);
|
|
64
72
|
this.notifyChange({ origin: Amity.LiveDataOrigin.EVENT, loading: false });
|
|
65
73
|
};
|
|
66
74
|
}
|
|
@@ -68,7 +76,7 @@ export class BlockedUserQueryStreamController extends QueryStreamController<
|
|
|
68
76
|
subscribeRTE(
|
|
69
77
|
createSubscriber: {
|
|
70
78
|
fn: (reactor: (user: Amity.InternalUser) => void) => Amity.Unsubscriber;
|
|
71
|
-
action: EnumUserActions;
|
|
79
|
+
action: EnumUserActions | EnumFollowActions;
|
|
72
80
|
}[],
|
|
73
81
|
) {
|
|
74
82
|
return createSubscriber.map(subscriber => subscriber.fn(this.reactor(subscriber.action)));
|
|
@@ -34,7 +34,7 @@ export class FollowerLiveCollectionController extends LiveCollectionController<
|
|
|
34
34
|
query: Amity.FollowerLiveCollection,
|
|
35
35
|
callback: Amity.LiveCollectionCallback<Amity.FollowStatus>,
|
|
36
36
|
) {
|
|
37
|
-
const queryStreamId = hash(query);
|
|
37
|
+
const queryStreamId = hash({ ...query, type: 'follower' });
|
|
38
38
|
const cacheKey = ['follow', 'collection', queryStreamId];
|
|
39
39
|
const paginationController = new FollowerPaginationController(query);
|
|
40
40
|
|
|
@@ -36,7 +36,7 @@ export class FollowingLiveCollectionController extends LiveCollectionController<
|
|
|
36
36
|
query: Amity.FollowingLiveCollection,
|
|
37
37
|
callback: Amity.LiveCollectionCallback<Amity.FollowStatus>,
|
|
38
38
|
) {
|
|
39
|
-
const queryStreamId = hash(query);
|
|
39
|
+
const queryStreamId = hash({ ...query, type: 'following' });
|
|
40
40
|
const cacheKey = ['follow', 'collection', queryStreamId];
|
|
41
41
|
const paginationController = new FollowingPaginationController(query);
|
|
42
42
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api';
|
|
1
2
|
import { getMessageReadCount } from '~/messageRepository/utils/getMessageReadCount';
|
|
2
3
|
import { markReadMessage } from '~/messageRepository/utils/markReadMessage';
|
|
3
4
|
|
|
@@ -11,6 +12,9 @@ export const messageLinkedObject = (message: Amity.InternalMessage): Amity.Messa
|
|
|
11
12
|
get deliveredCount() {
|
|
12
13
|
return getMessageReadCount(message).deliveredCount;
|
|
13
14
|
},
|
|
15
|
+
get creator() {
|
|
16
|
+
return pullFromCache<Amity.InternalUser>(['user', 'get', message.creatorId])?.data;
|
|
17
|
+
},
|
|
14
18
|
markRead: () => markReadMessage(message),
|
|
15
19
|
};
|
|
16
20
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getReactions.d.ts","sourceRoot":"","sources":["../../../src/reactionRepository/observers/getReactions.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,WACf,MAAM,sBAAsB,YAC1B,MAAM,sBAAsB,CAAC,MAAM,OAAO,CAAC,WAC5C,MAAM,oBAAoB,KAClC,MAAM,YAsGR,CAAC"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-use-before-define */
|
|
2
|
-
import { getResolver } from '~/core/model';
|
|
3
|
-
import { getActiveClient } from '~/client/api';
|
|
4
|
-
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
5
|
-
import { createQuery, queryOptions, runQuery } from '~/core/query';
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
COLLECTION_DEFAULT_CACHING_POLICY,
|
|
9
|
-
COLLECTION_DEFAULT_PAGINATION_LIMIT,
|
|
10
|
-
} from '~/utils/constants';
|
|
11
|
-
|
|
12
|
-
import { LinkedObject } from '~/utils/linkedObject';
|
|
13
|
-
import { onReactorAdded, onReactorRemoved } from '../events';
|
|
14
|
-
import { queryReactor } from '../api/queryReactor';
|
|
15
|
-
|
|
16
|
-
/* begin_public_function
|
|
17
|
-
id: reaction.query
|
|
18
|
-
*/
|
|
19
|
-
/**
|
|
20
|
-
* ```js
|
|
21
|
-
* import { getReactions } from '@amityco/ts-sdk-react-native'
|
|
22
|
-
*
|
|
23
|
-
* let reactions = []
|
|
24
|
-
* const unsub = liveReactions({
|
|
25
|
-
* referenceId: Amity.Reaction['referenceId'],
|
|
26
|
-
* referenceType: Amity.Reaction['referenceType'],
|
|
27
|
-
* }, response => merge(reactions, response.data))
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* Observe all mutations on a list of {@link Amity.InternalReactor} for a given target object
|
|
31
|
-
*
|
|
32
|
-
* @param params for querying reactions
|
|
33
|
-
* @param callback the function to call when new data are available
|
|
34
|
-
* @param config the live collection configuration
|
|
35
|
-
* @returns An {@link Amity.Unsubscriber} function to run when willing to stop observing the messages
|
|
36
|
-
*
|
|
37
|
-
* @category Reactions Live Collection
|
|
38
|
-
*/
|
|
39
|
-
export const getReactions = (
|
|
40
|
-
params: Amity.ReactionLiveCollection,
|
|
41
|
-
callback: Amity.LiveCollectionCallback<Amity.Reactor>,
|
|
42
|
-
config?: Amity.LiveCollectionConfig,
|
|
43
|
-
): Amity.Unsubscriber => {
|
|
44
|
-
const { log, cache } = getActiveClient();
|
|
45
|
-
|
|
46
|
-
if (!cache) {
|
|
47
|
-
console.log('For using Live Collection feature you need to enable Cache!');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const timestamp = Date.now();
|
|
51
|
-
log(`liveReactions(tmpid: ${timestamp}) > listen`);
|
|
52
|
-
|
|
53
|
-
const { limit: queryLimit, ...queryParams } = params;
|
|
54
|
-
|
|
55
|
-
const limit = queryLimit ?? COLLECTION_DEFAULT_PAGINATION_LIMIT;
|
|
56
|
-
const { policy = COLLECTION_DEFAULT_CACHING_POLICY } = config ?? {};
|
|
57
|
-
|
|
58
|
-
const disposers: Amity.Unsubscriber[] = [];
|
|
59
|
-
const cacheKey = [
|
|
60
|
-
'reaction',
|
|
61
|
-
'collection',
|
|
62
|
-
{ referenceId: params.referenceId, referenceType: params.referenceType },
|
|
63
|
-
];
|
|
64
|
-
|
|
65
|
-
const responder = (data: Amity.ReactionLiveCollectionCache) => {
|
|
66
|
-
const reactions: Amity.Reactor[] =
|
|
67
|
-
data.data
|
|
68
|
-
.map(reactorId => pullFromCache<Amity.InternalReactor>(['reactor', 'get', reactorId])!)
|
|
69
|
-
.filter(Boolean)
|
|
70
|
-
.map(({ data }) => LinkedObject.reactor(data)) ?? [];
|
|
71
|
-
|
|
72
|
-
callback({
|
|
73
|
-
onNextPage: onFetch,
|
|
74
|
-
data: reactions,
|
|
75
|
-
hasNextPage: !!data.params?.page,
|
|
76
|
-
loading: data.loading,
|
|
77
|
-
error: data.error,
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
const realtimeRouter =
|
|
82
|
-
(action: Amity.ReactionActionType) => (reaction: Amity.InternalReactor) => {
|
|
83
|
-
const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(cacheKey)?.data;
|
|
84
|
-
if (!collection) return;
|
|
85
|
-
|
|
86
|
-
if (action === 'onAdded') {
|
|
87
|
-
collection.data = [...new Set([reaction.reactionId, ...collection.data])];
|
|
88
|
-
} else if (action === 'onRemoved') {
|
|
89
|
-
collection.data = collection.data.filter(p => p !== reaction.reactionId);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
pushToCache(cacheKey, collection);
|
|
93
|
-
responder(collection);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const onFetch = (initial = false) => {
|
|
97
|
-
const collection = pullFromCache<Amity.ReactionLiveCollectionCache>(cacheKey)?.data;
|
|
98
|
-
|
|
99
|
-
const reactions = collection?.data ?? [];
|
|
100
|
-
|
|
101
|
-
if (!initial && reactions.length > 0 && !collection?.params?.page) return;
|
|
102
|
-
|
|
103
|
-
const query = createQuery(queryReactor, {
|
|
104
|
-
...queryParams,
|
|
105
|
-
page: (!initial ? collection?.params.page : undefined) ?? { limit },
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
runQuery(
|
|
109
|
-
query,
|
|
110
|
-
({ data: result, error, loading, nextPage: page }) => {
|
|
111
|
-
const data = {
|
|
112
|
-
loading,
|
|
113
|
-
error,
|
|
114
|
-
params: { page },
|
|
115
|
-
data: reactions,
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
if (result) {
|
|
119
|
-
data.data = [...new Set([...reactions, ...result.map(getResolver('reactor'))])];
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
pushToCache(cacheKey, data);
|
|
123
|
-
|
|
124
|
-
responder(data);
|
|
125
|
-
},
|
|
126
|
-
queryOptions(policy),
|
|
127
|
-
);
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
disposers.push(
|
|
131
|
-
onReactorAdded(queryParams.referenceType, queryParams.referenceId, realtimeRouter('onAdded')),
|
|
132
|
-
onReactorRemoved(
|
|
133
|
-
queryParams.referenceType,
|
|
134
|
-
queryParams.referenceId,
|
|
135
|
-
realtimeRouter('onRemoved'),
|
|
136
|
-
),
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
onFetch(true);
|
|
140
|
-
|
|
141
|
-
return () => {
|
|
142
|
-
log(`liveReactions(tmpid: ${timestamp}) > dispose`);
|
|
143
|
-
disposers.forEach(fn => fn());
|
|
144
|
-
};
|
|
145
|
-
};
|
|
146
|
-
/* end_public_function */
|