@stream-io/feeds-client 0.3.51 → 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 +21 -0
- package/dist/cjs/index.js +2 -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 +15 -14
- 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-B4zeBggL.js → feeds-client-C1c6lcS3.js} +705 -214
- package/dist/feeds-client-C1c6lcS3.js.map +1 -0
- package/dist/{feeds-client-DeAqnd1a.mjs → feeds-client-jtUTE4AC.mjs} +711 -220
- package/dist/feeds-client-jtUTE4AC.mjs.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/types/activity-with-state-updates/activity-with-state-updates.d.ts.map +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/activity-filter.d.ts +11 -0
- package/dist/types/feed/activity-filter.d.ts.map +1 -0
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -2
- package/dist/types/feed/event-handlers/activity/handle-activity-added.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/handle-activity-updated.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/comment/handle-comment-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-created.d.ts +2 -2
- package/dist/types/feed/event-handlers/follow/handle-follow-created.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 +17 -12
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts +4 -0
- package/dist/types/feeds-client/apply-new-activity-to-active-feeds.d.ts.map +1 -0
- package/dist/types/feeds-client/feeds-client.d.ts +29 -8
- 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/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +15 -0
- package/dist/types/types.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 +2 -1
- package/src/activity-with-state-updates/activity-with-state-updates.ts +8 -2
- 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/activity-filter.ts +44 -0
- package/src/feed/event-handlers/activity/handle-activity-added.ts +22 -8
- 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/handle-activity-updated.ts +5 -1
- 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/comment/handle-comment-updated.ts +11 -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-created.ts +18 -1
- 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 +79 -26
- package/src/feeds-client/apply-new-activity-to-active-feeds.ts +9 -0
- package/src/feeds-client/feeds-client.ts +301 -28
- 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/index.ts +1 -0
- package/src/types.ts +17 -0
- package/src/utils/state-update-queue.ts +42 -28
- package/src/utils/unique-array-merge.ts +11 -3
- package/dist/feeds-client-B4zeBggL.js.map +0 -1
- package/dist/feeds-client-DeAqnd1a.mjs.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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StateStore } from "@stream-io/state-store";
|
|
2
2
|
import * as loggerInternal from "@stream-io/logger";
|
|
3
3
|
import axiosImport from "axios";
|
|
4
|
+
import { itemMatchesFilter, resolveDotPathValue } from "@stream-io/filter";
|
|
4
5
|
const decoders = {};
|
|
5
6
|
const decodeDatetimeType = (input) => typeof input === "number" ? new Date(Math.floor(input / 1e6)) : new Date(input);
|
|
6
7
|
decoders.DatetimeType = decodeDatetimeType;
|
|
@@ -1122,6 +1123,12 @@ decoders.QueryBookmarksResponse = (input) => {
|
|
|
1122
1123
|
};
|
|
1123
1124
|
return decode(typeMappings, input);
|
|
1124
1125
|
};
|
|
1126
|
+
decoders.QueryCollectionsResponse = (input) => {
|
|
1127
|
+
const typeMappings = {
|
|
1128
|
+
collections: { type: "CollectionResponse", isSingle: false }
|
|
1129
|
+
};
|
|
1130
|
+
return decode(typeMappings, input);
|
|
1131
|
+
};
|
|
1125
1132
|
decoders.QueryCommentReactionsResponse = (input) => {
|
|
1126
1133
|
const typeMappings = {
|
|
1127
1134
|
reactions: { type: "FeedsReactionResponse", isSingle: false }
|
|
@@ -1696,6 +1703,21 @@ class FeedsApi {
|
|
|
1696
1703
|
decoders.DeleteActivitiesResponse?.(response.body);
|
|
1697
1704
|
return { ...response.body, metadata: response.metadata };
|
|
1698
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
|
+
}
|
|
1699
1721
|
async queryActivities(request) {
|
|
1700
1722
|
const body = {
|
|
1701
1723
|
enrich_own_fields: request?.enrich_own_fields,
|
|
@@ -2108,6 +2130,25 @@ class FeedsApi {
|
|
|
2108
2130
|
decoders.CreateCollectionsResponse?.(response.body);
|
|
2109
2131
|
return { ...response.body, metadata: response.metadata };
|
|
2110
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
|
+
}
|
|
2111
2152
|
async getComments(request) {
|
|
2112
2153
|
const queryParams = {
|
|
2113
2154
|
object_id: request?.object_id,
|
|
@@ -2167,6 +2208,7 @@ class FeedsApi {
|
|
|
2167
2208
|
async queryComments(request) {
|
|
2168
2209
|
const body = {
|
|
2169
2210
|
filter: request?.filter,
|
|
2211
|
+
id_around: request?.id_around,
|
|
2170
2212
|
limit: request?.limit,
|
|
2171
2213
|
next: request?.next,
|
|
2172
2214
|
prev: request?.prev,
|
|
@@ -3198,15 +3240,26 @@ class FeedsApi {
|
|
|
3198
3240
|
decoders.UpdateUserGroupResponse?.(response.body);
|
|
3199
3241
|
return { ...response.body, metadata: response.metadata };
|
|
3200
3242
|
}
|
|
3201
|
-
async
|
|
3243
|
+
async addUserGroupMembers(request) {
|
|
3202
3244
|
const pathParams = {
|
|
3203
3245
|
id: request?.id
|
|
3204
3246
|
};
|
|
3205
|
-
const
|
|
3206
|
-
|
|
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);
|
|
3207
3260
|
return { ...response.body, metadata: response.metadata };
|
|
3208
3261
|
}
|
|
3209
|
-
async
|
|
3262
|
+
async removeUserGroupMembers(request) {
|
|
3210
3263
|
const pathParams = {
|
|
3211
3264
|
id: request?.id
|
|
3212
3265
|
};
|
|
@@ -3216,13 +3269,13 @@ class FeedsApi {
|
|
|
3216
3269
|
};
|
|
3217
3270
|
const response = await this.apiClient.sendRequest(
|
|
3218
3271
|
"POST",
|
|
3219
|
-
"/api/v2/usergroups/{id}/members",
|
|
3272
|
+
"/api/v2/usergroups/{id}/members/delete",
|
|
3220
3273
|
pathParams,
|
|
3221
3274
|
void 0,
|
|
3222
3275
|
body,
|
|
3223
3276
|
"application/json"
|
|
3224
3277
|
);
|
|
3225
|
-
decoders.
|
|
3278
|
+
decoders.RemoveUserGroupMembersResponse?.(response.body);
|
|
3226
3279
|
return { ...response.body, metadata: response.metadata };
|
|
3227
3280
|
}
|
|
3228
3281
|
async queryUsers(request) {
|
|
@@ -4110,7 +4163,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
4110
4163
|
};
|
|
4111
4164
|
return result;
|
|
4112
4165
|
};
|
|
4113
|
-
const version = "
|
|
4166
|
+
const version = "1.1.0";
|
|
4114
4167
|
const axios = axiosImport.default ?? axiosImport;
|
|
4115
4168
|
class ApiClient {
|
|
4116
4169
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
@@ -4926,7 +4979,7 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4926
4979
|
});
|
|
4927
4980
|
return existingArray.concat(filteredArrayToMerge);
|
|
4928
4981
|
};
|
|
4929
|
-
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
4982
|
+
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey, position) => {
|
|
4930
4983
|
const existingMap = /* @__PURE__ */ new Map();
|
|
4931
4984
|
(existingArray ?? []).forEach((item) => {
|
|
4932
4985
|
existingMap.set(getKey(item), item);
|
|
@@ -4942,9 +4995,14 @@ const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4942
4995
|
existingMap.delete(getKey(originalItem));
|
|
4943
4996
|
}
|
|
4944
4997
|
});
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
|
|
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
|
+
}
|
|
4948
5006
|
return result;
|
|
4949
5007
|
};
|
|
4950
5008
|
const Constants = {
|
|
@@ -4991,24 +5049,25 @@ function getStateUpdateQueueId(...args) {
|
|
|
4991
5049
|
const [data, prefix] = args;
|
|
4992
5050
|
const toJoin = [prefix];
|
|
4993
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
|
+
}
|
|
4994
5059
|
case "activity-updated": {
|
|
4995
5060
|
return toJoin.concat([data.activity.id]).join("-");
|
|
4996
5061
|
}
|
|
4997
5062
|
case "activity-reaction-created":
|
|
4998
5063
|
case "activity-reaction-deleted":
|
|
4999
5064
|
case "activity-reaction-updated": {
|
|
5000
|
-
return toJoin.concat([
|
|
5001
|
-
data.activity.id,
|
|
5002
|
-
data.reaction.type
|
|
5003
|
-
]).join("-");
|
|
5065
|
+
return toJoin.concat([data.activity.id, data.reaction.type]).join("-");
|
|
5004
5066
|
}
|
|
5005
5067
|
case "comment-reaction-created":
|
|
5006
5068
|
case "comment-reaction-deleted":
|
|
5007
5069
|
case "comment-reaction-updated": {
|
|
5008
|
-
return toJoin.concat([
|
|
5009
|
-
data.comment.id,
|
|
5010
|
-
data.reaction.type
|
|
5011
|
-
]).join("-");
|
|
5070
|
+
return toJoin.concat([data.comment.id, data.reaction.type]).join("-");
|
|
5012
5071
|
}
|
|
5013
5072
|
case "comment-created":
|
|
5014
5073
|
case "comment-deleted":
|
|
@@ -5020,6 +5079,13 @@ function getStateUpdateQueueId(...args) {
|
|
|
5020
5079
|
case "follow-updated": {
|
|
5021
5080
|
return toJoin.concat([data.source_feed.feed, data.target_feed.feed]).join("-");
|
|
5022
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
|
+
}
|
|
5023
5089
|
default: {
|
|
5024
5090
|
ensureExhausted(data, "Encountered unknown state update queue prefix.");
|
|
5025
5091
|
}
|
|
@@ -5045,7 +5111,7 @@ function updateEntityInArray({
|
|
|
5045
5111
|
updatedEntities[index] = newEntity;
|
|
5046
5112
|
return { changed: true, entities: updatedEntities };
|
|
5047
5113
|
}
|
|
5048
|
-
const updateStateFollowCreated = (follow, currentState, currentFeedId, connectedUserId) => {
|
|
5114
|
+
const updateStateFollowCreated = (follow, currentState, currentFeedId, connectedUserId, hasOwnFields = false) => {
|
|
5049
5115
|
if (follow.status !== "accepted") {
|
|
5050
5116
|
return { changed: false, data: currentState };
|
|
5051
5117
|
}
|
|
@@ -5054,7 +5120,12 @@ const updateStateFollowCreated = (follow, currentState, currentFeedId, connected
|
|
|
5054
5120
|
newState = {
|
|
5055
5121
|
...newState,
|
|
5056
5122
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5057
|
-
...follow.source_feed
|
|
5123
|
+
...follow.source_feed,
|
|
5124
|
+
...hasOwnFields ? {
|
|
5125
|
+
own_capabilities: follow.source_feed.own_capabilities,
|
|
5126
|
+
own_follows: follow.source_feed.own_follows,
|
|
5127
|
+
own_followings: follow.source_feed.own_followings
|
|
5128
|
+
} : {}
|
|
5058
5129
|
};
|
|
5059
5130
|
if (currentState.following !== void 0) {
|
|
5060
5131
|
newState.following = [follow, ...currentState.following];
|
|
@@ -5067,9 +5138,14 @@ const updateStateFollowCreated = (follow, currentState, currentFeedId, connected
|
|
|
5067
5138
|
newState = {
|
|
5068
5139
|
...newState,
|
|
5069
5140
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5070
|
-
...follow.target_feed
|
|
5071
|
-
|
|
5072
|
-
|
|
5141
|
+
...follow.target_feed,
|
|
5142
|
+
...hasOwnFields ? {
|
|
5143
|
+
own_capabilities: follow.target_feed.own_capabilities,
|
|
5144
|
+
own_follows: follow.target_feed.own_follows,
|
|
5145
|
+
own_followings: follow.target_feed.own_followings
|
|
5146
|
+
} : {}
|
|
5147
|
+
};
|
|
5148
|
+
if (source.created_by.id === connectedUserId && !hasOwnFields) {
|
|
5073
5149
|
newState.own_follows = currentState.own_follows ? currentState.own_follows.concat(follow) : [follow];
|
|
5074
5150
|
}
|
|
5075
5151
|
if (currentState.followers !== void 0) {
|
|
@@ -5078,7 +5154,7 @@ const updateStateFollowCreated = (follow, currentState, currentFeedId, connected
|
|
|
5078
5154
|
}
|
|
5079
5155
|
return { changed: true, data: newState };
|
|
5080
5156
|
};
|
|
5081
|
-
function handleFollowCreated(eventOrResponse, fromWs) {
|
|
5157
|
+
function handleFollowCreated(eventOrResponse, fromWs, hasOwnFields = false) {
|
|
5082
5158
|
const follow = eventOrResponse.follow;
|
|
5083
5159
|
if (!shouldUpdateState({
|
|
5084
5160
|
stateUpdateQueueId: getStateUpdateQueueId(follow, "follow-created"),
|
|
@@ -5094,7 +5170,8 @@ function handleFollowCreated(eventOrResponse, fromWs) {
|
|
|
5094
5170
|
follow,
|
|
5095
5171
|
this.currentState,
|
|
5096
5172
|
this.feed,
|
|
5097
|
-
connectedUser?.id
|
|
5173
|
+
connectedUser?.id,
|
|
5174
|
+
hasOwnFields
|
|
5098
5175
|
);
|
|
5099
5176
|
if (result.changed) {
|
|
5100
5177
|
this.state.next(result.data);
|
|
@@ -5177,7 +5254,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5177
5254
|
newState ?? (newState = {
|
|
5178
5255
|
...currentState,
|
|
5179
5256
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5180
|
-
...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
|
+
} : {}
|
|
5181
5263
|
});
|
|
5182
5264
|
const index = currentState.following?.findIndex(
|
|
5183
5265
|
(f) => f.target_feed.feed === follow.target_feed.feed
|
|
@@ -5194,7 +5276,12 @@ function handleFollowUpdated(eventOrResponse, fromWs) {
|
|
|
5194
5276
|
newState ?? (newState = {
|
|
5195
5277
|
...currentState,
|
|
5196
5278
|
// Update FeedResponse fields, that has the new follower/following count
|
|
5197
|
-
...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
|
+
} : {}
|
|
5198
5285
|
});
|
|
5199
5286
|
if (source.created_by.id === connectedUserId && currentState.own_follows) {
|
|
5200
5287
|
const index2 = currentState.own_follows.findIndex(
|
|
@@ -5318,14 +5405,14 @@ function handleCommentUpdated(payload, fromWs) {
|
|
|
5318
5405
|
const { comment } = payload;
|
|
5319
5406
|
const entityId = comment.parent_id ?? comment.object_id;
|
|
5320
5407
|
if (!shouldUpdateState({
|
|
5321
|
-
stateUpdateQueueId: getStateUpdateQueueId(
|
|
5322
|
-
payload,
|
|
5323
|
-
"comment-updated"
|
|
5324
|
-
),
|
|
5408
|
+
stateUpdateQueueId: getStateUpdateQueueId(payload, "comment-updated"),
|
|
5325
5409
|
stateUpdateQueue: this.stateUpdateQueue,
|
|
5326
5410
|
watch: this.currentState.watch,
|
|
5327
5411
|
fromWs,
|
|
5328
|
-
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5412
|
+
isTriggeredByConnectedUser: eventTriggeredByConnectedUser.call(
|
|
5413
|
+
this,
|
|
5414
|
+
payload
|
|
5415
|
+
)
|
|
5329
5416
|
})) {
|
|
5330
5417
|
return;
|
|
5331
5418
|
}
|
|
@@ -5335,7 +5422,10 @@ function handleCommentUpdated(payload, fromWs) {
|
|
|
5335
5422
|
const index = this.getCommentIndex(comment, currentState);
|
|
5336
5423
|
if (index === -1) return currentState;
|
|
5337
5424
|
const newComments = [...entityState.comments];
|
|
5338
|
-
newComments[index] =
|
|
5425
|
+
newComments[index] = {
|
|
5426
|
+
...comment,
|
|
5427
|
+
own_reactions: entityState.comments[index].own_reactions
|
|
5428
|
+
};
|
|
5339
5429
|
return {
|
|
5340
5430
|
...currentState,
|
|
5341
5431
|
comments_by_entity_id: {
|
|
@@ -5486,7 +5576,19 @@ function handleCommentReactionUpdated(payload, fromWs) {
|
|
|
5486
5576
|
};
|
|
5487
5577
|
});
|
|
5488
5578
|
}
|
|
5489
|
-
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
|
+
}
|
|
5490
5592
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5491
5593
|
this.state.next((currentState) => {
|
|
5492
5594
|
let newState;
|
|
@@ -5505,7 +5607,19 @@ function handleFeedMemberAdded(event) {
|
|
|
5505
5607
|
return newState ?? currentState;
|
|
5506
5608
|
});
|
|
5507
5609
|
}
|
|
5508
|
-
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
|
+
}
|
|
5509
5623
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5510
5624
|
this.state.next((currentState) => {
|
|
5511
5625
|
const memberIndex = currentState.members?.findIndex(
|
|
@@ -5529,7 +5643,19 @@ function handleFeedMemberUpdated(event) {
|
|
|
5529
5643
|
return newState ?? currentState;
|
|
5530
5644
|
});
|
|
5531
5645
|
}
|
|
5532
|
-
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
|
+
}
|
|
5533
5659
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5534
5660
|
this.state.next((currentState) => {
|
|
5535
5661
|
let newState;
|
|
@@ -5549,6 +5675,9 @@ function handleFeedMemberRemoved(event) {
|
|
|
5549
5675
|
return newState ?? currentState;
|
|
5550
5676
|
});
|
|
5551
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
|
+
};
|
|
5552
5681
|
const sharedUpdateActivity$6 = ({
|
|
5553
5682
|
currentActivity,
|
|
5554
5683
|
event,
|
|
@@ -5556,7 +5685,9 @@ const sharedUpdateActivity$6 = ({
|
|
|
5556
5685
|
}) => {
|
|
5557
5686
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5558
5687
|
if (eventBelongsToCurrentUser) {
|
|
5559
|
-
newOwnBookmarks =
|
|
5688
|
+
newOwnBookmarks = currentActivity.own_bookmarks.filter(
|
|
5689
|
+
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5690
|
+
);
|
|
5560
5691
|
}
|
|
5561
5692
|
return {
|
|
5562
5693
|
...currentActivity,
|
|
@@ -5564,18 +5695,20 @@ const sharedUpdateActivity$6 = ({
|
|
|
5564
5695
|
own_bookmarks: newOwnBookmarks
|
|
5565
5696
|
};
|
|
5566
5697
|
};
|
|
5567
|
-
const
|
|
5698
|
+
const removeBookmarkFromActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5568
5699
|
entities: activities,
|
|
5569
|
-
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))),
|
|
5570
5701
|
updater: (matchedActivity) => sharedUpdateActivity$6({
|
|
5571
5702
|
currentActivity: matchedActivity,
|
|
5572
5703
|
event,
|
|
5573
5704
|
eventBelongsToCurrentUser
|
|
5574
5705
|
})
|
|
5575
5706
|
});
|
|
5576
|
-
const
|
|
5707
|
+
const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5577
5708
|
entities: pinnedActivities,
|
|
5578
|
-
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
|
+
)),
|
|
5579
5712
|
updater: (matchedPinnedActivity) => {
|
|
5580
5713
|
const newActivity = sharedUpdateActivity$6({
|
|
5581
5714
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5591,7 +5724,7 @@ const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCu
|
|
|
5591
5724
|
};
|
|
5592
5725
|
}
|
|
5593
5726
|
});
|
|
5594
|
-
function
|
|
5727
|
+
function handleBookmarkDeleted(event) {
|
|
5595
5728
|
const {
|
|
5596
5729
|
activities: currentActivities,
|
|
5597
5730
|
pinned_activities: currentPinnedActivities
|
|
@@ -5599,12 +5732,12 @@ function handleBookmarkAdded(event) {
|
|
|
5599
5732
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5600
5733
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5601
5734
|
const [result1, result2] = [
|
|
5602
|
-
|
|
5735
|
+
removeBookmarkFromActivities(
|
|
5603
5736
|
event,
|
|
5604
5737
|
currentActivities,
|
|
5605
5738
|
eventBelongsToCurrentUser
|
|
5606
5739
|
),
|
|
5607
|
-
|
|
5740
|
+
removeBookmarkFromPinnedActivities(
|
|
5608
5741
|
event,
|
|
5609
5742
|
currentPinnedActivities,
|
|
5610
5743
|
eventBelongsToCurrentUser
|
|
@@ -5617,9 +5750,6 @@ function handleBookmarkAdded(event) {
|
|
|
5617
5750
|
});
|
|
5618
5751
|
}
|
|
5619
5752
|
}
|
|
5620
|
-
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
5621
|
-
return bookmark1.user.id === bookmark2.user.id && bookmark1.activity.id === bookmark2.activity.id && bookmark1.folder?.id === bookmark2.folder?.id;
|
|
5622
|
-
};
|
|
5623
5753
|
const sharedUpdateActivity$5 = ({
|
|
5624
5754
|
currentActivity,
|
|
5625
5755
|
event,
|
|
@@ -5627,9 +5757,7 @@ const sharedUpdateActivity$5 = ({
|
|
|
5627
5757
|
}) => {
|
|
5628
5758
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5629
5759
|
if (eventBelongsToCurrentUser) {
|
|
5630
|
-
newOwnBookmarks =
|
|
5631
|
-
(bookmark) => !isSameBookmark(bookmark, event.bookmark)
|
|
5632
|
-
);
|
|
5760
|
+
newOwnBookmarks = [...newOwnBookmarks, event.bookmark];
|
|
5633
5761
|
}
|
|
5634
5762
|
return {
|
|
5635
5763
|
...currentActivity,
|
|
@@ -5637,18 +5765,20 @@ const sharedUpdateActivity$5 = ({
|
|
|
5637
5765
|
own_bookmarks: newOwnBookmarks
|
|
5638
5766
|
};
|
|
5639
5767
|
};
|
|
5640
|
-
const
|
|
5768
|
+
const addBookmarkToActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5641
5769
|
entities: activities,
|
|
5642
|
-
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))),
|
|
5643
5771
|
updater: (matchedActivity) => sharedUpdateActivity$5({
|
|
5644
5772
|
currentActivity: matchedActivity,
|
|
5645
5773
|
event,
|
|
5646
5774
|
eventBelongsToCurrentUser
|
|
5647
5775
|
})
|
|
5648
5776
|
});
|
|
5649
|
-
const
|
|
5777
|
+
const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5650
5778
|
entities: pinnedActivities,
|
|
5651
|
-
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
|
+
)),
|
|
5652
5782
|
updater: (matchedPinnedActivity) => {
|
|
5653
5783
|
const newActivity = sharedUpdateActivity$5({
|
|
5654
5784
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5664,7 +5794,7 @@ const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelong
|
|
|
5664
5794
|
};
|
|
5665
5795
|
}
|
|
5666
5796
|
});
|
|
5667
|
-
function
|
|
5797
|
+
function handleBookmarkAdded(event) {
|
|
5668
5798
|
const {
|
|
5669
5799
|
activities: currentActivities,
|
|
5670
5800
|
pinned_activities: currentPinnedActivities
|
|
@@ -5672,12 +5802,12 @@ function handleBookmarkDeleted(event) {
|
|
|
5672
5802
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
5673
5803
|
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
5674
5804
|
const [result1, result2] = [
|
|
5675
|
-
|
|
5805
|
+
addBookmarkToActivities(
|
|
5676
5806
|
event,
|
|
5677
5807
|
currentActivities,
|
|
5678
5808
|
eventBelongsToCurrentUser
|
|
5679
5809
|
),
|
|
5680
|
-
|
|
5810
|
+
addBookmarkToPinnedActivities(
|
|
5681
5811
|
event,
|
|
5682
5812
|
currentPinnedActivities,
|
|
5683
5813
|
eventBelongsToCurrentUser
|
|
@@ -5698,7 +5828,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5698
5828
|
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
5699
5829
|
if (eventBelongsToCurrentUser) {
|
|
5700
5830
|
const bookmarkIndex = newOwnBookmarks.findIndex(
|
|
5701
|
-
(bookmark) =>
|
|
5831
|
+
(bookmark) => bookmark.user.id === event.bookmark.user.id && bookmark.activity.id === event.bookmark.activity.id && bookmark.folder?.id === event.bookmark.folder?.id
|
|
5702
5832
|
);
|
|
5703
5833
|
if (bookmarkIndex !== -1) {
|
|
5704
5834
|
newOwnBookmarks = [...newOwnBookmarks];
|
|
@@ -5713,7 +5843,7 @@ const sharedUpdateActivity$4 = ({
|
|
|
5713
5843
|
};
|
|
5714
5844
|
const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5715
5845
|
entities: activities,
|
|
5716
|
-
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))),
|
|
5717
5847
|
updater: (matchedActivity) => sharedUpdateActivity$4({
|
|
5718
5848
|
currentActivity: matchedActivity,
|
|
5719
5849
|
event,
|
|
@@ -5722,7 +5852,9 @@ const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser
|
|
|
5722
5852
|
});
|
|
5723
5853
|
const updateBookmarkInPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5724
5854
|
entities: pinnedActivities,
|
|
5725
|
-
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
|
+
)),
|
|
5726
5858
|
updater: (matchedPinnedActivity) => {
|
|
5727
5859
|
const newActivity = sharedUpdateActivity$4({
|
|
5728
5860
|
currentActivity: matchedPinnedActivity.activity,
|
|
@@ -5764,7 +5896,13 @@ function handleBookmarkUpdated(event) {
|
|
|
5764
5896
|
});
|
|
5765
5897
|
}
|
|
5766
5898
|
}
|
|
5767
|
-
function addActivitiesToState(newActivities, activities, position, {
|
|
5899
|
+
function addActivitiesToState(newActivities, activities, position, {
|
|
5900
|
+
hasOwnFields,
|
|
5901
|
+
backfillOwnFields
|
|
5902
|
+
} = {
|
|
5903
|
+
hasOwnFields: true,
|
|
5904
|
+
backfillOwnFields: true
|
|
5905
|
+
}) {
|
|
5768
5906
|
if (activities === void 0) {
|
|
5769
5907
|
return {
|
|
5770
5908
|
changed: false,
|
|
@@ -5787,23 +5925,31 @@ function addActivitiesToState(newActivities, activities, position, { fromWebSock
|
|
|
5787
5925
|
...activities,
|
|
5788
5926
|
...position === "end" ? newActivitiesDeduplicated : []
|
|
5789
5927
|
];
|
|
5790
|
-
this.
|
|
5928
|
+
this.activitiesAddedOrUpdated(newActivitiesDeduplicated, {
|
|
5929
|
+
hasOwnFields,
|
|
5930
|
+
backfillOwnFields
|
|
5931
|
+
});
|
|
5791
5932
|
result = { changed: true, activities: updatedActivities };
|
|
5792
5933
|
}
|
|
5793
5934
|
return result;
|
|
5794
5935
|
}
|
|
5795
5936
|
function handleActivityAdded(event) {
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5937
|
+
const currentUser = this.client.state.getLatestValue().connected_user;
|
|
5938
|
+
const decision = this.resolveNewActivityDecision(
|
|
5939
|
+
event.activity,
|
|
5940
|
+
currentUser,
|
|
5941
|
+
false
|
|
5942
|
+
);
|
|
5943
|
+
if (decision === "ignore") {
|
|
5944
|
+
return;
|
|
5800
5945
|
}
|
|
5946
|
+
const position = decision === "add-to-end" ? "end" : "start";
|
|
5801
5947
|
const currentActivities = this.currentState.activities;
|
|
5802
5948
|
const result = addActivitiesToState.bind(this)(
|
|
5803
5949
|
[event.activity],
|
|
5804
5950
|
currentActivities,
|
|
5805
|
-
|
|
5806
|
-
{
|
|
5951
|
+
position,
|
|
5952
|
+
{ hasOwnFields: false, backfillOwnFields: true }
|
|
5807
5953
|
);
|
|
5808
5954
|
if (result.changed) {
|
|
5809
5955
|
const activity = event.activity;
|
|
@@ -5835,7 +5981,19 @@ const removePinnedActivityFromState = (activityResponse, pinnedActivities) => {
|
|
|
5835
5981
|
return { changed: false, pinned_activities: pinnedActivities };
|
|
5836
5982
|
}
|
|
5837
5983
|
};
|
|
5838
|
-
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
|
+
}
|
|
5839
5997
|
const {
|
|
5840
5998
|
activities: currentActivities,
|
|
5841
5999
|
pinned_activities: currentPinnedActivities
|
|
@@ -5920,7 +6078,10 @@ function handleActivityUpdated(payload, fromWs) {
|
|
|
5920
6078
|
updatePinnedActivityInState(payload, currentPinnedActivities)
|
|
5921
6079
|
];
|
|
5922
6080
|
if (result1?.changed || result2.changed) {
|
|
5923
|
-
this.
|
|
6081
|
+
this.activitiesAddedOrUpdated([payload.activity], {
|
|
6082
|
+
hasOwnFields: payload.activity.current_feed?.own_capabilities !== void 0,
|
|
6083
|
+
backfillOwnFields: false
|
|
6084
|
+
});
|
|
5924
6085
|
this.state.partialNext({
|
|
5925
6086
|
activities: result1?.changed ? result1.entities : currentActivities,
|
|
5926
6087
|
pinned_activities: result2.entities
|
|
@@ -6178,53 +6339,133 @@ function handleActivityReactionUpdated(payload, fromWs) {
|
|
|
6178
6339
|
});
|
|
6179
6340
|
}
|
|
6180
6341
|
}
|
|
6181
|
-
|
|
6182
|
-
if (!
|
|
6183
|
-
|
|
6184
|
-
|
|
6185
|
-
|
|
6186
|
-
|
|
6187
|
-
|
|
6188
|
-
|
|
6189
|
-
|
|
6190
|
-
|
|
6191
|
-
|
|
6192
|
-
|
|
6193
|
-
.../* @__PURE__ */ new Set([
|
|
6194
|
-
...currentNotificationStatus.read_activities ?? [],
|
|
6195
|
-
...allGroupIds
|
|
6196
|
-
])
|
|
6197
|
-
];
|
|
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;
|
|
6198
6354
|
}
|
|
6199
|
-
|
|
6200
|
-
newState
|
|
6201
|
-
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
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;
|
|
6206
6380
|
}
|
|
6207
|
-
|
|
6208
|
-
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
|
+
};
|
|
6209
6406
|
}
|
|
6210
|
-
return {
|
|
6211
|
-
|
|
6212
|
-
|
|
6213
|
-
|
|
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
|
+
});
|
|
6214
6433
|
};
|
|
6215
|
-
function
|
|
6216
|
-
const
|
|
6217
|
-
|
|
6218
|
-
|
|
6219
|
-
|
|
6220
|
-
);
|
|
6221
|
-
|
|
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) {
|
|
6222
6452
|
this.state.partialNext({
|
|
6223
|
-
|
|
6453
|
+
activities: result1.entities,
|
|
6454
|
+
pinned_activities: result2.entities
|
|
6224
6455
|
});
|
|
6225
6456
|
}
|
|
6226
6457
|
}
|
|
6458
|
+
function handleFeedDeleted(event) {
|
|
6459
|
+
if (this.currentState.deleted_at) {
|
|
6460
|
+
return;
|
|
6461
|
+
}
|
|
6462
|
+
this.state.partialNext({ deleted_at: event.created_at });
|
|
6463
|
+
}
|
|
6227
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
|
+
}
|
|
6228
6469
|
this.state.partialNext({ ...event.feed });
|
|
6229
6470
|
}
|
|
6230
6471
|
const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
|
|
@@ -6273,11 +6514,20 @@ const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActiv
|
|
|
6273
6514
|
(a) => a.group
|
|
6274
6515
|
);
|
|
6275
6516
|
break;
|
|
6276
|
-
case "replace":
|
|
6517
|
+
case "replace-then-end":
|
|
6277
6518
|
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
6278
6519
|
aggregatedActivities ?? [],
|
|
6279
6520
|
newAggregatedActivities,
|
|
6280
|
-
(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"
|
|
6281
6531
|
);
|
|
6282
6532
|
break;
|
|
6283
6533
|
}
|
|
@@ -6304,7 +6554,7 @@ const updateNotificationStatus = (newNotificationStatus, currentNotificationStat
|
|
|
6304
6554
|
};
|
|
6305
6555
|
}
|
|
6306
6556
|
};
|
|
6307
|
-
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
|
|
6557
|
+
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus, currentActivities) => {
|
|
6308
6558
|
const updates = {};
|
|
6309
6559
|
if (event.notification_status) {
|
|
6310
6560
|
const notificationStatusResult = updateNotificationStatus(
|
|
@@ -6315,11 +6565,47 @@ const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, cur
|
|
|
6315
6565
|
updates.notification_status = notificationStatusResult.notification_status;
|
|
6316
6566
|
}
|
|
6317
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
|
+
}
|
|
6318
6604
|
if (event.aggregated_activities && currentAggregatedActivities) {
|
|
6319
6605
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6320
6606
|
event.aggregated_activities,
|
|
6321
|
-
currentAggregatedActivities,
|
|
6322
|
-
"start"
|
|
6607
|
+
updates.aggregated_activities ?? currentAggregatedActivities,
|
|
6608
|
+
"replace-then-start"
|
|
6323
6609
|
);
|
|
6324
6610
|
if (aggregatedActivitiesResult.changed) {
|
|
6325
6611
|
updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6339,12 +6625,14 @@ function handleNotificationFeedUpdated(event) {
|
|
|
6339
6625
|
const result = updateNotificationFeedFromEvent(
|
|
6340
6626
|
event,
|
|
6341
6627
|
this.currentState.aggregated_activities,
|
|
6342
|
-
this.currentState.notification_status
|
|
6628
|
+
this.currentState.notification_status,
|
|
6629
|
+
this.currentState.activities
|
|
6343
6630
|
);
|
|
6344
6631
|
if (result.changed) {
|
|
6345
6632
|
this.state.partialNext({
|
|
6346
6633
|
notification_status: result.data?.notification_status,
|
|
6347
|
-
aggregated_activities: result.data?.aggregated_activities
|
|
6634
|
+
aggregated_activities: result.data?.aggregated_activities,
|
|
6635
|
+
activities: result.data?.activities ?? this.currentState.activities
|
|
6348
6636
|
});
|
|
6349
6637
|
}
|
|
6350
6638
|
}
|
|
@@ -6394,7 +6682,7 @@ function updateStoriesFeedFromEvent(aggregatedActivities, activities, event) {
|
|
|
6394
6682
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6395
6683
|
event.aggregated_activities,
|
|
6396
6684
|
aggregatedActivities,
|
|
6397
|
-
"replace"
|
|
6685
|
+
"replace-then-end"
|
|
6398
6686
|
);
|
|
6399
6687
|
if (aggregatedActivitiesResult.changed) {
|
|
6400
6688
|
result.data.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
@@ -6432,6 +6720,30 @@ function handleWatchStarted() {
|
|
|
6432
6720
|
function handleWatchStopped() {
|
|
6433
6721
|
this.state.partialNext({ watch: false });
|
|
6434
6722
|
}
|
|
6723
|
+
const activityResolvers = [
|
|
6724
|
+
{
|
|
6725
|
+
matchesField: (field) => field === "activity_type",
|
|
6726
|
+
resolve: (activity) => activity.type
|
|
6727
|
+
},
|
|
6728
|
+
{
|
|
6729
|
+
matchesField: (field) => field === "within_bounds",
|
|
6730
|
+
resolve: (activity) => activity.location
|
|
6731
|
+
},
|
|
6732
|
+
{
|
|
6733
|
+
matchesField: () => true,
|
|
6734
|
+
resolve: (item, path) => resolveDotPathValue(item, path)
|
|
6735
|
+
}
|
|
6736
|
+
];
|
|
6737
|
+
function activityFilter(activity, requestConfig) {
|
|
6738
|
+
const filter = requestConfig?.filter;
|
|
6739
|
+
if (!filter || typeof filter !== "object") {
|
|
6740
|
+
return true;
|
|
6741
|
+
}
|
|
6742
|
+
return itemMatchesFilter(activity, filter, {
|
|
6743
|
+
resolvers: [...activityResolvers],
|
|
6744
|
+
arrayEqMode: "contains"
|
|
6745
|
+
});
|
|
6746
|
+
}
|
|
6435
6747
|
const DEFAULT_MAX_RETRIES = 3;
|
|
6436
6748
|
function isRetryableError(error) {
|
|
6437
6749
|
if (error instanceof StreamApiError) {
|
|
@@ -6464,61 +6776,6 @@ async function withRetry(fn, options = {}) {
|
|
|
6464
6776
|
}
|
|
6465
6777
|
throw lastError;
|
|
6466
6778
|
}
|
|
6467
|
-
const isPin = (entity) => {
|
|
6468
|
-
return "activity" in entity;
|
|
6469
|
-
};
|
|
6470
|
-
const updateActivityFromFeedback = (feedback, activities) => {
|
|
6471
|
-
if (!activities) {
|
|
6472
|
-
return {
|
|
6473
|
-
changed: false,
|
|
6474
|
-
entities: []
|
|
6475
|
-
};
|
|
6476
|
-
}
|
|
6477
|
-
return updateEntityInArray({
|
|
6478
|
-
entities: activities,
|
|
6479
|
-
matcher: (e) => isPin(e) ? e.activity.id === feedback.activity_id : e.id === feedback.activity_id,
|
|
6480
|
-
updater: (e) => {
|
|
6481
|
-
if (isPin(e)) {
|
|
6482
|
-
return {
|
|
6483
|
-
...e,
|
|
6484
|
-
activity: {
|
|
6485
|
-
...e.activity,
|
|
6486
|
-
hidden: feedback.value === "true"
|
|
6487
|
-
}
|
|
6488
|
-
};
|
|
6489
|
-
} else {
|
|
6490
|
-
return {
|
|
6491
|
-
...e,
|
|
6492
|
-
hidden: feedback.value === "true"
|
|
6493
|
-
};
|
|
6494
|
-
}
|
|
6495
|
-
}
|
|
6496
|
-
});
|
|
6497
|
-
};
|
|
6498
|
-
function handleActivityFeedback(event) {
|
|
6499
|
-
const {
|
|
6500
|
-
activities: currentActivities,
|
|
6501
|
-
pinned_activities: currentPinnedActivities
|
|
6502
|
-
} = this.currentState;
|
|
6503
|
-
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
6504
|
-
const eventBelongsToCurrentUser = event.activity_feedback.user.id === connectedUser?.id;
|
|
6505
|
-
if (!eventBelongsToCurrentUser || event.activity_feedback.action !== "hide") {
|
|
6506
|
-
return;
|
|
6507
|
-
}
|
|
6508
|
-
const [result1, result2] = [
|
|
6509
|
-
updateActivityFromFeedback(event.activity_feedback, currentActivities),
|
|
6510
|
-
updateActivityFromFeedback(
|
|
6511
|
-
event.activity_feedback,
|
|
6512
|
-
currentPinnedActivities
|
|
6513
|
-
)
|
|
6514
|
-
];
|
|
6515
|
-
if (result1.changed || result2.changed) {
|
|
6516
|
-
this.state.partialNext({
|
|
6517
|
-
activities: result1.entities,
|
|
6518
|
-
pinned_activities: result2.entities
|
|
6519
|
-
});
|
|
6520
|
-
}
|
|
6521
|
-
}
|
|
6522
6779
|
const deepEqual = (x, y) => {
|
|
6523
6780
|
if (x === y) {
|
|
6524
6781
|
return true;
|
|
@@ -6623,9 +6880,9 @@ function clearQueuedFeeds() {
|
|
|
6623
6880
|
queuedFeeds.clear();
|
|
6624
6881
|
}
|
|
6625
6882
|
const _Feed = class _Feed extends FeedApi {
|
|
6626
|
-
constructor(client, groupId, id, data, watch = false,
|
|
6883
|
+
constructor(client, groupId, id, data, watch = false, onNewActivity) {
|
|
6627
6884
|
super(client, groupId, id);
|
|
6628
|
-
this.
|
|
6885
|
+
this.onNewActivity = onNewActivity;
|
|
6629
6886
|
this.indexedActivityIds = /* @__PURE__ */ new Set();
|
|
6630
6887
|
this.stateUpdateQueue = /* @__PURE__ */ new Set();
|
|
6631
6888
|
this.eventHandlers = {
|
|
@@ -6645,7 +6902,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6645
6902
|
"feeds.comment.deleted": handleCommentDeleted.bind(this),
|
|
6646
6903
|
"feeds.comment.updated": handleCommentUpdated.bind(this),
|
|
6647
6904
|
"feeds.feed.created": _Feed.noop,
|
|
6648
|
-
"feeds.feed.deleted":
|
|
6905
|
+
"feeds.feed.deleted": handleFeedDeleted.bind(this),
|
|
6649
6906
|
"feeds.feed.updated": handleFeedUpdated.bind(this),
|
|
6650
6907
|
"feeds.feed_group.changed": _Feed.noop,
|
|
6651
6908
|
"feeds.feed_group.deleted": _Feed.noop,
|
|
@@ -6668,9 +6925,9 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6668
6925
|
"feeds.poll.vote_casted": _Feed.noop,
|
|
6669
6926
|
"feeds.poll.vote_changed": _Feed.noop,
|
|
6670
6927
|
"feeds.poll.vote_removed": _Feed.noop,
|
|
6671
|
-
"feeds.activity.pinned":
|
|
6672
|
-
"feeds.activity.unpinned":
|
|
6673
|
-
"feeds.activity.marked":
|
|
6928
|
+
"feeds.activity.pinned": handleActivityPinned.bind(this),
|
|
6929
|
+
"feeds.activity.unpinned": handleActivityUnpinned.bind(this),
|
|
6930
|
+
"feeds.activity.marked": _Feed.noop,
|
|
6674
6931
|
"moderation.custom_action": _Feed.noop,
|
|
6675
6932
|
"moderation.flagged": _Feed.noop,
|
|
6676
6933
|
"moderation.mark_reviewed": _Feed.noop,
|
|
@@ -6695,8 +6952,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6695
6952
|
is_loading: false,
|
|
6696
6953
|
is_loading_activities: false,
|
|
6697
6954
|
comments_by_entity_id: {},
|
|
6698
|
-
watch
|
|
6699
|
-
addNewActivitiesTo
|
|
6955
|
+
watch
|
|
6700
6956
|
});
|
|
6701
6957
|
this.client = client;
|
|
6702
6958
|
this.state.subscribeWithSelector(
|
|
@@ -6717,9 +6973,6 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6717
6973
|
get currentState() {
|
|
6718
6974
|
return this.state.getLatestValue();
|
|
6719
6975
|
}
|
|
6720
|
-
set addNewActivitiesTo(value) {
|
|
6721
|
-
this.state.partialNext({ addNewActivitiesTo: value });
|
|
6722
|
-
}
|
|
6723
6976
|
hasActivity(activityId) {
|
|
6724
6977
|
return this.indexedActivityIds.has(activityId);
|
|
6725
6978
|
}
|
|
@@ -6728,6 +6981,24 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6728
6981
|
(pinnedActivity) => pinnedActivity.activity.id === activityId
|
|
6729
6982
|
);
|
|
6730
6983
|
}
|
|
6984
|
+
/**
|
|
6985
|
+
* Resolves how to handle a new activity (WS or HTTP): ignore, add-to-start, or add-to-end.
|
|
6986
|
+
* Uses onNewActivity if set; else default (current user + filter match) adds to start.
|
|
6987
|
+
*/
|
|
6988
|
+
resolveNewActivityDecision(activity, currentUser, _fromHttp) {
|
|
6989
|
+
if (this.onNewActivity) {
|
|
6990
|
+
return this.onNewActivity({ activity, currentUser });
|
|
6991
|
+
}
|
|
6992
|
+
if (!currentUser) return "ignore";
|
|
6993
|
+
if (activity.user?.id !== currentUser.id) return "ignore";
|
|
6994
|
+
if (!activityFilter(
|
|
6995
|
+
activity,
|
|
6996
|
+
this.currentState.last_get_or_create_request_config
|
|
6997
|
+
)) {
|
|
6998
|
+
return "ignore";
|
|
6999
|
+
}
|
|
7000
|
+
return "add-to-start";
|
|
7001
|
+
}
|
|
6731
7002
|
async synchronize() {
|
|
6732
7003
|
const { last_get_or_create_request_config } = this.state.getLatestValue();
|
|
6733
7004
|
if (last_get_or_create_request_config?.watch) {
|
|
@@ -6765,7 +7036,8 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6765
7036
|
const result = addActivitiesToState.bind(this)(
|
|
6766
7037
|
response.activities,
|
|
6767
7038
|
currentActivities,
|
|
6768
|
-
"end"
|
|
7039
|
+
"end",
|
|
7040
|
+
{ hasOwnFields: true, backfillOwnFields: false }
|
|
6769
7041
|
);
|
|
6770
7042
|
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
6771
7043
|
response.aggregated_activities,
|
|
@@ -6814,7 +7086,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
6814
7086
|
return nextState;
|
|
6815
7087
|
});
|
|
6816
7088
|
}
|
|
6817
|
-
this.
|
|
7089
|
+
this.activitiesAddedOrUpdated(response.activities);
|
|
6818
7090
|
return response;
|
|
6819
7091
|
} finally {
|
|
6820
7092
|
this.state.partialNext({
|
|
@@ -7189,11 +7461,41 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
7189
7461
|
next: currentState.next
|
|
7190
7462
|
});
|
|
7191
7463
|
}
|
|
7464
|
+
/**
|
|
7465
|
+
* Applies a new activity to this feed's state (decision + add to activities).
|
|
7466
|
+
* Used when the activity was added via this feed's addActivity or via client.addActivity.
|
|
7467
|
+
*/
|
|
7468
|
+
addActivityFromHTTPResponse(activity) {
|
|
7469
|
+
const currentUser = this.client.state.getLatestValue().connected_user;
|
|
7470
|
+
const decision = this.resolveNewActivityDecision(
|
|
7471
|
+
activity,
|
|
7472
|
+
currentUser,
|
|
7473
|
+
true
|
|
7474
|
+
);
|
|
7475
|
+
if (decision !== "ignore") {
|
|
7476
|
+
const position = decision === "add-to-end" ? "end" : "start";
|
|
7477
|
+
const currentActivities = this.currentState.activities;
|
|
7478
|
+
const result = addActivitiesToState.bind(this)(
|
|
7479
|
+
[activity],
|
|
7480
|
+
currentActivities,
|
|
7481
|
+
position,
|
|
7482
|
+
{
|
|
7483
|
+
hasOwnFields: activity.current_feed?.own_capabilities !== void 0,
|
|
7484
|
+
backfillOwnFields: false
|
|
7485
|
+
}
|
|
7486
|
+
);
|
|
7487
|
+
if (result.changed) {
|
|
7488
|
+
this.client.hydratePollCache([activity]);
|
|
7489
|
+
this.state.partialNext({ activities: result.activities });
|
|
7490
|
+
}
|
|
7491
|
+
}
|
|
7492
|
+
}
|
|
7192
7493
|
async addActivity(request) {
|
|
7193
7494
|
const response = await this.client.addActivity({
|
|
7194
7495
|
...request,
|
|
7195
7496
|
feeds: [this.feed]
|
|
7196
7497
|
});
|
|
7498
|
+
this.addActivityFromHTTPResponse(response.activity);
|
|
7197
7499
|
return response;
|
|
7198
7500
|
}
|
|
7199
7501
|
handleWSEvent(event) {
|
|
@@ -7214,7 +7516,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
7214
7516
|
}
|
|
7215
7517
|
this.eventDispatcher.dispatch(event);
|
|
7216
7518
|
}
|
|
7217
|
-
|
|
7519
|
+
activitiesAddedOrUpdated(activities, options = { hasOwnFields: true, backfillOwnFields: true }) {
|
|
7218
7520
|
this.client.hydratePollCache(activities);
|
|
7219
7521
|
this.getOrCreateFeeds(activities, options);
|
|
7220
7522
|
}
|
|
@@ -7232,7 +7534,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
7232
7534
|
});
|
|
7233
7535
|
const newFeeds = Array.from(feedsToGetOrCreate.values());
|
|
7234
7536
|
const fieldsToUpdate = [];
|
|
7235
|
-
if (
|
|
7537
|
+
if (options.hasOwnFields) {
|
|
7236
7538
|
fieldsToUpdate.push("own_membership");
|
|
7237
7539
|
if (!enrichmentOptions?.skip_own_capabilities) {
|
|
7238
7540
|
fieldsToUpdate.push("own_capabilities");
|
|
@@ -7252,7 +7554,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
7252
7554
|
fieldsToUpdate
|
|
7253
7555
|
});
|
|
7254
7556
|
});
|
|
7255
|
-
if (options.
|
|
7557
|
+
if (!options.hasOwnFields && options.backfillOwnFields) {
|
|
7256
7558
|
const uninitializedFeeds = newFeeds.filter((feedResponse) => {
|
|
7257
7559
|
const feed = this.client.feed(feedResponse.group_id, feedResponse.id);
|
|
7258
7560
|
return feed.currentState.own_capabilities === void 0;
|
|
@@ -7275,6 +7577,9 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
7275
7577
|
_Feed.noop = () => {
|
|
7276
7578
|
};
|
|
7277
7579
|
let Feed = _Feed;
|
|
7580
|
+
function applyNewActivityToActiveFeeds(activity) {
|
|
7581
|
+
return this.addActivityFromHTTPResponse(activity);
|
|
7582
|
+
}
|
|
7278
7583
|
function handleUserUpdated(event) {
|
|
7279
7584
|
this.state.next((currentState) => {
|
|
7280
7585
|
let newState;
|
|
@@ -7354,7 +7659,9 @@ function disconnectActivityFromFeed(activity) {
|
|
|
7354
7659
|
}
|
|
7355
7660
|
}
|
|
7356
7661
|
class ActivityWithStateUpdates {
|
|
7357
|
-
constructor(id, feedsClient, { fromResponse } = {
|
|
7662
|
+
constructor(id, feedsClient, { fromResponse } = {
|
|
7663
|
+
fromResponse: void 0
|
|
7664
|
+
}) {
|
|
7358
7665
|
this.id = id;
|
|
7359
7666
|
this.feedsClient = feedsClient;
|
|
7360
7667
|
this.state = new StateStore({
|
|
@@ -7405,7 +7712,7 @@ class ActivityWithStateUpdates {
|
|
|
7405
7712
|
initialState: activityResponse
|
|
7406
7713
|
});
|
|
7407
7714
|
if (this.feed) {
|
|
7408
|
-
this.feed.
|
|
7715
|
+
this.feed.onNewActivity = () => "ignore";
|
|
7409
7716
|
}
|
|
7410
7717
|
if (comments) {
|
|
7411
7718
|
await this.loadNextPageActivityComments(comments);
|
|
@@ -7458,7 +7765,11 @@ class ActivityWithStateUpdates {
|
|
|
7458
7765
|
const { activities } = addActivitiesToState.bind(this.feed)(
|
|
7459
7766
|
[initialState],
|
|
7460
7767
|
[],
|
|
7461
|
-
"start"
|
|
7768
|
+
"start",
|
|
7769
|
+
{
|
|
7770
|
+
hasOwnFields: initialState.current_feed?.own_capabilities !== void 0,
|
|
7771
|
+
backfillOwnFields: false
|
|
7772
|
+
}
|
|
7462
7773
|
);
|
|
7463
7774
|
this.feed?.state.partialNext({
|
|
7464
7775
|
activities
|
|
@@ -7730,6 +8041,53 @@ class FeedsClient extends FeedsApi {
|
|
|
7730
8041
|
}
|
|
7731
8042
|
return response;
|
|
7732
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
|
+
};
|
|
7733
8091
|
this.addComment = async (request) => {
|
|
7734
8092
|
const response = await super.addComment(request);
|
|
7735
8093
|
const { comment } = response;
|
|
@@ -7815,6 +8173,121 @@ class FeedsClient extends FeedsApi {
|
|
|
7815
8173
|
}
|
|
7816
8174
|
return response;
|
|
7817
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
|
+
};
|
|
7818
8291
|
this.queryPollAnswers = async (request) => {
|
|
7819
8292
|
const filter = request.filter ?? {};
|
|
7820
8293
|
const queryPollAnswersFilter = {
|
|
@@ -7889,18 +8362,12 @@ class FeedsClient extends FeedsApi {
|
|
|
7889
8362
|
id,
|
|
7890
8363
|
data,
|
|
7891
8364
|
watch,
|
|
7892
|
-
options2?.
|
|
7893
|
-
options2?.activityAddedEventFilter
|
|
8365
|
+
options2?.onNewActivity
|
|
7894
8366
|
);
|
|
7895
8367
|
}
|
|
7896
8368
|
const feed = this.activeFeeds[fid];
|
|
7897
|
-
if (!isCreated && options2) {
|
|
7898
|
-
|
|
7899
|
-
feed.addNewActivitiesTo = options2.addNewActivitiesTo;
|
|
7900
|
-
}
|
|
7901
|
-
if (options2?.activityAddedEventFilter) {
|
|
7902
|
-
feed.activityAddedEventFilter = options2.activityAddedEventFilter;
|
|
7903
|
-
}
|
|
8369
|
+
if (!isCreated && options2?.onNewActivity !== void 0) {
|
|
8370
|
+
feed.onNewActivity = options2.onNewActivity;
|
|
7904
8371
|
}
|
|
7905
8372
|
if (!feed.currentState.watch) {
|
|
7906
8373
|
if (!isCreated && data) {
|
|
@@ -8080,6 +8547,16 @@ class FeedsClient extends FeedsApi {
|
|
|
8080
8547
|
});
|
|
8081
8548
|
}
|
|
8082
8549
|
}
|
|
8550
|
+
async addActivity(request) {
|
|
8551
|
+
const response = await super.addActivity(request);
|
|
8552
|
+
request.feeds.forEach((fid) => {
|
|
8553
|
+
const feed = this.activeFeeds[fid];
|
|
8554
|
+
if (feed) {
|
|
8555
|
+
applyNewActivityToActiveFeeds.call(feed, response.activity);
|
|
8556
|
+
}
|
|
8557
|
+
});
|
|
8558
|
+
return response;
|
|
8559
|
+
}
|
|
8083
8560
|
async queryFeeds(request) {
|
|
8084
8561
|
const response = await this._queryFeeds(request);
|
|
8085
8562
|
const feedResponses = response.feeds;
|
|
@@ -8089,12 +8566,12 @@ class FeedsClient extends FeedsApi {
|
|
|
8089
8566
|
id: feedResponse.id,
|
|
8090
8567
|
data: feedResponse,
|
|
8091
8568
|
watch: request?.watch,
|
|
8092
|
-
fieldsToUpdate: [
|
|
8569
|
+
fieldsToUpdate: request?.enrich_own_fields ? [
|
|
8093
8570
|
"own_capabilities",
|
|
8094
8571
|
"own_follows",
|
|
8095
8572
|
"own_membership",
|
|
8096
8573
|
"own_followings"
|
|
8097
|
-
]
|
|
8574
|
+
] : []
|
|
8098
8575
|
})
|
|
8099
8576
|
);
|
|
8100
8577
|
return {
|
|
@@ -8126,10 +8603,21 @@ class FeedsClient extends FeedsApi {
|
|
|
8126
8603
|
});
|
|
8127
8604
|
return response;
|
|
8128
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
|
+
}
|
|
8129
8617
|
// For follow API endpoints we update the state after HTTP response to allow queryFeeds with watch: false
|
|
8130
8618
|
async follow(request) {
|
|
8131
8619
|
const response = await super.follow(request);
|
|
8132
|
-
this.updateStateFromFollows([response.follow]);
|
|
8620
|
+
this.updateStateFromFollows([response.follow], !!request.enrich_own_fields);
|
|
8133
8621
|
return response;
|
|
8134
8622
|
}
|
|
8135
8623
|
/**
|
|
@@ -8139,12 +8627,12 @@ class FeedsClient extends FeedsApi {
|
|
|
8139
8627
|
*/
|
|
8140
8628
|
async followBatch(request) {
|
|
8141
8629
|
const response = await super.followBatch(request);
|
|
8142
|
-
this.updateStateFromFollows(response.follows);
|
|
8630
|
+
this.updateStateFromFollows(response.follows, !!request.enrich_own_fields);
|
|
8143
8631
|
return response;
|
|
8144
8632
|
}
|
|
8145
8633
|
async getOrCreateFollows(request) {
|
|
8146
8634
|
const response = await super.getOrCreateFollows(request);
|
|
8147
|
-
this.updateStateFromFollows(response.created);
|
|
8635
|
+
this.updateStateFromFollows(response.created, !!request.enrich_own_fields);
|
|
8148
8636
|
return response;
|
|
8149
8637
|
}
|
|
8150
8638
|
async unfollow(request) {
|
|
@@ -8235,13 +8723,15 @@ class FeedsClient extends FeedsApi {
|
|
|
8235
8723
|
}).map((a) => getFeed.call(a))
|
|
8236
8724
|
];
|
|
8237
8725
|
}
|
|
8238
|
-
updateStateFromFollows(follows) {
|
|
8726
|
+
updateStateFromFollows(follows, hasOwnFields) {
|
|
8239
8727
|
follows.forEach((follow) => {
|
|
8240
8728
|
const feeds = [
|
|
8241
8729
|
...this.findAllActiveFeedsByFid(follow.source_feed.feed),
|
|
8242
8730
|
...this.findAllActiveFeedsByFid(follow.target_feed.feed)
|
|
8243
8731
|
];
|
|
8244
|
-
feeds.forEach(
|
|
8732
|
+
feeds.forEach(
|
|
8733
|
+
(f) => handleFollowCreated.bind(f)({ follow }, false, hasOwnFields)
|
|
8734
|
+
);
|
|
8245
8735
|
});
|
|
8246
8736
|
}
|
|
8247
8737
|
updateStateFromUnfollows(follows) {
|
|
@@ -8271,22 +8761,23 @@ export {
|
|
|
8271
8761
|
Constants as C,
|
|
8272
8762
|
FeedsClient as F,
|
|
8273
8763
|
StreamApiError as S,
|
|
8274
|
-
|
|
8275
|
-
|
|
8276
|
-
|
|
8764
|
+
activityFilter as a,
|
|
8765
|
+
Feed as b,
|
|
8766
|
+
StreamPoll as c,
|
|
8277
8767
|
debounce as d,
|
|
8278
|
-
|
|
8279
|
-
|
|
8280
|
-
|
|
8281
|
-
|
|
8768
|
+
checkHasAnotherPage as e,
|
|
8769
|
+
isFollowResponse as f,
|
|
8770
|
+
isReactionResponse as g,
|
|
8771
|
+
isCommentResponse as h,
|
|
8282
8772
|
isVoteAnswer as i,
|
|
8283
|
-
|
|
8284
|
-
|
|
8285
|
-
|
|
8286
|
-
|
|
8287
|
-
|
|
8773
|
+
isImageFile as j,
|
|
8774
|
+
isVideoFile as k,
|
|
8775
|
+
getStateUpdateQueueId as l,
|
|
8776
|
+
updateEntityInArray as m,
|
|
8777
|
+
feedsLoggerSystem as n,
|
|
8778
|
+
ensureExhausted as o,
|
|
8288
8779
|
replaceUniqueArrayMerge as r,
|
|
8289
8780
|
shouldUpdateState as s,
|
|
8290
8781
|
uniqueArrayMerge as u
|
|
8291
8782
|
};
|
|
8292
|
-
//# sourceMappingURL=feeds-client-
|
|
8783
|
+
//# sourceMappingURL=feeds-client-jtUTE4AC.mjs.map
|