@amityco/ts-sdk-react-native 6.35.2-412ed8b.0 → 6.35.2
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/.env +26 -26
- package/dist/index.cjs.js +864 -930
- package/dist/index.esm.js +791 -857
- package/dist/index.umd.js +3 -3
- package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts +2 -0
- package/dist/messagePreview/utils/updateMessagePreviewFromMessage.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannel.d.ts.map +1 -1
- package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts +1 -0
- package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts.map +1 -1
- package/dist/utils/dateTime.d.ts +2 -0
- package/dist/utils/dateTime.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/messagePreview/utils/updateMessagePreviewFromMessage.ts +131 -94
- package/src/subChannelRepository/observers/getSubChannel.ts +8 -49
- package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts +40 -105
- package/src/utils/dateTime.ts +3 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export declare const handleMessageCreatedOnSubChannel: (message: Amity.InternalMessage) => Promise<void>;
|
|
2
|
+
export declare const handleMessageUpdatedOnSubChannel: (message: Amity.InternalMessage) => Promise<void>;
|
|
1
3
|
export declare const handleMessageCreated: (message: Amity.InternalMessage) => Promise<void>;
|
|
2
4
|
export declare const handleMessageUpdated: (message: Amity.InternalMessage) => Promise<void>;
|
|
3
5
|
export declare const handleSubChannelUpdated: (subChannel: Amity.SubChannel) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateMessagePreviewFromMessage.d.ts","sourceRoot":"","sources":["../../../src/messagePreview/utils/updateMessagePreviewFromMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"updateMessagePreviewFromMessage.d.ts","sourceRoot":"","sources":["../../../src/messagePreview/utils/updateMessagePreviewFromMessage.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,gCAAgC,YAAmB,MAAM,eAAe,kBAyDpF,CAAC;AAEF,eAAO,MAAM,gCAAgC,YAAmB,MAAM,eAAe,kBAyCpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAmB,MAAM,eAAe,kBAgCxE,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAmB,MAAM,eAAe,kBA4CxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,eAAsB,MAAM,UAAU,kBAgDzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSubChannel.d.ts","sourceRoot":"","sources":["../../../src/subChannelRepository/observers/getSubChannel.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,iBACV,MAAM,UAAU,CAAC,cAAc,CAAC,YACpC,MAAM,kBAAkB,CAAC,MAAM,UAAU,CAAC,KACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"getSubChannel.d.ts","sourceRoot":"","sources":["../../../src/subChannelRepository/observers/getSubChannel.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,iBACV,MAAM,UAAU,CAAC,cAAc,CAAC,YACpC,MAAM,kBAAkB,CAAC,MAAM,UAAU,CAAC,KACnD,MAAM,YA2IR,CAAC"}
|
package/dist/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export declare class SubChannelLiveCollectionController extends LiveCollectionCo
|
|
|
10
10
|
startSubscription(): Amity.Unsubscriber[];
|
|
11
11
|
notifyChange({ origin, loading, error }: Amity.LiveCollectionNotifyParams): void;
|
|
12
12
|
applyFilter(data: Amity.SubChannel[]): Amity.SubChannel[];
|
|
13
|
+
isRelatedCollection(subChannelId: string): boolean | undefined;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=SubChannelLiveCollectionController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubChannelLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AA6BlF,qBAAa,kCAAmC,SAAQ,wBAAwB,CAC9E,YAAY,EACZ,KAAK,CAAC,wBAAwB,EAC9B,KAAK,CAAC,UAAU,EAChB,8BAA8B,CAC/B;IACC,OAAO,CAAC,qBAAqB,CAAkC;IAE/D,OAAO,CAAC,KAAK,CAAiC;gBAG5C,KAAK,EAAE,KAAK,CAAC,wBAAwB,EACrC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;IAmB1D,SAAS,CAAC,KAAK;cASC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU;IAIjF,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,YAAY,CAAC;IAI7D,iBAAiB;
|
|
1
|
+
{"version":3,"file":"SubChannelLiveCollectionController.d.ts","sourceRoot":"","sources":["../../../../src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;AAE1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AA6BlF,qBAAa,kCAAmC,SAAQ,wBAAwB,CAC9E,YAAY,EACZ,KAAK,CAAC,wBAAwB,EAC9B,KAAK,CAAC,UAAU,EAChB,8BAA8B,CAC/B;IACC,OAAO,CAAC,qBAAqB,CAAkC;IAE/D,OAAO,CAAC,KAAK,CAAiC;gBAG5C,KAAK,EAAE,KAAK,CAAC,wBAAwB,EACrC,QAAQ,EAAE,KAAK,CAAC,sBAAsB,CAAC,KAAK,CAAC,UAAU,CAAC;IAmB1D,SAAS,CAAC,KAAK;cASC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU;IAIjF,SAAS,CAAC,kBAAkB,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,OAAO,GACR,EAAE,KAAK,CAAC,sCAAsC,CAAC,YAAY,CAAC;IAI7D,iBAAiB;IAmJjB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,0BAA0B;IAuBzE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE;IAYpC,mBAAmB,CAAC,YAAY,EAAE,MAAM;CAIzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dateTime.d.ts","sourceRoot":"","sources":["../../src/utils/dateTime.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,eAAgB,MAAM,WAE9D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,53 @@
|
|
|
1
1
|
import { pullFromCache, pushToCache } from '~/cache/api';
|
|
2
2
|
import { updateSubChannelCache } from '../../subChannelRepository/utils/updateSubChannelCache';
|
|
3
|
+
import { getSubChannel } from '~/subChannelRepository/api/getSubChannel';
|
|
4
|
+
import { getActiveClient } from '~/client/api/activeClient';
|
|
5
|
+
import { convertDateStringToTimestamp } from '~/utils/dateTime';
|
|
6
|
+
|
|
7
|
+
const getMessagePreviewSetting = async () => {
|
|
8
|
+
const client = getActiveClient();
|
|
9
|
+
return client.getMessagePreviewSetting(false);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const getSubChannelCache = async (subChannelId: string): Promise<Amity.SubChannel> => {
|
|
13
|
+
let subChannelCache = pullFromCache<Amity.SubChannel>(['subChannel', 'get', subChannelId])?.data;
|
|
14
|
+
|
|
15
|
+
if (!subChannelCache) {
|
|
16
|
+
subChannelCache = (await getSubChannel(subChannelId)).data;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return subChannelCache;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const isLastestMessageOnSubchannel = (message: Amity.InternalMessage) => {
|
|
23
|
+
const cache = pullFromCache<Amity.InternalMessagePreview>([
|
|
24
|
+
'messagePreviewSubChannel',
|
|
25
|
+
'get',
|
|
26
|
+
message.subChannelId,
|
|
27
|
+
])?.data;
|
|
28
|
+
// The message payload from optimistic created event has no segment, so we check createdAt instead.
|
|
29
|
+
return (
|
|
30
|
+
!cache ||
|
|
31
|
+
cache.segment <= message.channelSegment ||
|
|
32
|
+
convertDateStringToTimestamp(cache.createdAt) <= convertDateStringToTimestamp(message.createdAt)
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const isLastestMessageOnChannel = (message: Amity.InternalMessage) => {
|
|
37
|
+
const cache = pullFromCache<Amity.InternalMessagePreview>([
|
|
38
|
+
'messagePreviewChannel',
|
|
39
|
+
'get',
|
|
40
|
+
message.channelId,
|
|
41
|
+
])?.data;
|
|
42
|
+
return (
|
|
43
|
+
!cache ||
|
|
44
|
+
convertDateStringToTimestamp(cache.createdAt) <= convertDateStringToTimestamp(message.createdAt)
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const handleMessageCreatedOnSubChannel = async (message: Amity.InternalMessage) => {
|
|
49
|
+
const messagePreviewSetting = await getMessagePreviewSetting();
|
|
3
50
|
|
|
4
|
-
export const handleMessageCreated = async (message: Amity.InternalMessage) => {
|
|
5
51
|
const {
|
|
6
52
|
channelId,
|
|
7
53
|
messageId: messagePreviewId,
|
|
@@ -15,69 +61,76 @@ export const handleMessageCreated = async (message: Amity.InternalMessage) => {
|
|
|
15
61
|
isDeleted,
|
|
16
62
|
} = message;
|
|
17
63
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
64
|
+
// 1. get subChannel from cache, if not exist fetch from server
|
|
65
|
+
const subChannelCache = await getSubChannelCache(subChannelId);
|
|
22
66
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
67
|
+
// 2. if messagePreviewSetting is NO_MESSAGE_PREVEIW, update only lastActiviy in subChannel cache
|
|
68
|
+
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) {
|
|
69
|
+
// 2.1 if the message is the latest message, update lastActivity to be createdAt in subChannel cache
|
|
70
|
+
if (
|
|
71
|
+
convertDateStringToTimestamp(subChannelCache.lastActivity) <
|
|
72
|
+
convertDateStringToTimestamp(createdAt)
|
|
73
|
+
)
|
|
74
|
+
updateSubChannelCache(message.subChannelId, subChannelCache as Amity.SubChannel, {
|
|
75
|
+
lastActivity: createdAt,
|
|
76
|
+
});
|
|
28
77
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
messagePreviewSubChannelCache.segment <= message.channelSegment
|
|
32
|
-
) {
|
|
33
|
-
const subChannelCache = pullFromCache<Amity.SubChannel>([
|
|
34
|
-
'subChannel',
|
|
35
|
-
'get',
|
|
36
|
-
subChannelId,
|
|
37
|
-
])?.data;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
38
80
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
messagePreviewId,
|
|
43
|
-
createdAt,
|
|
44
|
-
updatedAt,
|
|
45
|
-
subChannelId,
|
|
46
|
-
data,
|
|
47
|
-
dataType,
|
|
48
|
-
segment,
|
|
49
|
-
isDeleted,
|
|
50
|
-
subChannelUpdatedAt: subChannelCache?.updatedAt!,
|
|
51
|
-
subChannelName: subChannelCache?.displayName,
|
|
52
|
-
} as Amity.InternalMessagePreview);
|
|
81
|
+
// 3. if messagePreviewSetting is `NOT` NO_MESSAGE_PREVEIW, update messagePreviewSubChannel and subChannel cache
|
|
82
|
+
// 3.1 check if the message is the latest message, if not ignore the message.
|
|
83
|
+
if (!isLastestMessageOnSubchannel(message)) return;
|
|
53
84
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
85
|
+
// 3.2 if the message is the latest message, update messagePreviewSubChannel and subChannel cache
|
|
86
|
+
pushToCache(['messagePreviewSubChannel', 'get', message.subChannelId], {
|
|
87
|
+
channelId,
|
|
88
|
+
creatorId,
|
|
89
|
+
messagePreviewId,
|
|
90
|
+
createdAt,
|
|
91
|
+
updatedAt,
|
|
92
|
+
subChannelId,
|
|
93
|
+
data,
|
|
94
|
+
dataType,
|
|
95
|
+
segment,
|
|
96
|
+
isDeleted,
|
|
97
|
+
subChannelUpdatedAt: subChannelCache?.updatedAt!,
|
|
98
|
+
subChannelName: subChannelCache?.displayName,
|
|
99
|
+
} as Amity.InternalMessagePreview);
|
|
58
100
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
101
|
+
updateSubChannelCache(message.subChannelId, subChannelCache as Amity.SubChannel, {
|
|
102
|
+
lastActivity: createdAt,
|
|
103
|
+
messagePreviewId,
|
|
104
|
+
});
|
|
105
|
+
};
|
|
62
106
|
|
|
63
|
-
|
|
64
|
-
|
|
107
|
+
export const handleMessageUpdatedOnSubChannel = async (message: Amity.InternalMessage) => {
|
|
108
|
+
const {
|
|
109
|
+
channelId,
|
|
110
|
+
messageId: messagePreviewId,
|
|
111
|
+
creatorId,
|
|
112
|
+
createdAt,
|
|
113
|
+
updatedAt,
|
|
114
|
+
data,
|
|
115
|
+
dataType,
|
|
116
|
+
subChannelId,
|
|
117
|
+
channelSegment: segment,
|
|
118
|
+
isDeleted,
|
|
119
|
+
} = message;
|
|
120
|
+
|
|
121
|
+
const messagePreviewSubChannelCache = pullFromCache<Amity.InternalMessagePreview>([
|
|
122
|
+
'messagePreviewSubChannel',
|
|
65
123
|
'get',
|
|
66
|
-
message.
|
|
124
|
+
message.subChannelId,
|
|
67
125
|
])?.data;
|
|
68
126
|
|
|
127
|
+
// if messagePreviewSubChannel is not exist, ignore the message.
|
|
69
128
|
if (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
new Date(message.createdAt).valueOf()
|
|
129
|
+
messagePreviewSubChannelCache &&
|
|
130
|
+
messagePreviewSubChannelCache.messagePreviewId === message.messageId
|
|
73
131
|
) {
|
|
74
|
-
const subChannelCache =
|
|
75
|
-
|
|
76
|
-
'get',
|
|
77
|
-
subChannelId,
|
|
78
|
-
])?.data;
|
|
79
|
-
|
|
80
|
-
pushToCache(['messagePreviewChannel', 'get', message.channelId], {
|
|
132
|
+
const subChannelCache = await getSubChannelCache(subChannelId);
|
|
133
|
+
pushToCache(['messagePreviewSubChannel', 'get', message.subChannelId], {
|
|
81
134
|
channelId,
|
|
82
135
|
creatorId,
|
|
83
136
|
messagePreviewId,
|
|
@@ -88,13 +141,13 @@ export const handleMessageCreated = async (message: Amity.InternalMessage) => {
|
|
|
88
141
|
dataType,
|
|
89
142
|
segment,
|
|
90
143
|
isDeleted,
|
|
91
|
-
subChannelUpdatedAt: subChannelCache
|
|
92
|
-
subChannelName:
|
|
144
|
+
subChannelUpdatedAt: subChannelCache.updatedAt,
|
|
145
|
+
subChannelName: messagePreviewSubChannelCache.subChannelName,
|
|
93
146
|
} as Amity.InternalMessagePreview);
|
|
94
147
|
}
|
|
95
148
|
};
|
|
96
149
|
|
|
97
|
-
export const
|
|
150
|
+
export const handleMessageCreated = async (message: Amity.InternalMessage) => {
|
|
98
151
|
const {
|
|
99
152
|
channelId,
|
|
100
153
|
messageId: messagePreviewId,
|
|
@@ -108,36 +161,10 @@ export const handleMessageUpdated = async (message: Amity.InternalMessage) => {
|
|
|
108
161
|
isDeleted,
|
|
109
162
|
} = message;
|
|
110
163
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
*
|
|
114
|
-
*/
|
|
115
|
-
|
|
116
|
-
const messagePreviewSubChannelCache = pullFromCache<Amity.InternalMessagePreview>([
|
|
117
|
-
'messagePreviewSubChannel',
|
|
118
|
-
'get',
|
|
119
|
-
message.subChannelId,
|
|
120
|
-
])?.data;
|
|
164
|
+
if (isLastestMessageOnChannel(message)) {
|
|
165
|
+
const subChannelCache = await getSubChannelCache(subChannelId);
|
|
121
166
|
|
|
122
|
-
|
|
123
|
-
messagePreviewSubChannelCache &&
|
|
124
|
-
messagePreviewSubChannelCache.messagePreviewId === message.messageId
|
|
125
|
-
) {
|
|
126
|
-
/**
|
|
127
|
-
* subChannelCache not have messagePreviewId so update it directly
|
|
128
|
-
* because this function allow only corresponding subChannel
|
|
129
|
-
*/
|
|
130
|
-
const subChannelCache = pullFromCache<Amity.SubChannel>([
|
|
131
|
-
'subChannel',
|
|
132
|
-
'get',
|
|
133
|
-
subChannelId,
|
|
134
|
-
])?.data;
|
|
135
|
-
|
|
136
|
-
updateSubChannelCache(message.subChannelId, subChannelCache!, {
|
|
137
|
-
messagePreviewId,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
pushToCache(['messagePreviewSubChannel', 'get', message.subChannelId], {
|
|
167
|
+
pushToCache(['messagePreviewChannel', 'get', message.channelId], {
|
|
141
168
|
channelId,
|
|
142
169
|
creatorId,
|
|
143
170
|
messagePreviewId,
|
|
@@ -148,15 +175,30 @@ export const handleMessageUpdated = async (message: Amity.InternalMessage) => {
|
|
|
148
175
|
dataType,
|
|
149
176
|
segment,
|
|
150
177
|
isDeleted,
|
|
151
|
-
subChannelUpdatedAt:
|
|
178
|
+
subChannelUpdatedAt: subChannelCache?.updatedAt!,
|
|
152
179
|
subChannelName: subChannelCache?.displayName,
|
|
153
180
|
} as Amity.InternalMessagePreview);
|
|
154
181
|
}
|
|
182
|
+
};
|
|
155
183
|
|
|
184
|
+
export const handleMessageUpdated = async (message: Amity.InternalMessage) => {
|
|
156
185
|
/**
|
|
157
186
|
* Channel Case
|
|
158
187
|
*/
|
|
159
188
|
|
|
189
|
+
const {
|
|
190
|
+
channelId,
|
|
191
|
+
messageId: messagePreviewId,
|
|
192
|
+
creatorId,
|
|
193
|
+
createdAt,
|
|
194
|
+
updatedAt,
|
|
195
|
+
data,
|
|
196
|
+
dataType,
|
|
197
|
+
subChannelId,
|
|
198
|
+
channelSegment: segment,
|
|
199
|
+
isDeleted,
|
|
200
|
+
} = message;
|
|
201
|
+
|
|
160
202
|
const messagePreviewChannelCache = pullFromCache<Amity.InternalMessagePreview>([
|
|
161
203
|
'messagePreviewChannel',
|
|
162
204
|
'get',
|
|
@@ -167,12 +209,7 @@ export const handleMessageUpdated = async (message: Amity.InternalMessage) => {
|
|
|
167
209
|
messagePreviewChannelCache &&
|
|
168
210
|
messagePreviewChannelCache.messagePreviewId === message.messageId
|
|
169
211
|
) {
|
|
170
|
-
const subChannelCache =
|
|
171
|
-
'subChannel',
|
|
172
|
-
'get',
|
|
173
|
-
subChannelId,
|
|
174
|
-
])?.data;
|
|
175
|
-
|
|
212
|
+
const subChannelCache = await getSubChannelCache(subChannelId);
|
|
176
213
|
pushToCache(['messagePreviewChannel', 'get', message.channelId], {
|
|
177
214
|
channelId,
|
|
178
215
|
creatorId,
|
|
@@ -184,8 +221,8 @@ export const handleMessageUpdated = async (message: Amity.InternalMessage) => {
|
|
|
184
221
|
dataType,
|
|
185
222
|
segment,
|
|
186
223
|
isDeleted,
|
|
187
|
-
subChannelUpdatedAt: subChannelCache
|
|
188
|
-
subChannelName:
|
|
224
|
+
subChannelUpdatedAt: subChannelCache.updatedAt,
|
|
225
|
+
subChannelName: messagePreviewChannelCache.subChannelName,
|
|
189
226
|
} as Amity.InternalMessagePreview);
|
|
190
227
|
}
|
|
191
228
|
};
|
|
@@ -12,8 +12,8 @@ import {
|
|
|
12
12
|
onMessageUpdated,
|
|
13
13
|
} from '~/messageRepository';
|
|
14
14
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
handleMessageCreatedOnSubChannel,
|
|
16
|
+
handleMessageUpdatedOnSubChannel,
|
|
17
17
|
handleSubChannelUpdated,
|
|
18
18
|
} from '../../messagePreview/utils/updateMessagePreviewFromMessage';
|
|
19
19
|
import { getActiveClient } from '~/client';
|
|
@@ -117,28 +117,9 @@ export const getSubChannel = (
|
|
|
117
117
|
},
|
|
118
118
|
convertEventPayload(
|
|
119
119
|
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
120
|
-
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
121
|
-
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
122
|
-
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
123
|
-
|
|
124
|
-
await handleMessageCreated(message);
|
|
125
|
-
|
|
126
|
-
if (message.subChannelId !== subChannelId) return;
|
|
127
|
-
|
|
128
|
-
const subChannel = pullFromCache<Amity.SubChannel>([
|
|
129
|
-
'subChannel',
|
|
130
|
-
'get',
|
|
131
|
-
subChannelId,
|
|
132
|
-
])?.data;
|
|
133
|
-
if (!subChannel) return;
|
|
134
|
-
|
|
135
|
-
updateSubChannelCache(message.subChannelId, subChannel, {
|
|
136
|
-
messagePreviewId: message.messageId,
|
|
137
|
-
});
|
|
138
|
-
};
|
|
139
|
-
|
|
140
120
|
return onMessageCreatedMqtt(async (message: Amity.InternalMessage) => {
|
|
141
|
-
|
|
121
|
+
if (message.subChannelId !== subChannelId) return;
|
|
122
|
+
await handleMessageCreatedOnSubChannel(message);
|
|
142
123
|
callback(message);
|
|
143
124
|
});
|
|
144
125
|
},
|
|
@@ -147,28 +128,9 @@ export const getSubChannel = (
|
|
|
147
128
|
),
|
|
148
129
|
convertEventPayload(
|
|
149
130
|
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
150
|
-
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
151
|
-
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
152
|
-
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
153
|
-
|
|
154
|
-
await handleMessageCreated(message);
|
|
155
|
-
|
|
156
|
-
if (message.subChannelId !== subChannelId) return;
|
|
157
|
-
|
|
158
|
-
const subChannel = pullFromCache<Amity.SubChannel>([
|
|
159
|
-
'subChannel',
|
|
160
|
-
'get',
|
|
161
|
-
subChannelId,
|
|
162
|
-
])?.data;
|
|
163
|
-
if (!subChannel) return;
|
|
164
|
-
|
|
165
|
-
updateSubChannelCache(message.subChannelId, subChannel, {
|
|
166
|
-
messagePreviewId: message.messageId,
|
|
167
|
-
});
|
|
168
|
-
};
|
|
169
|
-
|
|
170
131
|
return onMessageCreatedLocal(async (message: Amity.InternalMessage) => {
|
|
171
|
-
|
|
132
|
+
if (message.subChannelId !== subChannelId) return;
|
|
133
|
+
await handleMessageCreatedOnSubChannel(message);
|
|
172
134
|
callback(message);
|
|
173
135
|
});
|
|
174
136
|
},
|
|
@@ -180,11 +142,9 @@ export const getSubChannel = (
|
|
|
180
142
|
const updateMessagePreview = async (message: Amity.InternalMessage) => {
|
|
181
143
|
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
182
144
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
183
|
-
|
|
184
145
|
if (message.subChannelId !== subChannelId) return;
|
|
185
146
|
|
|
186
|
-
|
|
187
|
-
|
|
147
|
+
handleMessageUpdatedOnSubChannel(message);
|
|
188
148
|
callback(message);
|
|
189
149
|
|
|
190
150
|
// TODO: messageFeeds on onMessageUpdated event does not have messagePreviewId and it will save before that cause messagePreview
|
|
@@ -201,11 +161,10 @@ export const getSubChannel = (
|
|
|
201
161
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
202
162
|
|
|
203
163
|
if (message.subChannelId !== subChannelId) return;
|
|
204
|
-
|
|
205
164
|
if (
|
|
206
165
|
messagePreviewSetting === Amity.MessagePreviewSetting.MESSAGE_PREVIEW_INCLUDE_DELETED
|
|
207
166
|
)
|
|
208
|
-
await
|
|
167
|
+
await handleMessageUpdatedOnSubChannel(message);
|
|
209
168
|
|
|
210
169
|
if (
|
|
211
170
|
messagePreviewSetting ===
|
package/src/subChannelRepository/observers/getSubChannels/SubChannelLiveCollectionController.ts
CHANGED
|
@@ -22,14 +22,14 @@ import { getActiveClient } from '~/client';
|
|
|
22
22
|
import {
|
|
23
23
|
getSubChannelMessagePreview,
|
|
24
24
|
getSubChannelMessagePreviewWithUser,
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
handleMessageCreatedOnSubChannel,
|
|
26
|
+
handleMessageUpdatedOnSubChannel,
|
|
27
27
|
} from '~/messagePreview/utils';
|
|
28
28
|
import { getSubChannel } from '~/subChannelRepository/api/getSubChannel';
|
|
29
|
-
import { updateSubChannelCache } from '~/subChannelRepository/utils/updateSubChannelCache';
|
|
30
29
|
import { prepareSubChannelPayload } from '~/subChannelRepository/utils';
|
|
31
30
|
import { onSubChannelFetched } from '~/subChannelRepository/events/onSubChannelFetched';
|
|
32
31
|
import { onSubChannelUnreadUpdatedLocal } from '~/marker/events/onSubChannelUnreadUpdatedLocal';
|
|
32
|
+
import { convertDateStringToTimestamp } from '~/utils/dateTime';
|
|
33
33
|
|
|
34
34
|
export class SubChannelLiveCollectionController extends LiveCollectionController<
|
|
35
35
|
'subChannel',
|
|
@@ -91,19 +91,18 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
91
91
|
{
|
|
92
92
|
fn: callback => {
|
|
93
93
|
return onSubChannelUpdated(async (subChannel: Amity.SubChannel) => {
|
|
94
|
-
|
|
95
|
-
this.cacheKey,
|
|
96
|
-
)?.data;
|
|
97
|
-
|
|
98
|
-
if (!collection || !collection.data.includes(subChannel.subChannelId)) return;
|
|
99
|
-
|
|
94
|
+
if (!this.isRelatedCollection(subChannel.subChannelId)) return;
|
|
100
95
|
const client = getActiveClient();
|
|
101
|
-
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
102
96
|
|
|
97
|
+
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
103
98
|
if (messagePreviewSetting !== Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) {
|
|
104
99
|
const messagePreview = getSubChannelMessagePreview(subChannel.subChannelId);
|
|
105
100
|
|
|
106
|
-
if (
|
|
101
|
+
if (
|
|
102
|
+
messagePreview?.subChannelId === subChannel.subChannelId &&
|
|
103
|
+
convertDateStringToTimestamp(subChannel.updatedAt!) >
|
|
104
|
+
convertDateStringToTimestamp(messagePreview.subChannelUpdatedAt)
|
|
105
|
+
) {
|
|
107
106
|
pushToCache(['messagePreviewSubChannel', 'get', subChannel.subChannelId], {
|
|
108
107
|
...messagePreview,
|
|
109
108
|
subChannelName: subChannel.displayName,
|
|
@@ -118,98 +117,33 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
118
117
|
action: 'onUpdate',
|
|
119
118
|
},
|
|
120
119
|
{
|
|
121
|
-
fn:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
handleMessageCreated(message);
|
|
129
|
-
};
|
|
130
|
-
return onMessageCreatedMqtt(async message => {
|
|
131
|
-
const cacheData = pullFromCache<Amity.SubChannel>([
|
|
132
|
-
'subChannel',
|
|
133
|
-
'get',
|
|
134
|
-
message.subChannelId,
|
|
135
|
-
]);
|
|
136
|
-
|
|
137
|
-
if (!cacheData) return;
|
|
138
|
-
|
|
139
|
-
const collection = pullFromCache<Amity.SubChannelLiveCollectionCache>(
|
|
140
|
-
this.cacheKey,
|
|
141
|
-
)?.data;
|
|
142
|
-
|
|
143
|
-
if (!collection || !collection.data.includes(message.subChannelId)) return;
|
|
144
|
-
|
|
145
|
-
await updateMessagePreview(message);
|
|
146
|
-
|
|
147
|
-
const subChannelCache = pullFromCache<Amity.SubChannel>([
|
|
148
|
-
'subChannel',
|
|
149
|
-
'get',
|
|
150
|
-
message.subChannelId,
|
|
151
|
-
])?.data;
|
|
152
|
-
if (!subChannelCache) return;
|
|
153
|
-
|
|
154
|
-
updateSubChannelCache(message.subChannelId, subChannelCache, {
|
|
155
|
-
lastActivity: message.createdAt,
|
|
156
|
-
messagePreviewId: message.messageId,
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
callback({
|
|
160
|
-
...cacheData.data,
|
|
161
|
-
messagePreviewId: message.messageId,
|
|
162
|
-
subChannelId: message.subChannelId,
|
|
163
|
-
lastActivity: message.createdAt,
|
|
120
|
+
fn: convertEventPayload(
|
|
121
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
122
|
+
return onMessageCreatedMqtt(async message => {
|
|
123
|
+
if (!this.isRelatedCollection(message.subChannelId)) return;
|
|
124
|
+
// Update related cache including message preview and subChannel cache (lastActivity, messagePreviewId)
|
|
125
|
+
await handleMessageCreatedOnSubChannel(message);
|
|
126
|
+
callback(message);
|
|
164
127
|
});
|
|
165
|
-
}
|
|
166
|
-
|
|
128
|
+
},
|
|
129
|
+
'subChannelId',
|
|
130
|
+
'subChannel',
|
|
131
|
+
),
|
|
167
132
|
action: 'onUpdate',
|
|
168
133
|
},
|
|
169
134
|
{
|
|
170
|
-
fn:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
message
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (!cacheData) return;
|
|
179
|
-
|
|
180
|
-
const collection = pullFromCache<Amity.SubChannelLiveCollectionCache>(
|
|
181
|
-
this.cacheKey,
|
|
182
|
-
)?.data;
|
|
183
|
-
|
|
184
|
-
if (!collection || !collection.data.includes(message.subChannelId)) return;
|
|
185
|
-
|
|
186
|
-
const client = getActiveClient();
|
|
187
|
-
const messagePreviewSetting = await client.getMessagePreviewSetting(false);
|
|
188
|
-
|
|
189
|
-
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
190
|
-
|
|
191
|
-
handleMessageCreated(message);
|
|
192
|
-
|
|
193
|
-
const subChannelCache = pullFromCache<Amity.SubChannel>([
|
|
194
|
-
'subChannel',
|
|
195
|
-
'get',
|
|
196
|
-
message.subChannelId,
|
|
197
|
-
])?.data;
|
|
198
|
-
if (!subChannelCache) return;
|
|
199
|
-
|
|
200
|
-
updateSubChannelCache(message.subChannelId, subChannelCache, {
|
|
201
|
-
lastActivity: message.createdAt,
|
|
202
|
-
messagePreviewId: message.messageId,
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
callback({
|
|
206
|
-
...cacheData.data,
|
|
207
|
-
messagePreviewId: message.messageId,
|
|
208
|
-
subChannelId: message.subChannelId,
|
|
209
|
-
lastActivity: message.createdAt,
|
|
135
|
+
fn: convertEventPayload(
|
|
136
|
+
(callback: Amity.Listener<Amity.InternalMessage>) => {
|
|
137
|
+
return onMessageCreatedLocal(async message => {
|
|
138
|
+
if (!this.isRelatedCollection(message.subChannelId)) return;
|
|
139
|
+
// Update related cache including message preview and subChannel cache (lastActivity, messagePreviewId)
|
|
140
|
+
await handleMessageCreatedOnSubChannel(message);
|
|
141
|
+
callback(message);
|
|
210
142
|
});
|
|
211
|
-
}
|
|
212
|
-
|
|
143
|
+
},
|
|
144
|
+
'subChannelId',
|
|
145
|
+
'subChannel',
|
|
146
|
+
),
|
|
213
147
|
action: 'onUpdate',
|
|
214
148
|
},
|
|
215
149
|
{
|
|
@@ -248,7 +182,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
248
182
|
|
|
249
183
|
if (!collection || !collection.data.includes(message.subChannelId)) return;
|
|
250
184
|
|
|
251
|
-
|
|
185
|
+
handleMessageUpdatedOnSubChannel(message);
|
|
252
186
|
|
|
253
187
|
callback(message);
|
|
254
188
|
};
|
|
@@ -268,11 +202,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
268
202
|
|
|
269
203
|
if (messagePreviewSetting === Amity.MessagePreviewSetting.NO_MESSAGE_PREVIEW) return;
|
|
270
204
|
|
|
271
|
-
|
|
272
|
-
this.cacheKey,
|
|
273
|
-
)?.data;
|
|
274
|
-
|
|
275
|
-
if (!collection || !collection.data.includes(message.subChannelId)) return;
|
|
205
|
+
if (!this.isRelatedCollection(message.subChannelId)) return;
|
|
276
206
|
|
|
277
207
|
if (
|
|
278
208
|
messagePreviewSetting ===
|
|
@@ -280,7 +210,7 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
280
210
|
) {
|
|
281
211
|
await getSubChannel(message.subChannelId);
|
|
282
212
|
} else {
|
|
283
|
-
await
|
|
213
|
+
await handleMessageUpdatedOnSubChannel(message);
|
|
284
214
|
}
|
|
285
215
|
|
|
286
216
|
callback(message);
|
|
@@ -334,4 +264,9 @@ export class SubChannelLiveCollectionController extends LiveCollectionController
|
|
|
334
264
|
|
|
335
265
|
return subChannels;
|
|
336
266
|
}
|
|
267
|
+
|
|
268
|
+
isRelatedCollection(subChannelId: string) {
|
|
269
|
+
const collection = pullFromCache<Amity.SubChannelLiveCollectionCache>(this.cacheKey)?.data;
|
|
270
|
+
return collection && collection.data.includes(subChannelId);
|
|
271
|
+
}
|
|
337
272
|
}
|