@stream-io/feeds-client 1.0.0 → 1.1.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/CHANGELOG.md +9 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react-bindings.js +5 -19
- package/dist/cjs/react-bindings.js.map +1 -1
- package/dist/es/index.mjs +2 -2
- package/dist/es/index.mjs.map +1 -1
- package/dist/es/react-bindings.mjs +5 -19
- package/dist/es/react-bindings.mjs.map +1 -1
- package/dist/{feeds-client-tw63OGrd.js → feeds-client-C1c6lcS3.js} +529 -155
- package/dist/feeds-client-C1c6lcS3.js.map +1 -0
- package/dist/{feeds-client-B03y08Kq.mjs → feeds-client-jtUTE4AC.mjs} +529 -155
- package/dist/feeds-client-jtUTE4AC.mjs.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts +6 -2
- package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts.map +1 -1
- package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts +6 -2
- package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-deleted.d.ts +3 -2
- package/dist/types/feed/event-handlers/activity/handle-activity-deleted.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-feedback.d.ts +5 -0
- package/dist/types/feed/event-handlers/activity/handle-activity-feedback.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts +3 -2
- package/dist/types/feed/event-handlers/activity/handle-activity-pinned.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts +3 -2
- package/dist/types/feed/event-handlers/activity/handle-activity-unpinned.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/index.d.ts +3 -1
- package/dist/types/feed/event-handlers/activity/index.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity-updater.d.ts +1 -0
- package/dist/types/feed/event-handlers/activity-updater.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/add-aggregated-activities-to-state.d.ts +1 -1
- package/dist/types/feed/event-handlers/add-aggregated-activities-to-state.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-added.d.ts +6 -5
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-added.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts +6 -5
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts +6 -5
- package/dist/types/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/feed/handle-feed-deleted.d.ts +4 -0
- package/dist/types/feed/event-handlers/feed/handle-feed-deleted.d.ts.map +1 -0
- package/dist/types/feed/event-handlers/feed/handle-feed-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/feed/index.d.ts +1 -0
- package/dist/types/feed/event-handlers/feed/index.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts +3 -2
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-added.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts +3 -2
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-removed.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts +3 -2
- package/dist/types/feed/event-handlers/feed-member/handle-feed-member-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/follow/handle-follow-updated.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +3 -2
- package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +1 -1
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/feeds-client.d.ts +24 -1
- package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
- package/dist/types/gen/feeds/FeedsApi.d.ts +6 -4
- package/dist/types/gen/feeds/FeedsApi.d.ts.map +1 -1
- package/dist/types/gen/models/index.d.ts +40 -2
- package/dist/types/gen/models/index.d.ts.map +1 -1
- package/dist/types/utils/state-update-queue.d.ts +11 -2
- package/dist/types/utils/state-update-queue.d.ts.map +1 -1
- package/dist/types/utils/unique-array-merge.d.ts +1 -1
- package/dist/types/utils/unique-array-merge.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts +6 -20
- package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivitySeen.ts +6 -20
- package/src/feed/event-handlers/activity/handle-activity-deleted.ts +28 -2
- package/src/feed/event-handlers/activity/handle-activity-feedback.ts +17 -7
- package/src/feed/event-handlers/activity/handle-activity-pinned.ts +25 -3
- package/src/feed/event-handlers/activity/handle-activity-unpinned.ts +25 -2
- package/src/feed/event-handlers/activity/index.ts +3 -1
- package/src/feed/event-handlers/add-aggregated-activities-to-state.ts +11 -2
- package/src/feed/event-handlers/bookmark/handle-bookmark-added.ts +20 -11
- package/src/feed/event-handlers/bookmark/handle-bookmark-deleted.ts +21 -11
- package/src/feed/event-handlers/bookmark/handle-bookmark-updated.ts +24 -10
- package/src/feed/event-handlers/feed/handle-feed-deleted.ts +12 -0
- package/src/feed/event-handlers/feed/handle-feed-updated.ts +8 -0
- package/src/feed/event-handlers/feed/index.ts +1 -0
- package/src/feed/event-handlers/feed-member/handle-feed-member-added.ts +25 -2
- package/src/feed/event-handlers/feed-member/handle-feed-member-removed.ts +25 -2
- package/src/feed/event-handlers/feed-member/handle-feed-member-updated.ts +25 -2
- package/src/feed/event-handlers/follow/handle-follow-updated.ts +14 -0
- package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.ts +68 -2
- package/src/feed/event-handlers/story-feeds/handle-story-feeds-updated.ts +1 -1
- package/src/feed/feed.ts +7 -5
- package/src/feeds-client/feeds-client.ts +255 -0
- package/src/gen/feeds/FeedsApi.ts +79 -12
- package/src/gen/model-decoders/decoders.ts +7 -0
- package/src/gen/models/index.ts +66 -4
- package/src/utils/state-update-queue.ts +42 -28
- package/src/utils/unique-array-merge.ts +11 -3
- package/dist/feeds-client-B03y08Kq.mjs.map +0 -1
- package/dist/feeds-client-tw63OGrd.js.map +0 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts +0 -12
- package/dist/types/feed/event-handlers/activity/handle-activity-marked.d.ts.map +0 -1
- package/src/feed/event-handlers/activity/handle-activity-marked.ts +0 -68
|
@@ -1141,6 +1141,12 @@ decoders.QueryBookmarksResponse = (input) => {
|
|
|
1141
1141
|
};
|
|
1142
1142
|
return decode(typeMappings, input);
|
|
1143
1143
|
};
|
|
1144
|
+
decoders.QueryCollectionsResponse = (input) => {
|
|
1145
|
+
const typeMappings = {
|
|
1146
|
+
collections: { type: "CollectionResponse", isSingle: false }
|
|
1147
|
+
};
|
|
1148
|
+
return decode(typeMappings, input);
|
|
1149
|
+
};
|
|
1144
1150
|
decoders.QueryCommentReactionsResponse = (input) => {
|
|
1145
1151
|
const typeMappings = {
|
|
1146
1152
|
reactions: { type: "FeedsReactionResponse", isSingle: false }
|
|
@@ -1715,6 +1721,21 @@ class FeedsApi {
|
|
|
1715
1721
|
decoders.DeleteActivitiesResponse?.(response.body);
|
|
1716
1722
|
return { ...response.body, metadata: response.metadata };
|
|
1717
1723
|
}
|
|
1724
|
+
async trackActivityMetrics(request) {
|
|
1725
|
+
const body = {
|
|
1726
|
+
events: request?.events
|
|
1727
|
+
};
|
|
1728
|
+
const response = await this.apiClient.sendRequest(
|
|
1729
|
+
"POST",
|
|
1730
|
+
"/api/v2/feeds/activities/metrics/track",
|
|
1731
|
+
void 0,
|
|
1732
|
+
void 0,
|
|
1733
|
+
body,
|
|
1734
|
+
"application/json"
|
|
1735
|
+
);
|
|
1736
|
+
decoders.TrackActivityMetricsResponse?.(response.body);
|
|
1737
|
+
return { ...response.body, metadata: response.metadata };
|
|
1738
|
+
}
|
|
1718
1739
|
async queryActivities(request) {
|
|
1719
1740
|
const body = {
|
|
1720
1741
|
enrich_own_fields: request?.enrich_own_fields,
|
|
@@ -2127,6 +2148,25 @@ class FeedsApi {
|
|
|
2127
2148
|
decoders.CreateCollectionsResponse?.(response.body);
|
|
2128
2149
|
return { ...response.body, metadata: response.metadata };
|
|
2129
2150
|
}
|
|
2151
|
+
async queryCollections(request) {
|
|
2152
|
+
const body = {
|
|
2153
|
+
limit: request?.limit,
|
|
2154
|
+
next: request?.next,
|
|
2155
|
+
prev: request?.prev,
|
|
2156
|
+
sort: request?.sort,
|
|
2157
|
+
filter: request?.filter
|
|
2158
|
+
};
|
|
2159
|
+
const response = await this.apiClient.sendRequest(
|
|
2160
|
+
"POST",
|
|
2161
|
+
"/api/v2/feeds/collections/query",
|
|
2162
|
+
void 0,
|
|
2163
|
+
void 0,
|
|
2164
|
+
body,
|
|
2165
|
+
"application/json"
|
|
2166
|
+
);
|
|
2167
|
+
decoders.QueryCollectionsResponse?.(response.body);
|
|
2168
|
+
return { ...response.body, metadata: response.metadata };
|
|
2169
|
+
}
|
|
2130
2170
|
async getComments(request) {
|
|
2131
2171
|
const queryParams = {
|
|
2132
2172
|
object_id: request?.object_id,
|
|
@@ -2186,6 +2226,7 @@ class FeedsApi {
|
|
|
2186
2226
|
async queryComments(request) {
|
|
2187
2227
|
const body = {
|
|
2188
2228
|
filter: request?.filter,
|
|
2229
|
+
id_around: request?.id_around,
|
|
2189
2230
|
limit: request?.limit,
|
|
2190
2231
|
next: request?.next,
|
|
2191
2232
|
prev: request?.prev,
|
|
@@ -3217,15 +3258,26 @@ class FeedsApi {
|
|
|
3217
3258
|
decoders.UpdateUserGroupResponse?.(response.body);
|
|
3218
3259
|
return { ...response.body, metadata: response.metadata };
|
|
3219
3260
|
}
|
|
3220
|
-
async
|
|
3261
|
+
async addUserGroupMembers(request) {
|
|
3221
3262
|
const pathParams = {
|
|
3222
3263
|
id: request?.id
|
|
3223
3264
|
};
|
|
3224
|
-
const
|
|
3225
|
-
|
|
3265
|
+
const body = {
|
|
3266
|
+
member_ids: request?.member_ids,
|
|
3267
|
+
team_id: request?.team_id
|
|
3268
|
+
};
|
|
3269
|
+
const response = await this.apiClient.sendRequest(
|
|
3270
|
+
"POST",
|
|
3271
|
+
"/api/v2/usergroups/{id}/members",
|
|
3272
|
+
pathParams,
|
|
3273
|
+
void 0,
|
|
3274
|
+
body,
|
|
3275
|
+
"application/json"
|
|
3276
|
+
);
|
|
3277
|
+
decoders.AddUserGroupMembersResponse?.(response.body);
|
|
3226
3278
|
return { ...response.body, metadata: response.metadata };
|
|
3227
3279
|
}
|
|
3228
|
-
async
|
|
3280
|
+
async removeUserGroupMembers(request) {
|
|
3229
3281
|
const pathParams = {
|
|
3230
3282
|
id: request?.id
|
|
3231
3283
|
};
|
|
@@ -3235,13 +3287,13 @@ class FeedsApi {
|
|
|
3235
3287
|
};
|
|
3236
3288
|
const response = await this.apiClient.sendRequest(
|
|
3237
3289
|
"POST",
|
|
3238
|
-
"/api/v2/usergroups/{id}/members",
|
|
3290
|
+
"/api/v2/usergroups/{id}/members/delete",
|
|
3239
3291
|
pathParams,
|
|
3240
3292
|
void 0,
|
|
3241
3293
|
body,
|
|
3242
3294
|
"application/json"
|
|
3243
3295
|
);
|
|
3244
|
-
decoders.
|
|
3296
|
+
decoders.RemoveUserGroupMembersResponse?.(response.body);
|
|
3245
3297
|
return { ...response.body, metadata: response.metadata };
|
|
3246
3298
|
}
|
|
3247
3299
|
async queryUsers(request) {
|
|
@@ -4129,7 +4181,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
4129
4181
|
};
|
|
4130
4182
|
return result;
|
|
4131
4183
|
};
|
|
4132
|
-
const version = "1.
|
|
4184
|
+
const version = "1.1.0";
|
|
4133
4185
|
const axios = axiosImport.default ?? axiosImport;
|
|
4134
4186
|
class ApiClient {
|
|
4135
4187
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
@@ -4945,7 +4997,7 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4945
4997
|
});
|
|
4946
4998
|
return existingArray.concat(filteredArrayToMerge);
|
|
4947
4999
|
};
|
|
4948
|
-
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
5000
|
+
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey, position) => {
|
|
4949
5001
|
const existingMap = /* @__PURE__ */ new Map();
|
|
4950
5002
|
(existingArray ?? []).forEach((item) => {
|
|
4951
5003
|
existingMap.set(getKey(item), item);
|
|
@@ -4961,9 +5013,14 @@ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4961
5013
|
existingMap.delete(getKey(originalItem));
|
|
4962
5014
|
}
|
|
4963
5015
|
});
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
|
|
5016
|
+
const newItemsInOrder = arrayToMerge.filter(
|
|
5017
|
+
(item) => existingMap.has(getKey(item))
|
|
5018
|
+
);
|
|
5019
|
+
if (position === "end") {
|
|
5020
|
+
newItemsInOrder.forEach((item) => result.push(item));
|
|
5021
|
+
} else {
|
|
5022
|
+
result.unshift(...newItemsInOrder);
|
|
5023
|
+
}
|
|
4967
5024
|
return result;
|
|
4968
5025
|
};
|
|
4969
5026
|
const Constants = {
|
|
@@ -5010,24 +5067,25 @@ function getStateUpdateQueueId(...args) {
|
|
|
5010
5067
|
const [data, prefix] = args;
|
|
5011
5068
|
const toJoin = [prefix];
|
|
5012
5069
|
switch (prefix) {
|
|
5070
|
+
case "activity-deleted": {
|
|
5071
|
+
return toJoin.concat([data.activity.id]).join("-");
|
|
5072
|
+
}
|
|
5073
|
+
case "activity-pinned":
|
|
5074
|
+
case "activity-unpinned": {
|
|
5075
|
+
return toJoin.concat([data.pinned_activity.activity.id]).join("-");
|
|
5076
|
+
}
|
|
5013
5077
|
case "activity-updated": {
|
|
5014
5078
|
return toJoin.concat([data.activity.id]).join("-");
|
|
5015
5079
|
}
|
|
5016
5080
|
case "activity-reaction-created":
|
|
5017
5081
|
case "activity-reaction-deleted":
|
|
5018
5082
|
case "activity-reaction-updated": {
|
|
5019
|
-
return toJoin.concat([
|
|
5020
|
-
data.activity.id,
|
|
5021
|
-
data.reaction.type
|
|
5022
|
-
]).join("-");
|
|
5083
|
+
return toJoin.concat([data.activity.id, data.reaction.type]).join("-");
|
|
5023
5084
|
}
|
|
5024
5085
|
case "comment-reaction-created":
|
|
5025
5086
|
case "comment-reaction-deleted":
|
|
5026
5087
|
case "comment-reaction-updated": {
|
|
5027
|
-
return toJoin.concat([
|
|
5028
|
-
data.comment.id,
|
|
5029
|
-
data.reaction.type
|
|
5030
|
-
]).join("-");
|
|
5088
|
+
return toJoin.concat([data.comment.id, data.reaction.type]).join("-");
|
|
5031
5089
|
}
|
|
5032
5090
|
case "comment-created":
|
|
5033
5091
|
case "comment-deleted":
|
|
@@ -5039,6 +5097,13 @@ function getStateUpdateQueueId(...args) {
|
|
|
5039
5097
|
case "follow-updated": {
|
|
5040
5098
|
return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
|
|
5041
5099
|
}
|
|
5100
|
+
case "feed-member-added":
|
|
5101
|
+
case "feed-member-updated": {
|
|
5102
|
+
return toJoin.concat([data.member.user.id]).join("-");
|
|
5103
|
+
}
|
|
5104
|
+
case "feed-member-removed": {
|
|
5105
|
+
return toJoin.concat([data.member_id]).join("-");
|
|
5106
|
+
}
|
|
5042
5107
|
default: {
|
|
5043
5108
|
ensureExhausted(data, "Encountered unknown state update queue prefix.");
|
|
5044
5109
|
}
|
|
@@ -5207,7 +5272,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5207
5272
|
newState ?? (newState = {
|
|
5208
5273
|
...currentState,
|
|
5209
5274
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5210
|
-
...follow.source_feed
|
|
5275
|
+
...follow.source_feed,
|
|
5276
|
+
...follow.source_feed.own_capabilities !== void 0 ? {
|
|
5277
|
+
own_capabilities: follow.source_feed.own_capabilities,
|
|
5278
|
+
own_follows: follow.source_feed.own_follows,
|
|
5279
|
+
own_followings: follow.source_feed.own_followings
|
|
5280
|
+
} : {}
|
|
5211
5281
|
});
|
|
5212
5282
|
const index = currentState.following?.findIndex(
|
|
5213
5283
|
(f) => f.target_feed.feed === follow.target_feed.feed
|
|
@@ -5224,7 +5294,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5224
5294
|
newState ?? (newState = {
|
|
5225
5295
|
...currentState,
|
|
5226
5296
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5227
|
-
...follow.target_feed
|
|
5297
|
+
...follow.target_feed,
|
|
5298
|
+
...follow.target_feed.own_capabilities !== void 0 ? {
|
|
5299
|
+
own_capabilities: follow.target_feed.own_capabilities,
|
|
5300
|
+
own_follows: follow.target_feed.own_follows,
|
|
5301
|
+
own_followings: follow.target_feed.own_followings
|
|
5302
|
+
} : {}
|
|
5228
5303
|
});
|
|
5229
5304
|
if (source.created_by.id === connectedUserId && currentState.own_follows) {
|
|
5230
5305
|
const index2 = currentState.own_follows.findIndex(
|
|
@@ -5519,7 +5594,19 @@ function handleCommentReactionUpdated(payload, fromWs) {
|
|
|
5519
5594
|
};
|
|
5520
5595
|
});
|
|
5521
5596
|
}
|
|
5522
|
-
function handleFeedMemberAdded(event) {
|
|
5597
|
+
function handleFeedMemberAdded(event, fromWs) {
|
|
5598
|
+
if (!shouldUpdateState({
|
|
5599
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-added"),
|
|
5600
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5601
|
+
watch: this.currentState.watch,
|
|
5602
|
+
fromWs,
|
|
5603
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5604
|
+
this,
|
|
5605
|
+
event
|
|
5606
|
+
)
|
|
5607
|
+
})) {
|
|
5608
|
+
return;
|
|
5609
|
+
}
|
|
5523
5610
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5524
5611
|
this.state.next((currentState) => {
|
|
5525
5612
|
let newState;
|
|
@@ -5538,7 +5625,19 @@ function handleFeedMemberAdded(event) {
|
|
|
5538
5625
|
return newState ?? currentState;
|
|
5539
5626
|
});
|
|
5540
5627
|
}
|
|
5541
|
-
function handleFeedMemberUpdated(event) {
|
|
5628
|
+
function handleFeedMemberUpdated(event, fromWs) {
|
|
5629
|
+
if (!shouldUpdateState({
|
|
5630
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-updated"),
|
|
5631
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5632
|
+
watch: this.currentState.watch,
|
|
5633
|
+
fromWs,
|
|
5634
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5635
|
+
this,
|
|
5636
|
+
event
|
|
5637
|
+
)
|
|
5638
|
+
})) {
|
|
5639
|
+
return;
|
|
5640
|
+
}
|
|
5542
5641
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5543
5642
|
this.state.next((currentState) => {
|
|
5544
5643
|
const memberIndex = currentState.members?.findIndex(
|
|
@@ -5562,7 +5661,19 @@ function handleFeedMemberUpdated(event) {
|
|
|
5562
5661
|
return newState ?? currentState;
|
|
5563
5662
|
});
|
|
5564
5663
|
}
|
|
5565
|
-
function handleFeedMemberRemoved(event) {
|
|
5664
|
+
function handleFeedMemberRemoved(event, fromWs) {
|
|
5665
|
+
if (!shouldUpdateState({
|
|
5666
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-removed"),
|
|
5667
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5668
|
+
watch: this.currentState.watch,
|
|
5669
|
+
fromWs,
|
|
5670
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5671
|
+
this,
|
|
5672
|
+
event
|
|
5673
|
+
)
|
|
5674
|
+
})) {
|
|
5675
|
+
return;
|
|
5676
|
+
}
|
|
5566
5677
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5567
5678
|
this.state.next((currentState) => {
|
|
5568
5679
|
let newState;
|
|
@@ -5582,6 +5693,9 @@ function handleFeedMemberRemoved(event) {
|
|
|
5582
5693
|
return newState ?? currentState;
|
|
5583
5694
|
});
|
|
5584
5695
|
}
|
|
5696
|
+
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
5697
|
+
return bookmark1.user.id === bookmark2.user.id && bookmark1.activity.id === bookmark2.activity.id && bookmark1.folder?.id === bookmark2.folder?.id && bookmark1.updated_at.getTime() === bookmark2.updated_at.getTime();
|
|
5698
|
+
};
|
|
5585
5699
|
const sharedUpdateActivity$6 = ({
|
|
5586
5700
|
currentActivity,
|
|
5587
5701
|
event,
|
|
@@ -5589,7 +5703,9 @@ const sharedUpdateActivity$6 = ({
|
|
|
5589
5703
|
}) => {
|
|
5590
5704
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5591
5705
|
if (eventBelongsToCurrentUser) {
|
|
5592
|
-
newOwnBookmarks =
|
|
5706
|
+
newOwnBookmarks = currentActivity.own_bookmarks.filter(
|
|
5707
|
+
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5708
|
+
);
|
|
5593
5709
|
}
|
|
5594
5710
|
return {
|
|
5595
5711
|
...currentActivity,
|
|
@@ -5597,18 +5713,20 @@ const sharedUpdateActivity$6 = ({
|
|
|
5597
5713
|
own_bookmarks: newOwnBookmarks
|
|
5598
5714
|
};
|
|
5599
5715
|
};
|
|
5600
|
-
const
|
|
5716
|
+
const removeBookmarkFromActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5601
5717
|
entities: activities,
|
|
5602
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5718
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5603
5719
|
updater: (matchedActivity) => sharedUpdateActivity$6({
|
|
5604
5720
|
currentActivity: matchedActivity,
|
|
5605
5721
|
event,
|
|
5606
5722
|
eventBelongsToCurrentUser
|
|
5607
5723
|
})
|
|
5608
5724
|
});
|
|
5609
|
-
const
|
|
5725
|
+
const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5610
5726
|
entities: pinnedActivities,
|
|
5611
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5727
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || pinnedActivity.activity.own_bookmarks.some(
|
|
5728
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5729
|
+
)),
|
|
5612
5730
|
updater: (matchedPinnedActivity) => {
|
|
5613
5731
|
const newActivity = sharedUpdateActivity$6({
|
|
5614
5732
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5624,7 +5742,7 @@ const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCu
|
|
|
5624
5742
|
};
|
|
5625
5743
|
}
|
|
5626
5744
|
});
|
|
5627
|
-
function
|
|
5745
|
+
function handleBookmarkDeleted(event) {
|
|
5628
5746
|
const {
|
|
5629
5747
|
activities: currentActivities,
|
|
5630
5748
|
pinned_activities: currentPinnedActivities
|
|
@@ -5632,12 +5750,12 @@ function handleBookmarkAdded(event) {
|
|
|
5632
5750
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5633
5751
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5634
5752
|
const [result1, result2] = [
|
|
5635
|
-
|
|
5753
|
+
removeBookmarkFromActivities(
|
|
5636
5754
|
event,
|
|
5637
5755
|
currentActivities,
|
|
5638
5756
|
eventBelongsToCurrentUser
|
|
5639
5757
|
),
|
|
5640
|
-
|
|
5758
|
+
removeBookmarkFromPinnedActivities(
|
|
5641
5759
|
event,
|
|
5642
5760
|
currentPinnedActivities,
|
|
5643
5761
|
eventBelongsToCurrentUser
|
|
@@ -5650,9 +5768,6 @@ function handleBookmarkAdded(event) {
|
|
|
5650
5768
|
});
|
|
5651
5769
|
}
|
|
5652
5770
|
}
|
|
5653
|
-
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
5654
|
-
return bookmark1.user.id === bookmark2.user.id && bookmark1.activity.id === bookmark2.activity.id && bookmark1.folder?.id === bookmark2.folder?.id;
|
|
5655
|
-
};
|
|
5656
5771
|
const sharedUpdateActivity$5 = ({
|
|
5657
5772
|
currentActivity,
|
|
5658
5773
|
event,
|
|
@@ -5660,9 +5775,7 @@ const sharedUpdateActivity$5 = ({
|
|
|
5660
5775
|
}) => {
|
|
5661
5776
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5662
5777
|
if (eventBelongsToCurrentUser) {
|
|
5663
|
-
newOwnBookmarks =
|
|
5664
|
-
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5665
|
-
);
|
|
5778
|
+
newOwnBookmarks = [...newOwnBookmarks, event.bookmark];
|
|
5666
5779
|
}
|
|
5667
5780
|
return {
|
|
5668
5781
|
...currentActivity,
|
|
@@ -5670,18 +5783,20 @@ const sharedUpdateActivity$5 = ({
|
|
|
5670
5783
|
own_bookmarks: newOwnBookmarks
|
|
5671
5784
|
};
|
|
5672
5785
|
};
|
|
5673
|
-
const
|
|
5786
|
+
const addBookmarkToActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5674
5787
|
entities: activities,
|
|
5675
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5788
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5676
5789
|
updater: (matchedActivity) => sharedUpdateActivity$5({
|
|
5677
5790
|
currentActivity: matchedActivity,
|
|
5678
5791
|
event,
|
|
5679
5792
|
eventBelongsToCurrentUser
|
|
5680
5793
|
})
|
|
5681
5794
|
});
|
|
5682
|
-
const
|
|
5795
|
+
const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5683
5796
|
entities: pinnedActivities,
|
|
5684
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5797
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !pinnedActivity.activity.own_bookmarks.some(
|
|
5798
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5799
|
+
)),
|
|
5685
5800
|
updater: (matchedPinnedActivity) => {
|
|
5686
5801
|
const newActivity = sharedUpdateActivity$5({
|
|
5687
5802
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5697,7 +5812,7 @@ const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelong
|
|
|
5697
5812
|
};
|
|
5698
5813
|
}
|
|
5699
5814
|
});
|
|
5700
|
-
function
|
|
5815
|
+
function handleBookmarkAdded(event) {
|
|
5701
5816
|
const {
|
|
5702
5817
|
activities: currentActivities,
|
|
5703
5818
|
pinned_activities: currentPinnedActivities
|
|
@@ -5705,12 +5820,12 @@ function handleBookmarkDeleted(event) {
|
|
|
5705
5820
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5706
5821
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5707
5822
|
const [result1, result2] = [
|
|
5708
|
-
|
|
5823
|
+
addBookmarkToActivities(
|
|
5709
5824
|
event,
|
|
5710
5825
|
currentActivities,
|
|
5711
5826
|
eventBelongsToCurrentUser
|
|
5712
5827
|
),
|
|
5713
|
-
|
|
5828
|
+
addBookmarkToPinnedActivities(
|
|
5714
5829
|
event,
|
|
5715
5830
|
currentPinnedActivities,
|
|
5716
5831
|
eventBelongsToCurrentUser
|
|
@@ -5731,7 +5846,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5731
5846
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5732
5847
|
if (eventBelongsToCurrentUser) {
|
|
5733
5848
|
const bookmarkIndex = newOwnBookmarks.findIndex(
|
|
5734
|
-
(bookmark) =>
|
|
5849
|
+
(bookmark) => bookmark.user.id === event.bookmark.user.id && bookmark.activity.id === event.bookmark.activity.id && bookmark.folder?.id === event.bookmark.folder?.id
|
|
5735
5850
|
);
|
|
5736
5851
|
if (bookmarkIndex !== -1) {
|
|
5737
5852
|
newOwnBookmarks = [...newOwnBookmarks];
|
|
@@ -5746,7 +5861,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5746
5861
|
};
|
|
5747
5862
|
const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5748
5863
|
entities: activities,
|
|
5749
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5864
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5750
5865
|
updater: (matchedActivity) => sharedUpdateActivity$4({
|
|
5751
5866
|
currentActivity: matchedActivity,
|
|
5752
5867
|
event,
|
|
@@ -5755,7 +5870,9 @@ const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser
|
|
|
5755
5870
|
});
|
|
5756
5871
|
const updateBookmarkInPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5757
5872
|
entities: pinnedActivities,
|
|
5758
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5873
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !pinnedActivity.activity.own_bookmarks.some(
|
|
5874
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5875
|
+
)),
|
|
5759
5876
|
updater: (matchedPinnedActivity) => {
|
|
5760
5877
|
const newActivity = sharedUpdateActivity$4({
|
|
5761
5878
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5882,7 +5999,19 @@ const removePinnedActivityFromState = (activityResponse, pinnedActivities) => {
|
|
|
5882
5999
|
return { changed: false, pinned_activities: pinnedActivities };
|
|
5883
6000
|
}
|
|
5884
6001
|
};
|
|
5885
|
-
function handleActivityDeleted(event) {
|
|
6002
|
+
function handleActivityDeleted(event, fromWs) {
|
|
6003
|
+
if (!shouldUpdateState({
|
|
6004
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-deleted"),
|
|
6005
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
6006
|
+
watch: this.currentState.watch,
|
|
6007
|
+
fromWs,
|
|
6008
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
6009
|
+
this,
|
|
6010
|
+
event
|
|
6011
|
+
)
|
|
6012
|
+
})) {
|
|
6013
|
+
return;
|
|
6014
|
+
}
|
|
5886
6015
|
const {
|
|
5887
6016
|
activities: currentActivities,
|
|
5888
6017
|
pinned_activities: currentPinnedActivities
|
|
@@ -6228,53 +6357,133 @@ function handleActivityReactionUpdated(payload, fromWs) {
|
|
|
6228
6357
|
});
|
|
6229
6358
|
}
|
|
6230
6359
|
}
|
|
6231
|
-
|
|
6232
|
-
if (!
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6238
|
-
|
|
6239
|
-
|
|
6240
|
-
|
|
6241
|
-
|
|
6242
|
-
|
|
6243
|
-
.../* @__PURE__ */ new Set([
|
|
6244
|
-
...currentNotificationStatus.read_activities ?? [],
|
|
6245
|
-
...allGroupIds
|
|
6246
|
-
])
|
|
6247
|
-
];
|
|
6360
|
+
function handleActivityPinned(event, fromWs) {
|
|
6361
|
+
if (!shouldUpdateState({
|
|
6362
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-pinned"),
|
|
6363
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
6364
|
+
watch: this.currentState.watch,
|
|
6365
|
+
fromWs,
|
|
6366
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
6367
|
+
this,
|
|
6368
|
+
event
|
|
6369
|
+
)
|
|
6370
|
+
})) {
|
|
6371
|
+
return;
|
|
6248
6372
|
}
|
|
6249
|
-
|
|
6250
|
-
newState
|
|
6251
|
-
|
|
6252
|
-
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6373
|
+
this.state.next((currentState) => {
|
|
6374
|
+
const newState = {
|
|
6375
|
+
...currentState
|
|
6376
|
+
};
|
|
6377
|
+
const pinnedActivity = {
|
|
6378
|
+
...event.pinned_activity,
|
|
6379
|
+
user: event.user,
|
|
6380
|
+
updated_at: /* @__PURE__ */ new Date()
|
|
6381
|
+
};
|
|
6382
|
+
newState.pinned_activities = currentState.pinned_activities ? [pinnedActivity, ...currentState.pinned_activities] : [pinnedActivity];
|
|
6383
|
+
return newState;
|
|
6384
|
+
});
|
|
6385
|
+
}
|
|
6386
|
+
function handleActivityUnpinned(event, fromWs) {
|
|
6387
|
+
if (!shouldUpdateState({
|
|
6388
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-unpinned"),
|
|
6389
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
6390
|
+
watch: this.currentState.watch,
|
|
6391
|
+
fromWs,
|
|
6392
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
6393
|
+
this,
|
|
6394
|
+
event
|
|
6395
|
+
)
|
|
6396
|
+
})) {
|
|
6397
|
+
return;
|
|
6256
6398
|
}
|
|
6257
|
-
|
|
6258
|
-
newState
|
|
6399
|
+
this.state.next((currentState) => {
|
|
6400
|
+
let newState;
|
|
6401
|
+
const index = currentState.pinned_activities?.findIndex(
|
|
6402
|
+
(pinnedActivity) => pinnedActivity.activity.id === event.pinned_activity.activity.id
|
|
6403
|
+
) ?? -1;
|
|
6404
|
+
if (index >= 0) {
|
|
6405
|
+
newState ?? (newState = {
|
|
6406
|
+
...currentState
|
|
6407
|
+
});
|
|
6408
|
+
const newPinnedActivities = [...currentState.pinned_activities];
|
|
6409
|
+
newPinnedActivities.splice(index, 1);
|
|
6410
|
+
newState.pinned_activities = newPinnedActivities;
|
|
6411
|
+
}
|
|
6412
|
+
return newState ?? currentState;
|
|
6413
|
+
});
|
|
6414
|
+
}
|
|
6415
|
+
const isPin = (entity) => {
|
|
6416
|
+
return "activity" in entity;
|
|
6417
|
+
};
|
|
6418
|
+
const updateActivityFromFeedback = (feedback, activities) => {
|
|
6419
|
+
if (!activities) {
|
|
6420
|
+
return {
|
|
6421
|
+
changed: false,
|
|
6422
|
+
entities: []
|
|
6423
|
+
};
|
|
6259
6424
|
}
|
|
6260
|
-
return {
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6425
|
+
return updateEntityInArray({
|
|
6426
|
+
entities: activities,
|
|
6427
|
+
matcher: (e) => {
|
|
6428
|
+
const newHidden = feedback.value === "true";
|
|
6429
|
+
if (isPin(e)) {
|
|
6430
|
+
return e.activity.id === feedback.activity_id && e.activity.hidden !== newHidden;
|
|
6431
|
+
}
|
|
6432
|
+
return e.id === feedback.activity_id && e.hidden !== newHidden;
|
|
6433
|
+
},
|
|
6434
|
+
updater: (e) => {
|
|
6435
|
+
if (isPin(e)) {
|
|
6436
|
+
return {
|
|
6437
|
+
...e,
|
|
6438
|
+
activity: {
|
|
6439
|
+
...e.activity,
|
|
6440
|
+
hidden: feedback.value === "true"
|
|
6441
|
+
}
|
|
6442
|
+
};
|
|
6443
|
+
} else {
|
|
6444
|
+
return {
|
|
6445
|
+
...e,
|
|
6446
|
+
hidden: feedback.value === "true"
|
|
6447
|
+
};
|
|
6448
|
+
}
|
|
6449
|
+
}
|
|
6450
|
+
});
|
|
6264
6451
|
};
|
|
6265
|
-
function
|
|
6266
|
-
const
|
|
6267
|
-
|
|
6268
|
-
|
|
6269
|
-
|
|
6270
|
-
);
|
|
6271
|
-
|
|
6452
|
+
function handleActivityFeedback(event) {
|
|
6453
|
+
const {
|
|
6454
|
+
activities: currentActivities,
|
|
6455
|
+
pinned_activities: currentPinnedActivities
|
|
6456
|
+
} = this.currentState;
|
|
6457
|
+
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
6458
|
+
const eventBelongsToCurrentUser = event.activity_feedback.user.id === connectedUser?.id;
|
|
6459
|
+
if (!eventBelongsToCurrentUser || event.activity_feedback.action !== "hide") {
|
|
6460
|
+
return;
|
|
6461
|
+
}
|
|
6462
|
+
const [result1, result2] = [
|
|
6463
|
+
updateActivityFromFeedback(event.activity_feedback, currentActivities),
|
|
6464
|
+
updateActivityFromFeedback(
|
|
6465
|
+
event.activity_feedback,
|
|
6466
|
+
currentPinnedActivities
|
|
6467
|
+
)
|
|
6468
|
+
];
|
|
6469
|
+
if (result1.changed || result2.changed) {
|
|
6272
6470
|
this.state.partialNext({
|
|
6273
|
-
|
|
6471
|
+
activities: result1.entities,
|
|
6472
|
+
pinned_activities: result2.entities
|
|
6274
6473
|
});
|
|
6275
6474
|
}
|
|
6276
6475
|
}
|
|
6476
|
+
function handleFeedDeleted(event) {
|
|
6477
|
+
if (this.currentState.deleted_at) {
|
|
6478
|
+
return;
|
|
6479
|
+
}
|
|
6480
|
+
this.state.partialNext({ deleted_at: event.created_at });
|
|
6481
|
+
}
|
|
6277
6482
|
function handleFeedUpdated(event) {
|
|
6483
|
+
const currentUpdatedAt = this.currentState.updated_at;
|
|
6484
|
+
if (currentUpdatedAt && event.feed.updated_at && currentUpdatedAt.getTime() >= event.feed.updated_at.getTime()) {
|
|
6485
|
+
return;
|
|
6486
|
+
}
|
|
6278
6487
|
this.state.partialNext({ ...event.feed });
|
|
6279
6488
|
}
|
|
6280
6489
|
const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
|
|
@@ -6323,11 +6532,20 @@ const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActiv
|
|
|
6323
6532
|
(a) => a.group
|
|
6324
6533
|
);
|
|
6325
6534
|
break;
|
|
6326
|
-
case "replace":
|
|
6535
|
+
case "replace-then-end":
|
|
6327
6536
|
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
6328
6537
|
aggregatedActivities ?? [],
|
|
6329
6538
|
newAggregatedActivities,
|
|
6330
|
-
(a) => a.group
|
|
6539
|
+
(a) => a.group,
|
|
6540
|
+
"end"
|
|
6541
|
+
);
|
|
6542
|
+
break;
|
|
6543
|
+
case "replace-then-start":
|
|
6544
|
+
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
6545
|
+
aggregatedActivities ?? [],
|
|
6546
|
+
newAggregatedActivities,
|
|
6547
|
+
(a) => a.group,
|
|
6548
|
+
"start"
|
|
6331
6549
|
);
|
|
6332
6550
|
break;
|
|
6333
6551
|
}
|
|
@@ -6354,7 +6572,7 @@ const updateNotificationStatus = (newNotificationStatus, currentNotificationStat
|
|
|
6354
6572
|
};
|
|
6355
6573
|
}
|
|
6356
6574
|
};
|
|
6357
|
-
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
|
|
6575
|
+
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus, currentActivities) => {
|
|
6358
6576
|
const updates = {};
|
|
6359
6577
|
if (event.notification_status) {
|
|
6360
6578
|
const notificationStatusResult = updateNotificationStatus(
|
|
@@ -6365,11 +6583,47 @@ const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, cur
|
|
|
6365
6583
|
updates.notification_status = notificationStatusResult.notification_status;
|
|
6366
6584
|
}
|
|
6367
6585
|
}
|
|
6586
|
+
const effectiveStatus = event.notification_status ?? currentNotificationStatus;
|
|
6587
|
+
const lastReadAt = effectiveStatus?.last_read_at;
|
|
6588
|
+
const lastSeenAt = effectiveStatus?.last_seen_at;
|
|
6589
|
+
const readActivities = effectiveStatus?.read_activities ?? [];
|
|
6590
|
+
const seenActivities = effectiveStatus?.seen_activities ?? [];
|
|
6591
|
+
if (currentActivities?.length && !currentAggregatedActivities?.length && effectiveStatus) {
|
|
6592
|
+
let anyChanged = false;
|
|
6593
|
+
const updatedActivities = currentActivities.map((activity) => {
|
|
6594
|
+
const isRead = lastReadAt != null && activity.updated_at.getTime() < lastReadAt.getTime() || readActivities.includes(activity.id);
|
|
6595
|
+
const isSeen = lastSeenAt != null && activity.updated_at.getTime() < lastSeenAt.getTime() || seenActivities.includes(activity.id);
|
|
6596
|
+
if (activity.is_read !== isRead || activity.is_seen !== isSeen) {
|
|
6597
|
+
anyChanged = true;
|
|
6598
|
+
return { ...activity, is_read: isRead, is_seen: isSeen };
|
|
6599
|
+
}
|
|
6600
|
+
return activity;
|
|
6601
|
+
});
|
|
6602
|
+
if (anyChanged) {
|
|
6603
|
+
updates.activities = updatedActivities;
|
|
6604
|
+
}
|
|
6605
|
+
}
|
|
6606
|
+
if (currentAggregatedActivities?.length && effectiveStatus) {
|
|
6607
|
+
const baseAggregated = currentAggregatedActivities;
|
|
6608
|
+
let anyChanged = false;
|
|
6609
|
+
const updatedAggregated = baseAggregated.map((group) => {
|
|
6610
|
+
const isRead = lastReadAt != null && group.updated_at.getTime() < lastReadAt.getTime() || readActivities.includes(group.group);
|
|
6611
|
+
const isSeen = lastSeenAt != null && group.updated_at.getTime() < lastSeenAt.getTime() || seenActivities.includes(group.group);
|
|
6612
|
+
if (group.is_read !== isRead || group.is_seen !== isSeen) {
|
|
6613
|
+
anyChanged = true;
|
|
6614
|
+
return { ...group, is_read: isRead, is_seen: isSeen };
|
|
6615
|
+
}
|
|
6616
|
+
return group;
|
|
6617
|
+
});
|
|
6618
|
+
if (anyChanged) {
|
|
6619
|
+
updates.aggregated_activities = updatedAggregated;
|
|
6620
|
+
}
|
|
6621
|
+
}
|
|
6368
6622
|
if (event.aggregated_activities && currentAggregatedActivities) {
|
|
6369
6623
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6370
6624
|
event.aggregated_activities,
|
|
6371
|
-
currentAggregatedActivities,
|
|
6372
|
-
"start"
|
|
6625
|
+
updates.aggregated_activities ?? currentAggregatedActivities,
|
|
6626
|
+
"replace-then-start"
|
|
6373
6627
|
);
|
|
6374
6628
|
if (aggregatedActivitiesResult.changed) {
|
|
6375
6629
|
updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6389,12 +6643,14 @@ function handleNotificationFeedUpdated(event) {
|
|
|
6389
6643
|
const result = updateNotificationFeedFromEvent(
|
|
6390
6644
|
event,
|
|
6391
6645
|
this.currentState.aggregated_activities,
|
|
6392
|
-
this.currentState.notification_status
|
|
6646
|
+
this.currentState.notification_status,
|
|
6647
|
+
this.currentState.activities
|
|
6393
6648
|
);
|
|
6394
6649
|
if (result.changed) {
|
|
6395
6650
|
this.state.partialNext({
|
|
6396
6651
|
notification_status: result.data?.notification_status,
|
|
6397
|
-
aggregated_activities: result.data?.aggregated_activities
|
|
6652
|
+
aggregated_activities: result.data?.aggregated_activities,
|
|
6653
|
+
activities: result.data?.activities ?? this.currentState.activities
|
|
6398
6654
|
});
|
|
6399
6655
|
}
|
|
6400
6656
|
}
|
|
@@ -6444,7 +6700,7 @@ function updateStoriesFeedFromEvent(aggregatedActivities, activities, event) {
|
|
|
6444
6700
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6445
6701
|
event.aggregated_activities,
|
|
6446
6702
|
aggregatedActivities,
|
|
6447
|
-
"replace"
|
|
6703
|
+
"replace-then-end"
|
|
6448
6704
|
);
|
|
6449
6705
|
if (aggregatedActivitiesResult.changed) {
|
|
6450
6706
|
result.data.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6538,61 +6794,6 @@ async function withRetry(fn, options = {}) {
|
|
|
6538
6794
|
}
|
|
6539
6795
|
throw lastError;
|
|
6540
6796
|
}
|
|
6541
|
-
const isPin = (entity) => {
|
|
6542
|
-
return "activity" in entity;
|
|
6543
|
-
};
|
|
6544
|
-
const updateActivityFromFeedback = (feedback, activities) => {
|
|
6545
|
-
if (!activities) {
|
|
6546
|
-
return {
|
|
6547
|
-
changed: false,
|
|
6548
|
-
entities: []
|
|
6549
|
-
};
|
|
6550
|
-
}
|
|
6551
|
-
return updateEntityInArray({
|
|
6552
|
-
entities: activities,
|
|
6553
|
-
matcher: (e) => isPin(e) ? e.activity.id === feedback.activity_id : e.id === feedback.activity_id,
|
|
6554
|
-
updater: (e) => {
|
|
6555
|
-
if (isPin(e)) {
|
|
6556
|
-
return {
|
|
6557
|
-
...e,
|
|
6558
|
-
activity: {
|
|
6559
|
-
...e.activity,
|
|
6560
|
-
hidden: feedback.value === "true"
|
|
6561
|
-
}
|
|
6562
|
-
};
|
|
6563
|
-
} else {
|
|
6564
|
-
return {
|
|
6565
|
-
...e,
|
|
6566
|
-
hidden: feedback.value === "true"
|
|
6567
|
-
};
|
|
6568
|
-
}
|
|
6569
|
-
}
|
|
6570
|
-
});
|
|
6571
|
-
};
|
|
6572
|
-
function handleActivityFeedback(event) {
|
|
6573
|
-
const {
|
|
6574
|
-
activities: currentActivities,
|
|
6575
|
-
pinned_activities: currentPinnedActivities
|
|
6576
|
-
} = this.currentState;
|
|
6577
|
-
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
6578
|
-
const eventBelongsToCurrentUser = event.activity_feedback.user.id === connectedUser?.id;
|
|
6579
|
-
if (!eventBelongsToCurrentUser || event.activity_feedback.action !== "hide") {
|
|
6580
|
-
return;
|
|
6581
|
-
}
|
|
6582
|
-
const [result1, result2] = [
|
|
6583
|
-
updateActivityFromFeedback(event.activity_feedback, currentActivities),
|
|
6584
|
-
updateActivityFromFeedback(
|
|
6585
|
-
event.activity_feedback,
|
|
6586
|
-
currentPinnedActivities
|
|
6587
|
-
)
|
|
6588
|
-
];
|
|
6589
|
-
if (result1.changed || result2.changed) {
|
|
6590
|
-
this.state.partialNext({
|
|
6591
|
-
activities: result1.entities,
|
|
6592
|
-
pinned_activities: result2.entities
|
|
6593
|
-
});
|
|
6594
|
-
}
|
|
6595
|
-
}
|
|
6596
6797
|
const deepEqual = (x, y) => {
|
|
6597
6798
|
if (x === y) {
|
|
6598
6799
|
return true;
|
|
@@ -6719,7 +6920,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6719
6920
|
"feeds.comment.deleted": handleCommentDeleted.bind(this),
|
|
6720
6921
|
"feeds.comment.updated": handleCommentUpdated.bind(this),
|
|
6721
6922
|
"feeds.feed.created": _Feed.noop,
|
|
6722
|
-
"feeds.feed.deleted":
|
|
6923
|
+
"feeds.feed.deleted": handleFeedDeleted.bind(this),
|
|
6723
6924
|
"feeds.feed.updated": handleFeedUpdated.bind(this),
|
|
6724
6925
|
"feeds.feed_group.changed": _Feed.noop,
|
|
6725
6926
|
"feeds.feed_group.deleted": _Feed.noop,
|
|
@@ -6742,9 +6943,9 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6742
6943
|
"feeds.poll.vote_casted": _Feed.noop,
|
|
6743
6944
|
"feeds.poll.vote_changed": _Feed.noop,
|
|
6744
6945
|
"feeds.poll.vote_removed": _Feed.noop,
|
|
6745
|
-
"feeds.activity.pinned":
|
|
6746
|
-
"feeds.activity.unpinned":
|
|
6747
|
-
"feeds.activity.marked":
|
|
6946
|
+
"feeds.activity.pinned": handleActivityPinned.bind(this),
|
|
6947
|
+
"feeds.activity.unpinned": handleActivityUnpinned.bind(this),
|
|
6948
|
+
"feeds.activity.marked": _Feed.noop,
|
|
6748
6949
|
"moderation.custom_action": _Feed.noop,
|
|
6749
6950
|
"moderation.flagged": _Feed.noop,
|
|
6750
6951
|
"moderation.mark_reviewed": _Feed.noop,
|
|
@@ -7858,6 +8059,53 @@ class FeedsClient extends FeedsApi {
|
|
|
7858
8059
|
}
|
|
7859
8060
|
return response;
|
|
7860
8061
|
};
|
|
8062
|
+
this.updateActivityPartial = async (...args) => {
|
|
8063
|
+
const response = await super.updateActivityPartial(...args);
|
|
8064
|
+
for (const feed of this.allActiveFeeds) {
|
|
8065
|
+
handleActivityUpdated.bind(feed)(response, false);
|
|
8066
|
+
}
|
|
8067
|
+
return response;
|
|
8068
|
+
};
|
|
8069
|
+
this.deleteActivity = async (...args) => {
|
|
8070
|
+
const response = await super.deleteActivity(...args);
|
|
8071
|
+
const activityId = args[0].id;
|
|
8072
|
+
for (const feed of this.allActiveFeeds) {
|
|
8073
|
+
handleActivityDeleted.bind(feed)(
|
|
8074
|
+
{ activity: { id: activityId } },
|
|
8075
|
+
false
|
|
8076
|
+
);
|
|
8077
|
+
}
|
|
8078
|
+
this.activeActivities = this.activeActivities.filter(
|
|
8079
|
+
(activity) => activity.id !== activityId
|
|
8080
|
+
);
|
|
8081
|
+
return response;
|
|
8082
|
+
};
|
|
8083
|
+
this.activityFeedback = async (request) => {
|
|
8084
|
+
const response = await super.activityFeedback(request);
|
|
8085
|
+
if (request.hide !== void 0) {
|
|
8086
|
+
const feedback = {
|
|
8087
|
+
activity_id: request.activity_id,
|
|
8088
|
+
value: request.hide ? "true" : "false"
|
|
8089
|
+
};
|
|
8090
|
+
for (const feed of this.allActiveFeeds) {
|
|
8091
|
+
const {
|
|
8092
|
+
activities: currentActivities,
|
|
8093
|
+
pinned_activities: currentPinnedActivities
|
|
8094
|
+
} = feed.currentState;
|
|
8095
|
+
const [result1, result2] = [
|
|
8096
|
+
updateActivityFromFeedback(feedback, currentActivities),
|
|
8097
|
+
updateActivityFromFeedback(feedback, currentPinnedActivities)
|
|
8098
|
+
];
|
|
8099
|
+
if (result1.changed || result2.changed) {
|
|
8100
|
+
feed.state.partialNext({
|
|
8101
|
+
activities: result1.entities,
|
|
8102
|
+
pinned_activities: result2.entities
|
|
8103
|
+
});
|
|
8104
|
+
}
|
|
8105
|
+
}
|
|
8106
|
+
}
|
|
8107
|
+
return response;
|
|
8108
|
+
};
|
|
7861
8109
|
this.addComment = async (request) => {
|
|
7862
8110
|
const response = await super.addComment(request);
|
|
7863
8111
|
const { comment } = response;
|
|
@@ -7943,6 +8191,121 @@ class FeedsClient extends FeedsApi {
|
|
|
7943
8191
|
}
|
|
7944
8192
|
return response;
|
|
7945
8193
|
};
|
|
8194
|
+
this.addBookmark = async (request) => {
|
|
8195
|
+
const response = await super.addBookmark(request);
|
|
8196
|
+
for (const feed of this.allActiveFeeds) {
|
|
8197
|
+
handleBookmarkAdded.bind(feed)(response);
|
|
8198
|
+
}
|
|
8199
|
+
return response;
|
|
8200
|
+
};
|
|
8201
|
+
this.updateBookmark = async (request) => {
|
|
8202
|
+
const response = await super.updateBookmark(request);
|
|
8203
|
+
for (const feed of this.allActiveFeeds) {
|
|
8204
|
+
handleBookmarkUpdated.bind(feed)(response);
|
|
8205
|
+
}
|
|
8206
|
+
return response;
|
|
8207
|
+
};
|
|
8208
|
+
this.deleteBookmark = async (request) => {
|
|
8209
|
+
const response = await super.deleteBookmark(request);
|
|
8210
|
+
for (const feed of this.allActiveFeeds) {
|
|
8211
|
+
handleBookmarkDeleted.bind(feed)(response);
|
|
8212
|
+
}
|
|
8213
|
+
return response;
|
|
8214
|
+
};
|
|
8215
|
+
this.pinActivity = async (...args) => {
|
|
8216
|
+
const response = await super.pinActivity(...args);
|
|
8217
|
+
const feedIds = response.activity?.feeds ?? (response.feed ? [response.feed] : []);
|
|
8218
|
+
for (const fid of feedIds) {
|
|
8219
|
+
const feed = this.activeFeeds[fid];
|
|
8220
|
+
if (feed) {
|
|
8221
|
+
handleActivityPinned.bind(feed)(
|
|
8222
|
+
{ pinned_activity: response },
|
|
8223
|
+
false
|
|
8224
|
+
);
|
|
8225
|
+
}
|
|
8226
|
+
}
|
|
8227
|
+
return response;
|
|
8228
|
+
};
|
|
8229
|
+
this.unpinActivity = async (...args) => {
|
|
8230
|
+
const response = await super.unpinActivity(...args);
|
|
8231
|
+
const feedIds = response.activity?.feeds ?? (response.feed ? [response.feed] : []);
|
|
8232
|
+
for (const fid of feedIds) {
|
|
8233
|
+
const feed = this.activeFeeds[fid];
|
|
8234
|
+
if (feed) {
|
|
8235
|
+
handleActivityUnpinned.bind(feed)(
|
|
8236
|
+
{
|
|
8237
|
+
pinned_activity: {
|
|
8238
|
+
...response,
|
|
8239
|
+
created_at: /* @__PURE__ */ new Date()
|
|
8240
|
+
}
|
|
8241
|
+
},
|
|
8242
|
+
false
|
|
8243
|
+
);
|
|
8244
|
+
}
|
|
8245
|
+
}
|
|
8246
|
+
return response;
|
|
8247
|
+
};
|
|
8248
|
+
this.updateFeed = async (...args) => {
|
|
8249
|
+
const response = await super.updateFeed(...args);
|
|
8250
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8251
|
+
const feed = this.activeFeeds[fid];
|
|
8252
|
+
if (feed) {
|
|
8253
|
+
handleFeedUpdated.call(feed, { feed: response.feed });
|
|
8254
|
+
}
|
|
8255
|
+
return response;
|
|
8256
|
+
};
|
|
8257
|
+
this.deleteFeed = async (...args) => {
|
|
8258
|
+
const response = await super.deleteFeed(...args);
|
|
8259
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8260
|
+
const feed = this.activeFeeds[fid];
|
|
8261
|
+
if (feed) {
|
|
8262
|
+
handleFeedDeleted.call(feed, {
|
|
8263
|
+
created_at: /* @__PURE__ */ new Date()
|
|
8264
|
+
});
|
|
8265
|
+
if (!feed.currentState.watch) {
|
|
8266
|
+
delete this.activeFeeds[fid];
|
|
8267
|
+
this.activeActivities = this.activeActivities.filter(
|
|
8268
|
+
(activity) => getFeed.call(activity)?.feed !== fid
|
|
8269
|
+
);
|
|
8270
|
+
}
|
|
8271
|
+
}
|
|
8272
|
+
return response;
|
|
8273
|
+
};
|
|
8274
|
+
this.updateFeedMembers = async (...args) => {
|
|
8275
|
+
const response = await super.updateFeedMembers(...args);
|
|
8276
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8277
|
+
const feed = this.activeFeeds[fid];
|
|
8278
|
+
if (feed) {
|
|
8279
|
+
for (const member of response.added) {
|
|
8280
|
+
handleFeedMemberAdded.call(feed, { member }, false);
|
|
8281
|
+
}
|
|
8282
|
+
for (const member of response.updated) {
|
|
8283
|
+
handleFeedMemberUpdated.call(feed, { member }, false);
|
|
8284
|
+
}
|
|
8285
|
+
for (const memberId of response.removed_ids) {
|
|
8286
|
+
handleFeedMemberRemoved.call(feed, { member_id: memberId }, false);
|
|
8287
|
+
}
|
|
8288
|
+
}
|
|
8289
|
+
return response;
|
|
8290
|
+
};
|
|
8291
|
+
this.acceptFeedMemberInvite = async (...args) => {
|
|
8292
|
+
const response = await super.acceptFeedMemberInvite(...args);
|
|
8293
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8294
|
+
const feed = this.activeFeeds[fid];
|
|
8295
|
+
if (feed) {
|
|
8296
|
+
handleFeedMemberUpdated.call(feed, { member: response.member }, false);
|
|
8297
|
+
}
|
|
8298
|
+
return response;
|
|
8299
|
+
};
|
|
8300
|
+
this.rejectFeedMemberInvite = async (...args) => {
|
|
8301
|
+
const response = await super.rejectFeedMemberInvite(...args);
|
|
8302
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8303
|
+
const feed = this.activeFeeds[fid];
|
|
8304
|
+
if (feed) {
|
|
8305
|
+
handleFeedMemberUpdated.call(feed, { member: response.member }, false);
|
|
8306
|
+
}
|
|
8307
|
+
return response;
|
|
8308
|
+
};
|
|
7946
8309
|
this.queryPollAnswers = async (request) => {
|
|
7947
8310
|
const filter2 = request.filter ?? {};
|
|
7948
8311
|
const queryPollAnswersFilter = {
|
|
@@ -8258,6 +8621,17 @@ class FeedsClient extends FeedsApi {
|
|
|
8258
8621
|
});
|
|
8259
8622
|
return response;
|
|
8260
8623
|
}
|
|
8624
|
+
async acceptFollow(...args) {
|
|
8625
|
+
const response = await super.acceptFollow(...args);
|
|
8626
|
+
[
|
|
8627
|
+
response.follow.source_feed.feed,
|
|
8628
|
+
response.follow.target_feed.feed
|
|
8629
|
+
].forEach((fid) => {
|
|
8630
|
+
const feeds = this.findAllActiveFeedsByFid(fid);
|
|
8631
|
+
feeds.forEach((f) => handleFollowUpdated.bind(f)(response, false));
|
|
8632
|
+
});
|
|
8633
|
+
return response;
|
|
8634
|
+
}
|
|
8261
8635
|
// For follow API endpoints we update the state after HTTP response to allow queryFeeds with watch: false
|
|
8262
8636
|
async follow(request) {
|
|
8263
8637
|
const response = await super.follow(request);
|
|
@@ -8422,4 +8796,4 @@ exports.replaceUniqueArrayMerge = replaceUniqueArrayMerge;
|
|
|
8422
8796
|
exports.shouldUpdateState = shouldUpdateState;
|
|
8423
8797
|
exports.uniqueArrayMerge = uniqueArrayMerge;
|
|
8424
8798
|
exports.updateEntityInArray = updateEntityInArray;
|
|
8425
|
-
//# sourceMappingURL=feeds-client-
|
|
8799
|
+
//# sourceMappingURL=feeds-client-C1c6lcS3.js.map
|