@stream-io/feeds-client 0.1.11 → 0.2.1
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 +25 -0
- package/dist/index-react-bindings.browser.cjs +537 -331
- package/dist/index-react-bindings.browser.cjs.map +1 -1
- package/dist/index-react-bindings.browser.js +537 -331
- package/dist/index-react-bindings.browser.js.map +1 -1
- package/dist/index-react-bindings.node.cjs +537 -331
- package/dist/index-react-bindings.node.cjs.map +1 -1
- package/dist/index-react-bindings.node.js +537 -331
- package/dist/index-react-bindings.node.js.map +1 -1
- package/dist/index.browser.cjs +536 -329
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +536 -330
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.node.cjs +536 -329
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +536 -330
- package/dist/index.node.js.map +1 -1
- package/dist/src/feed/event-handlers/activity/handle-activity-deleted.d.ts +12 -3
- package/dist/src/feed/event-handlers/activity/handle-activity-pinned.d.ts +3 -0
- package/dist/src/feed/event-handlers/activity/handle-activity-reaction-added.d.ts +10 -6
- package/dist/src/feed/event-handlers/activity/handle-activity-reaction-deleted.d.ts +10 -6
- package/dist/src/feed/event-handlers/activity/handle-activity-unpinned.d.ts +3 -0
- package/dist/src/feed/event-handlers/activity/handle-activity-updated.d.ts +7 -3
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-added.d.ts +10 -6
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-deleted.d.ts +10 -6
- package/dist/src/feed/event-handlers/bookmark/handle-bookmark-updated.d.ts +10 -6
- package/dist/src/feed/event-handlers/index.d.ts +1 -0
- package/dist/src/feed/event-handlers/watch/handle-watch-started.d.ts +2 -0
- package/dist/src/feed/event-handlers/watch/handle-watch-stopped.d.ts +2 -0
- package/dist/src/feed/event-handlers/watch/index.d.ts +2 -0
- package/dist/src/feed/feed.d.ts +4 -12
- package/dist/src/feeds-client/event-handlers/index.d.ts +1 -0
- package/dist/src/feeds-client/event-handlers/user/handle-user-updated.d.ts +3 -0
- package/dist/src/{feeds-client.d.ts → feeds-client/feeds-client.d.ts} +16 -16
- package/dist/src/feeds-client/index.d.ts +2 -0
- package/dist/src/gen/feeds/FeedsApi.d.ts +27 -23
- package/dist/src/gen/models/index.d.ts +198 -23
- package/dist/src/test-utils/response-generators.d.ts +46 -1
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/update-entity-in-array.d.ts +27 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/index.ts +1 -1
- package/package.json +2 -2
- package/src/feed/event-handlers/activity/activity-reaction-utils.test.ts +108 -96
- package/src/feed/event-handlers/activity/activity-utils.test.ts +84 -122
- package/src/feed/event-handlers/activity/handle-activity-deleted.ts +43 -10
- package/src/feed/event-handlers/activity/handle-activity-pinned.test.ts +60 -0
- package/src/feed/event-handlers/activity/handle-activity-pinned.ts +30 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-added.test.ts +157 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-added.ts +82 -40
- package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.test.ts +200 -0
- package/src/feed/event-handlers/activity/handle-activity-reaction-deleted.ts +89 -51
- package/src/feed/event-handlers/activity/handle-activity-unpinned.test.ts +94 -0
- package/src/feed/event-handlers/activity/handle-activity-unpinned.ts +30 -0
- package/src/feed/event-handlers/activity/handle-activity-updated.test.ts +115 -0
- package/src/feed/event-handlers/activity/handle-activity-updated.ts +73 -35
- package/src/feed/event-handlers/bookmark/bookmark-utils.test.ts +121 -109
- package/src/feed/event-handlers/bookmark/handle-bookmark-added.test.ts +178 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-added.ts +82 -39
- package/src/feed/event-handlers/bookmark/handle-bookmark-deleted.test.ts +188 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-deleted.ts +86 -48
- package/src/feed/event-handlers/bookmark/handle-bookmark-updated.test.ts +196 -0
- package/src/feed/event-handlers/bookmark/handle-bookmark-updated.ts +83 -44
- package/src/feed/event-handlers/follow/handle-follow-created.test.ts +16 -12
- package/src/feed/event-handlers/follow/handle-follow-created.ts +4 -7
- package/src/feed/event-handlers/follow/handle-follow-deleted.test.ts +19 -15
- package/src/feed/event-handlers/follow/handle-follow-deleted.ts +6 -6
- package/src/feed/event-handlers/follow/handle-follow-updated.ts +7 -10
- package/src/feed/event-handlers/index.ts +2 -1
- package/src/feed/event-handlers/watch/handle-watch-started.ts +5 -0
- package/src/feed/event-handlers/watch/handle-watch-stopped.ts +5 -0
- package/src/feed/event-handlers/watch/index.ts +2 -0
- package/src/feed/feed.ts +15 -33
- package/src/feeds-client/event-handlers/index.ts +1 -0
- package/src/feeds-client/event-handlers/user/handle-user-updated.test.ts +53 -0
- package/src/feeds-client/event-handlers/user/handle-user-updated.ts +28 -0
- package/src/{feeds-client.ts → feeds-client/feeds-client.ts} +48 -39
- package/src/feeds-client/index.ts +2 -0
- package/src/gen/feeds/FeedsApi.ts +164 -138
- package/src/gen/model-decoders/decoders.ts +28 -0
- package/src/gen/models/index.ts +349 -29
- package/src/gen/moderation/ModerationApi.ts +1 -0
- package/src/test-utils/response-generators.ts +270 -11
- package/src/utils/index.ts +1 -0
- package/src/utils/state-update-queue.ts +1 -1
- package/src/utils/update-entity-in-array.ts +51 -0
|
@@ -1,76 +1,115 @@
|
|
|
1
1
|
import type { Feed } from '../../../feed';
|
|
2
2
|
import type {
|
|
3
|
+
ActivityPinResponse,
|
|
3
4
|
ActivityResponse,
|
|
4
5
|
BookmarkUpdatedEvent,
|
|
5
6
|
} from '../../../gen/models';
|
|
6
|
-
import type { EventPayload
|
|
7
|
+
import type { EventPayload } from '../../../types-internal';
|
|
8
|
+
import { updateEntityInArray } from '../../../utils';
|
|
7
9
|
|
|
8
|
-
import { updateActivityInState } from '../activity';
|
|
9
10
|
import { isSameBookmark } from './handle-bookmark-deleted';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
const sharedUpdateActivity = ({
|
|
13
|
+
currentActivity,
|
|
14
|
+
event,
|
|
15
|
+
eventBelongsToCurrentUser,
|
|
16
|
+
}: {
|
|
17
|
+
currentActivity: ActivityResponse;
|
|
18
|
+
event: BookmarkUpdatedEvent;
|
|
19
|
+
eventBelongsToCurrentUser: boolean;
|
|
20
|
+
}): ActivityResponse => {
|
|
21
|
+
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
22
|
+
|
|
23
|
+
if (eventBelongsToCurrentUser) {
|
|
24
|
+
const bookmarkIndex = newOwnBookmarks.findIndex((bookmark) =>
|
|
20
25
|
isSameBookmark(bookmark, event.bookmark),
|
|
21
26
|
);
|
|
27
|
+
|
|
22
28
|
if (bookmarkIndex !== -1) {
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
newOwnBookmarks = [...newOwnBookmarks];
|
|
30
|
+
newOwnBookmarks[bookmarkIndex] = event.bookmark;
|
|
25
31
|
}
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
return {
|
|
29
|
-
...activity,
|
|
30
|
-
own_bookmarks:
|
|
31
|
-
|
|
35
|
+
...event.bookmark.activity,
|
|
36
|
+
own_bookmarks: newOwnBookmarks,
|
|
37
|
+
own_reactions: currentActivity.own_reactions,
|
|
32
38
|
};
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
export const updateBookmarkInActivities = (
|
|
36
42
|
event: BookmarkUpdatedEvent,
|
|
37
43
|
activities: ActivityResponse[] | undefined,
|
|
38
|
-
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
eventBelongsToCurrentUser: boolean,
|
|
45
|
+
) =>
|
|
46
|
+
updateEntityInArray({
|
|
47
|
+
entities: activities,
|
|
48
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
49
|
+
updater: (matchedActivity) =>
|
|
50
|
+
sharedUpdateActivity({
|
|
51
|
+
currentActivity: matchedActivity,
|
|
52
|
+
event,
|
|
53
|
+
eventBelongsToCurrentUser,
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
57
|
+
export const updateBookmarkInPinnedActivities = (
|
|
58
|
+
event: BookmarkUpdatedEvent,
|
|
59
|
+
pinnedActivities: ActivityPinResponse[] | undefined,
|
|
60
|
+
eventBelongsToCurrentUser: boolean,
|
|
61
|
+
) =>
|
|
62
|
+
updateEntityInArray({
|
|
63
|
+
entities: pinnedActivities,
|
|
64
|
+
matcher: (pinnedActivity) =>
|
|
65
|
+
pinnedActivity.activity.id === event.bookmark.activity.id,
|
|
66
|
+
updater: (matchedPinnedActivity) => {
|
|
67
|
+
const newActivity = sharedUpdateActivity({
|
|
68
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
69
|
+
event,
|
|
70
|
+
eventBelongsToCurrentUser,
|
|
71
|
+
});
|
|
50
72
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
};
|
|
73
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
74
|
+
return matchedPinnedActivity;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
...matchedPinnedActivity,
|
|
79
|
+
activity: newActivity,
|
|
80
|
+
};
|
|
81
|
+
},
|
|
82
|
+
});
|
|
59
83
|
|
|
60
84
|
export function handleBookmarkUpdated(
|
|
61
85
|
this: Feed,
|
|
62
86
|
event: EventPayload<'feeds.bookmark.updated'>,
|
|
63
87
|
) {
|
|
64
|
-
const
|
|
88
|
+
const {
|
|
89
|
+
activities: currentActivities,
|
|
90
|
+
pinned_activities: currentPinnedActivities,
|
|
91
|
+
} = this.currentState;
|
|
65
92
|
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
66
|
-
const
|
|
93
|
+
const eventBelongsToCurrentUser =
|
|
94
|
+
event.bookmark.user.id === connectedUser?.id;
|
|
95
|
+
|
|
96
|
+
const [result1, result2] = [
|
|
97
|
+
updateBookmarkInActivities(
|
|
98
|
+
event,
|
|
99
|
+
currentActivities,
|
|
100
|
+
eventBelongsToCurrentUser,
|
|
101
|
+
),
|
|
102
|
+
updateBookmarkInPinnedActivities(
|
|
103
|
+
event,
|
|
104
|
+
currentPinnedActivities,
|
|
105
|
+
eventBelongsToCurrentUser,
|
|
106
|
+
),
|
|
107
|
+
];
|
|
67
108
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (result.changed) {
|
|
74
|
-
this.state.partialNext({ activities: result.activities });
|
|
109
|
+
if (result1.changed || result2.changed) {
|
|
110
|
+
this.state.partialNext({
|
|
111
|
+
activities: result1.entities,
|
|
112
|
+
pinned_activities: result2.entities,
|
|
113
|
+
});
|
|
75
114
|
}
|
|
76
115
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FeedResponse,
|
|
3
|
+
FollowResponse,
|
|
4
|
+
UserResponse,
|
|
5
|
+
} from '../../../gen/models';
|
|
2
6
|
import { generateFollowResponse } from '../../../test-utils';
|
|
3
7
|
import { updateStateFollowCreated } from './handle-follow-created';
|
|
4
8
|
|
|
@@ -44,7 +48,7 @@ describe('handle-follow-created', () => {
|
|
|
44
48
|
source_feed: {
|
|
45
49
|
...mockFeed,
|
|
46
50
|
id: 'feed-x',
|
|
47
|
-
|
|
51
|
+
feed: 'user:feed-x',
|
|
48
52
|
created_by: {
|
|
49
53
|
...mockUser,
|
|
50
54
|
id: 'user-x',
|
|
@@ -54,7 +58,7 @@ describe('handle-follow-created', () => {
|
|
|
54
58
|
target_feed: {
|
|
55
59
|
...mockFeed,
|
|
56
60
|
id: 'other-feed',
|
|
57
|
-
|
|
61
|
+
feed: 'user:other-feed',
|
|
58
62
|
created_by: mockUser,
|
|
59
63
|
},
|
|
60
64
|
};
|
|
@@ -86,7 +90,7 @@ describe('handle-follow-created', () => {
|
|
|
86
90
|
source_feed: {
|
|
87
91
|
...mockFeed,
|
|
88
92
|
id: 'other-feed',
|
|
89
|
-
|
|
93
|
+
feed: 'user:other-feed',
|
|
90
94
|
created_by: {
|
|
91
95
|
...mockUser,
|
|
92
96
|
id: 'other-user',
|
|
@@ -95,7 +99,7 @@ describe('handle-follow-created', () => {
|
|
|
95
99
|
target_feed: {
|
|
96
100
|
...mockFeed,
|
|
97
101
|
id: 'feed-1',
|
|
98
|
-
|
|
102
|
+
feed: 'user:feed-1',
|
|
99
103
|
created_by: mockUser,
|
|
100
104
|
follower_count: 1,
|
|
101
105
|
},
|
|
@@ -128,13 +132,13 @@ describe('handle-follow-created', () => {
|
|
|
128
132
|
source_feed: {
|
|
129
133
|
...mockFeed,
|
|
130
134
|
id: 'feed-1',
|
|
131
|
-
|
|
135
|
+
feed: 'user:feed-1',
|
|
132
136
|
created_by: { ...mockUser, id: 'user-1' },
|
|
133
137
|
},
|
|
134
138
|
target_feed: {
|
|
135
139
|
...mockFeed,
|
|
136
140
|
id: 'feed-x',
|
|
137
|
-
|
|
141
|
+
feed: 'user:feed-x',
|
|
138
142
|
created_by: {
|
|
139
143
|
...mockUser,
|
|
140
144
|
id: 'user-x',
|
|
@@ -166,13 +170,13 @@ describe('handle-follow-created', () => {
|
|
|
166
170
|
source_feed: {
|
|
167
171
|
...mockFeed,
|
|
168
172
|
id: 'other-feed',
|
|
169
|
-
|
|
173
|
+
feed: 'user:other-feed',
|
|
170
174
|
created_by: mockUser,
|
|
171
175
|
},
|
|
172
176
|
target_feed: {
|
|
173
177
|
...mockFeed,
|
|
174
178
|
id: 'feed-1',
|
|
175
|
-
|
|
179
|
+
feed: 'user:feed-1',
|
|
176
180
|
created_by: mockUser,
|
|
177
181
|
},
|
|
178
182
|
};
|
|
@@ -202,7 +206,7 @@ describe('handle-follow-created', () => {
|
|
|
202
206
|
source_feed: {
|
|
203
207
|
...mockFeed,
|
|
204
208
|
id: 'existing-feed',
|
|
205
|
-
|
|
209
|
+
feed: 'user:existing-feed',
|
|
206
210
|
created_by: mockUser,
|
|
207
211
|
},
|
|
208
212
|
};
|
|
@@ -212,13 +216,13 @@ describe('handle-follow-created', () => {
|
|
|
212
216
|
source_feed: {
|
|
213
217
|
...mockFeed,
|
|
214
218
|
id: 'other-feed',
|
|
215
|
-
|
|
219
|
+
feed: 'user:other-feed',
|
|
216
220
|
created_by: mockUser,
|
|
217
221
|
},
|
|
218
222
|
target_feed: {
|
|
219
223
|
...mockFeed,
|
|
220
224
|
id: 'feed-1',
|
|
221
|
-
|
|
225
|
+
feed: 'user:feed-1',
|
|
222
226
|
created_by: mockUser,
|
|
223
227
|
},
|
|
224
228
|
};
|
|
@@ -5,10 +5,7 @@ import type {
|
|
|
5
5
|
PartializeAllBut,
|
|
6
6
|
UpdateStateResult,
|
|
7
7
|
} from '../../../types-internal';
|
|
8
|
-
import {
|
|
9
|
-
getStateUpdateQueueId,
|
|
10
|
-
shouldUpdateState,
|
|
11
|
-
} from '../../../utils';
|
|
8
|
+
import { getStateUpdateQueueId, shouldUpdateState } from '../../../utils';
|
|
12
9
|
|
|
13
10
|
export const updateStateFollowCreated = (
|
|
14
11
|
follow: FollowResponse,
|
|
@@ -24,7 +21,7 @@ export const updateStateFollowCreated = (
|
|
|
24
21
|
let newState: FeedState = { ...currentState };
|
|
25
22
|
|
|
26
23
|
// this feed followed someone
|
|
27
|
-
if (follow.source_feed.
|
|
24
|
+
if (follow.source_feed.feed === currentFeedId) {
|
|
28
25
|
newState = {
|
|
29
26
|
...newState,
|
|
30
27
|
// Update FeedResponse fields, that has the new follower/following count
|
|
@@ -37,7 +34,7 @@ export const updateStateFollowCreated = (
|
|
|
37
34
|
}
|
|
38
35
|
} else if (
|
|
39
36
|
// someone followed this feed
|
|
40
|
-
follow.target_feed.
|
|
37
|
+
follow.target_feed.feed === currentFeedId
|
|
41
38
|
) {
|
|
42
39
|
const source = follow.source_feed;
|
|
43
40
|
|
|
@@ -84,7 +81,7 @@ export function handleFollowCreated(
|
|
|
84
81
|
const result = updateStateFollowCreated(
|
|
85
82
|
follow,
|
|
86
83
|
this.currentState,
|
|
87
|
-
this.
|
|
84
|
+
this.feed,
|
|
88
85
|
connectedUser?.id,
|
|
89
86
|
);
|
|
90
87
|
if (result.changed) {
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FollowResponse,
|
|
3
|
+
FeedResponse,
|
|
4
|
+
UserResponse,
|
|
5
|
+
} from '../../../gen/models';
|
|
2
6
|
import { generateFollowResponse } from '../../../test-utils';
|
|
3
7
|
import { updateStateFollowDeleted } from './handle-follow-deleted';
|
|
4
8
|
|
|
@@ -22,13 +26,13 @@ describe('handle-follow-deleted', () => {
|
|
|
22
26
|
source_feed: {
|
|
23
27
|
...mockFeed,
|
|
24
28
|
id: 'feed-1',
|
|
25
|
-
|
|
29
|
+
feed: 'user:feed-1',
|
|
26
30
|
created_by: mockUser,
|
|
27
31
|
},
|
|
28
32
|
target_feed: {
|
|
29
33
|
...mockFeed,
|
|
30
34
|
id: 'other-feed',
|
|
31
|
-
|
|
35
|
+
feed: 'user:other-feed',
|
|
32
36
|
created_by: mockUser,
|
|
33
37
|
},
|
|
34
38
|
};
|
|
@@ -59,7 +63,7 @@ describe('handle-follow-deleted', () => {
|
|
|
59
63
|
source_feed: {
|
|
60
64
|
...mockFeed,
|
|
61
65
|
id: 'other-feed',
|
|
62
|
-
|
|
66
|
+
feed: 'user:other-feed',
|
|
63
67
|
created_by: {
|
|
64
68
|
...mockUser,
|
|
65
69
|
id: 'other-user',
|
|
@@ -68,7 +72,7 @@ describe('handle-follow-deleted', () => {
|
|
|
68
72
|
target_feed: {
|
|
69
73
|
...mockFeed,
|
|
70
74
|
id: 'feed-1',
|
|
71
|
-
|
|
75
|
+
feed: 'user:feed-1',
|
|
72
76
|
created_by: mockUser,
|
|
73
77
|
},
|
|
74
78
|
};
|
|
@@ -101,13 +105,13 @@ describe('handle-follow-deleted', () => {
|
|
|
101
105
|
source_feed: {
|
|
102
106
|
...mockFeed,
|
|
103
107
|
id: 'other-feed',
|
|
104
|
-
|
|
108
|
+
feed: 'user:other-feed',
|
|
105
109
|
created_by: { ...mockUser, id: 'user-1' },
|
|
106
110
|
},
|
|
107
111
|
target_feed: {
|
|
108
112
|
...mockFeed,
|
|
109
113
|
id: 'feed-1',
|
|
110
|
-
|
|
114
|
+
feed: 'user:feed-1',
|
|
111
115
|
created_by: mockUser,
|
|
112
116
|
},
|
|
113
117
|
};
|
|
@@ -139,13 +143,13 @@ describe('handle-follow-deleted', () => {
|
|
|
139
143
|
source_feed: {
|
|
140
144
|
...mockFeed,
|
|
141
145
|
id: 'other-feed',
|
|
142
|
-
|
|
146
|
+
feed: 'user:other-feed',
|
|
143
147
|
created_by: { ...mockUser, id: 'other-user' },
|
|
144
148
|
},
|
|
145
149
|
target_feed: {
|
|
146
150
|
...mockFeed,
|
|
147
151
|
id: 'feed-1',
|
|
148
|
-
|
|
152
|
+
feed: 'user:feed-1',
|
|
149
153
|
created_by: mockUser,
|
|
150
154
|
},
|
|
151
155
|
};
|
|
@@ -176,13 +180,13 @@ describe('handle-follow-deleted', () => {
|
|
|
176
180
|
source_feed: {
|
|
177
181
|
...mockFeed,
|
|
178
182
|
id: 'other-feed',
|
|
179
|
-
|
|
183
|
+
feed: 'user:other-feed',
|
|
180
184
|
created_by: mockUser,
|
|
181
185
|
},
|
|
182
186
|
target_feed: {
|
|
183
187
|
...mockFeed,
|
|
184
188
|
id: 'feed-1',
|
|
185
|
-
|
|
189
|
+
feed: 'user:feed-1',
|
|
186
190
|
created_by: mockUser,
|
|
187
191
|
},
|
|
188
192
|
};
|
|
@@ -214,13 +218,13 @@ describe('handle-follow-deleted', () => {
|
|
|
214
218
|
source_feed: {
|
|
215
219
|
...mockFeed,
|
|
216
220
|
id: 'feed-1',
|
|
217
|
-
|
|
221
|
+
feed: 'user:feed-1',
|
|
218
222
|
created_by: mockUser,
|
|
219
223
|
},
|
|
220
224
|
target_feed: {
|
|
221
225
|
...mockFeed,
|
|
222
226
|
id: 'target-to-remove',
|
|
223
|
-
|
|
227
|
+
feed: 'user:target-to-remove',
|
|
224
228
|
created_by: mockUser,
|
|
225
229
|
},
|
|
226
230
|
};
|
|
@@ -230,13 +234,13 @@ describe('handle-follow-deleted', () => {
|
|
|
230
234
|
source_feed: {
|
|
231
235
|
...mockFeed,
|
|
232
236
|
id: 'feed-1',
|
|
233
|
-
|
|
237
|
+
feed: 'user:feed-1',
|
|
234
238
|
created_by: mockUser,
|
|
235
239
|
},
|
|
236
240
|
target_feed: {
|
|
237
241
|
...mockFeed,
|
|
238
242
|
id: 'target-to-keep',
|
|
239
|
-
|
|
243
|
+
feed: 'user:target-to-keep',
|
|
240
244
|
created_by: mockUser,
|
|
241
245
|
},
|
|
242
246
|
};
|
|
@@ -17,7 +17,7 @@ export const updateStateFollowDeleted = (
|
|
|
17
17
|
let newState: FeedState = { ...currentState };
|
|
18
18
|
|
|
19
19
|
// this feed unfollowed someone
|
|
20
|
-
if (follow.source_feed.
|
|
20
|
+
if (follow.source_feed.feed === currentFeedId) {
|
|
21
21
|
newState = {
|
|
22
22
|
...newState,
|
|
23
23
|
// Update FeedResponse fields, that has the new follower/following count
|
|
@@ -27,12 +27,12 @@ export const updateStateFollowDeleted = (
|
|
|
27
27
|
// Only update if following array already exists
|
|
28
28
|
if (currentState.following !== undefined) {
|
|
29
29
|
newState.following = currentState.following.filter(
|
|
30
|
-
(followItem) => followItem.target_feed.
|
|
30
|
+
(followItem) => followItem.target_feed.feed !== follow.target_feed.feed,
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
} else if (
|
|
34
34
|
// someone unfollowed this feed
|
|
35
|
-
follow.target_feed.
|
|
35
|
+
follow.target_feed.feed === currentFeedId
|
|
36
36
|
) {
|
|
37
37
|
const source = follow.source_feed;
|
|
38
38
|
|
|
@@ -47,14 +47,14 @@ export const updateStateFollowDeleted = (
|
|
|
47
47
|
currentState.own_follows !== undefined
|
|
48
48
|
) {
|
|
49
49
|
newState.own_follows = currentState.own_follows.filter(
|
|
50
|
-
(followItem) => followItem.source_feed.
|
|
50
|
+
(followItem) => followItem.source_feed.feed !== follow.source_feed.feed,
|
|
51
51
|
);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
// Only update if followers array already exists
|
|
55
55
|
if (currentState.followers !== undefined) {
|
|
56
56
|
newState.followers = currentState.followers.filter(
|
|
57
|
-
(followItem) => followItem.source_feed.
|
|
57
|
+
(followItem) => followItem.source_feed.feed !== follow.source_feed.feed,
|
|
58
58
|
);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -85,7 +85,7 @@ export function handleFollowDeleted(
|
|
|
85
85
|
const result = updateStateFollowDeleted(
|
|
86
86
|
follow,
|
|
87
87
|
this.currentState,
|
|
88
|
-
this.
|
|
88
|
+
this.feed,
|
|
89
89
|
connectedUser?.id,
|
|
90
90
|
);
|
|
91
91
|
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import type { Feed, FeedState } from '../../../feed';
|
|
2
|
-
import {
|
|
3
|
-
getStateUpdateQueueId,
|
|
4
|
-
shouldUpdateState,
|
|
5
|
-
} from '../../../utils';
|
|
2
|
+
import { getStateUpdateQueueId, shouldUpdateState } from '../../../utils';
|
|
6
3
|
import { EventPayload, PartializeAllBut } from '../../../types-internal';
|
|
7
4
|
|
|
8
5
|
export function handleFollowUpdated(
|
|
@@ -14,7 +11,7 @@ export function handleFollowUpdated(
|
|
|
14
11
|
) {
|
|
15
12
|
const follow = eventOrResponse.follow;
|
|
16
13
|
const connectedUserId = this.client.state.getLatestValue().connected_user?.id;
|
|
17
|
-
const currentFeedId = this.
|
|
14
|
+
const currentFeedId = this.feed;
|
|
18
15
|
|
|
19
16
|
if (
|
|
20
17
|
!shouldUpdateState({
|
|
@@ -30,7 +27,7 @@ export function handleFollowUpdated(
|
|
|
30
27
|
let newState: FeedState | undefined;
|
|
31
28
|
|
|
32
29
|
// this feed followed someone
|
|
33
|
-
if (follow.source_feed.
|
|
30
|
+
if (follow.source_feed.feed === currentFeedId) {
|
|
34
31
|
newState ??= {
|
|
35
32
|
...currentState,
|
|
36
33
|
// Update FeedResponse fields, that has the new follower/following count
|
|
@@ -39,7 +36,7 @@ export function handleFollowUpdated(
|
|
|
39
36
|
|
|
40
37
|
const index =
|
|
41
38
|
currentState.following?.findIndex(
|
|
42
|
-
(f) => f.target_feed.
|
|
39
|
+
(f) => f.target_feed.feed === follow.target_feed.feed,
|
|
43
40
|
) ?? -1;
|
|
44
41
|
|
|
45
42
|
if (index >= 0) {
|
|
@@ -48,7 +45,7 @@ export function handleFollowUpdated(
|
|
|
48
45
|
}
|
|
49
46
|
} else if (
|
|
50
47
|
// someone followed this feed
|
|
51
|
-
follow.target_feed.
|
|
48
|
+
follow.target_feed.feed === currentFeedId
|
|
52
49
|
) {
|
|
53
50
|
const source = follow.source_feed;
|
|
54
51
|
|
|
@@ -63,7 +60,7 @@ export function handleFollowUpdated(
|
|
|
63
60
|
currentState.own_follows
|
|
64
61
|
) {
|
|
65
62
|
const index = currentState.own_follows.findIndex(
|
|
66
|
-
(f) => f.source_feed.
|
|
63
|
+
(f) => f.source_feed.feed === follow.source_feed.feed,
|
|
67
64
|
);
|
|
68
65
|
|
|
69
66
|
if (index >= 0) {
|
|
@@ -74,7 +71,7 @@ export function handleFollowUpdated(
|
|
|
74
71
|
|
|
75
72
|
const index =
|
|
76
73
|
currentState.followers?.findIndex(
|
|
77
|
-
(f) => f.source_feed.
|
|
74
|
+
(f) => f.source_feed.feed === follow.source_feed.feed,
|
|
78
75
|
) ?? -1;
|
|
79
76
|
|
|
80
77
|
if (index >= 0) {
|