@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
|
@@ -1123,6 +1123,12 @@ decoders.QueryBookmarksResponse = (input) => {
|
|
|
1123
1123
|
};
|
|
1124
1124
|
return decode(typeMappings, input);
|
|
1125
1125
|
};
|
|
1126
|
+
decoders.QueryCollectionsResponse = (input) => {
|
|
1127
|
+
const typeMappings = {
|
|
1128
|
+
collections: { type: "CollectionResponse", isSingle: false }
|
|
1129
|
+
};
|
|
1130
|
+
return decode(typeMappings, input);
|
|
1131
|
+
};
|
|
1126
1132
|
decoders.QueryCommentReactionsResponse = (input) => {
|
|
1127
1133
|
const typeMappings = {
|
|
1128
1134
|
reactions: { type: "FeedsReactionResponse", isSingle: false }
|
|
@@ -1697,6 +1703,21 @@ class FeedsApi {
|
|
|
1697
1703
|
decoders.DeleteActivitiesResponse?.(response.body);
|
|
1698
1704
|
return { ...response.body, metadata: response.metadata };
|
|
1699
1705
|
}
|
|
1706
|
+
async trackActivityMetrics(request) {
|
|
1707
|
+
const body = {
|
|
1708
|
+
events: request?.events
|
|
1709
|
+
};
|
|
1710
|
+
const response = await this.apiClient.sendRequest(
|
|
1711
|
+
"POST",
|
|
1712
|
+
"/api/v2/feeds/activities/metrics/track",
|
|
1713
|
+
void 0,
|
|
1714
|
+
void 0,
|
|
1715
|
+
body,
|
|
1716
|
+
"application/json"
|
|
1717
|
+
);
|
|
1718
|
+
decoders.TrackActivityMetricsResponse?.(response.body);
|
|
1719
|
+
return { ...response.body, metadata: response.metadata };
|
|
1720
|
+
}
|
|
1700
1721
|
async queryActivities(request) {
|
|
1701
1722
|
const body = {
|
|
1702
1723
|
enrich_own_fields: request?.enrich_own_fields,
|
|
@@ -2109,6 +2130,25 @@ class FeedsApi {
|
|
|
2109
2130
|
decoders.CreateCollectionsResponse?.(response.body);
|
|
2110
2131
|
return { ...response.body, metadata: response.metadata };
|
|
2111
2132
|
}
|
|
2133
|
+
async queryCollections(request) {
|
|
2134
|
+
const body = {
|
|
2135
|
+
limit: request?.limit,
|
|
2136
|
+
next: request?.next,
|
|
2137
|
+
prev: request?.prev,
|
|
2138
|
+
sort: request?.sort,
|
|
2139
|
+
filter: request?.filter
|
|
2140
|
+
};
|
|
2141
|
+
const response = await this.apiClient.sendRequest(
|
|
2142
|
+
"POST",
|
|
2143
|
+
"/api/v2/feeds/collections/query",
|
|
2144
|
+
void 0,
|
|
2145
|
+
void 0,
|
|
2146
|
+
body,
|
|
2147
|
+
"application/json"
|
|
2148
|
+
);
|
|
2149
|
+
decoders.QueryCollectionsResponse?.(response.body);
|
|
2150
|
+
return { ...response.body, metadata: response.metadata };
|
|
2151
|
+
}
|
|
2112
2152
|
async getComments(request) {
|
|
2113
2153
|
const queryParams = {
|
|
2114
2154
|
object_id: request?.object_id,
|
|
@@ -2168,6 +2208,7 @@ class FeedsApi {
|
|
|
2168
2208
|
async queryComments(request) {
|
|
2169
2209
|
const body = {
|
|
2170
2210
|
filter: request?.filter,
|
|
2211
|
+
id_around: request?.id_around,
|
|
2171
2212
|
limit: request?.limit,
|
|
2172
2213
|
next: request?.next,
|
|
2173
2214
|
prev: request?.prev,
|
|
@@ -3199,15 +3240,26 @@ class FeedsApi {
|
|
|
3199
3240
|
decoders.UpdateUserGroupResponse?.(response.body);
|
|
3200
3241
|
return { ...response.body, metadata: response.metadata };
|
|
3201
3242
|
}
|
|
3202
|
-
async
|
|
3243
|
+
async addUserGroupMembers(request) {
|
|
3203
3244
|
const pathParams = {
|
|
3204
3245
|
id: request?.id
|
|
3205
3246
|
};
|
|
3206
|
-
const
|
|
3207
|
-
|
|
3247
|
+
const body = {
|
|
3248
|
+
member_ids: request?.member_ids,
|
|
3249
|
+
team_id: request?.team_id
|
|
3250
|
+
};
|
|
3251
|
+
const response = await this.apiClient.sendRequest(
|
|
3252
|
+
"POST",
|
|
3253
|
+
"/api/v2/usergroups/{id}/members",
|
|
3254
|
+
pathParams,
|
|
3255
|
+
void 0,
|
|
3256
|
+
body,
|
|
3257
|
+
"application/json"
|
|
3258
|
+
);
|
|
3259
|
+
decoders.AddUserGroupMembersResponse?.(response.body);
|
|
3208
3260
|
return { ...response.body, metadata: response.metadata };
|
|
3209
3261
|
}
|
|
3210
|
-
async
|
|
3262
|
+
async removeUserGroupMembers(request) {
|
|
3211
3263
|
const pathParams = {
|
|
3212
3264
|
id: request?.id
|
|
3213
3265
|
};
|
|
@@ -3217,13 +3269,13 @@ class FeedsApi {
|
|
|
3217
3269
|
};
|
|
3218
3270
|
const response = await this.apiClient.sendRequest(
|
|
3219
3271
|
"POST",
|
|
3220
|
-
"/api/v2/usergroups/{id}/members",
|
|
3272
|
+
"/api/v2/usergroups/{id}/members/delete",
|
|
3221
3273
|
pathParams,
|
|
3222
3274
|
void 0,
|
|
3223
3275
|
body,
|
|
3224
3276
|
"application/json"
|
|
3225
3277
|
);
|
|
3226
|
-
decoders.
|
|
3278
|
+
decoders.RemoveUserGroupMembersResponse?.(response.body);
|
|
3227
3279
|
return { ...response.body, metadata: response.metadata };
|
|
3228
3280
|
}
|
|
3229
3281
|
async queryUsers(request) {
|
|
@@ -4111,7 +4163,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
4111
4163
|
};
|
|
4112
4164
|
return result;
|
|
4113
4165
|
};
|
|
4114
|
-
const version = "1.
|
|
4166
|
+
const version = "1.1.0";
|
|
4115
4167
|
const axios = axiosImport.default ?? axiosImport;
|
|
4116
4168
|
class ApiClient {
|
|
4117
4169
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
@@ -4927,7 +4979,7 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4927
4979
|
});
|
|
4928
4980
|
return existingArray.concat(filteredArrayToMerge);
|
|
4929
4981
|
};
|
|
4930
|
-
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
4982
|
+
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey, position) => {
|
|
4931
4983
|
const existingMap = /* @__PURE__ */ new Map();
|
|
4932
4984
|
(existingArray ?? []).forEach((item) => {
|
|
4933
4985
|
existingMap.set(getKey(item), item);
|
|
@@ -4943,9 +4995,14 @@ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4943
4995
|
existingMap.delete(getKey(originalItem));
|
|
4944
4996
|
}
|
|
4945
4997
|
});
|
|
4946
|
-
|
|
4947
|
-
|
|
4948
|
-
|
|
4998
|
+
const newItemsInOrder = arrayToMerge.filter(
|
|
4999
|
+
(item) => existingMap.has(getKey(item))
|
|
5000
|
+
);
|
|
5001
|
+
if (position === "end") {
|
|
5002
|
+
newItemsInOrder.forEach((item) => result.push(item));
|
|
5003
|
+
} else {
|
|
5004
|
+
result.unshift(...newItemsInOrder);
|
|
5005
|
+
}
|
|
4949
5006
|
return result;
|
|
4950
5007
|
};
|
|
4951
5008
|
const Constants = {
|
|
@@ -4992,24 +5049,25 @@ function getStateUpdateQueueId(...args) {
|
|
|
4992
5049
|
const [data, prefix] = args;
|
|
4993
5050
|
const toJoin = [prefix];
|
|
4994
5051
|
switch (prefix) {
|
|
5052
|
+
case "activity-deleted": {
|
|
5053
|
+
return toJoin.concat([data.activity.id]).join("-");
|
|
5054
|
+
}
|
|
5055
|
+
case "activity-pinned":
|
|
5056
|
+
case "activity-unpinned": {
|
|
5057
|
+
return toJoin.concat([data.pinned_activity.activity.id]).join("-");
|
|
5058
|
+
}
|
|
4995
5059
|
case "activity-updated": {
|
|
4996
5060
|
return toJoin.concat([data.activity.id]).join("-");
|
|
4997
5061
|
}
|
|
4998
5062
|
case "activity-reaction-created":
|
|
4999
5063
|
case "activity-reaction-deleted":
|
|
5000
5064
|
case "activity-reaction-updated": {
|
|
5001
|
-
return toJoin.concat([
|
|
5002
|
-
data.activity.id,
|
|
5003
|
-
data.reaction.type
|
|
5004
|
-
]).join("-");
|
|
5065
|
+
return toJoin.concat([data.activity.id, data.reaction.type]).join("-");
|
|
5005
5066
|
}
|
|
5006
5067
|
case "comment-reaction-created":
|
|
5007
5068
|
case "comment-reaction-deleted":
|
|
5008
5069
|
case "comment-reaction-updated": {
|
|
5009
|
-
return toJoin.concat([
|
|
5010
|
-
data.comment.id,
|
|
5011
|
-
data.reaction.type
|
|
5012
|
-
]).join("-");
|
|
5070
|
+
return toJoin.concat([data.comment.id, data.reaction.type]).join("-");
|
|
5013
5071
|
}
|
|
5014
5072
|
case "comment-created":
|
|
5015
5073
|
case "comment-deleted":
|
|
@@ -5021,6 +5079,13 @@ function getStateUpdateQueueId(...args) {
|
|
|
5021
5079
|
case "follow-updated": {
|
|
5022
5080
|
return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
|
|
5023
5081
|
}
|
|
5082
|
+
case "feed-member-added":
|
|
5083
|
+
case "feed-member-updated": {
|
|
5084
|
+
return toJoin.concat([data.member.user.id]).join("-");
|
|
5085
|
+
}
|
|
5086
|
+
case "feed-member-removed": {
|
|
5087
|
+
return toJoin.concat([data.member_id]).join("-");
|
|
5088
|
+
}
|
|
5024
5089
|
default: {
|
|
5025
5090
|
ensureExhausted(data, "Encountered unknown state update queue prefix.");
|
|
5026
5091
|
}
|
|
@@ -5189,7 +5254,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5189
5254
|
newState ?? (newState = {
|
|
5190
5255
|
...currentState,
|
|
5191
5256
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5192
|
-
...follow.source_feed
|
|
5257
|
+
...follow.source_feed,
|
|
5258
|
+
...follow.source_feed.own_capabilities !== void 0 ? {
|
|
5259
|
+
own_capabilities: follow.source_feed.own_capabilities,
|
|
5260
|
+
own_follows: follow.source_feed.own_follows,
|
|
5261
|
+
own_followings: follow.source_feed.own_followings
|
|
5262
|
+
} : {}
|
|
5193
5263
|
});
|
|
5194
5264
|
const index = currentState.following?.findIndex(
|
|
5195
5265
|
(f) => f.target_feed.feed === follow.target_feed.feed
|
|
@@ -5206,7 +5276,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5206
5276
|
newState ?? (newState = {
|
|
5207
5277
|
...currentState,
|
|
5208
5278
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5209
|
-
...follow.target_feed
|
|
5279
|
+
...follow.target_feed,
|
|
5280
|
+
...follow.target_feed.own_capabilities !== void 0 ? {
|
|
5281
|
+
own_capabilities: follow.target_feed.own_capabilities,
|
|
5282
|
+
own_follows: follow.target_feed.own_follows,
|
|
5283
|
+
own_followings: follow.target_feed.own_followings
|
|
5284
|
+
} : {}
|
|
5210
5285
|
});
|
|
5211
5286
|
if (source.created_by.id === connectedUserId && currentState.own_follows) {
|
|
5212
5287
|
const index2 = currentState.own_follows.findIndex(
|
|
@@ -5501,7 +5576,19 @@ function handleCommentReactionUpdated(payload, fromWs) {
|
|
|
5501
5576
|
};
|
|
5502
5577
|
});
|
|
5503
5578
|
}
|
|
5504
|
-
function handleFeedMemberAdded(event) {
|
|
5579
|
+
function handleFeedMemberAdded(event, fromWs) {
|
|
5580
|
+
if (!shouldUpdateState({
|
|
5581
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-added"),
|
|
5582
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5583
|
+
watch: this.currentState.watch,
|
|
5584
|
+
fromWs,
|
|
5585
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5586
|
+
this,
|
|
5587
|
+
event
|
|
5588
|
+
)
|
|
5589
|
+
})) {
|
|
5590
|
+
return;
|
|
5591
|
+
}
|
|
5505
5592
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5506
5593
|
this.state.next((currentState) => {
|
|
5507
5594
|
let newState;
|
|
@@ -5520,7 +5607,19 @@ function handleFeedMemberAdded(event) {
|
|
|
5520
5607
|
return newState ?? currentState;
|
|
5521
5608
|
});
|
|
5522
5609
|
}
|
|
5523
|
-
function handleFeedMemberUpdated(event) {
|
|
5610
|
+
function handleFeedMemberUpdated(event, fromWs) {
|
|
5611
|
+
if (!shouldUpdateState({
|
|
5612
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-updated"),
|
|
5613
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5614
|
+
watch: this.currentState.watch,
|
|
5615
|
+
fromWs,
|
|
5616
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5617
|
+
this,
|
|
5618
|
+
event
|
|
5619
|
+
)
|
|
5620
|
+
})) {
|
|
5621
|
+
return;
|
|
5622
|
+
}
|
|
5524
5623
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5525
5624
|
this.state.next((currentState) => {
|
|
5526
5625
|
const memberIndex = currentState.members?.findIndex(
|
|
@@ -5544,7 +5643,19 @@ function handleFeedMemberUpdated(event) {
|
|
|
5544
5643
|
return newState ?? currentState;
|
|
5545
5644
|
});
|
|
5546
5645
|
}
|
|
5547
|
-
function handleFeedMemberRemoved(event) {
|
|
5646
|
+
function handleFeedMemberRemoved(event, fromWs) {
|
|
5647
|
+
if (!shouldUpdateState({
|
|
5648
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "feed-member-removed"),
|
|
5649
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5650
|
+
watch: this.currentState.watch,
|
|
5651
|
+
fromWs,
|
|
5652
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5653
|
+
this,
|
|
5654
|
+
event
|
|
5655
|
+
)
|
|
5656
|
+
})) {
|
|
5657
|
+
return;
|
|
5658
|
+
}
|
|
5548
5659
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5549
5660
|
this.state.next((currentState) => {
|
|
5550
5661
|
let newState;
|
|
@@ -5564,6 +5675,9 @@ function handleFeedMemberRemoved(event) {
|
|
|
5564
5675
|
return newState ?? currentState;
|
|
5565
5676
|
});
|
|
5566
5677
|
}
|
|
5678
|
+
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
5679
|
+
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();
|
|
5680
|
+
};
|
|
5567
5681
|
const sharedUpdateActivity$6 = ({
|
|
5568
5682
|
currentActivity,
|
|
5569
5683
|
event,
|
|
@@ -5571,7 +5685,9 @@ const sharedUpdateActivity$6 = ({
|
|
|
5571
5685
|
}) => {
|
|
5572
5686
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5573
5687
|
if (eventBelongsToCurrentUser) {
|
|
5574
|
-
newOwnBookmarks =
|
|
5688
|
+
newOwnBookmarks = currentActivity.own_bookmarks.filter(
|
|
5689
|
+
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5690
|
+
);
|
|
5575
5691
|
}
|
|
5576
5692
|
return {
|
|
5577
5693
|
...currentActivity,
|
|
@@ -5579,18 +5695,20 @@ const sharedUpdateActivity$6 = ({
|
|
|
5579
5695
|
own_bookmarks: newOwnBookmarks
|
|
5580
5696
|
};
|
|
5581
5697
|
};
|
|
5582
|
-
const
|
|
5698
|
+
const removeBookmarkFromActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5583
5699
|
entities: activities,
|
|
5584
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5700
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5585
5701
|
updater: (matchedActivity) => sharedUpdateActivity$6({
|
|
5586
5702
|
currentActivity: matchedActivity,
|
|
5587
5703
|
event,
|
|
5588
5704
|
eventBelongsToCurrentUser
|
|
5589
5705
|
})
|
|
5590
5706
|
});
|
|
5591
|
-
const
|
|
5707
|
+
const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5592
5708
|
entities: pinnedActivities,
|
|
5593
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5709
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || pinnedActivity.activity.own_bookmarks.some(
|
|
5710
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5711
|
+
)),
|
|
5594
5712
|
updater: (matchedPinnedActivity) => {
|
|
5595
5713
|
const newActivity = sharedUpdateActivity$6({
|
|
5596
5714
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5606,7 +5724,7 @@ const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCu
|
|
|
5606
5724
|
};
|
|
5607
5725
|
}
|
|
5608
5726
|
});
|
|
5609
|
-
function
|
|
5727
|
+
function handleBookmarkDeleted(event) {
|
|
5610
5728
|
const {
|
|
5611
5729
|
activities: currentActivities,
|
|
5612
5730
|
pinned_activities: currentPinnedActivities
|
|
@@ -5614,12 +5732,12 @@ function handleBookmarkAdded(event) {
|
|
|
5614
5732
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5615
5733
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5616
5734
|
const [result1, result2] = [
|
|
5617
|
-
|
|
5735
|
+
removeBookmarkFromActivities(
|
|
5618
5736
|
event,
|
|
5619
5737
|
currentActivities,
|
|
5620
5738
|
eventBelongsToCurrentUser
|
|
5621
5739
|
),
|
|
5622
|
-
|
|
5740
|
+
removeBookmarkFromPinnedActivities(
|
|
5623
5741
|
event,
|
|
5624
5742
|
currentPinnedActivities,
|
|
5625
5743
|
eventBelongsToCurrentUser
|
|
@@ -5632,9 +5750,6 @@ function handleBookmarkAdded(event) {
|
|
|
5632
5750
|
});
|
|
5633
5751
|
}
|
|
5634
5752
|
}
|
|
5635
|
-
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
5636
|
-
return bookmark1.user.id === bookmark2.user.id && bookmark1.activity.id === bookmark2.activity.id && bookmark1.folder?.id === bookmark2.folder?.id;
|
|
5637
|
-
};
|
|
5638
5753
|
const sharedUpdateActivity$5 = ({
|
|
5639
5754
|
currentActivity,
|
|
5640
5755
|
event,
|
|
@@ -5642,9 +5757,7 @@ const sharedUpdateActivity$5 = ({
|
|
|
5642
5757
|
}) => {
|
|
5643
5758
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5644
5759
|
if (eventBelongsToCurrentUser) {
|
|
5645
|
-
newOwnBookmarks =
|
|
5646
|
-
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5647
|
-
);
|
|
5760
|
+
newOwnBookmarks = [...newOwnBookmarks, event.bookmark];
|
|
5648
5761
|
}
|
|
5649
5762
|
return {
|
|
5650
5763
|
...currentActivity,
|
|
@@ -5652,18 +5765,20 @@ const sharedUpdateActivity$5 = ({
|
|
|
5652
5765
|
own_bookmarks: newOwnBookmarks
|
|
5653
5766
|
};
|
|
5654
5767
|
};
|
|
5655
|
-
const
|
|
5768
|
+
const addBookmarkToActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5656
5769
|
entities: activities,
|
|
5657
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5770
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5658
5771
|
updater: (matchedActivity) => sharedUpdateActivity$5({
|
|
5659
5772
|
currentActivity: matchedActivity,
|
|
5660
5773
|
event,
|
|
5661
5774
|
eventBelongsToCurrentUser
|
|
5662
5775
|
})
|
|
5663
5776
|
});
|
|
5664
|
-
const
|
|
5777
|
+
const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5665
5778
|
entities: pinnedActivities,
|
|
5666
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5779
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !pinnedActivity.activity.own_bookmarks.some(
|
|
5780
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5781
|
+
)),
|
|
5667
5782
|
updater: (matchedPinnedActivity) => {
|
|
5668
5783
|
const newActivity = sharedUpdateActivity$5({
|
|
5669
5784
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5679,7 +5794,7 @@ const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelong
|
|
|
5679
5794
|
};
|
|
5680
5795
|
}
|
|
5681
5796
|
});
|
|
5682
|
-
function
|
|
5797
|
+
function handleBookmarkAdded(event) {
|
|
5683
5798
|
const {
|
|
5684
5799
|
activities: currentActivities,
|
|
5685
5800
|
pinned_activities: currentPinnedActivities
|
|
@@ -5687,12 +5802,12 @@ function handleBookmarkDeleted(event) {
|
|
|
5687
5802
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5688
5803
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5689
5804
|
const [result1, result2] = [
|
|
5690
|
-
|
|
5805
|
+
addBookmarkToActivities(
|
|
5691
5806
|
event,
|
|
5692
5807
|
currentActivities,
|
|
5693
5808
|
eventBelongsToCurrentUser
|
|
5694
5809
|
),
|
|
5695
|
-
|
|
5810
|
+
addBookmarkToPinnedActivities(
|
|
5696
5811
|
event,
|
|
5697
5812
|
currentPinnedActivities,
|
|
5698
5813
|
eventBelongsToCurrentUser
|
|
@@ -5713,7 +5828,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5713
5828
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5714
5829
|
if (eventBelongsToCurrentUser) {
|
|
5715
5830
|
const bookmarkIndex = newOwnBookmarks.findIndex(
|
|
5716
|
-
(bookmark) =>
|
|
5831
|
+
(bookmark) => bookmark.user.id === event.bookmark.user.id && bookmark.activity.id === event.bookmark.activity.id && bookmark.folder?.id === event.bookmark.folder?.id
|
|
5717
5832
|
);
|
|
5718
5833
|
if (bookmarkIndex !== -1) {
|
|
5719
5834
|
newOwnBookmarks = [...newOwnBookmarks];
|
|
@@ -5728,7 +5843,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5728
5843
|
};
|
|
5729
5844
|
const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5730
5845
|
entities: activities,
|
|
5731
|
-
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
5846
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !activity.own_bookmarks.some((b) => isSameBookmark(b, event.bookmark))),
|
|
5732
5847
|
updater: (matchedActivity) => sharedUpdateActivity$4({
|
|
5733
5848
|
currentActivity: matchedActivity,
|
|
5734
5849
|
event,
|
|
@@ -5737,7 +5852,9 @@ const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser
|
|
|
5737
5852
|
});
|
|
5738
5853
|
const updateBookmarkInPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5739
5854
|
entities: pinnedActivities,
|
|
5740
|
-
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id
|
|
5855
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id && (!eventBelongsToCurrentUser || !pinnedActivity.activity.own_bookmarks.some(
|
|
5856
|
+
(b) => isSameBookmark(b, event.bookmark)
|
|
5857
|
+
)),
|
|
5741
5858
|
updater: (matchedPinnedActivity) => {
|
|
5742
5859
|
const newActivity = sharedUpdateActivity$4({
|
|
5743
5860
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5864,7 +5981,19 @@ const removePinnedActivityFromState = (activityResponse, pinnedActivities) => {
|
|
|
5864
5981
|
return { changed: false, pinned_activities: pinnedActivities };
|
|
5865
5982
|
}
|
|
5866
5983
|
};
|
|
5867
|
-
function handleActivityDeleted(event) {
|
|
5984
|
+
function handleActivityDeleted(event, fromWs) {
|
|
5985
|
+
if (!shouldUpdateState({
|
|
5986
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-deleted"),
|
|
5987
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
5988
|
+
watch: this.currentState.watch,
|
|
5989
|
+
fromWs,
|
|
5990
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5991
|
+
this,
|
|
5992
|
+
event
|
|
5993
|
+
)
|
|
5994
|
+
})) {
|
|
5995
|
+
return;
|
|
5996
|
+
}
|
|
5868
5997
|
const {
|
|
5869
5998
|
activities: currentActivities,
|
|
5870
5999
|
pinned_activities: currentPinnedActivities
|
|
@@ -6210,53 +6339,133 @@ function handleActivityReactionUpdated(payload, fromWs) {
|
|
|
6210
6339
|
});
|
|
6211
6340
|
}
|
|
6212
6341
|
}
|
|
6213
|
-
|
|
6214
|
-
if (!
|
|
6215
|
-
|
|
6216
|
-
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
.../* @__PURE__ */ new Set([
|
|
6226
|
-
...currentNotificationStatus.read_activities ?? [],
|
|
6227
|
-
...allGroupIds
|
|
6228
|
-
])
|
|
6229
|
-
];
|
|
6342
|
+
function handleActivityPinned(event, fromWs) {
|
|
6343
|
+
if (!shouldUpdateState({
|
|
6344
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-pinned"),
|
|
6345
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
6346
|
+
watch: this.currentState.watch,
|
|
6347
|
+
fromWs,
|
|
6348
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
6349
|
+
this,
|
|
6350
|
+
event
|
|
6351
|
+
)
|
|
6352
|
+
})) {
|
|
6353
|
+
return;
|
|
6230
6354
|
}
|
|
6231
|
-
|
|
6232
|
-
newState
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
|
|
6236
|
-
|
|
6237
|
-
|
|
6355
|
+
this.state.next((currentState) => {
|
|
6356
|
+
const newState = {
|
|
6357
|
+
...currentState
|
|
6358
|
+
};
|
|
6359
|
+
const pinnedActivity = {
|
|
6360
|
+
...event.pinned_activity,
|
|
6361
|
+
user: event.user,
|
|
6362
|
+
updated_at: /* @__PURE__ */ new Date()
|
|
6363
|
+
};
|
|
6364
|
+
newState.pinned_activities = currentState.pinned_activities ? [pinnedActivity, ...currentState.pinned_activities] : [pinnedActivity];
|
|
6365
|
+
return newState;
|
|
6366
|
+
});
|
|
6367
|
+
}
|
|
6368
|
+
function handleActivityUnpinned(event, fromWs) {
|
|
6369
|
+
if (!shouldUpdateState({
|
|
6370
|
+
stateUpdateQueueId: getStateUpdateQueueId(event, "activity-unpinned"),
|
|
6371
|
+
stateUpdateQueue: this.stateUpdateQueue,
|
|
6372
|
+
watch: this.currentState.watch,
|
|
6373
|
+
fromWs,
|
|
6374
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
6375
|
+
this,
|
|
6376
|
+
event
|
|
6377
|
+
)
|
|
6378
|
+
})) {
|
|
6379
|
+
return;
|
|
6238
6380
|
}
|
|
6239
|
-
|
|
6240
|
-
newState
|
|
6381
|
+
this.state.next((currentState) => {
|
|
6382
|
+
let newState;
|
|
6383
|
+
const index = currentState.pinned_activities?.findIndex(
|
|
6384
|
+
(pinnedActivity) => pinnedActivity.activity.id === event.pinned_activity.activity.id
|
|
6385
|
+
) ?? -1;
|
|
6386
|
+
if (index >= 0) {
|
|
6387
|
+
newState ?? (newState = {
|
|
6388
|
+
...currentState
|
|
6389
|
+
});
|
|
6390
|
+
const newPinnedActivities = [...currentState.pinned_activities];
|
|
6391
|
+
newPinnedActivities.splice(index, 1);
|
|
6392
|
+
newState.pinned_activities = newPinnedActivities;
|
|
6393
|
+
}
|
|
6394
|
+
return newState ?? currentState;
|
|
6395
|
+
});
|
|
6396
|
+
}
|
|
6397
|
+
const isPin = (entity) => {
|
|
6398
|
+
return "activity" in entity;
|
|
6399
|
+
};
|
|
6400
|
+
const updateActivityFromFeedback = (feedback, activities) => {
|
|
6401
|
+
if (!activities) {
|
|
6402
|
+
return {
|
|
6403
|
+
changed: false,
|
|
6404
|
+
entities: []
|
|
6405
|
+
};
|
|
6241
6406
|
}
|
|
6242
|
-
return {
|
|
6243
|
-
|
|
6244
|
-
|
|
6245
|
-
|
|
6407
|
+
return updateEntityInArray({
|
|
6408
|
+
entities: activities,
|
|
6409
|
+
matcher: (e) => {
|
|
6410
|
+
const newHidden = feedback.value === "true";
|
|
6411
|
+
if (isPin(e)) {
|
|
6412
|
+
return e.activity.id === feedback.activity_id && e.activity.hidden !== newHidden;
|
|
6413
|
+
}
|
|
6414
|
+
return e.id === feedback.activity_id && e.hidden !== newHidden;
|
|
6415
|
+
},
|
|
6416
|
+
updater: (e) => {
|
|
6417
|
+
if (isPin(e)) {
|
|
6418
|
+
return {
|
|
6419
|
+
...e,
|
|
6420
|
+
activity: {
|
|
6421
|
+
...e.activity,
|
|
6422
|
+
hidden: feedback.value === "true"
|
|
6423
|
+
}
|
|
6424
|
+
};
|
|
6425
|
+
} else {
|
|
6426
|
+
return {
|
|
6427
|
+
...e,
|
|
6428
|
+
hidden: feedback.value === "true"
|
|
6429
|
+
};
|
|
6430
|
+
}
|
|
6431
|
+
}
|
|
6432
|
+
});
|
|
6246
6433
|
};
|
|
6247
|
-
function
|
|
6248
|
-
const
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
);
|
|
6253
|
-
|
|
6434
|
+
function handleActivityFeedback(event) {
|
|
6435
|
+
const {
|
|
6436
|
+
activities: currentActivities,
|
|
6437
|
+
pinned_activities: currentPinnedActivities
|
|
6438
|
+
} = this.currentState;
|
|
6439
|
+
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
6440
|
+
const eventBelongsToCurrentUser = event.activity_feedback.user.id === connectedUser?.id;
|
|
6441
|
+
if (!eventBelongsToCurrentUser || event.activity_feedback.action !== "hide") {
|
|
6442
|
+
return;
|
|
6443
|
+
}
|
|
6444
|
+
const [result1, result2] = [
|
|
6445
|
+
updateActivityFromFeedback(event.activity_feedback, currentActivities),
|
|
6446
|
+
updateActivityFromFeedback(
|
|
6447
|
+
event.activity_feedback,
|
|
6448
|
+
currentPinnedActivities
|
|
6449
|
+
)
|
|
6450
|
+
];
|
|
6451
|
+
if (result1.changed || result2.changed) {
|
|
6254
6452
|
this.state.partialNext({
|
|
6255
|
-
|
|
6453
|
+
activities: result1.entities,
|
|
6454
|
+
pinned_activities: result2.entities
|
|
6256
6455
|
});
|
|
6257
6456
|
}
|
|
6258
6457
|
}
|
|
6458
|
+
function handleFeedDeleted(event) {
|
|
6459
|
+
if (this.currentState.deleted_at) {
|
|
6460
|
+
return;
|
|
6461
|
+
}
|
|
6462
|
+
this.state.partialNext({ deleted_at: event.created_at });
|
|
6463
|
+
}
|
|
6259
6464
|
function handleFeedUpdated(event) {
|
|
6465
|
+
const currentUpdatedAt = this.currentState.updated_at;
|
|
6466
|
+
if (currentUpdatedAt && event.feed.updated_at && currentUpdatedAt.getTime() >= event.feed.updated_at.getTime()) {
|
|
6467
|
+
return;
|
|
6468
|
+
}
|
|
6260
6469
|
this.state.partialNext({ ...event.feed });
|
|
6261
6470
|
}
|
|
6262
6471
|
const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
|
|
@@ -6305,11 +6514,20 @@ const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActiv
|
|
|
6305
6514
|
(a) => a.group
|
|
6306
6515
|
);
|
|
6307
6516
|
break;
|
|
6308
|
-
case "replace":
|
|
6517
|
+
case "replace-then-end":
|
|
6309
6518
|
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
6310
6519
|
aggregatedActivities ?? [],
|
|
6311
6520
|
newAggregatedActivities,
|
|
6312
|
-
(a) => a.group
|
|
6521
|
+
(a) => a.group,
|
|
6522
|
+
"end"
|
|
6523
|
+
);
|
|
6524
|
+
break;
|
|
6525
|
+
case "replace-then-start":
|
|
6526
|
+
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
6527
|
+
aggregatedActivities ?? [],
|
|
6528
|
+
newAggregatedActivities,
|
|
6529
|
+
(a) => a.group,
|
|
6530
|
+
"start"
|
|
6313
6531
|
);
|
|
6314
6532
|
break;
|
|
6315
6533
|
}
|
|
@@ -6336,7 +6554,7 @@ const updateNotificationStatus = (newNotificationStatus, currentNotificationStat
|
|
|
6336
6554
|
};
|
|
6337
6555
|
}
|
|
6338
6556
|
};
|
|
6339
|
-
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
|
|
6557
|
+
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus, currentActivities) => {
|
|
6340
6558
|
const updates = {};
|
|
6341
6559
|
if (event.notification_status) {
|
|
6342
6560
|
const notificationStatusResult = updateNotificationStatus(
|
|
@@ -6347,11 +6565,47 @@ const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, cur
|
|
|
6347
6565
|
updates.notification_status = notificationStatusResult.notification_status;
|
|
6348
6566
|
}
|
|
6349
6567
|
}
|
|
6568
|
+
const effectiveStatus = event.notification_status ?? currentNotificationStatus;
|
|
6569
|
+
const lastReadAt = effectiveStatus?.last_read_at;
|
|
6570
|
+
const lastSeenAt = effectiveStatus?.last_seen_at;
|
|
6571
|
+
const readActivities = effectiveStatus?.read_activities ?? [];
|
|
6572
|
+
const seenActivities = effectiveStatus?.seen_activities ?? [];
|
|
6573
|
+
if (currentActivities?.length && !currentAggregatedActivities?.length && effectiveStatus) {
|
|
6574
|
+
let anyChanged = false;
|
|
6575
|
+
const updatedActivities = currentActivities.map((activity) => {
|
|
6576
|
+
const isRead = lastReadAt != null && activity.updated_at.getTime() < lastReadAt.getTime() || readActivities.includes(activity.id);
|
|
6577
|
+
const isSeen = lastSeenAt != null && activity.updated_at.getTime() < lastSeenAt.getTime() || seenActivities.includes(activity.id);
|
|
6578
|
+
if (activity.is_read !== isRead || activity.is_seen !== isSeen) {
|
|
6579
|
+
anyChanged = true;
|
|
6580
|
+
return { ...activity, is_read: isRead, is_seen: isSeen };
|
|
6581
|
+
}
|
|
6582
|
+
return activity;
|
|
6583
|
+
});
|
|
6584
|
+
if (anyChanged) {
|
|
6585
|
+
updates.activities = updatedActivities;
|
|
6586
|
+
}
|
|
6587
|
+
}
|
|
6588
|
+
if (currentAggregatedActivities?.length && effectiveStatus) {
|
|
6589
|
+
const baseAggregated = currentAggregatedActivities;
|
|
6590
|
+
let anyChanged = false;
|
|
6591
|
+
const updatedAggregated = baseAggregated.map((group) => {
|
|
6592
|
+
const isRead = lastReadAt != null && group.updated_at.getTime() < lastReadAt.getTime() || readActivities.includes(group.group);
|
|
6593
|
+
const isSeen = lastSeenAt != null && group.updated_at.getTime() < lastSeenAt.getTime() || seenActivities.includes(group.group);
|
|
6594
|
+
if (group.is_read !== isRead || group.is_seen !== isSeen) {
|
|
6595
|
+
anyChanged = true;
|
|
6596
|
+
return { ...group, is_read: isRead, is_seen: isSeen };
|
|
6597
|
+
}
|
|
6598
|
+
return group;
|
|
6599
|
+
});
|
|
6600
|
+
if (anyChanged) {
|
|
6601
|
+
updates.aggregated_activities = updatedAggregated;
|
|
6602
|
+
}
|
|
6603
|
+
}
|
|
6350
6604
|
if (event.aggregated_activities && currentAggregatedActivities) {
|
|
6351
6605
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6352
6606
|
event.aggregated_activities,
|
|
6353
|
-
currentAggregatedActivities,
|
|
6354
|
-
"start"
|
|
6607
|
+
updates.aggregated_activities ?? currentAggregatedActivities,
|
|
6608
|
+
"replace-then-start"
|
|
6355
6609
|
);
|
|
6356
6610
|
if (aggregatedActivitiesResult.changed) {
|
|
6357
6611
|
updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6371,12 +6625,14 @@ function handleNotificationFeedUpdated(event) {
|
|
|
6371
6625
|
const result = updateNotificationFeedFromEvent(
|
|
6372
6626
|
event,
|
|
6373
6627
|
this.currentState.aggregated_activities,
|
|
6374
|
-
this.currentState.notification_status
|
|
6628
|
+
this.currentState.notification_status,
|
|
6629
|
+
this.currentState.activities
|
|
6375
6630
|
);
|
|
6376
6631
|
if (result.changed) {
|
|
6377
6632
|
this.state.partialNext({
|
|
6378
6633
|
notification_status: result.data?.notification_status,
|
|
6379
|
-
aggregated_activities: result.data?.aggregated_activities
|
|
6634
|
+
aggregated_activities: result.data?.aggregated_activities,
|
|
6635
|
+
activities: result.data?.activities ?? this.currentState.activities
|
|
6380
6636
|
});
|
|
6381
6637
|
}
|
|
6382
6638
|
}
|
|
@@ -6426,7 +6682,7 @@ function updateStoriesFeedFromEvent(aggregatedActivities, activities, event) {
|
|
|
6426
6682
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6427
6683
|
event.aggregated_activities,
|
|
6428
6684
|
aggregatedActivities,
|
|
6429
|
-
"replace"
|
|
6685
|
+
"replace-then-end"
|
|
6430
6686
|
);
|
|
6431
6687
|
if (aggregatedActivitiesResult.changed) {
|
|
6432
6688
|
result.data.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6520,61 +6776,6 @@ async function withRetry(fn, options = {}) {
|
|
|
6520
6776
|
}
|
|
6521
6777
|
throw lastError;
|
|
6522
6778
|
}
|
|
6523
|
-
const isPin = (entity) => {
|
|
6524
|
-
return "activity" in entity;
|
|
6525
|
-
};
|
|
6526
|
-
const updateActivityFromFeedback = (feedback, activities) => {
|
|
6527
|
-
if (!activities) {
|
|
6528
|
-
return {
|
|
6529
|
-
changed: false,
|
|
6530
|
-
entities: []
|
|
6531
|
-
};
|
|
6532
|
-
}
|
|
6533
|
-
return updateEntityInArray({
|
|
6534
|
-
entities: activities,
|
|
6535
|
-
matcher: (e) => isPin(e) ? e.activity.id === feedback.activity_id : e.id === feedback.activity_id,
|
|
6536
|
-
updater: (e) => {
|
|
6537
|
-
if (isPin(e)) {
|
|
6538
|
-
return {
|
|
6539
|
-
...e,
|
|
6540
|
-
activity: {
|
|
6541
|
-
...e.activity,
|
|
6542
|
-
hidden: feedback.value === "true"
|
|
6543
|
-
}
|
|
6544
|
-
};
|
|
6545
|
-
} else {
|
|
6546
|
-
return {
|
|
6547
|
-
...e,
|
|
6548
|
-
hidden: feedback.value === "true"
|
|
6549
|
-
};
|
|
6550
|
-
}
|
|
6551
|
-
}
|
|
6552
|
-
});
|
|
6553
|
-
};
|
|
6554
|
-
function handleActivityFeedback(event) {
|
|
6555
|
-
const {
|
|
6556
|
-
activities: currentActivities,
|
|
6557
|
-
pinned_activities: currentPinnedActivities
|
|
6558
|
-
} = this.currentState;
|
|
6559
|
-
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
6560
|
-
const eventBelongsToCurrentUser = event.activity_feedback.user.id === connectedUser?.id;
|
|
6561
|
-
if (!eventBelongsToCurrentUser || event.activity_feedback.action !== "hide") {
|
|
6562
|
-
return;
|
|
6563
|
-
}
|
|
6564
|
-
const [result1, result2] = [
|
|
6565
|
-
updateActivityFromFeedback(event.activity_feedback, currentActivities),
|
|
6566
|
-
updateActivityFromFeedback(
|
|
6567
|
-
event.activity_feedback,
|
|
6568
|
-
currentPinnedActivities
|
|
6569
|
-
)
|
|
6570
|
-
];
|
|
6571
|
-
if (result1.changed || result2.changed) {
|
|
6572
|
-
this.state.partialNext({
|
|
6573
|
-
activities: result1.entities,
|
|
6574
|
-
pinned_activities: result2.entities
|
|
6575
|
-
});
|
|
6576
|
-
}
|
|
6577
|
-
}
|
|
6578
6779
|
const deepEqual = (x, y) => {
|
|
6579
6780
|
if (x === y) {
|
|
6580
6781
|
return true;
|
|
@@ -6701,7 +6902,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6701
6902
|
"feeds.comment.deleted": handleCommentDeleted.bind(this),
|
|
6702
6903
|
"feeds.comment.updated": handleCommentUpdated.bind(this),
|
|
6703
6904
|
"feeds.feed.created": _Feed.noop,
|
|
6704
|
-
"feeds.feed.deleted":
|
|
6905
|
+
"feeds.feed.deleted": handleFeedDeleted.bind(this),
|
|
6705
6906
|
"feeds.feed.updated": handleFeedUpdated.bind(this),
|
|
6706
6907
|
"feeds.feed_group.changed": _Feed.noop,
|
|
6707
6908
|
"feeds.feed_group.deleted": _Feed.noop,
|
|
@@ -6724,9 +6925,9 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6724
6925
|
"feeds.poll.vote_casted": _Feed.noop,
|
|
6725
6926
|
"feeds.poll.vote_changed": _Feed.noop,
|
|
6726
6927
|
"feeds.poll.vote_removed": _Feed.noop,
|
|
6727
|
-
"feeds.activity.pinned":
|
|
6728
|
-
"feeds.activity.unpinned":
|
|
6729
|
-
"feeds.activity.marked":
|
|
6928
|
+
"feeds.activity.pinned": handleActivityPinned.bind(this),
|
|
6929
|
+
"feeds.activity.unpinned": handleActivityUnpinned.bind(this),
|
|
6930
|
+
"feeds.activity.marked": _Feed.noop,
|
|
6730
6931
|
"moderation.custom_action": _Feed.noop,
|
|
6731
6932
|
"moderation.flagged": _Feed.noop,
|
|
6732
6933
|
"moderation.mark_reviewed": _Feed.noop,
|
|
@@ -7840,6 +8041,53 @@ class FeedsClient extends FeedsApi {
|
|
|
7840
8041
|
}
|
|
7841
8042
|
return response;
|
|
7842
8043
|
};
|
|
8044
|
+
this.updateActivityPartial = async (...args) => {
|
|
8045
|
+
const response = await super.updateActivityPartial(...args);
|
|
8046
|
+
for (const feed of this.allActiveFeeds) {
|
|
8047
|
+
handleActivityUpdated.bind(feed)(response, false);
|
|
8048
|
+
}
|
|
8049
|
+
return response;
|
|
8050
|
+
};
|
|
8051
|
+
this.deleteActivity = async (...args) => {
|
|
8052
|
+
const response = await super.deleteActivity(...args);
|
|
8053
|
+
const activityId = args[0].id;
|
|
8054
|
+
for (const feed of this.allActiveFeeds) {
|
|
8055
|
+
handleActivityDeleted.bind(feed)(
|
|
8056
|
+
{ activity: { id: activityId } },
|
|
8057
|
+
false
|
|
8058
|
+
);
|
|
8059
|
+
}
|
|
8060
|
+
this.activeActivities = this.activeActivities.filter(
|
|
8061
|
+
(activity) => activity.id !== activityId
|
|
8062
|
+
);
|
|
8063
|
+
return response;
|
|
8064
|
+
};
|
|
8065
|
+
this.activityFeedback = async (request) => {
|
|
8066
|
+
const response = await super.activityFeedback(request);
|
|
8067
|
+
if (request.hide !== void 0) {
|
|
8068
|
+
const feedback = {
|
|
8069
|
+
activity_id: request.activity_id,
|
|
8070
|
+
value: request.hide ? "true" : "false"
|
|
8071
|
+
};
|
|
8072
|
+
for (const feed of this.allActiveFeeds) {
|
|
8073
|
+
const {
|
|
8074
|
+
activities: currentActivities,
|
|
8075
|
+
pinned_activities: currentPinnedActivities
|
|
8076
|
+
} = feed.currentState;
|
|
8077
|
+
const [result1, result2] = [
|
|
8078
|
+
updateActivityFromFeedback(feedback, currentActivities),
|
|
8079
|
+
updateActivityFromFeedback(feedback, currentPinnedActivities)
|
|
8080
|
+
];
|
|
8081
|
+
if (result1.changed || result2.changed) {
|
|
8082
|
+
feed.state.partialNext({
|
|
8083
|
+
activities: result1.entities,
|
|
8084
|
+
pinned_activities: result2.entities
|
|
8085
|
+
});
|
|
8086
|
+
}
|
|
8087
|
+
}
|
|
8088
|
+
}
|
|
8089
|
+
return response;
|
|
8090
|
+
};
|
|
7843
8091
|
this.addComment = async (request) => {
|
|
7844
8092
|
const response = await super.addComment(request);
|
|
7845
8093
|
const { comment } = response;
|
|
@@ -7925,6 +8173,121 @@ class FeedsClient extends FeedsApi {
|
|
|
7925
8173
|
}
|
|
7926
8174
|
return response;
|
|
7927
8175
|
};
|
|
8176
|
+
this.addBookmark = async (request) => {
|
|
8177
|
+
const response = await super.addBookmark(request);
|
|
8178
|
+
for (const feed of this.allActiveFeeds) {
|
|
8179
|
+
handleBookmarkAdded.bind(feed)(response);
|
|
8180
|
+
}
|
|
8181
|
+
return response;
|
|
8182
|
+
};
|
|
8183
|
+
this.updateBookmark = async (request) => {
|
|
8184
|
+
const response = await super.updateBookmark(request);
|
|
8185
|
+
for (const feed of this.allActiveFeeds) {
|
|
8186
|
+
handleBookmarkUpdated.bind(feed)(response);
|
|
8187
|
+
}
|
|
8188
|
+
return response;
|
|
8189
|
+
};
|
|
8190
|
+
this.deleteBookmark = async (request) => {
|
|
8191
|
+
const response = await super.deleteBookmark(request);
|
|
8192
|
+
for (const feed of this.allActiveFeeds) {
|
|
8193
|
+
handleBookmarkDeleted.bind(feed)(response);
|
|
8194
|
+
}
|
|
8195
|
+
return response;
|
|
8196
|
+
};
|
|
8197
|
+
this.pinActivity = async (...args) => {
|
|
8198
|
+
const response = await super.pinActivity(...args);
|
|
8199
|
+
const feedIds = response.activity?.feeds ?? (response.feed ? [response.feed] : []);
|
|
8200
|
+
for (const fid of feedIds) {
|
|
8201
|
+
const feed = this.activeFeeds[fid];
|
|
8202
|
+
if (feed) {
|
|
8203
|
+
handleActivityPinned.bind(feed)(
|
|
8204
|
+
{ pinned_activity: response },
|
|
8205
|
+
false
|
|
8206
|
+
);
|
|
8207
|
+
}
|
|
8208
|
+
}
|
|
8209
|
+
return response;
|
|
8210
|
+
};
|
|
8211
|
+
this.unpinActivity = async (...args) => {
|
|
8212
|
+
const response = await super.unpinActivity(...args);
|
|
8213
|
+
const feedIds = response.activity?.feeds ?? (response.feed ? [response.feed] : []);
|
|
8214
|
+
for (const fid of feedIds) {
|
|
8215
|
+
const feed = this.activeFeeds[fid];
|
|
8216
|
+
if (feed) {
|
|
8217
|
+
handleActivityUnpinned.bind(feed)(
|
|
8218
|
+
{
|
|
8219
|
+
pinned_activity: {
|
|
8220
|
+
...response,
|
|
8221
|
+
created_at: /* @__PURE__ */ new Date()
|
|
8222
|
+
}
|
|
8223
|
+
},
|
|
8224
|
+
false
|
|
8225
|
+
);
|
|
8226
|
+
}
|
|
8227
|
+
}
|
|
8228
|
+
return response;
|
|
8229
|
+
};
|
|
8230
|
+
this.updateFeed = async (...args) => {
|
|
8231
|
+
const response = await super.updateFeed(...args);
|
|
8232
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8233
|
+
const feed = this.activeFeeds[fid];
|
|
8234
|
+
if (feed) {
|
|
8235
|
+
handleFeedUpdated.call(feed, { feed: response.feed });
|
|
8236
|
+
}
|
|
8237
|
+
return response;
|
|
8238
|
+
};
|
|
8239
|
+
this.deleteFeed = async (...args) => {
|
|
8240
|
+
const response = await super.deleteFeed(...args);
|
|
8241
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8242
|
+
const feed = this.activeFeeds[fid];
|
|
8243
|
+
if (feed) {
|
|
8244
|
+
handleFeedDeleted.call(feed, {
|
|
8245
|
+
created_at: /* @__PURE__ */ new Date()
|
|
8246
|
+
});
|
|
8247
|
+
if (!feed.currentState.watch) {
|
|
8248
|
+
delete this.activeFeeds[fid];
|
|
8249
|
+
this.activeActivities = this.activeActivities.filter(
|
|
8250
|
+
(activity) => getFeed.call(activity)?.feed !== fid
|
|
8251
|
+
);
|
|
8252
|
+
}
|
|
8253
|
+
}
|
|
8254
|
+
return response;
|
|
8255
|
+
};
|
|
8256
|
+
this.updateFeedMembers = async (...args) => {
|
|
8257
|
+
const response = await super.updateFeedMembers(...args);
|
|
8258
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8259
|
+
const feed = this.activeFeeds[fid];
|
|
8260
|
+
if (feed) {
|
|
8261
|
+
for (const member of response.added) {
|
|
8262
|
+
handleFeedMemberAdded.call(feed, { member }, false);
|
|
8263
|
+
}
|
|
8264
|
+
for (const member of response.updated) {
|
|
8265
|
+
handleFeedMemberUpdated.call(feed, { member }, false);
|
|
8266
|
+
}
|
|
8267
|
+
for (const memberId of response.removed_ids) {
|
|
8268
|
+
handleFeedMemberRemoved.call(feed, { member_id: memberId }, false);
|
|
8269
|
+
}
|
|
8270
|
+
}
|
|
8271
|
+
return response;
|
|
8272
|
+
};
|
|
8273
|
+
this.acceptFeedMemberInvite = async (...args) => {
|
|
8274
|
+
const response = await super.acceptFeedMemberInvite(...args);
|
|
8275
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8276
|
+
const feed = this.activeFeeds[fid];
|
|
8277
|
+
if (feed) {
|
|
8278
|
+
handleFeedMemberUpdated.call(feed, { member: response.member }, false);
|
|
8279
|
+
}
|
|
8280
|
+
return response;
|
|
8281
|
+
};
|
|
8282
|
+
this.rejectFeedMemberInvite = async (...args) => {
|
|
8283
|
+
const response = await super.rejectFeedMemberInvite(...args);
|
|
8284
|
+
const fid = `${args[0].feed_group_id}:${args[0].feed_id}`;
|
|
8285
|
+
const feed = this.activeFeeds[fid];
|
|
8286
|
+
if (feed) {
|
|
8287
|
+
handleFeedMemberUpdated.call(feed, { member: response.member }, false);
|
|
8288
|
+
}
|
|
8289
|
+
return response;
|
|
8290
|
+
};
|
|
7928
8291
|
this.queryPollAnswers = async (request) => {
|
|
7929
8292
|
const filter = request.filter ?? {};
|
|
7930
8293
|
const queryPollAnswersFilter = {
|
|
@@ -8240,6 +8603,17 @@ class FeedsClient extends FeedsApi {
|
|
|
8240
8603
|
});
|
|
8241
8604
|
return response;
|
|
8242
8605
|
}
|
|
8606
|
+
async acceptFollow(...args) {
|
|
8607
|
+
const response = await super.acceptFollow(...args);
|
|
8608
|
+
[
|
|
8609
|
+
response.follow.source_feed.feed,
|
|
8610
|
+
response.follow.target_feed.feed
|
|
8611
|
+
].forEach((fid) => {
|
|
8612
|
+
const feeds = this.findAllActiveFeedsByFid(fid);
|
|
8613
|
+
feeds.forEach((f) => handleFollowUpdated.bind(f)(response, false));
|
|
8614
|
+
});
|
|
8615
|
+
return response;
|
|
8616
|
+
}
|
|
8243
8617
|
// For follow API endpoints we update the state after HTTP response to allow queryFeeds with watch: false
|
|
8244
8618
|
async follow(request) {
|
|
8245
8619
|
const response = await super.follow(request);
|
|
@@ -8406,4 +8780,4 @@ export {
|
|
|
8406
8780
|
shouldUpdateState as s,
|
|
8407
8781
|
uniqueArrayMerge as u
|
|
8408
8782
|
};
|
|
8409
|
-
//# sourceMappingURL=feeds-client-
|
|
8783
|
+
//# sourceMappingURL=feeds-client-jtUTE4AC.mjs.map
|