@stream-io/feeds-client 0.3.23 → 0.3.25
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 +14 -0
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/react-bindings.js +1 -1
- package/dist/es/index.mjs +3 -2
- package/dist/es/react-bindings.mjs +1 -1
- package/dist/{feeds-client-BJQdmCB4.mjs → feeds-client-BULS-w1O.mjs} +114 -48
- package/dist/feeds-client-BULS-w1O.mjs.map +1 -0
- package/dist/{feeds-client-BUZVIyHd.js → feeds-client-DUD5wy6N.js} +114 -48
- package/dist/feeds-client-DUD5wy6N.js.map +1 -0
- package/dist/types/common/Poll.d.ts +6 -6
- package/dist/types/common/Poll.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts +3 -1
- package/dist/types/feed/event-handlers/activity/handle-activity-added.d.ts.map +1 -1
- package/dist/types/feed/feed.d.ts +4 -1
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/feeds-client.d.ts +10 -3
- package/dist/types/feeds-client/feeds-client.d.ts.map +1 -1
- package/dist/types/feeds-client/get-or-create-active-feed.d.ts +1 -2
- package/dist/types/feeds-client/get-or-create-active-feed.d.ts.map +1 -1
- package/dist/types/utils/check-own-fields-equality.d.ts +5 -0
- package/dist/types/utils/check-own-fields-equality.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/own-feed-fields.d.ts +3 -0
- package/dist/types/utils/own-feed-fields.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/common/Poll.ts +13 -30
- package/src/feed/event-handlers/activity/handle-activity-added.ts +3 -1
- package/src/feed/feed.ts +49 -16
- package/src/feeds-client/feeds-client.ts +69 -32
- package/src/feeds-client/get-or-create-active-feed.ts +2 -6
- package/src/test-utils/response-generators.ts +2 -1
- package/src/utils/check-own-fields-equality.ts +40 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/own-feed-fields.ts +6 -0
- package/dist/feeds-client-BJQdmCB4.mjs.map +0 -1
- package/dist/feeds-client-BUZVIyHd.js.map +0 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { StateStore } from '@stream-io/state-store';
|
|
2
2
|
import { FeedsClient } from '../feeds-client';
|
|
3
|
-
import {
|
|
4
|
-
export declare const isVoteAnswer: (vote:
|
|
3
|
+
import { PollVoteResponseData, QueryPollVotesRequest, PollUpdatedFeedEvent, PollClosedFeedEvent, PollVoteCastedFeedEvent, PollVoteChangedFeedEvent, PollVoteRemovedFeedEvent, PollResponseData } from '../gen/models';
|
|
4
|
+
export declare const isVoteAnswer: (vote: PollVoteResponseData) => boolean;
|
|
5
5
|
export type PollAnswersQueryParams = QueryPollVotesRequest & {
|
|
6
6
|
poll_id: string;
|
|
7
7
|
user_id?: string;
|
|
8
8
|
};
|
|
9
9
|
type OptionId = string;
|
|
10
|
-
export type PollState = Omit<
|
|
10
|
+
export type PollState = Omit<PollResponseData, 'own_votes' | 'id'> & {
|
|
11
11
|
last_activity_at: Date;
|
|
12
12
|
max_voted_option_ids: OptionId[];
|
|
13
|
-
own_votes_by_option_id: Record<OptionId,
|
|
14
|
-
own_answer?:
|
|
13
|
+
own_votes_by_option_id: Record<OptionId, PollVoteResponseData>;
|
|
14
|
+
own_answer?: PollVoteResponseData;
|
|
15
15
|
};
|
|
16
16
|
type PollInitOptions = {
|
|
17
17
|
client: FeedsClient;
|
|
18
|
-
poll:
|
|
18
|
+
poll: PollResponseData;
|
|
19
19
|
};
|
|
20
20
|
export declare class StreamPoll {
|
|
21
21
|
readonly state: StateStore<PollState>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Poll.d.ts","sourceRoot":"","sources":["../../../src/common/Poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"Poll.d.ts","sourceRoot":"","sources":["../../../src/common/Poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EAEpB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAuBvB,eAAO,MAAM,YAAY,GAAI,MAAM,oBAAoB,YAClC,CAAC;AAEtB,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,GAAG;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,QAAQ,GAAG,MAAM,CAAC;AAEvB,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG;IACnE,gBAAgB,EAAE,IAAI,CAAC;IACvB,oBAAoB,EAAE,QAAQ,EAAE,CAAC;IACjC,sBAAsB,EAAE,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,qBAAa,UAAU;IACrB,SAAgB,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,eAAe;IAS7C,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CA4B9C;IAEK,iBAAiB,GAAI,MAAM,eAAe,CAAC,MAAM,CAAC,UAEvD;IAEF,IAAI,IAAI,IAAI,SAAS,CAEpB;IAEM,iBAAiB,GAAI,OAAO,oBAAoB,UAQrD;IAEK,gBAAgB,GAAI,OAAO,mBAAmB,UAOnD;IAEK,gBAAgB,GAAI,OAAO,uBAAuB,UA6CvD;IAEK,iBAAiB,GAAI,OAAO,wBAAwB,UAuEzD;IAEK,iBAAiB,GAAI,OAAO,wBAAwB,UA6CzD;CACH"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Feed } from '../../feed';
|
|
2
2
|
import { ActivityResponse } from '../../../gen/models';
|
|
3
3
|
import { EventPayload } from '../../../types-internal';
|
|
4
|
-
export declare function addActivitiesToState(this: Feed, newActivities: ActivityResponse[], activities: ActivityResponse[] | undefined, position: 'start' | 'end'
|
|
4
|
+
export declare function addActivitiesToState(this: Feed, newActivities: ActivityResponse[], activities: ActivityResponse[] | undefined, position: 'start' | 'end', { fromWebSocket }?: {
|
|
5
|
+
fromWebSocket: boolean;
|
|
6
|
+
}): {
|
|
5
7
|
changed: boolean;
|
|
6
8
|
activities: ActivityResponse[];
|
|
7
9
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle-activity-added.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,gBAAgB,EAAE,EACjC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,KAAK;;;
|
|
1
|
+
{"version":3,"file":"handle-activity-added.d.ts","sourceRoot":"","sources":["../../../../../src/feed/event-handlers/activity/handle-activity-added.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,gBAAgB,EAAE,EACjC,UAAU,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,EAAE,aAAa,EAAE,GAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAA6B;;;EAiCzE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,YAAY,CAAC,sBAAsB,CAAC,QA0B5C"}
|
|
@@ -131,6 +131,9 @@ export declare class Feed extends FeedApi {
|
|
|
131
131
|
on: (eventName: "all" | "app.updated" | "feeds.activity.added" | "feeds.activity.deleted" | "feeds.activity.feedback" | "feeds.activity.marked" | "feeds.activity.pinned" | "feeds.activity.reaction.added" | "feeds.activity.reaction.deleted" | "feeds.activity.reaction.updated" | "feeds.activity.removed_from_feed" | "feeds.activity.unpinned" | "feeds.activity.updated" | "feeds.bookmark.added" | "feeds.bookmark.deleted" | "feeds.bookmark.updated" | "feeds.bookmark_folder.deleted" | "feeds.bookmark_folder.updated" | "feeds.comment.added" | "feeds.comment.deleted" | "feeds.comment.reaction.added" | "feeds.comment.reaction.deleted" | "feeds.comment.reaction.updated" | "feeds.comment.updated" | "feeds.feed.created" | "feeds.feed.deleted" | "feeds.feed.updated" | "feeds.feed_group.changed" | "feeds.feed_group.deleted" | "feeds.feed_member.added" | "feeds.feed_member.removed" | "feeds.feed_member.updated" | "feeds.follow.created" | "feeds.follow.deleted" | "feeds.follow.updated" | "feeds.notification_feed.updated" | "feeds.poll.closed" | "feeds.poll.deleted" | "feeds.poll.updated" | "feeds.poll.vote_casted" | "feeds.poll.vote_changed" | "feeds.poll.vote_removed" | "feeds.stories_feed.updated" | "health.check" | "moderation.custom_action" | "moderation.mark_reviewed" | "user.updated" | "moderation.flagged" | "user.banned" | "user.deactivated" | "user.muted" | "user.reactivated", handler: (event: WSEvent) => void) => () => void;
|
|
132
132
|
off: (eventName: "all" | "app.updated" | "feeds.activity.added" | "feeds.activity.deleted" | "feeds.activity.feedback" | "feeds.activity.marked" | "feeds.activity.pinned" | "feeds.activity.reaction.added" | "feeds.activity.reaction.deleted" | "feeds.activity.reaction.updated" | "feeds.activity.removed_from_feed" | "feeds.activity.unpinned" | "feeds.activity.updated" | "feeds.bookmark.added" | "feeds.bookmark.deleted" | "feeds.bookmark.updated" | "feeds.bookmark_folder.deleted" | "feeds.bookmark_folder.updated" | "feeds.comment.added" | "feeds.comment.deleted" | "feeds.comment.reaction.added" | "feeds.comment.reaction.deleted" | "feeds.comment.reaction.updated" | "feeds.comment.updated" | "feeds.feed.created" | "feeds.feed.deleted" | "feeds.feed.updated" | "feeds.feed_group.changed" | "feeds.feed_group.deleted" | "feeds.feed_member.added" | "feeds.feed_member.removed" | "feeds.feed_member.updated" | "feeds.follow.created" | "feeds.follow.deleted" | "feeds.follow.updated" | "feeds.notification_feed.updated" | "feeds.poll.closed" | "feeds.poll.deleted" | "feeds.poll.updated" | "feeds.poll.vote_casted" | "feeds.poll.vote_changed" | "feeds.poll.vote_removed" | "feeds.stories_feed.updated" | "health.check" | "moderation.custom_action" | "moderation.mark_reviewed" | "user.updated" | "moderation.flagged" | "user.banned" | "user.deactivated" | "user.muted" | "user.reactivated", handler: (event: WSEvent) => void) => void;
|
|
133
133
|
handleWSEvent(event: WSEvent): void;
|
|
134
|
-
protected newActivitiesAdded(activities: ActivityResponse[]
|
|
134
|
+
protected newActivitiesAdded(activities: ActivityResponse[], options?: {
|
|
135
|
+
fromWebSocket: boolean;
|
|
136
|
+
}): void;
|
|
137
|
+
private getOrCreateFeeds;
|
|
135
138
|
}
|
|
136
139
|
//# sourceMappingURL=feed.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/feed/feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,eAAe,EAEf,uBAAuB,EACvB,gBAAgB,EAEhB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiCnD,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC/B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../../src/feed/feed.ts"],"names":[],"mappings":"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"}
|
|
@@ -153,9 +153,16 @@ export declare class FeedsClient extends FeedsApi {
|
|
|
153
153
|
connection_id?: string;
|
|
154
154
|
}): Promise<StreamResponse<import('..').GetOrCreateFeedResponse>>;
|
|
155
155
|
getFollowSuggestions(...params: Parameters<FeedsApi['getFollowSuggestions']>): Promise<StreamResponse<GetFollowSuggestionsResponse>>;
|
|
156
|
-
protected readonly getOrCreateActiveFeed: (group
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
protected readonly getOrCreateActiveFeed: ({ group, id, data, watch, options, fromWebSocket, }: {
|
|
157
|
+
group: string;
|
|
158
|
+
id: string;
|
|
159
|
+
data?: FeedResponse;
|
|
160
|
+
watch?: boolean;
|
|
161
|
+
options?: {
|
|
162
|
+
addNewActivitiesTo?: "start" | "end";
|
|
163
|
+
activityAddedEventFilter?: (event: ActivityAddedEvent) => boolean;
|
|
164
|
+
};
|
|
165
|
+
fromWebSocket?: boolean;
|
|
159
166
|
}) => Feed;
|
|
160
167
|
private findAllActiveFeedsByActivityId;
|
|
161
168
|
private findAllActiveFeedsByFid;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feeds-client.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/feeds-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EAEb,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,WAAW,EAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAYpD,OAAO,KAAK,EACV,kBAAkB,EAElB,cAAc,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,IAAI,EAgBL,MAAM,SAAS,CAAC;AASjB,OAAO,EAKL,KAAK,kCAAkC,EAExC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"feeds-client.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/feeds-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { FeedResponse } from '../gen/models';
|
|
2
1
|
import { FeedsClient } from './feeds-client';
|
|
3
|
-
export declare function getOrCreateActiveFeed(this: FeedsClient,
|
|
2
|
+
export declare function getOrCreateActiveFeed(this: FeedsClient, ...args: Parameters<FeedsClient['getOrCreateActiveFeed']>): import('..').Feed;
|
|
4
3
|
//# sourceMappingURL=get-or-create-active-feed.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-or-create-active-feed.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/get-or-create-active-feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"get-or-create-active-feed.d.ts","sourceRoot":"","sources":["../../../src/feeds-client/get-or-create-active-feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,qBAG1D"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FeedState } from '../feed';
|
|
2
|
+
import { FeedResponse } from '../gen/models';
|
|
3
|
+
export declare const isOwnFollowsEqual: (currentState: FeedState, newState: FeedResponse) => boolean;
|
|
4
|
+
export declare const isOwnMembershipEqual: (currentState: FeedState, newState: FeedResponse) => boolean;
|
|
5
|
+
//# sourceMappingURL=check-own-fields-equality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-own-fields-equality.d.ts","sourceRoot":"","sources":["../../../src/utils/check-own-fields-equality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,iBAAiB,GAC5B,cAAc,SAAS,EACvB,UAAU,YAAY,YAwBvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,cAAc,SAAS,EACvB,UAAU,YAAY,YAMvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"own-feed-fields.d.ts","sourceRoot":"","sources":["../../../src/utils/own-feed-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,MAAM,IAAI,CAC1C,YAAY,EACZ,kBAAkB,GAAG,aAAa,GAAG,gBAAgB,CACtD,CAAyD,CAAC"}
|
package/package.json
CHANGED
package/src/common/Poll.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StateStore } from '@stream-io/state-store';
|
|
2
2
|
import type { FeedsClient } from '../feeds-client';
|
|
3
3
|
import type {
|
|
4
|
-
|
|
4
|
+
PollVoteResponseData,
|
|
5
5
|
QueryPollVotesRequest,
|
|
6
6
|
PollUpdatedFeedEvent,
|
|
7
7
|
WSEvent,
|
|
@@ -10,7 +10,6 @@ import type {
|
|
|
10
10
|
PollVoteChangedFeedEvent,
|
|
11
11
|
PollVoteRemovedFeedEvent,
|
|
12
12
|
PollResponseData,
|
|
13
|
-
Poll as PollType,
|
|
14
13
|
} from '../gen/models';
|
|
15
14
|
|
|
16
15
|
const isPollUpdatedEvent = (
|
|
@@ -34,7 +33,8 @@ const isPollVoteRemovedEvent = (
|
|
|
34
33
|
): e is { type: 'feeds.poll.vote_removed' } & PollVoteRemovedFeedEvent =>
|
|
35
34
|
e.type === 'feeds.poll.vote_removed';
|
|
36
35
|
|
|
37
|
-
export const isVoteAnswer = (vote:
|
|
36
|
+
export const isVoteAnswer = (vote: PollVoteResponseData) =>
|
|
37
|
+
!!vote?.answer_text;
|
|
38
38
|
|
|
39
39
|
export type PollAnswersQueryParams = QueryPollVotesRequest & {
|
|
40
40
|
poll_id: string;
|
|
@@ -43,16 +43,16 @@ export type PollAnswersQueryParams = QueryPollVotesRequest & {
|
|
|
43
43
|
|
|
44
44
|
type OptionId = string;
|
|
45
45
|
|
|
46
|
-
export type PollState = Omit<
|
|
46
|
+
export type PollState = Omit<PollResponseData, 'own_votes' | 'id'> & {
|
|
47
47
|
last_activity_at: Date;
|
|
48
48
|
max_voted_option_ids: OptionId[];
|
|
49
|
-
own_votes_by_option_id: Record<OptionId,
|
|
50
|
-
own_answer?:
|
|
49
|
+
own_votes_by_option_id: Record<OptionId, PollVoteResponseData>;
|
|
50
|
+
own_answer?: PollVoteResponseData; // each user can have only one answer
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
type PollInitOptions = {
|
|
54
54
|
client: FeedsClient;
|
|
55
|
-
poll:
|
|
55
|
+
poll: PollResponseData;
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
export class StreamPoll {
|
|
@@ -74,8 +74,8 @@ export class StreamPoll {
|
|
|
74
74
|
) => {
|
|
75
75
|
const { own_votes, id, ...pollResponseForState } = poll;
|
|
76
76
|
const { ownAnswer, ownVotes } = own_votes?.reduce<{
|
|
77
|
-
ownVotes:
|
|
78
|
-
ownAnswer?:
|
|
77
|
+
ownVotes: PollVoteResponseData[];
|
|
78
|
+
ownAnswer?: PollVoteResponseData;
|
|
79
79
|
}>(
|
|
80
80
|
(acc, voteOrAnswer) => {
|
|
81
81
|
if (isVoteAnswer(voteOrAnswer)) {
|
|
@@ -111,7 +111,6 @@ export class StreamPoll {
|
|
|
111
111
|
if (event.poll?.id && event.poll.id !== this.id) return;
|
|
112
112
|
if (!isPollUpdatedEvent(event as WSEvent)) return;
|
|
113
113
|
const { id, ...pollData } = event.poll;
|
|
114
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
115
114
|
this.state.partialNext({
|
|
116
115
|
...pollData,
|
|
117
116
|
last_activity_at: new Date(event.created_at),
|
|
@@ -140,19 +139,14 @@ export class StreamPoll {
|
|
|
140
139
|
let maxVotedOptionIds = currentState.max_voted_option_ids;
|
|
141
140
|
|
|
142
141
|
if (isOwnVote) {
|
|
143
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
144
142
|
if (isVoteAnswer(event.poll_vote)) {
|
|
145
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
146
143
|
ownAnswer = event.poll_vote;
|
|
147
144
|
} else if (event.poll_vote.option_id) {
|
|
148
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
149
145
|
ownVotesByOptionId[event.poll_vote.option_id] = event.poll_vote;
|
|
150
146
|
}
|
|
151
147
|
}
|
|
152
148
|
|
|
153
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
154
149
|
if (isVoteAnswer(event.poll_vote)) {
|
|
155
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
156
150
|
latestAnswers = [event.poll_vote, ...latestAnswers];
|
|
157
151
|
} else {
|
|
158
152
|
maxVotedOptionIds = getMaxVotedOptionIds(
|
|
@@ -168,7 +162,6 @@ export class StreamPoll {
|
|
|
168
162
|
} = event.poll;
|
|
169
163
|
this.state.partialNext({
|
|
170
164
|
answers_count,
|
|
171
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
172
165
|
latest_votes_by_option,
|
|
173
166
|
vote_count,
|
|
174
167
|
vote_counts_by_option,
|
|
@@ -194,22 +187,18 @@ export class StreamPoll {
|
|
|
194
187
|
let maxVotedOptionIds = currentState.max_voted_option_ids;
|
|
195
188
|
|
|
196
189
|
if (isOwnVote) {
|
|
197
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
198
190
|
if (isVoteAnswer(event.poll_vote)) {
|
|
199
191
|
latestAnswers = [
|
|
200
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
201
192
|
event.poll_vote,
|
|
202
193
|
...latestAnswers.filter((answer) => answer.id !== event.poll_vote.id),
|
|
203
194
|
];
|
|
204
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
205
195
|
ownAnswer = event.poll_vote;
|
|
206
196
|
} else if (event.poll_vote.option_id) {
|
|
207
197
|
if (event.poll.enforce_unique_vote) {
|
|
208
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
209
198
|
ownVotesByOptionId = { [event.poll_vote.option_id]: event.poll_vote };
|
|
210
199
|
} else {
|
|
211
200
|
ownVotesByOptionId = Object.entries(ownVotesByOptionId).reduce<
|
|
212
|
-
Record<OptionId,
|
|
201
|
+
Record<OptionId, PollVoteResponseData>
|
|
213
202
|
>((acc, [optionId, vote]) => {
|
|
214
203
|
if (
|
|
215
204
|
optionId !== event.poll_vote.option_id &&
|
|
@@ -220,7 +209,6 @@ export class StreamPoll {
|
|
|
220
209
|
acc[optionId] = vote;
|
|
221
210
|
return acc;
|
|
222
211
|
}, {});
|
|
223
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
224
212
|
ownVotesByOptionId[event.poll_vote.option_id] = event.poll_vote;
|
|
225
213
|
}
|
|
226
214
|
|
|
@@ -231,9 +219,7 @@ export class StreamPoll {
|
|
|
231
219
|
event.poll.vote_counts_by_option,
|
|
232
220
|
);
|
|
233
221
|
}
|
|
234
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
235
222
|
} else if (isVoteAnswer(event.poll_vote)) {
|
|
236
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
237
223
|
latestAnswers = [event.poll_vote, ...latestAnswers];
|
|
238
224
|
} else {
|
|
239
225
|
maxVotedOptionIds = getMaxVotedOptionIds(
|
|
@@ -249,7 +235,6 @@ export class StreamPoll {
|
|
|
249
235
|
} = event.poll;
|
|
250
236
|
this.state.partialNext({
|
|
251
237
|
answers_count,
|
|
252
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
253
238
|
latest_votes_by_option,
|
|
254
239
|
vote_count,
|
|
255
240
|
vote_counts_by_option,
|
|
@@ -273,7 +258,6 @@ export class StreamPoll {
|
|
|
273
258
|
const ownVotesByOptionId = { ...currentState.own_votes_by_option_id };
|
|
274
259
|
let maxVotedOptionIds = currentState.max_voted_option_ids;
|
|
275
260
|
|
|
276
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
277
261
|
if (isVoteAnswer(event.poll_vote)) {
|
|
278
262
|
latestAnswers = latestAnswers.filter(
|
|
279
263
|
(answer) => answer.id !== event.poll_vote.id,
|
|
@@ -298,7 +282,6 @@ export class StreamPoll {
|
|
|
298
282
|
} = event.poll;
|
|
299
283
|
this.state.partialNext({
|
|
300
284
|
answers_count,
|
|
301
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
302
285
|
latest_votes_by_option,
|
|
303
286
|
vote_count,
|
|
304
287
|
vote_counts_by_option,
|
|
@@ -327,10 +310,10 @@ function getMaxVotedOptionIds(
|
|
|
327
310
|
return winningOptions;
|
|
328
311
|
}
|
|
329
312
|
|
|
330
|
-
function getOwnVotesByOptionId(ownVotes:
|
|
313
|
+
function getOwnVotesByOptionId(ownVotes: PollVoteResponseData[]) {
|
|
331
314
|
return !ownVotes
|
|
332
|
-
? ({} satisfies Record<OptionId,
|
|
333
|
-
: ownVotes.reduce<Record<OptionId,
|
|
315
|
+
? ({} satisfies Record<OptionId, PollVoteResponseData>)
|
|
316
|
+
: ownVotes.reduce<Record<OptionId, PollVoteResponseData>>((acc, vote) => {
|
|
334
317
|
if (isVoteAnswer(vote) || !vote.option_id) return acc;
|
|
335
318
|
acc[vote.option_id] = vote;
|
|
336
319
|
return acc;
|
|
@@ -7,6 +7,7 @@ export function addActivitiesToState(
|
|
|
7
7
|
newActivities: ActivityResponse[],
|
|
8
8
|
activities: ActivityResponse[] | undefined,
|
|
9
9
|
position: 'start' | 'end',
|
|
10
|
+
{ fromWebSocket }: { fromWebSocket: boolean } = { fromWebSocket: false },
|
|
10
11
|
) {
|
|
11
12
|
if (activities === undefined) {
|
|
12
13
|
return {
|
|
@@ -33,7 +34,7 @@ export function addActivitiesToState(
|
|
|
33
34
|
...activities,
|
|
34
35
|
...(position === 'end' ? newActivitiesDeduplicated : []),
|
|
35
36
|
];
|
|
36
|
-
this.newActivitiesAdded(newActivitiesDeduplicated);
|
|
37
|
+
this.newActivitiesAdded(newActivitiesDeduplicated, { fromWebSocket });
|
|
37
38
|
|
|
38
39
|
result = { changed: true, activities: updatedActivities };
|
|
39
40
|
}
|
|
@@ -55,6 +56,7 @@ export function handleActivityAdded(
|
|
|
55
56
|
[event.activity],
|
|
56
57
|
currentActivities,
|
|
57
58
|
this.currentState.addNewActivitiesTo,
|
|
59
|
+
{ fromWebSocket: true },
|
|
58
60
|
);
|
|
59
61
|
if (result.changed) {
|
|
60
62
|
const activity = event.activity;
|
package/src/feed/feed.ts
CHANGED
|
@@ -63,6 +63,7 @@ import {
|
|
|
63
63
|
checkHasAnotherPage,
|
|
64
64
|
Constants,
|
|
65
65
|
feedsLoggerSystem,
|
|
66
|
+
ownFeedFields,
|
|
66
67
|
uniqueArrayMerge,
|
|
67
68
|
} from '../utils';
|
|
68
69
|
import { handleActivityFeedback } from './event-handlers/activity/handle-activity-feedback';
|
|
@@ -953,12 +954,13 @@ export class Feed extends FeedApi {
|
|
|
953
954
|
event.activity.current_feed &&
|
|
954
955
|
currentActivity?.current_feed
|
|
955
956
|
) {
|
|
956
|
-
|
|
957
|
-
currentActivity.current_feed
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
957
|
+
ownFeedFields.forEach((field) => {
|
|
958
|
+
if (field in currentActivity.current_feed!) {
|
|
959
|
+
// @ts-expect-error TODO: fix this
|
|
960
|
+
event.activity.current_feed![field] =
|
|
961
|
+
currentActivity.current_feed![field];
|
|
962
|
+
}
|
|
963
|
+
});
|
|
962
964
|
}
|
|
963
965
|
}
|
|
964
966
|
// @ts-expect-error intersection of handler arguments results to never
|
|
@@ -974,17 +976,48 @@ export class Feed extends FeedApi {
|
|
|
974
976
|
this.eventDispatcher.dispatch(event);
|
|
975
977
|
}
|
|
976
978
|
|
|
977
|
-
protected newActivitiesAdded(
|
|
979
|
+
protected newActivitiesAdded(
|
|
980
|
+
activities: ActivityResponse[],
|
|
981
|
+
options: {
|
|
982
|
+
fromWebSocket: boolean;
|
|
983
|
+
} = { fromWebSocket: false },
|
|
984
|
+
) {
|
|
978
985
|
this.client.hydratePollCache(activities);
|
|
986
|
+
this.getOrCreateFeeds(activities, options);
|
|
987
|
+
}
|
|
979
988
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
+
private getOrCreateFeeds(
|
|
990
|
+
activities: ActivityResponse[],
|
|
991
|
+
options: {
|
|
992
|
+
fromWebSocket: boolean;
|
|
993
|
+
},
|
|
994
|
+
) {
|
|
995
|
+
const enrichmentOptions =
|
|
996
|
+
this.currentState.last_get_or_create_request_config?.enrichment_options;
|
|
997
|
+
if (
|
|
998
|
+
!enrichmentOptions?.skip_activity_current_feed &&
|
|
999
|
+
!enrichmentOptions?.skip_all
|
|
1000
|
+
) {
|
|
1001
|
+
const feedsToGetOrCreate = new Map<string, FeedResponse>();
|
|
1002
|
+
activities.forEach((activity) => {
|
|
1003
|
+
if (
|
|
1004
|
+
activity.current_feed &&
|
|
1005
|
+
!feedsToGetOrCreate.has(activity.current_feed.feed)
|
|
1006
|
+
) {
|
|
1007
|
+
feedsToGetOrCreate.set(
|
|
1008
|
+
activity.current_feed.feed,
|
|
1009
|
+
activity.current_feed,
|
|
1010
|
+
);
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
feedsToGetOrCreate.values().forEach((feed) => {
|
|
1014
|
+
getOrCreateActiveFeed.bind(this.client)({
|
|
1015
|
+
group: feed.group_id,
|
|
1016
|
+
id: feed.id,
|
|
1017
|
+
data: feed,
|
|
1018
|
+
fromWebSocket: options.fromWebSocket,
|
|
1019
|
+
});
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
989
1022
|
}
|
|
990
1023
|
}
|
|
@@ -93,6 +93,10 @@ import {
|
|
|
93
93
|
} from '../utils/throttling';
|
|
94
94
|
import { ActivityWithStateUpdates } from '../activity-with-state-updates/activity-with-state-updates';
|
|
95
95
|
import { getFeed } from '../activity-with-state-updates/get-feed';
|
|
96
|
+
import {
|
|
97
|
+
isOwnFollowsEqual,
|
|
98
|
+
isOwnMembershipEqual,
|
|
99
|
+
} from '../utils/check-own-fields-equality';
|
|
96
100
|
|
|
97
101
|
export type FeedsClientState = {
|
|
98
102
|
connected_user: ConnectedUser | undefined;
|
|
@@ -175,11 +179,11 @@ export class FeedsClient extends FeedsApi {
|
|
|
175
179
|
case 'feeds.feed.created': {
|
|
176
180
|
if (this.activeFeeds[event.feed.id]) break;
|
|
177
181
|
|
|
178
|
-
this.getOrCreateActiveFeed(
|
|
179
|
-
event.feed.group_id,
|
|
180
|
-
event.feed.id,
|
|
181
|
-
event.feed,
|
|
182
|
-
);
|
|
182
|
+
this.getOrCreateActiveFeed({
|
|
183
|
+
group: event.feed.group_id,
|
|
184
|
+
id: event.feed.id,
|
|
185
|
+
data: event.feed,
|
|
186
|
+
});
|
|
183
187
|
|
|
184
188
|
break;
|
|
185
189
|
}
|
|
@@ -356,11 +360,9 @@ export class FeedsClient extends FeedsApi {
|
|
|
356
360
|
const pollResponse = activity.poll;
|
|
357
361
|
const pollFromCache = this.pollFromState(pollResponse.id);
|
|
358
362
|
if (!pollFromCache) {
|
|
359
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
360
363
|
const poll = new StreamPoll({ client: this, poll: pollResponse });
|
|
361
364
|
this.polls_by_id.set(poll.id, poll);
|
|
362
365
|
} else {
|
|
363
|
-
// @ts-expect-error Incompatibility between PollResponseData and Poll due to teams_role, remove when OpenAPI spec is fixed
|
|
364
366
|
pollFromCache.reinitializeState(pollResponse);
|
|
365
367
|
}
|
|
366
368
|
}
|
|
@@ -676,13 +678,11 @@ export class FeedsClient extends FeedsApi {
|
|
|
676
678
|
activityAddedEventFilter?: (event: ActivityAddedEvent) => boolean;
|
|
677
679
|
},
|
|
678
680
|
) => {
|
|
679
|
-
return this.getOrCreateActiveFeed(
|
|
680
|
-
groupId,
|
|
681
|
+
return this.getOrCreateActiveFeed({
|
|
682
|
+
group: groupId,
|
|
681
683
|
id,
|
|
682
|
-
undefined,
|
|
683
|
-
undefined,
|
|
684
684
|
options,
|
|
685
|
-
);
|
|
685
|
+
});
|
|
686
686
|
};
|
|
687
687
|
|
|
688
688
|
/**
|
|
@@ -708,12 +708,12 @@ export class FeedsClient extends FeedsApi {
|
|
|
708
708
|
const feedResponses = response.feeds;
|
|
709
709
|
|
|
710
710
|
const feeds = feedResponses.map((feedResponse) =>
|
|
711
|
-
this.getOrCreateActiveFeed(
|
|
712
|
-
feedResponse.group_id,
|
|
713
|
-
feedResponse.id,
|
|
714
|
-
feedResponse,
|
|
715
|
-
request?.watch,
|
|
716
|
-
),
|
|
711
|
+
this.getOrCreateActiveFeed({
|
|
712
|
+
group: feedResponse.group_id,
|
|
713
|
+
id: feedResponse.id,
|
|
714
|
+
data: feedResponse,
|
|
715
|
+
watch: request?.watch,
|
|
716
|
+
}),
|
|
717
717
|
);
|
|
718
718
|
|
|
719
719
|
this.hydrateCapabilitiesCache(feedResponses);
|
|
@@ -846,27 +846,35 @@ export class FeedsClient extends FeedsApi {
|
|
|
846
846
|
const response = await super.getFollowSuggestions(...params);
|
|
847
847
|
|
|
848
848
|
response.suggestions.forEach((suggestion) => {
|
|
849
|
-
this.getOrCreateActiveFeed(
|
|
850
|
-
suggestion.group_id,
|
|
851
|
-
suggestion.id,
|
|
852
|
-
suggestion,
|
|
853
|
-
);
|
|
849
|
+
this.getOrCreateActiveFeed({
|
|
850
|
+
group: suggestion.group_id,
|
|
851
|
+
id: suggestion.id,
|
|
852
|
+
data: suggestion,
|
|
853
|
+
});
|
|
854
854
|
});
|
|
855
855
|
|
|
856
856
|
// TODO: return feed instance here https://linear.app/stream/issue/REACT-669/return-feed-instance-from-followsuggestions-breaking
|
|
857
857
|
return response;
|
|
858
858
|
}
|
|
859
859
|
|
|
860
|
-
protected readonly getOrCreateActiveFeed = (
|
|
861
|
-
group
|
|
862
|
-
id
|
|
863
|
-
data
|
|
864
|
-
watch
|
|
860
|
+
protected readonly getOrCreateActiveFeed = ({
|
|
861
|
+
group,
|
|
862
|
+
id,
|
|
863
|
+
data,
|
|
864
|
+
watch,
|
|
865
|
+
options,
|
|
866
|
+
fromWebSocket = false,
|
|
867
|
+
}: {
|
|
868
|
+
group: string;
|
|
869
|
+
id: string;
|
|
870
|
+
data?: FeedResponse;
|
|
871
|
+
watch?: boolean;
|
|
865
872
|
options?: {
|
|
866
873
|
addNewActivitiesTo?: 'start' | 'end';
|
|
867
874
|
activityAddedEventFilter?: (event: ActivityAddedEvent) => boolean;
|
|
868
|
-
}
|
|
869
|
-
|
|
875
|
+
};
|
|
876
|
+
fromWebSocket?: boolean;
|
|
877
|
+
}) => {
|
|
870
878
|
const fid = `${group}:${id}`;
|
|
871
879
|
let isCreated = false;
|
|
872
880
|
|
|
@@ -895,8 +903,37 @@ export class FeedsClient extends FeedsApi {
|
|
|
895
903
|
}
|
|
896
904
|
|
|
897
905
|
if (!feed.currentState.watch) {
|
|
898
|
-
|
|
899
|
-
|
|
906
|
+
if (!isCreated && data) {
|
|
907
|
+
if (
|
|
908
|
+
(feed.currentState.updated_at?.getTime() ?? 0) <
|
|
909
|
+
data.updated_at.getTime()
|
|
910
|
+
) {
|
|
911
|
+
handleFeedUpdated.call(feed, { feed: data });
|
|
912
|
+
} else if (
|
|
913
|
+
(feed.currentState.updated_at?.getTime() ?? 0) ===
|
|
914
|
+
data.updated_at.getTime() &&
|
|
915
|
+
!fromWebSocket
|
|
916
|
+
) {
|
|
917
|
+
const fieldsToUpdate: Array<keyof FeedResponse> = [];
|
|
918
|
+
if (!isOwnFollowsEqual(feed.currentState, data)) {
|
|
919
|
+
fieldsToUpdate.push('own_follows');
|
|
920
|
+
}
|
|
921
|
+
if (!isOwnMembershipEqual(feed.currentState, data)) {
|
|
922
|
+
fieldsToUpdate.push('own_membership');
|
|
923
|
+
}
|
|
924
|
+
if (fieldsToUpdate.length > 0) {
|
|
925
|
+
const fieldsToUpdateData = fieldsToUpdate.reduce(
|
|
926
|
+
(acc: Partial<FeedResponse>, field) => {
|
|
927
|
+
// @ts-expect-error TODO: fix this
|
|
928
|
+
acc[field] = data[field];
|
|
929
|
+
return acc;
|
|
930
|
+
},
|
|
931
|
+
{},
|
|
932
|
+
);
|
|
933
|
+
feed.state.partialNext(fieldsToUpdateData);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
900
937
|
if (watch) handleWatchStarted.call(feed);
|
|
901
938
|
}
|
|
902
939
|
|