@amityco/ts-sdk 6.7.2 → 6.7.3-cbeeb97.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 +9 -3
- package/dist/@types/core/events.d.ts.map +1 -1
- package/dist/@types/core/marker.d.ts +3 -0
- package/dist/@types/core/marker.d.ts.map +1 -1
- package/dist/@types/core/model.d.ts +2 -2
- package/dist/@types/core/model.d.ts.map +1 -1
- package/dist/@types/core/payload.d.ts +40 -36
- package/dist/@types/core/payload.d.ts.map +1 -1
- package/dist/@types/domains/channel.d.ts +1 -0
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/@types/domains/client.d.ts +1 -0
- package/dist/@types/domains/client.d.ts.map +1 -1
- package/dist/@types/domains/comment.d.ts +20 -8
- package/dist/@types/domains/comment.d.ts.map +1 -1
- package/dist/@types/domains/partials.d.ts +3 -0
- package/dist/@types/domains/partials.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/subChannel.d.ts +1 -0
- package/dist/@types/domains/subChannel.d.ts.map +1 -1
- package/dist/channelRepsitory/api/markAsRead.d.ts.map +1 -1
- package/dist/channelRepsitory/observers/getChannels.d.ts.map +1 -1
- package/dist/channelRepsitory/utils/getChannelHasMentioned.d.ts +7 -0
- package/dist/channelRepsitory/utils/getChannelHasMentioned.d.ts.map +1 -0
- package/dist/channelRepsitory/utils/prepareChannelPayload.d.ts.map +1 -1
- package/dist/client/api/markerSync.d.ts.map +1 -1
- package/dist/client/observers/getTotalUnreadCount.d.ts +2 -0
- package/dist/client/observers/getTotalUnreadCount.d.ts.map +1 -1
- package/dist/client/observers/getUserUnread.d.ts +19 -0
- package/dist/client/observers/getUserUnread.d.ts.map +1 -0
- package/dist/client/observers/index.d.ts +1 -0
- package/dist/client/observers/index.d.ts.map +1 -1
- package/dist/client/utils/markerSyncEngine.d.ts.map +1 -1
- package/dist/client/utils/onOnline.d.ts +2 -0
- package/dist/client/utils/onOnline.d.ts.map +1 -0
- package/dist/commentRepository/api/createComment.d.ts +4 -4
- package/dist/commentRepository/api/createComment.d.ts.map +1 -1
- package/dist/commentRepository/api/deleteComment.d.ts +4 -4
- package/dist/commentRepository/api/deleteComment.d.ts.map +1 -1
- package/dist/commentRepository/api/flagComment.d.ts +1 -1
- package/dist/commentRepository/api/flagComment.d.ts.map +1 -1
- package/dist/commentRepository/api/getComment.d.ts +8 -8
- package/dist/commentRepository/api/getComment.d.ts.map +1 -1
- package/dist/commentRepository/api/getCommentByIds.d.ts +8 -8
- package/dist/commentRepository/api/getCommentByIds.d.ts.map +1 -1
- package/dist/commentRepository/api/hardDeleteComment.d.ts +4 -4
- package/dist/commentRepository/api/hardDeleteComment.d.ts.map +1 -1
- package/dist/commentRepository/api/isCommentFlaggedByMe.d.ts +1 -1
- package/dist/commentRepository/api/isCommentFlaggedByMe.d.ts.map +1 -1
- package/dist/commentRepository/api/queryComments.d.ts +3 -3
- package/dist/commentRepository/api/queryComments.d.ts.map +1 -1
- package/dist/commentRepository/api/softDeleteComment.d.ts +4 -4
- package/dist/commentRepository/api/softDeleteComment.d.ts.map +1 -1
- package/dist/commentRepository/api/unflagComment.d.ts +1 -1
- package/dist/commentRepository/api/unflagComment.d.ts.map +1 -1
- package/dist/commentRepository/api/updateComment.d.ts +4 -4
- package/dist/commentRepository/api/updateComment.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentCreated.d.ts +3 -3
- package/dist/commentRepository/events/onCommentCreated.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentDeleted.d.ts +3 -3
- package/dist/commentRepository/events/onCommentDeleted.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentFlagged.d.ts +3 -3
- package/dist/commentRepository/events/onCommentFlagged.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentReactionAdded.d.ts +3 -3
- package/dist/commentRepository/events/onCommentReactionAdded.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentReactionRemoved.d.ts +3 -3
- package/dist/commentRepository/events/onCommentReactionRemoved.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentUnflagged.d.ts +3 -3
- package/dist/commentRepository/events/onCommentUnflagged.d.ts.map +1 -1
- package/dist/commentRepository/events/onCommentUpdated.d.ts +3 -3
- package/dist/commentRepository/events/onCommentUpdated.d.ts.map +1 -1
- package/dist/commentRepository/events/utils.d.ts +1 -1
- package/dist/commentRepository/events/utils.d.ts.map +1 -1
- package/dist/commentRepository/observers/getComment.d.ts +3 -3
- package/dist/commentRepository/observers/getComment.d.ts.map +1 -1
- package/dist/commentRepository/observers/getComments.d.ts +4 -4
- package/dist/commentRepository/observers/getComments.d.ts.map +1 -1
- package/dist/commentRepository/observers/observeComment.d.ts +3 -3
- package/dist/commentRepository/observers/observeComment.d.ts.map +1 -1
- package/dist/commentRepository/observers/observeComments.d.ts +3 -3
- package/dist/commentRepository/observers/observeComments.d.ts.map +1 -1
- package/dist/index.cjs.js +2253 -18192
- package/dist/index.esm.js +273 -107
- package/dist/index.umd.js +4 -4
- package/dist/marker/api/getChannelMarkers.d.ts.map +1 -1
- package/dist/marker/api/getMessageMarkers.d.ts.map +1 -1
- package/dist/marker/api/getSubChannelMarkers.d.ts.map +1 -1
- package/dist/marker/api/getUserMarker.d.ts.map +1 -1
- package/dist/marker/events/onUserMarkerSync.d.ts.map +1 -1
- package/dist/messageRepository/api/getDeliveredUsers.d.ts.map +1 -1
- package/dist/messageRepository/api/getReadUsers.d.ts.map +1 -1
- package/dist/messageRepository/api/markAsDelivered.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactionAdded.d.ts +1 -1
- package/dist/reactionRepository/events/onReactionAdded.d.ts.map +1 -1
- package/dist/reactionRepository/events/onReactionRemoved.d.ts +1 -1
- package/dist/reactionRepository/events/onReactionRemoved.d.ts.map +1 -1
- package/dist/reactionRepository/utils/fetchReference.d.ts +1 -1
- package/dist/reactionRepository/utils/fetchReference.d.ts.map +1 -1
- package/dist/subChannelRepository/api/readingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/api/startReadingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/api/stopReadingAPI.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts +2 -0
- package/dist/subChannelRepository/utils/getSubChannelHasMentioned.d.ts.map +1 -0
- package/dist/subChannelRepository/utils/markReadEngine.d.ts.map +1 -1
- package/dist/subChannelRepository/utils/prepareSubChannelPayload.d.ts.map +1 -1
- package/dist/utils/linkedObject/commentLinkedObject.d.ts +2 -0
- package/dist/utils/linkedObject/commentLinkedObject.d.ts.map +1 -0
- package/dist/utils/linkedObject/index.d.ts +4 -0
- package/dist/utils/linkedObject/index.d.ts.map +1 -0
- package/dist/utils/marker.d.ts +4 -0
- package/dist/utils/marker.d.ts.map +1 -0
- package/dist/utils/tests/dummy/channel.d.ts.map +1 -1
- package/dist/utils/tests/dummy/comment.d.ts +20 -14
- package/dist/utils/tests/dummy/comment.d.ts.map +1 -1
- package/dist/utils/tests/dummy/marker.d.ts +3 -0
- package/dist/utils/tests/dummy/marker.d.ts.map +1 -1
- package/package.json +3 -1
- package/rollup.config.js +2 -0
- package/src/@types/core/events.ts +3 -9
- package/src/@types/core/marker.ts +3 -0
- package/src/@types/core/model.ts +2 -2
- package/src/@types/core/payload.ts +41 -36
- package/src/@types/domains/channel.ts +1 -0
- package/src/@types/domains/client.ts +2 -0
- package/src/@types/domains/comment.ts +20 -8
- package/src/@types/domains/partials.ts +4 -0
- package/src/@types/domains/post.ts +1 -1
- package/src/@types/domains/subChannel.ts +1 -0
- package/src/channelRepsitory/api/markAsRead.ts +22 -1
- package/src/channelRepsitory/observers/getChannels.ts +3 -2
- package/src/channelRepsitory/observers/tests/getChannels.test.ts +6 -2
- package/src/channelRepsitory/utils/getChannelHasMentioned.ts +28 -0
- package/src/channelRepsitory/utils/prepareChannelPayload.ts +4 -0
- package/src/channelRepsitory/utils/tests/prepareChannelPayload.test.ts +3 -0
- package/src/client/api/markerSync.ts +17 -2
- package/src/client/observers/getTotalUnreadCount.ts +2 -0
- package/src/client/observers/getUserUnread.ts +47 -0
- package/src/client/observers/index.ts +1 -0
- package/src/client/utils/markerSyncEngine.ts +5 -13
- package/src/client/utils/onOnline.ts +15 -0
- package/src/commentRepository/api/createComment.ts +5 -5
- package/src/commentRepository/api/deleteComment.ts +6 -5
- package/src/commentRepository/api/flagComment.ts +3 -1
- package/src/commentRepository/api/getComment.ts +13 -12
- package/src/commentRepository/api/getCommentByIds.ts +11 -11
- package/src/commentRepository/api/hardDeleteComment.ts +5 -5
- package/src/commentRepository/api/isCommentFlaggedByMe.ts +1 -1
- package/src/commentRepository/api/queryComments.ts +4 -4
- package/src/commentRepository/api/softDeleteComment.ts +5 -5
- package/src/commentRepository/api/tests/queryComments.test.ts +9 -9
- package/src/commentRepository/api/unflagComment.ts +3 -1
- package/src/commentRepository/api/updateComment.ts +6 -6
- package/src/commentRepository/events/onCommentCreated.ts +5 -4
- package/src/commentRepository/events/onCommentDeleted.ts +5 -4
- package/src/commentRepository/events/onCommentFlagged.ts +5 -4
- package/src/commentRepository/events/onCommentReactionAdded.ts +4 -4
- package/src/commentRepository/events/onCommentReactionRemoved.ts +4 -4
- package/src/commentRepository/events/onCommentUnflagged.ts +5 -4
- package/src/commentRepository/events/onCommentUpdated.ts +5 -4
- package/src/commentRepository/events/utils.ts +3 -3
- package/src/commentRepository/observers/getComment.ts +4 -4
- package/src/commentRepository/observers/getComments.ts +9 -8
- package/src/commentRepository/observers/observeComment.ts +14 -8
- package/src/commentRepository/observers/observeComments.ts +9 -6
- package/src/commentRepository/observers/tests/getComment.test.ts +3 -1
- package/src/marker/api/getChannelMarkers.ts +9 -3
- package/src/marker/api/getMessageMarkers.ts +5 -2
- package/src/marker/api/getSubChannelMarkers.ts +16 -2
- package/src/marker/api/getUserMarker.ts +9 -2
- package/src/marker/api/tests/getMessageMarkers.test.ts +3 -1
- package/src/marker/api/tests/getSubChannelMarkers.test.ts +16 -8
- package/src/marker/events/onUserMarkerSync.ts +18 -2
- package/src/messageRepository/api/getDeliveredUsers.ts +9 -2
- package/src/messageRepository/api/getReadUsers.ts +6 -2
- package/src/messageRepository/api/markAsDelivered.ts +17 -1
- package/src/messageRepository/api/tests/markAsDelivered.test.ts +11 -4
- package/src/reactionRepository/utils/prepareReactionPayloadFormEvent.ts +1 -1
- package/src/subChannelRepository/api/readingAPI.ts +17 -2
- package/src/subChannelRepository/api/startReadingAPI.ts +17 -2
- package/src/subChannelRepository/api/stopReadingAPI.ts +17 -2
- package/src/subChannelRepository/utils/getSubChannelHasMentioned.ts +34 -0
- package/src/subChannelRepository/utils/markReadEngine.ts +7 -15
- package/src/subChannelRepository/utils/prepareSubChannelPayload.ts +4 -0
- package/src/utils/linkedObject/commentLinkedObject.ts +44 -0
- package/src/utils/linkedObject/index.ts +5 -0
- package/src/utils/marker.ts +29 -0
- package/src/utils/tests/dummy/channel.ts +2 -0
- package/src/utils/tests/dummy/comment.ts +25 -8
- package/src/utils/tests/dummy/marker.ts +46 -0
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api';
|
|
3
3
|
import { createEventSubscriber } from '~/core/events';
|
|
4
|
+
import {
|
|
5
|
+
convertChannelMarkerResponse,
|
|
6
|
+
convertSubChannelMarkerResponse,
|
|
7
|
+
convertUserMarkerResponse,
|
|
8
|
+
} from '~/utils/marker';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* ```js
|
|
@@ -23,8 +28,19 @@ export const onUserMarkerSync = (
|
|
|
23
28
|
const client = getActiveClient();
|
|
24
29
|
|
|
25
30
|
const filter = (payload: Amity.Events['marker.user-sync']) => {
|
|
26
|
-
|
|
27
|
-
|
|
31
|
+
const {
|
|
32
|
+
userMarkers: userMarkersPayload,
|
|
33
|
+
userEntityMarkers: userEntityMarkersPayload,
|
|
34
|
+
userFeedMarkers: userFeedMarkersPayload,
|
|
35
|
+
...rest
|
|
36
|
+
} = payload;
|
|
37
|
+
|
|
38
|
+
const userMarkers = convertUserMarkerResponse(userMarkersPayload);
|
|
39
|
+
const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
|
|
40
|
+
const userFeedMarker = convertSubChannelMarkerResponse(userFeedMarkersPayload);
|
|
41
|
+
|
|
42
|
+
ingestInCache({ userMarkers, userEntityMarkers, userFeedMarker, ...rest });
|
|
43
|
+
callback(userMarkers[0]);
|
|
28
44
|
};
|
|
29
45
|
|
|
30
46
|
return createEventSubscriber(client, 'UserMarker/onUserMarkerSync', 'marker.user-sync', filter);
|
|
@@ -3,6 +3,7 @@ import { getActiveClient } from '~/client/api';
|
|
|
3
3
|
import { toPage, toToken } from '~/core/query';
|
|
4
4
|
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
5
5
|
import { getUserByIds } from '~/userRepository';
|
|
6
|
+
import { convertSubChannelMarkerResponse } from '~/utils/marker';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* ```js
|
|
@@ -40,11 +41,17 @@ export const getDeliveredUsers = async (
|
|
|
40
41
|
},
|
|
41
42
|
);
|
|
42
43
|
|
|
43
|
-
const { paging, publicUserIds: deliveredUsers, ...payload } = data;
|
|
44
|
+
const { paging, publicUserIds: deliveredUsers, userFeedMarkers, ...payload } = data;
|
|
44
45
|
const cachedAt = client.cache && Date.now();
|
|
45
46
|
|
|
46
47
|
if (client.cache) {
|
|
47
|
-
ingestInCache(
|
|
48
|
+
ingestInCache(
|
|
49
|
+
{
|
|
50
|
+
...payload,
|
|
51
|
+
userFeedMarkers: convertSubChannelMarkerResponse(userFeedMarkers),
|
|
52
|
+
},
|
|
53
|
+
{ cachedAt },
|
|
54
|
+
);
|
|
48
55
|
|
|
49
56
|
const cacheKey = [
|
|
50
57
|
'delivered-user',
|
|
@@ -3,6 +3,7 @@ import { getActiveClient } from '~/client/api';
|
|
|
3
3
|
import { toPage, toToken } from '~/core/query';
|
|
4
4
|
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
5
5
|
import { getUserByIds } from '~/userRepository';
|
|
6
|
+
import { convertSubChannelMarkerResponse } from '~/utils/marker';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* ```js
|
|
@@ -41,11 +42,14 @@ export const getReadUsers = async (
|
|
|
41
42
|
},
|
|
42
43
|
);
|
|
43
44
|
|
|
44
|
-
const { paging, publicUserIds: readUsers, ...payload } = data;
|
|
45
|
+
const { paging, publicUserIds: readUsers, userFeedMarkers, ...payload } = data;
|
|
45
46
|
const cachedAt = client.cache && Date.now();
|
|
46
47
|
|
|
47
48
|
if (client.cache) {
|
|
48
|
-
ingestInCache(
|
|
49
|
+
ingestInCache(
|
|
50
|
+
{ ...payload, userFeedMarkers: convertSubChannelMarkerResponse(userFeedMarkers) },
|
|
51
|
+
{ cachedAt },
|
|
52
|
+
);
|
|
49
53
|
|
|
50
54
|
const cacheKey = [
|
|
51
55
|
'read-user',
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { getActiveClient } from '~/client/api';
|
|
2
2
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
3
|
+
import {
|
|
4
|
+
convertChannelMarkerResponse,
|
|
5
|
+
convertSubChannelMarkerResponse,
|
|
6
|
+
convertUserMarkerResponse,
|
|
7
|
+
} from '~/utils/marker';
|
|
3
8
|
|
|
4
9
|
/**
|
|
5
10
|
* ```js
|
|
@@ -28,9 +33,20 @@ export const markAsDelivered = async (
|
|
|
28
33
|
{ messageId },
|
|
29
34
|
);
|
|
30
35
|
|
|
36
|
+
const { userMarkers, userEntityMarkers, userFeedMarkers, ...rest } = data;
|
|
37
|
+
|
|
31
38
|
const cachedAt = client.cache && Date.now();
|
|
32
39
|
|
|
33
|
-
if (client.cache)
|
|
40
|
+
if (client.cache)
|
|
41
|
+
ingestInCache(
|
|
42
|
+
{
|
|
43
|
+
userMarkers: convertUserMarkerResponse(userMarkers),
|
|
44
|
+
userEntityMarkers: convertChannelMarkerResponse(userEntityMarkers),
|
|
45
|
+
userFeedMarkers: convertSubChannelMarkerResponse(userFeedMarkers),
|
|
46
|
+
...rest,
|
|
47
|
+
},
|
|
48
|
+
{ cachedAt },
|
|
49
|
+
);
|
|
34
50
|
|
|
35
51
|
return true;
|
|
36
52
|
};
|
|
@@ -6,10 +6,13 @@ import {
|
|
|
6
6
|
connectClient,
|
|
7
7
|
disconnectClient,
|
|
8
8
|
generateFeedMarker,
|
|
9
|
-
|
|
9
|
+
generateUserMarkerResponse,
|
|
10
10
|
generateChannelMarker,
|
|
11
11
|
generateSubChannelMarker,
|
|
12
12
|
activeUser,
|
|
13
|
+
generateUserMarker,
|
|
14
|
+
generateChannelMarkerResponse,
|
|
15
|
+
generateSubChannelMarkerResponse,
|
|
13
16
|
} from '~/utils/tests';
|
|
14
17
|
|
|
15
18
|
import { markAsDelivered } from '../markAsDelivered';
|
|
@@ -19,6 +22,10 @@ const entityId = 'feed1';
|
|
|
19
22
|
const feedId = 'sub-ch1';
|
|
20
23
|
const messageId = 'message1';
|
|
21
24
|
|
|
25
|
+
const userMarkersResponse = generateUserMarkerResponse({ userId });
|
|
26
|
+
const channelMarkersResponse = generateChannelMarkerResponse({ userId, entityId });
|
|
27
|
+
const subChannelMarkerResponse = generateSubChannelMarkerResponse({ userId, feedId, entityId });
|
|
28
|
+
|
|
22
29
|
const expectedUserMarker = generateUserMarker({ userId });
|
|
23
30
|
const expectedChannelMarker = generateChannelMarker({ userId, entityId });
|
|
24
31
|
const expectedSubChannelMarker = generateSubChannelMarker({ userId, feedId, entityId });
|
|
@@ -26,9 +33,9 @@ const expectedFeedMarker = generateFeedMarker({ feedId, entityId });
|
|
|
26
33
|
|
|
27
34
|
const resolvedPutValue = {
|
|
28
35
|
data: {
|
|
29
|
-
userMarkers: [
|
|
30
|
-
userEntityMarkers: [
|
|
31
|
-
userFeedMarkers: [
|
|
36
|
+
userMarkers: [userMarkersResponse],
|
|
37
|
+
userEntityMarkers: [channelMarkersResponse],
|
|
38
|
+
userFeedMarkers: [subChannelMarkerResponse],
|
|
32
39
|
feedMarkers: [expectedFeedMarker],
|
|
33
40
|
} as Amity.MarkDeliveredPayload,
|
|
34
41
|
};
|
|
@@ -18,7 +18,7 @@ const getMyReactionsInCache = <T extends Amity.PostPayload | Amity.CommentPayloa
|
|
|
18
18
|
throw new Error(`Unknown event type`);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
return pullFromCache<Amity.
|
|
21
|
+
return pullFromCache<Amity.InternalComment>([domain, 'get', id])?.data?.myReactions || [];
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
const rebuildPayload = <T extends Amity.PostPayload | Amity.CommentPayload, K extends keyof T>(
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api/activeClient';
|
|
3
3
|
import { fireEvent } from '~/core/events';
|
|
4
|
+
import {
|
|
5
|
+
convertChannelMarkerResponse,
|
|
6
|
+
convertSubChannelMarkerResponse,
|
|
7
|
+
convertUserMarkerResponse,
|
|
8
|
+
} from '~/utils/marker';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* ```js
|
|
@@ -28,10 +33,20 @@ export const readingAPI = async (
|
|
|
28
33
|
{ messageFeedIds },
|
|
29
34
|
);
|
|
30
35
|
|
|
31
|
-
const {
|
|
36
|
+
const {
|
|
37
|
+
userEntityMarkers: userEntityMarkersPayload,
|
|
38
|
+
userFeedMarkers: userFeedMarkersPayload,
|
|
39
|
+
feedMarkers,
|
|
40
|
+
userMarkers: userMarkersPayload,
|
|
41
|
+
} = payload;
|
|
42
|
+
|
|
43
|
+
const userMarkers = convertUserMarkerResponse(userMarkersPayload);
|
|
44
|
+
const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
|
|
45
|
+
const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload);
|
|
32
46
|
|
|
33
47
|
const cachedAt = client.cache && Date.now();
|
|
34
|
-
if (client.cache)
|
|
48
|
+
if (client.cache)
|
|
49
|
+
ingestInCache({ userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers }, { cachedAt });
|
|
35
50
|
|
|
36
51
|
fireEvent('local.feedMarker.fetched', { feedMarkers });
|
|
37
52
|
fireEvent('local.channelMarker.fetched', { userEntityMarkers });
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api/activeClient';
|
|
3
3
|
import { fireEvent } from '~/core/events';
|
|
4
|
+
import {
|
|
5
|
+
convertChannelMarkerResponse,
|
|
6
|
+
convertSubChannelMarkerResponse,
|
|
7
|
+
convertUserMarkerResponse,
|
|
8
|
+
} from '~/utils/marker';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* ```js
|
|
@@ -27,10 +32,20 @@ export const startReadingAPI = async (
|
|
|
27
32
|
`/api/v1/markers/message-feeds/${messageFeedId}/start-reading`,
|
|
28
33
|
);
|
|
29
34
|
|
|
30
|
-
const {
|
|
35
|
+
const {
|
|
36
|
+
userEntityMarkers: userEntityMarkersPayload,
|
|
37
|
+
userFeedMarkers: userFeedMarkersPayload,
|
|
38
|
+
feedMarkers,
|
|
39
|
+
userMarkers: userMarkersPayload,
|
|
40
|
+
} = payload;
|
|
41
|
+
|
|
42
|
+
const userMarkers = convertUserMarkerResponse(userMarkersPayload);
|
|
43
|
+
const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
|
|
44
|
+
const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload);
|
|
31
45
|
|
|
32
46
|
const cachedAt = client.cache && Date.now();
|
|
33
|
-
if (client.cache)
|
|
47
|
+
if (client.cache)
|
|
48
|
+
ingestInCache({ userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers }, { cachedAt });
|
|
34
49
|
|
|
35
50
|
fireEvent('local.feedMarker.fetched', { feedMarkers });
|
|
36
51
|
fireEvent('local.channelMarker.fetched', { userEntityMarkers });
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ingestInCache } from '~/cache/api/ingestInCache';
|
|
2
2
|
import { getActiveClient } from '~/client/api/activeClient';
|
|
3
3
|
import { fireEvent } from '~/core/events';
|
|
4
|
+
import {
|
|
5
|
+
convertChannelMarkerResponse,
|
|
6
|
+
convertSubChannelMarkerResponse,
|
|
7
|
+
convertUserMarkerResponse,
|
|
8
|
+
} from '~/utils/marker';
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* ```js
|
|
@@ -27,10 +32,20 @@ export const stopReadingAPI = async (
|
|
|
27
32
|
`/api/v1/markers/message-feeds/${messageFeedId}/stop-reading`,
|
|
28
33
|
);
|
|
29
34
|
|
|
30
|
-
const {
|
|
35
|
+
const {
|
|
36
|
+
userEntityMarkers: userEntityMarkersPayload,
|
|
37
|
+
userFeedMarkers: userFeedMarkersPayload,
|
|
38
|
+
feedMarkers,
|
|
39
|
+
userMarkers: userMarkersPayload,
|
|
40
|
+
} = payload;
|
|
41
|
+
|
|
42
|
+
const userMarkers = convertUserMarkerResponse(userMarkersPayload);
|
|
43
|
+
const userEntityMarkers = convertChannelMarkerResponse(userEntityMarkersPayload);
|
|
44
|
+
const userFeedMarkers = convertSubChannelMarkerResponse(userFeedMarkersPayload);
|
|
31
45
|
|
|
32
46
|
const cachedAt = client.cache && Date.now();
|
|
33
|
-
if (client.cache)
|
|
47
|
+
if (client.cache)
|
|
48
|
+
ingestInCache({ userEntityMarkers, userFeedMarkers, feedMarkers, userMarkers }, { cachedAt });
|
|
34
49
|
|
|
35
50
|
fireEvent('local.feedMarker.fetched', { feedMarkers });
|
|
36
51
|
fireEvent('local.channelMarker.fetched', { userEntityMarkers });
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api/pullFromCache';
|
|
2
|
+
import { getActiveUser } from '~/client/api/activeUser';
|
|
3
|
+
import { getResolver } from '~/core/model';
|
|
4
|
+
|
|
5
|
+
export function getSubChannelHasMentioned(
|
|
6
|
+
channelId: string,
|
|
7
|
+
subChannelId: string,
|
|
8
|
+
marker?: Amity.SubChannelMarker,
|
|
9
|
+
) {
|
|
10
|
+
// Look for `unreadCount` in the marker param first
|
|
11
|
+
if (marker) {
|
|
12
|
+
return marker.hasMentioned;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const key = {
|
|
16
|
+
entityId: channelId,
|
|
17
|
+
feedId: subChannelId,
|
|
18
|
+
userId: getActiveUser()._id,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// If the marker param is not set, look in the cache
|
|
22
|
+
const cachedMarker = pullFromCache<Amity.SubChannelMarker>([
|
|
23
|
+
'subChannelMarker',
|
|
24
|
+
'get',
|
|
25
|
+
getResolver('subChannelMarker')(key),
|
|
26
|
+
])?.data;
|
|
27
|
+
|
|
28
|
+
if (cachedMarker) {
|
|
29
|
+
return cachedMarker.hasMentioned;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// and if not found in cache use default value `false`
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
@@ -2,6 +2,7 @@ import { onSessionStateChange } from '~/client/events/onSessionStateChange';
|
|
|
2
2
|
import { getMarkedMessageTopic, subscribeTopic } from '~/core/subscription';
|
|
3
3
|
import { setIntervalTask } from '~/utils/timer';
|
|
4
4
|
|
|
5
|
+
import { onOnline } from '~/client/utils/onOnline';
|
|
5
6
|
import { getSubChannel } from '../api/getSubChannel';
|
|
6
7
|
import { readingAPI } from '../api/readingAPI';
|
|
7
8
|
import { startReadingAPI } from '../api/startReadingAPI';
|
|
@@ -68,20 +69,6 @@ export const markReadEngineOnLoginHandler = () => {
|
|
|
68
69
|
};
|
|
69
70
|
};
|
|
70
71
|
|
|
71
|
-
/**
|
|
72
|
-
* the event callback when app is back to online
|
|
73
|
-
*/
|
|
74
|
-
const onOnline = () => {
|
|
75
|
-
const callback = () => {
|
|
76
|
-
// Start reading the reading subChannel again when resume from offline state
|
|
77
|
-
startReadingFromReadingList();
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
window.addEventListener('online', callback);
|
|
81
|
-
|
|
82
|
-
return () => window.removeEventListener('online', callback);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
72
|
const getParentChannelId = async (
|
|
86
73
|
subChannelId: Amity.SubChannel['subChannelId'],
|
|
87
74
|
): Promise<Amity.SubChannel['channelId']> => {
|
|
@@ -96,7 +83,12 @@ const getParentChannelId = async (
|
|
|
96
83
|
};
|
|
97
84
|
|
|
98
85
|
const registerEventListeners = () => {
|
|
99
|
-
disposers.push(
|
|
86
|
+
disposers.push(
|
|
87
|
+
onOnline(() => {
|
|
88
|
+
// Start reading the reading subChannel again when resume from offline state
|
|
89
|
+
startReadingFromReadingList();
|
|
90
|
+
}),
|
|
91
|
+
);
|
|
100
92
|
};
|
|
101
93
|
|
|
102
94
|
const registerTopicSubscribers = async (subChannelId: Amity.SubChannel['subChannelId']) => {
|
|
@@ -3,6 +3,7 @@ import { getSubChannelMarkers } from '~/marker/api';
|
|
|
3
3
|
import { convertFromRaw as convertMessageFromRaw } from '~/messageRepository/utils/prepareMessagePayload';
|
|
4
4
|
|
|
5
5
|
import { getSubChannelUnreadCount } from './getSubChannelUnreadCount';
|
|
6
|
+
import { getSubChannelHasMentioned } from './getSubChannelHasMentioned';
|
|
6
7
|
|
|
7
8
|
export const MARKER_INCLUDED_SUB_CHANNEL_TYPE = ['broadcast', 'conversation', 'community'];
|
|
8
9
|
|
|
@@ -29,6 +30,9 @@ export function convertFromRaw({
|
|
|
29
30
|
get unreadCount() {
|
|
30
31
|
return getSubChannelUnreadCount(channelId, messageFeedId);
|
|
31
32
|
},
|
|
33
|
+
get hasMentioned() {
|
|
34
|
+
return getSubChannelHasMentioned(channelId, messageFeedId);
|
|
35
|
+
},
|
|
32
36
|
...rest,
|
|
33
37
|
channelId: channelPublicId,
|
|
34
38
|
creatorId: creatorPublicId,
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { pullFromCache } from '~/cache/api/pullFromCache';
|
|
2
|
+
|
|
3
|
+
export const commentLinkedObject = (comment: Amity.InternalComment): Amity.Comment => {
|
|
4
|
+
return {
|
|
5
|
+
...comment,
|
|
6
|
+
get target(): Amity.CommentTarget {
|
|
7
|
+
const commentTypes: Amity.CommentTarget = {
|
|
8
|
+
type: comment.targetType,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
if (comment.targetType === 'user') {
|
|
12
|
+
return {
|
|
13
|
+
...commentTypes,
|
|
14
|
+
userId: comment.targetId,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (commentTypes.type === 'content') {
|
|
19
|
+
return {
|
|
20
|
+
...commentTypes,
|
|
21
|
+
contentId: comment.targetId,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (commentTypes.type === 'community') {
|
|
26
|
+
const cacheData = pullFromCache<Amity.Membership<'community'>>([
|
|
27
|
+
'communityUsers',
|
|
28
|
+
'get',
|
|
29
|
+
`${comment.targetId}#${comment.userId}`,
|
|
30
|
+
]);
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
...commentTypes,
|
|
34
|
+
communityId: comment.targetId,
|
|
35
|
+
creatorMember: cacheData?.data,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
type: 'unknown',
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function doConvert<
|
|
2
|
+
T extends
|
|
3
|
+
| Amity.UserEntityMarkerResponse
|
|
4
|
+
| Amity.UserMarkerResponse
|
|
5
|
+
| Amity.UserFeedMarkerResponse,
|
|
6
|
+
>(markerResponses: T[]): (Omit<T, 'isMentioned'> & { hasMentioned: boolean })[] {
|
|
7
|
+
return markerResponses.map(({ isMentioned, ...rest }) => ({
|
|
8
|
+
hasMentioned: isMentioned,
|
|
9
|
+
...rest,
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function convertUserMarkerResponse(
|
|
14
|
+
userMarkerResponse: Amity.UserMarkerResponse[],
|
|
15
|
+
): Amity.UserMarker[] {
|
|
16
|
+
return doConvert(userMarkerResponse);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function convertChannelMarkerResponse(
|
|
20
|
+
channelMarkerResponse: Amity.UserEntityMarkerResponse[],
|
|
21
|
+
): Amity.ChannelMarker[] {
|
|
22
|
+
return doConvert(channelMarkerResponse);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function convertSubChannelMarkerResponse(
|
|
26
|
+
subChannelMarkerResponse: Amity.UserFeedMarkerResponse[],
|
|
27
|
+
): Amity.SubChannelMarker[] {
|
|
28
|
+
return doConvert(subChannelMarkerResponse);
|
|
29
|
+
}
|
|
@@ -94,6 +94,7 @@ export const channel1: Amity.Channel = {
|
|
|
94
94
|
defaultSubChannelId: channelRaw1._id,
|
|
95
95
|
isUnreadCountSupport: true,
|
|
96
96
|
unreadCount: 0,
|
|
97
|
+
hasMentioned: false,
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
export const channel2: Amity.Channel = {
|
|
@@ -101,6 +102,7 @@ export const channel2: Amity.Channel = {
|
|
|
101
102
|
defaultSubChannelId: channelRaw2._id,
|
|
102
103
|
isUnreadCountSupport: true,
|
|
103
104
|
unreadCount: 0,
|
|
105
|
+
hasMentioned: false,
|
|
104
106
|
};
|
|
105
107
|
|
|
106
108
|
export const rawChannelUser = generateRawChannelUser();
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createComment } from '~/commentRepository/api';
|
|
2
|
+
import { communityUser11 } from '~/utils/tests';
|
|
2
3
|
import { file11 } from './file';
|
|
3
4
|
import { post11 } from './post';
|
|
4
5
|
import { user11, user12 } from './user';
|
|
5
6
|
|
|
6
|
-
export function generateComment(params?: Partial<Amity.
|
|
7
|
+
export function generateComment(params?: Partial<Amity.InternalComment>): Amity.Comment {
|
|
7
8
|
return {
|
|
8
9
|
path: '',
|
|
9
10
|
referenceType: 'post',
|
|
@@ -30,13 +31,22 @@ export function generateComment(params?: Partial<Amity.Comment>): Amity.Comment
|
|
|
30
31
|
myReactions: [],
|
|
31
32
|
reactionsCount: 0,
|
|
32
33
|
attachments: [],
|
|
34
|
+
targetId: 'test',
|
|
35
|
+
targetType: 'community',
|
|
33
36
|
...params,
|
|
37
|
+
|
|
38
|
+
// Link Object Section
|
|
39
|
+
target: {
|
|
40
|
+
type: 'community',
|
|
41
|
+
communityId: 'test',
|
|
42
|
+
creatorMember: communityUser11 as Amity.Membership<'community'>,
|
|
43
|
+
},
|
|
34
44
|
};
|
|
35
45
|
}
|
|
36
46
|
|
|
37
|
-
export const comment11: Amity.
|
|
47
|
+
export const comment11: Amity.InternalComment = generateComment();
|
|
38
48
|
|
|
39
|
-
export const imageComment11: Amity.
|
|
49
|
+
export const imageComment11: Amity.InternalComment = generateComment({
|
|
40
50
|
dataTypes: ['image'],
|
|
41
51
|
data: { text: '' },
|
|
42
52
|
attachments: [
|
|
@@ -47,7 +57,7 @@ export const imageComment11: Amity.Comment = generateComment({
|
|
|
47
57
|
],
|
|
48
58
|
});
|
|
49
59
|
|
|
50
|
-
export const textImageComment11: Amity.
|
|
60
|
+
export const textImageComment11: Amity.InternalComment = generateComment({
|
|
51
61
|
dataTypes: ['image', 'text'],
|
|
52
62
|
data: { text: 'test' },
|
|
53
63
|
attachments: [
|
|
@@ -58,7 +68,7 @@ export const textImageComment11: Amity.Comment = generateComment({
|
|
|
58
68
|
],
|
|
59
69
|
});
|
|
60
70
|
|
|
61
|
-
export const textMentionComment11: Amity.
|
|
71
|
+
export const textMentionComment11: Amity.InternalComment = generateComment({
|
|
62
72
|
mentionees: [
|
|
63
73
|
{
|
|
64
74
|
type: 'user',
|
|
@@ -67,17 +77,17 @@ export const textMentionComment11: Amity.Comment = generateComment({
|
|
|
67
77
|
],
|
|
68
78
|
});
|
|
69
79
|
|
|
70
|
-
export const comment12: Amity.
|
|
80
|
+
export const comment12: Amity.InternalComment = generateComment({
|
|
71
81
|
commentId: 'comment12',
|
|
72
82
|
parentId: comment11.commentId,
|
|
73
83
|
});
|
|
74
84
|
|
|
75
|
-
export const imageComment12: Amity.
|
|
85
|
+
export const imageComment12: Amity.InternalComment = generateComment({
|
|
76
86
|
...imageComment11,
|
|
77
87
|
commentId: comment12.commentId,
|
|
78
88
|
});
|
|
79
89
|
|
|
80
|
-
export const textImageComment12: Amity.
|
|
90
|
+
export const textImageComment12: Amity.InternalComment = generateComment({
|
|
81
91
|
...textImageComment11,
|
|
82
92
|
commentId: comment12.commentId,
|
|
83
93
|
});
|
|
@@ -87,6 +97,7 @@ export const textCommentPayload: Amity.CommentPayload = {
|
|
|
87
97
|
users: [user11],
|
|
88
98
|
commentChildren: [],
|
|
89
99
|
files: [],
|
|
100
|
+
communityUsers: [],
|
|
90
101
|
};
|
|
91
102
|
|
|
92
103
|
export const comment12Payload: Amity.CommentPayload = {
|
|
@@ -94,6 +105,7 @@ export const comment12Payload: Amity.CommentPayload = {
|
|
|
94
105
|
users: [user11],
|
|
95
106
|
commentChildren: [],
|
|
96
107
|
files: [file11],
|
|
108
|
+
communityUsers: [],
|
|
97
109
|
};
|
|
98
110
|
|
|
99
111
|
export const imageCommentPayload: Amity.CommentPayload = {
|
|
@@ -101,6 +113,7 @@ export const imageCommentPayload: Amity.CommentPayload = {
|
|
|
101
113
|
users: [user11],
|
|
102
114
|
commentChildren: [],
|
|
103
115
|
files: [file11],
|
|
116
|
+
communityUsers: [],
|
|
104
117
|
};
|
|
105
118
|
|
|
106
119
|
export const textImageCommentPayload: Amity.CommentPayload = {
|
|
@@ -108,6 +121,7 @@ export const textImageCommentPayload: Amity.CommentPayload = {
|
|
|
108
121
|
users: [user11, user12],
|
|
109
122
|
commentChildren: [],
|
|
110
123
|
files: [file11],
|
|
124
|
+
communityUsers: [],
|
|
111
125
|
};
|
|
112
126
|
|
|
113
127
|
export const textCommentMentionPayload: Amity.CommentPayload = {
|
|
@@ -115,6 +129,7 @@ export const textCommentMentionPayload: Amity.CommentPayload = {
|
|
|
115
129
|
commentChildren: [],
|
|
116
130
|
users: [user11],
|
|
117
131
|
files: [],
|
|
132
|
+
communityUsers: [],
|
|
118
133
|
};
|
|
119
134
|
|
|
120
135
|
export const postPayload: Amity.ProcessedPostPayload = {
|
|
@@ -134,6 +149,7 @@ export const textAndImageCommentMixedPayload: Amity.CommentPayload = {
|
|
|
134
149
|
users: [user11],
|
|
135
150
|
commentChildren: [],
|
|
136
151
|
files: [file11],
|
|
152
|
+
communityUsers: [],
|
|
137
153
|
};
|
|
138
154
|
|
|
139
155
|
export const deletedCommentPayload: Amity.CommentPayload = {
|
|
@@ -154,6 +170,7 @@ export const deletedCommentPayload: Amity.CommentPayload = {
|
|
|
154
170
|
users: [user11],
|
|
155
171
|
commentChildren: [],
|
|
156
172
|
files: [file11],
|
|
173
|
+
communityUsers: [],
|
|
157
174
|
};
|
|
158
175
|
|
|
159
176
|
// Response - BE
|
|
@@ -11,6 +11,21 @@ export const generateChannelMarker = ({
|
|
|
11
11
|
isDeleted: false,
|
|
12
12
|
createdAt: date,
|
|
13
13
|
updatedAt: date,
|
|
14
|
+
hasMentioned: false,
|
|
15
|
+
...params,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export const generateChannelMarkerResponse = ({
|
|
19
|
+
entityId,
|
|
20
|
+
...params
|
|
21
|
+
}: MakeRequired<Amity.ChannelMarker, 'entityId'>): Amity.UserEntityMarkerResponse => ({
|
|
22
|
+
entityId,
|
|
23
|
+
userId: activeUser.userId,
|
|
24
|
+
unreadCount: 0,
|
|
25
|
+
isDeleted: false,
|
|
26
|
+
createdAt: date,
|
|
27
|
+
updatedAt: date,
|
|
28
|
+
isMentioned: false,
|
|
14
29
|
...params,
|
|
15
30
|
});
|
|
16
31
|
|
|
@@ -27,6 +42,24 @@ export const generateSubChannelMarker = ({
|
|
|
27
42
|
unreadCount: 0,
|
|
28
43
|
createdAt: date,
|
|
29
44
|
updatedAt: date,
|
|
45
|
+
hasMentioned: false,
|
|
46
|
+
...params,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export const generateSubChannelMarkerResponse = ({
|
|
50
|
+
feedId,
|
|
51
|
+
entityId,
|
|
52
|
+
...params
|
|
53
|
+
}: MakeRequired<Amity.SubChannelMarker, 'feedId' | 'entityId'>): Amity.UserFeedMarkerResponse => ({
|
|
54
|
+
feedId,
|
|
55
|
+
entityId,
|
|
56
|
+
userId: activeUser.userId,
|
|
57
|
+
readToSegment: 0,
|
|
58
|
+
deliveredToSegment: 0,
|
|
59
|
+
unreadCount: 0,
|
|
60
|
+
createdAt: date,
|
|
61
|
+
updatedAt: date,
|
|
62
|
+
isMentioned: false,
|
|
30
63
|
...params,
|
|
31
64
|
});
|
|
32
65
|
|
|
@@ -61,6 +94,19 @@ export const generateFeedMarker = ({
|
|
|
61
94
|
export const generateUserMarker = (params?: Partial<Amity.UserMarker>): Amity.UserMarker => ({
|
|
62
95
|
lastSyncAt: date,
|
|
63
96
|
userId: activeUser.userId,
|
|
97
|
+
hasMentioned: false,
|
|
98
|
+
unreadCount: 0,
|
|
99
|
+
createdAt: date,
|
|
100
|
+
updatedAt: date,
|
|
101
|
+
...params,
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
export const generateUserMarkerResponse = (
|
|
105
|
+
params?: Partial<Amity.UserMarker>,
|
|
106
|
+
): Amity.UserMarkerResponse => ({
|
|
107
|
+
lastSyncAt: date,
|
|
108
|
+
userId: activeUser.userId,
|
|
109
|
+
isMentioned: false,
|
|
64
110
|
unreadCount: 0,
|
|
65
111
|
createdAt: date,
|
|
66
112
|
updatedAt: date,
|