@stream-io/feeds-client 0.2.0 → 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 +8 -0
- package/dist/index-react-bindings.browser.cjs +365 -207
- package/dist/index-react-bindings.browser.cjs.map +1 -1
- package/dist/index-react-bindings.browser.js +365 -207
- package/dist/index-react-bindings.browser.js.map +1 -1
- package/dist/index-react-bindings.node.cjs +365 -207
- package/dist/index-react-bindings.node.cjs.map +1 -1
- package/dist/index-react-bindings.node.js +365 -207
- package/dist/index-react-bindings.node.js.map +1 -1
- package/dist/index.browser.cjs +366 -207
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +366 -208
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +366 -207
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +366 -208
- 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/gen/models/index.d.ts +36 -1
- 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/package.json +1 -1
- 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/gen/model-decoders/decoders.ts +13 -0
- package/src/gen/models/index.ts +73 -2
- package/src/gen/moderation/ModerationApi.ts +1 -0
- package/src/test-utils/response-generators.ts +260 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/update-entity-in-array.ts +51 -0
package/dist/index.node.cjs
CHANGED
|
@@ -340,6 +340,7 @@ decoders.Channel = (input) => {
|
|
|
340
340
|
updated_at: { type: 'DatetimeType', isSingle: true },
|
|
341
341
|
deleted_at: { type: 'DatetimeType', isSingle: true },
|
|
342
342
|
last_message_at: { type: 'DatetimeType', isSingle: true },
|
|
343
|
+
message_count_updated_at: { type: 'DatetimeType', isSingle: true },
|
|
343
344
|
active_live_locations: { type: 'SharedLocation', isSingle: false },
|
|
344
345
|
invites: { type: 'ChannelMember', isSingle: false },
|
|
345
346
|
members: { type: 'ChannelMember', isSingle: false },
|
|
@@ -617,6 +618,7 @@ decoders.FeedMemberResponse = (input) => {
|
|
|
617
618
|
user: { type: 'UserResponse', isSingle: true },
|
|
618
619
|
invite_accepted_at: { type: 'DatetimeType', isSingle: true },
|
|
619
620
|
invite_rejected_at: { type: 'DatetimeType', isSingle: true },
|
|
621
|
+
membership_level: { type: 'MembershipLevelResponse', isSingle: true },
|
|
620
622
|
};
|
|
621
623
|
return decode(typeMappings, input);
|
|
622
624
|
};
|
|
@@ -789,6 +791,13 @@ decoders.ListDevicesResponse = (input) => {
|
|
|
789
791
|
};
|
|
790
792
|
return decode(typeMappings, input);
|
|
791
793
|
};
|
|
794
|
+
decoders.MembershipLevelResponse = (input) => {
|
|
795
|
+
const typeMappings = {
|
|
796
|
+
created_at: { type: 'DatetimeType', isSingle: true },
|
|
797
|
+
updated_at: { type: 'DatetimeType', isSingle: true },
|
|
798
|
+
};
|
|
799
|
+
return decode(typeMappings, input);
|
|
800
|
+
};
|
|
792
801
|
decoders.Message = (input) => {
|
|
793
802
|
const typeMappings = {
|
|
794
803
|
created_at: { type: 'DatetimeType', isSingle: true },
|
|
@@ -3820,6 +3829,7 @@ class ModerationApi {
|
|
|
3820
3829
|
block_list_config: request?.block_list_config,
|
|
3821
3830
|
bodyguard_config: request?.bodyguard_config,
|
|
3822
3831
|
google_vision_config: request?.google_vision_config,
|
|
3832
|
+
llm_config: request?.llm_config,
|
|
3823
3833
|
rule_builder_config: request?.rule_builder_config,
|
|
3824
3834
|
velocity_filter_config: request?.velocity_filter_config,
|
|
3825
3835
|
video_call_rule_config: request?.video_call_rule_config,
|
|
@@ -4303,6 +4313,23 @@ function getStateUpdateQueueId(data, prefix) {
|
|
|
4303
4313
|
throw new Error(`Cannot create state update queueId for data: ${JSON.stringify(data)}`);
|
|
4304
4314
|
}
|
|
4305
4315
|
|
|
4316
|
+
function updateEntityInArray({ matcher, updater, entities, }) {
|
|
4317
|
+
if (!entities || !entities.length) {
|
|
4318
|
+
return { changed: false, entities };
|
|
4319
|
+
}
|
|
4320
|
+
const index = entities.findIndex(matcher);
|
|
4321
|
+
if (index === -1) {
|
|
4322
|
+
return { changed: false, entities };
|
|
4323
|
+
}
|
|
4324
|
+
const newEntity = updater(entities[index]);
|
|
4325
|
+
if (newEntity === entities[index]) {
|
|
4326
|
+
return { changed: false, entities };
|
|
4327
|
+
}
|
|
4328
|
+
const updatedEntities = [...entities];
|
|
4329
|
+
updatedEntities[index] = newEntity;
|
|
4330
|
+
return { changed: true, entities: updatedEntities };
|
|
4331
|
+
}
|
|
4332
|
+
|
|
4306
4333
|
const updateStateFollowCreated = (follow, currentState, currentFeedId, connectedUserId) => {
|
|
4307
4334
|
// filter non-accepted follows (the way getOrCreate does by default)
|
|
4308
4335
|
if (follow.status !== 'accepted') {
|
|
@@ -4638,6 +4665,179 @@ function handleFeedMemberRemoved(event) {
|
|
|
4638
4665
|
});
|
|
4639
4666
|
}
|
|
4640
4667
|
|
|
4668
|
+
const sharedUpdateActivity$5 = ({ currentActivity, event, eventBelongsToCurrentUser, }) => {
|
|
4669
|
+
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
4670
|
+
if (eventBelongsToCurrentUser) {
|
|
4671
|
+
newOwnBookmarks = [...newOwnBookmarks, event.bookmark];
|
|
4672
|
+
}
|
|
4673
|
+
return {
|
|
4674
|
+
...event.bookmark.activity,
|
|
4675
|
+
own_bookmarks: newOwnBookmarks,
|
|
4676
|
+
own_reactions: currentActivity.own_reactions,
|
|
4677
|
+
};
|
|
4678
|
+
};
|
|
4679
|
+
const addBookmarkToActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4680
|
+
entities: activities,
|
|
4681
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
4682
|
+
updater: (matchedActivity) => sharedUpdateActivity$5({
|
|
4683
|
+
currentActivity: matchedActivity,
|
|
4684
|
+
event,
|
|
4685
|
+
eventBelongsToCurrentUser,
|
|
4686
|
+
}),
|
|
4687
|
+
});
|
|
4688
|
+
const addBookmarkToPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4689
|
+
entities: pinnedActivities,
|
|
4690
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id,
|
|
4691
|
+
updater: (matchedPinnedActivity) => {
|
|
4692
|
+
const newActivity = sharedUpdateActivity$5({
|
|
4693
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
4694
|
+
event,
|
|
4695
|
+
eventBelongsToCurrentUser,
|
|
4696
|
+
});
|
|
4697
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
4698
|
+
return matchedPinnedActivity;
|
|
4699
|
+
}
|
|
4700
|
+
return {
|
|
4701
|
+
...matchedPinnedActivity,
|
|
4702
|
+
activity: newActivity,
|
|
4703
|
+
};
|
|
4704
|
+
},
|
|
4705
|
+
});
|
|
4706
|
+
function handleBookmarkAdded(event) {
|
|
4707
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4708
|
+
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
4709
|
+
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
4710
|
+
const [result1, result2] = [
|
|
4711
|
+
addBookmarkToActivities(event, currentActivities, eventBelongsToCurrentUser),
|
|
4712
|
+
addBookmarkToPinnedActivities(event, currentPinnedActivities, eventBelongsToCurrentUser),
|
|
4713
|
+
];
|
|
4714
|
+
if (result1.changed || result2.changed) {
|
|
4715
|
+
this.state.partialNext({
|
|
4716
|
+
activities: result1.entities,
|
|
4717
|
+
pinned_activities: result2.entities,
|
|
4718
|
+
});
|
|
4719
|
+
}
|
|
4720
|
+
}
|
|
4721
|
+
|
|
4722
|
+
// Helper function to check if two bookmarks are the same
|
|
4723
|
+
// A bookmark is identified by activity_id + folder_id + user_id
|
|
4724
|
+
const isSameBookmark = (bookmark1, bookmark2) => {
|
|
4725
|
+
return (bookmark1.user.id === bookmark2.user.id &&
|
|
4726
|
+
bookmark1.activity.id === bookmark2.activity.id &&
|
|
4727
|
+
bookmark1.folder?.id === bookmark2.folder?.id);
|
|
4728
|
+
};
|
|
4729
|
+
const sharedUpdateActivity$4 = ({ currentActivity, event, eventBelongsToCurrentUser, }) => {
|
|
4730
|
+
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
4731
|
+
if (eventBelongsToCurrentUser) {
|
|
4732
|
+
newOwnBookmarks = currentActivity.own_bookmarks.filter((bookmark) => !isSameBookmark(bookmark, event.bookmark));
|
|
4733
|
+
}
|
|
4734
|
+
return {
|
|
4735
|
+
...event.bookmark.activity,
|
|
4736
|
+
own_bookmarks: newOwnBookmarks,
|
|
4737
|
+
own_reactions: currentActivity.own_reactions,
|
|
4738
|
+
};
|
|
4739
|
+
};
|
|
4740
|
+
const removeBookmarkFromActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4741
|
+
entities: activities,
|
|
4742
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
4743
|
+
updater: (matchedActivity) => sharedUpdateActivity$4({
|
|
4744
|
+
currentActivity: matchedActivity,
|
|
4745
|
+
event,
|
|
4746
|
+
eventBelongsToCurrentUser,
|
|
4747
|
+
}),
|
|
4748
|
+
});
|
|
4749
|
+
const removeBookmarkFromPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4750
|
+
entities: pinnedActivities,
|
|
4751
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id,
|
|
4752
|
+
updater: (matchedPinnedActivity) => {
|
|
4753
|
+
const newActivity = sharedUpdateActivity$4({
|
|
4754
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
4755
|
+
event,
|
|
4756
|
+
eventBelongsToCurrentUser,
|
|
4757
|
+
});
|
|
4758
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
4759
|
+
return matchedPinnedActivity;
|
|
4760
|
+
}
|
|
4761
|
+
return {
|
|
4762
|
+
...matchedPinnedActivity,
|
|
4763
|
+
activity: newActivity,
|
|
4764
|
+
};
|
|
4765
|
+
},
|
|
4766
|
+
});
|
|
4767
|
+
function handleBookmarkDeleted(event) {
|
|
4768
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4769
|
+
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
4770
|
+
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
4771
|
+
const [result1, result2] = [
|
|
4772
|
+
removeBookmarkFromActivities(event, currentActivities, eventBelongsToCurrentUser),
|
|
4773
|
+
removeBookmarkFromPinnedActivities(event, currentPinnedActivities, eventBelongsToCurrentUser),
|
|
4774
|
+
];
|
|
4775
|
+
if (result1.changed || result2.changed) {
|
|
4776
|
+
this.state.partialNext({
|
|
4777
|
+
activities: result1.entities,
|
|
4778
|
+
pinned_activities: result2.entities,
|
|
4779
|
+
});
|
|
4780
|
+
}
|
|
4781
|
+
}
|
|
4782
|
+
|
|
4783
|
+
const sharedUpdateActivity$3 = ({ currentActivity, event, eventBelongsToCurrentUser, }) => {
|
|
4784
|
+
let newOwnBookmarks = currentActivity.own_bookmarks;
|
|
4785
|
+
if (eventBelongsToCurrentUser) {
|
|
4786
|
+
const bookmarkIndex = newOwnBookmarks.findIndex((bookmark) => isSameBookmark(bookmark, event.bookmark));
|
|
4787
|
+
if (bookmarkIndex !== -1) {
|
|
4788
|
+
newOwnBookmarks = [...newOwnBookmarks];
|
|
4789
|
+
newOwnBookmarks[bookmarkIndex] = event.bookmark;
|
|
4790
|
+
}
|
|
4791
|
+
}
|
|
4792
|
+
return {
|
|
4793
|
+
...event.bookmark.activity,
|
|
4794
|
+
own_bookmarks: newOwnBookmarks,
|
|
4795
|
+
own_reactions: currentActivity.own_reactions,
|
|
4796
|
+
};
|
|
4797
|
+
};
|
|
4798
|
+
const updateBookmarkInActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4799
|
+
entities: activities,
|
|
4800
|
+
matcher: (activity) => activity.id === event.bookmark.activity.id,
|
|
4801
|
+
updater: (matchedActivity) => sharedUpdateActivity$3({
|
|
4802
|
+
currentActivity: matchedActivity,
|
|
4803
|
+
event,
|
|
4804
|
+
eventBelongsToCurrentUser,
|
|
4805
|
+
}),
|
|
4806
|
+
});
|
|
4807
|
+
const updateBookmarkInPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4808
|
+
entities: pinnedActivities,
|
|
4809
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.bookmark.activity.id,
|
|
4810
|
+
updater: (matchedPinnedActivity) => {
|
|
4811
|
+
const newActivity = sharedUpdateActivity$3({
|
|
4812
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
4813
|
+
event,
|
|
4814
|
+
eventBelongsToCurrentUser,
|
|
4815
|
+
});
|
|
4816
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
4817
|
+
return matchedPinnedActivity;
|
|
4818
|
+
}
|
|
4819
|
+
return {
|
|
4820
|
+
...matchedPinnedActivity,
|
|
4821
|
+
activity: newActivity,
|
|
4822
|
+
};
|
|
4823
|
+
},
|
|
4824
|
+
});
|
|
4825
|
+
function handleBookmarkUpdated(event) {
|
|
4826
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4827
|
+
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
4828
|
+
const eventBelongsToCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
4829
|
+
const [result1, result2] = [
|
|
4830
|
+
updateBookmarkInActivities(event, currentActivities, eventBelongsToCurrentUser),
|
|
4831
|
+
updateBookmarkInPinnedActivities(event, currentPinnedActivities, eventBelongsToCurrentUser),
|
|
4832
|
+
];
|
|
4833
|
+
if (result1.changed || result2.changed) {
|
|
4834
|
+
this.state.partialNext({
|
|
4835
|
+
activities: result1.entities,
|
|
4836
|
+
pinned_activities: result2.entities,
|
|
4837
|
+
});
|
|
4838
|
+
}
|
|
4839
|
+
}
|
|
4840
|
+
|
|
4641
4841
|
const addActivitiesToState = (newActivities, activities, position) => {
|
|
4642
4842
|
let result;
|
|
4643
4843
|
if (activities === undefined) {
|
|
@@ -4682,7 +4882,8 @@ function handleActivityAdded(event) {
|
|
|
4682
4882
|
}
|
|
4683
4883
|
|
|
4684
4884
|
const removeActivityFromState = (activityResponse, activities) => {
|
|
4685
|
-
const index = activities
|
|
4885
|
+
const index = activities?.findIndex((activity) => activity.id === activityResponse.id) ??
|
|
4886
|
+
-1;
|
|
4686
4887
|
if (index !== -1) {
|
|
4687
4888
|
const newActivities = [...activities];
|
|
4688
4889
|
newActivities.splice(index, 1);
|
|
@@ -4692,13 +4893,28 @@ const removeActivityFromState = (activityResponse, activities) => {
|
|
|
4692
4893
|
return { changed: false, activities };
|
|
4693
4894
|
}
|
|
4694
4895
|
};
|
|
4896
|
+
const removePinnedActivityFromState = (activityResponse, pinnedActivities) => {
|
|
4897
|
+
const index = pinnedActivities?.findIndex((pinnedActivity) => pinnedActivity.activity.id === activityResponse.id) ?? -1;
|
|
4898
|
+
if (index !== -1) {
|
|
4899
|
+
const newActivities = [...pinnedActivities];
|
|
4900
|
+
newActivities.splice(index, 1);
|
|
4901
|
+
return { changed: true, activities: newActivities };
|
|
4902
|
+
}
|
|
4903
|
+
else {
|
|
4904
|
+
return { changed: false, pinned_activities: pinnedActivities };
|
|
4905
|
+
}
|
|
4906
|
+
};
|
|
4695
4907
|
function handleActivityDeleted(event) {
|
|
4696
|
-
const currentActivities = this.currentState
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4908
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4909
|
+
const [result1, result2] = [
|
|
4910
|
+
removeActivityFromState(event.activity, currentActivities),
|
|
4911
|
+
removePinnedActivityFromState(event.activity, currentPinnedActivities),
|
|
4912
|
+
];
|
|
4913
|
+
if (result1.changed || result2.changed) {
|
|
4914
|
+
this.state.partialNext({
|
|
4915
|
+
activities: result1.activities,
|
|
4916
|
+
pinned_activities: result2.pinned_activities,
|
|
4917
|
+
});
|
|
4702
4918
|
}
|
|
4703
4919
|
}
|
|
4704
4920
|
|
|
@@ -4712,221 +4928,163 @@ function handleActivityRemovedFromFeed(event) {
|
|
|
4712
4928
|
}
|
|
4713
4929
|
}
|
|
4714
4930
|
|
|
4715
|
-
const
|
|
4716
|
-
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4729
|
-
|
|
4730
|
-
|
|
4931
|
+
const sharedUpdateActivity$2 = ({ currentActivity, event, }) => {
|
|
4932
|
+
return {
|
|
4933
|
+
...event.activity,
|
|
4934
|
+
own_reactions: currentActivity.own_reactions,
|
|
4935
|
+
own_bookmarks: currentActivity.own_bookmarks,
|
|
4936
|
+
};
|
|
4937
|
+
};
|
|
4938
|
+
const updateActivityInState = (event, activities) => updateEntityInArray({
|
|
4939
|
+
entities: activities,
|
|
4940
|
+
matcher: (activity) => activity.id === event.activity.id,
|
|
4941
|
+
updater: (matchedActivity) => sharedUpdateActivity$2({
|
|
4942
|
+
currentActivity: matchedActivity,
|
|
4943
|
+
event,
|
|
4944
|
+
}),
|
|
4945
|
+
});
|
|
4946
|
+
const updatePinnedActivityInState = (event, pinnedActivities) => updateEntityInArray({
|
|
4947
|
+
entities: pinnedActivities,
|
|
4948
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.activity.id,
|
|
4949
|
+
updater: (matchedPinnedActivity) => {
|
|
4950
|
+
const newActivity = sharedUpdateActivity$2({
|
|
4951
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
4952
|
+
event,
|
|
4953
|
+
});
|
|
4954
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
4955
|
+
return matchedPinnedActivity;
|
|
4731
4956
|
}
|
|
4732
|
-
return {
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
}
|
|
4737
|
-
};
|
|
4957
|
+
return {
|
|
4958
|
+
...matchedPinnedActivity,
|
|
4959
|
+
activity: newActivity,
|
|
4960
|
+
};
|
|
4961
|
+
},
|
|
4962
|
+
});
|
|
4738
4963
|
function handleActivityUpdated(event) {
|
|
4739
|
-
const currentActivities = this.currentState
|
|
4740
|
-
|
|
4741
|
-
|
|
4742
|
-
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
|
|
4964
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4965
|
+
const [result1, result2] = [
|
|
4966
|
+
updateActivityInState(event, currentActivities),
|
|
4967
|
+
updatePinnedActivityInState(event, currentPinnedActivities),
|
|
4968
|
+
];
|
|
4969
|
+
if (result1.changed || result2.changed) {
|
|
4970
|
+
this.client.hydratePollCache([event.activity]);
|
|
4971
|
+
this.state.partialNext({
|
|
4972
|
+
activities: result1.entities,
|
|
4973
|
+
pinned_activities: result2.entities,
|
|
4974
|
+
});
|
|
4746
4975
|
}
|
|
4747
4976
|
}
|
|
4748
4977
|
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
if (
|
|
4753
|
-
|
|
4978
|
+
// shared function to update the activity with the new reaction
|
|
4979
|
+
const sharedUpdateActivity$1 = ({ currentActivity, event, eventBelongsToCurrentUser, }) => {
|
|
4980
|
+
let newOwnReactions = currentActivity.own_reactions;
|
|
4981
|
+
if (eventBelongsToCurrentUser) {
|
|
4982
|
+
newOwnReactions = [...currentActivity.own_reactions, event.reaction];
|
|
4754
4983
|
}
|
|
4755
4984
|
return {
|
|
4756
|
-
...activity,
|
|
4757
|
-
own_reactions:
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4985
|
+
...event.activity,
|
|
4986
|
+
own_reactions: newOwnReactions,
|
|
4987
|
+
own_bookmarks: currentActivity.own_bookmarks,
|
|
4988
|
+
};
|
|
4989
|
+
};
|
|
4990
|
+
const addReactionToActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
4991
|
+
entities: activities,
|
|
4992
|
+
matcher: (activity) => activity.id === event.activity.id,
|
|
4993
|
+
updater: (matchedActivity) => sharedUpdateActivity$1({
|
|
4994
|
+
currentActivity: matchedActivity,
|
|
4995
|
+
event,
|
|
4996
|
+
eventBelongsToCurrentUser,
|
|
4997
|
+
}),
|
|
4998
|
+
});
|
|
4999
|
+
const addReactionToPinnedActivities = (event, pinnedActivities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5000
|
+
entities: pinnedActivities,
|
|
5001
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.activity.id,
|
|
5002
|
+
updater: (matchedPinnedActivity) => {
|
|
5003
|
+
const newActivity = sharedUpdateActivity$1({
|
|
5004
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
5005
|
+
event,
|
|
5006
|
+
eventBelongsToCurrentUser,
|
|
5007
|
+
});
|
|
5008
|
+
// this should never happen, but just in case
|
|
5009
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
5010
|
+
return matchedPinnedActivity;
|
|
5011
|
+
}
|
|
5012
|
+
return {
|
|
5013
|
+
...matchedPinnedActivity,
|
|
5014
|
+
activity: newActivity,
|
|
5015
|
+
};
|
|
5016
|
+
},
|
|
5017
|
+
});
|
|
4775
5018
|
function handleActivityReactionAdded(event) {
|
|
4776
|
-
const currentActivities = this.currentState
|
|
4777
|
-
const connectedUser = this.client.state.getLatestValue().connected_user;
|
|
4778
|
-
const isCurrentUser = Boolean(connectedUser && event.reaction.user.id === connectedUser.id);
|
|
4779
|
-
const result = addReactionToActivities(event, currentActivities, isCurrentUser);
|
|
4780
|
-
if (result.changed) {
|
|
4781
|
-
this.state.partialNext({ activities: result.activities });
|
|
4782
|
-
}
|
|
4783
|
-
}
|
|
4784
|
-
|
|
4785
|
-
const removeReactionFromActivity = (event, activity, isCurrentUser) => {
|
|
4786
|
-
// Update own_reactions if the reaction is from the current user
|
|
4787
|
-
const ownReactions = isCurrentUser
|
|
4788
|
-
? (activity.own_reactions || []).filter((r) => !(r.type === event.reaction.type &&
|
|
4789
|
-
r.user.id === event.reaction.user.id))
|
|
4790
|
-
: activity.own_reactions;
|
|
4791
|
-
return {
|
|
4792
|
-
...activity,
|
|
4793
|
-
own_reactions: ownReactions,
|
|
4794
|
-
latest_reactions: event.activity.latest_reactions,
|
|
4795
|
-
reaction_groups: event.activity.reaction_groups,
|
|
4796
|
-
changed: true,
|
|
4797
|
-
};
|
|
4798
|
-
};
|
|
4799
|
-
const removeReactionFromActivities = (event, activities, isCurrentUser) => {
|
|
4800
|
-
if (!activities) {
|
|
4801
|
-
return { changed: false, activities: [] };
|
|
4802
|
-
}
|
|
4803
|
-
const activityIndex = activities.findIndex((a) => a.id === event.activity.id);
|
|
4804
|
-
if (activityIndex === -1) {
|
|
4805
|
-
return { changed: false, activities };
|
|
4806
|
-
}
|
|
4807
|
-
const activity = activities[activityIndex];
|
|
4808
|
-
const updatedActivity = removeReactionFromActivity(event, activity, isCurrentUser);
|
|
4809
|
-
return updateActivityInState(updatedActivity, activities, true);
|
|
4810
|
-
};
|
|
4811
|
-
function handleActivityReactionDeleted(event) {
|
|
4812
|
-
const currentActivities = this.currentState.activities;
|
|
5019
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
4813
5020
|
const connectedUser = this.client.state.getLatestValue().connected_user;
|
|
4814
|
-
const
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4819
|
-
|
|
4820
|
-
|
|
4821
|
-
|
|
4822
|
-
|
|
4823
|
-
|
|
4824
|
-
|
|
4825
|
-
ownBookmarks.push(event.bookmark);
|
|
4826
|
-
}
|
|
4827
|
-
return {
|
|
4828
|
-
...activity,
|
|
4829
|
-
own_bookmarks: ownBookmarks,
|
|
4830
|
-
changed: true,
|
|
4831
|
-
};
|
|
4832
|
-
};
|
|
4833
|
-
const addBookmarkToActivities = (event, activities, isCurrentUser) => {
|
|
4834
|
-
if (!activities) {
|
|
4835
|
-
return { changed: false, activities: [] };
|
|
4836
|
-
}
|
|
4837
|
-
const activityIndex = activities.findIndex((a) => a.id === event.bookmark.activity.id);
|
|
4838
|
-
if (activityIndex === -1) {
|
|
4839
|
-
return { changed: false, activities };
|
|
4840
|
-
}
|
|
4841
|
-
const activity = activities[activityIndex];
|
|
4842
|
-
const updatedActivity = addBookmarkToActivity(event, activity, isCurrentUser);
|
|
4843
|
-
return updateActivityInState(updatedActivity, activities, true);
|
|
4844
|
-
};
|
|
4845
|
-
function handleBookmarkAdded(event) {
|
|
4846
|
-
const currentActivities = this.currentState.activities;
|
|
4847
|
-
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
4848
|
-
const isCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
4849
|
-
const result = addBookmarkToActivities(event, currentActivities, isCurrentUser);
|
|
4850
|
-
if (result.changed) {
|
|
4851
|
-
this.state.partialNext({ activities: result.activities });
|
|
5021
|
+
const eventBelongsToCurrentUser = typeof connectedUser !== 'undefined' &&
|
|
5022
|
+
event.reaction.user.id === connectedUser.id;
|
|
5023
|
+
const [result1, result2] = [
|
|
5024
|
+
addReactionToActivities(event, currentActivities, eventBelongsToCurrentUser),
|
|
5025
|
+
addReactionToPinnedActivities(event, currentPinnedActivities, eventBelongsToCurrentUser),
|
|
5026
|
+
];
|
|
5027
|
+
if (result1.changed || result2.changed) {
|
|
5028
|
+
this.state.partialNext({
|
|
5029
|
+
activities: result1.entities,
|
|
5030
|
+
pinned_activities: result2.entities,
|
|
5031
|
+
});
|
|
4852
5032
|
}
|
|
4853
5033
|
}
|
|
4854
5034
|
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
bookmark1.folder?.id === bookmark2.folder?.id);
|
|
4861
|
-
};
|
|
4862
|
-
const removeBookmarkFromActivities = (event, activities, isCurrentUser) => {
|
|
4863
|
-
if (!activities) {
|
|
4864
|
-
return { changed: false, activities: [] };
|
|
5035
|
+
const sharedUpdateActivity = ({ currentActivity, event, eventBelongsToCurrentUser, }) => {
|
|
5036
|
+
let newOwnReactions = currentActivity.own_reactions;
|
|
5037
|
+
if (eventBelongsToCurrentUser) {
|
|
5038
|
+
newOwnReactions = currentActivity.own_reactions.filter((reaction) => !(reaction.type === event.reaction.type &&
|
|
5039
|
+
reaction.user.id === event.reaction.user.id));
|
|
4865
5040
|
}
|
|
4866
|
-
const activityIndex = activities.findIndex((a) => a.id === event.bookmark.activity.id);
|
|
4867
|
-
if (activityIndex === -1) {
|
|
4868
|
-
return { changed: false, activities };
|
|
4869
|
-
}
|
|
4870
|
-
const activity = activities[activityIndex];
|
|
4871
|
-
const updatedActivity = removeBookmarkFromActivity(event, activity, isCurrentUser);
|
|
4872
|
-
return updateActivityInState(updatedActivity, activities, true);
|
|
4873
|
-
};
|
|
4874
|
-
const removeBookmarkFromActivity = (event, activity, isCurrentUser) => {
|
|
4875
|
-
// Update own_bookmarks if the bookmark is from the current user
|
|
4876
|
-
const ownBookmarks = isCurrentUser
|
|
4877
|
-
? (activity.own_bookmarks || []).filter((bookmark) => !isSameBookmark(bookmark, event.bookmark))
|
|
4878
|
-
: activity.own_bookmarks;
|
|
4879
5041
|
return {
|
|
4880
|
-
...activity,
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
};
|
|
4884
|
-
};
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
}
|
|
4893
|
-
}
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
5042
|
+
...event.activity,
|
|
5043
|
+
own_reactions: newOwnReactions,
|
|
5044
|
+
own_bookmarks: currentActivity.own_bookmarks,
|
|
5045
|
+
};
|
|
5046
|
+
};
|
|
5047
|
+
const removeReactionFromActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5048
|
+
entities: activities,
|
|
5049
|
+
matcher: (activity) => activity.id === event.activity.id,
|
|
5050
|
+
updater: (matchedActivity) => sharedUpdateActivity({
|
|
5051
|
+
currentActivity: matchedActivity,
|
|
5052
|
+
event,
|
|
5053
|
+
eventBelongsToCurrentUser,
|
|
5054
|
+
}),
|
|
5055
|
+
});
|
|
5056
|
+
const removeReactionFromPinnedActivities = (event, activities, eventBelongsToCurrentUser) => updateEntityInArray({
|
|
5057
|
+
entities: activities,
|
|
5058
|
+
matcher: (pinnedActivity) => pinnedActivity.activity.id === event.activity.id,
|
|
5059
|
+
updater: (matchedPinnedActivity) => {
|
|
5060
|
+
const newActivity = sharedUpdateActivity({
|
|
5061
|
+
currentActivity: matchedPinnedActivity.activity,
|
|
5062
|
+
event,
|
|
5063
|
+
eventBelongsToCurrentUser,
|
|
5064
|
+
});
|
|
5065
|
+
if (newActivity === matchedPinnedActivity.activity) {
|
|
5066
|
+
return matchedPinnedActivity;
|
|
4903
5067
|
}
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
const
|
|
4912
|
-
|
|
4913
|
-
|
|
4914
|
-
|
|
4915
|
-
const
|
|
4916
|
-
|
|
4917
|
-
|
|
4918
|
-
|
|
4919
|
-
|
|
4920
|
-
|
|
4921
|
-
|
|
4922
|
-
|
|
4923
|
-
|
|
4924
|
-
const currentActivities = this.currentState.activities;
|
|
4925
|
-
const { connected_user: connectedUser } = this.client.state.getLatestValue();
|
|
4926
|
-
const isCurrentUser = event.bookmark.user.id === connectedUser?.id;
|
|
4927
|
-
const result = updateBookmarkInActivities(event, currentActivities, isCurrentUser);
|
|
4928
|
-
if (result.changed) {
|
|
4929
|
-
this.state.partialNext({ activities: result.activities });
|
|
5068
|
+
return {
|
|
5069
|
+
...matchedPinnedActivity,
|
|
5070
|
+
activity: newActivity,
|
|
5071
|
+
};
|
|
5072
|
+
},
|
|
5073
|
+
});
|
|
5074
|
+
function handleActivityReactionDeleted(event) {
|
|
5075
|
+
const { activities: currentActivities, pinned_activities: currentPinnedActivities, } = this.currentState;
|
|
5076
|
+
const connectedUser = this.client.state.getLatestValue().connected_user;
|
|
5077
|
+
const eventBelongsToCurrentUser = typeof connectedUser !== 'undefined' &&
|
|
5078
|
+
event.reaction.user.id === connectedUser.id;
|
|
5079
|
+
const [result1, result2] = [
|
|
5080
|
+
removeReactionFromActivities(event, currentActivities, eventBelongsToCurrentUser),
|
|
5081
|
+
removeReactionFromPinnedActivities(event, currentPinnedActivities, eventBelongsToCurrentUser),
|
|
5082
|
+
];
|
|
5083
|
+
if (result1.changed || result2.changed) {
|
|
5084
|
+
this.state.partialNext({
|
|
5085
|
+
activities: result1.entities,
|
|
5086
|
+
pinned_activities: result2.entities,
|
|
5087
|
+
});
|
|
4930
5088
|
}
|
|
4931
5089
|
}
|
|
4932
5090
|
|
|
@@ -6238,4 +6396,5 @@ exports.isVideoFile = isVideoFile;
|
|
|
6238
6396
|
exports.isVoteAnswer = isVoteAnswer;
|
|
6239
6397
|
exports.shouldUpdateState = shouldUpdateState;
|
|
6240
6398
|
exports.uniqueArrayMerge = uniqueArrayMerge;
|
|
6399
|
+
exports.updateEntityInArray = updateEntityInArray;
|
|
6241
6400
|
//# sourceMappingURL=index.node.cjs.map
|