@stream-io/feeds-client 0.2.12 → 0.2.14
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 +22 -14
- package/dist/cjs/react-bindings.js.map +1 -1
- package/dist/es/index.mjs +3 -2
- package/dist/es/react-bindings.mjs +22 -14
- package/dist/es/react-bindings.mjs.map +1 -1
- package/dist/{index-o7AeSkxa.js → index-B08vVRSZ.js} +159 -9
- package/dist/index-B08vVRSZ.js.map +1 -0
- package/dist/{index-D7QtnkUs.mjs → index-B3HHiF9S.mjs} +159 -9
- package/dist/index-B3HHiF9S.mjs.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts +9 -4
- package/dist/types/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.d.ts.map +1 -1
- package/dist/types/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.d.ts.map +1 -1
- package/dist/types/common/real-time/StableWSConnection.d.ts +3 -3
- package/dist/types/common/real-time/StableWSConnection.d.ts.map +1 -1
- package/dist/types/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.d.ts +24 -0
- package/dist/types/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.d.ts.map +1 -0
- package/dist/types/feed/event-handlers/aggregated-feed/index.d.ts +2 -0
- package/dist/types/feed/event-handlers/aggregated-feed/index.d.ts.map +1 -0
- package/dist/types/feed/event-handlers/index.d.ts +1 -1
- package/dist/types/feed/event-handlers/index.d.ts.map +1 -1
- package/dist/types/feed/feed.d.ts +2 -2
- package/dist/types/feed/feed.d.ts.map +1 -1
- package/dist/types/feeds-client/feeds-client.d.ts +2 -2
- package/dist/types/gen/model-decoders/event-decoder-mapping.d.ts.map +1 -1
- package/dist/types/gen/models/index.d.ts +17 -1
- package/dist/types/gen/models/index.d.ts.map +1 -1
- package/dist/types/utils/unique-array-merge.d.ts +1 -0
- package/dist/types/utils/unique-array-merge.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/bindings/react/hooks/feed-state-hooks/useAggregatedActivities.ts +28 -4
- package/src/bindings/react/hooks/feed-state-hooks/useIsAggregatedActivityRead.ts +4 -5
- package/src/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.test.ts +644 -0
- package/src/feed/event-handlers/aggregated-feed/handle-aggregated-feed-updated.ts +193 -0
- package/src/feed/event-handlers/aggregated-feed/index.ts +1 -0
- package/src/feed/event-handlers/index.ts +1 -1
- package/src/feed/feed.ts +23 -1
- package/src/gen/model-decoders/decoders.ts +14 -0
- package/src/gen/model-decoders/event-decoder-mapping.ts +3 -0
- package/src/gen/models/index.ts +26 -2
- package/src/utils/unique-array-merge.ts +30 -0
- package/dist/index-D7QtnkUs.mjs.map +0 -1
- package/dist/index-o7AeSkxa.js.map +0 -1
- package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts +0 -11
- package/dist/types/feed/event-handlers/notification-feed/handle-notification-feed-updated.d.ts.map +0 -1
- package/dist/types/feed/event-handlers/notification-feed/index.d.ts +0 -2
- package/dist/types/feed/event-handlers/notification-feed/index.d.ts.map +0 -1
- package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.test.ts +0 -120
- package/src/feed/event-handlers/notification-feed/handle-notification-feed-updated.ts +0 -54
- package/src/feed/event-handlers/notification-feed/index.ts +0 -1
|
@@ -1246,6 +1246,17 @@ decoders.SingleFollowResponse = (input) => {
|
|
|
1246
1246
|
};
|
|
1247
1247
|
return decode(typeMappings, input);
|
|
1248
1248
|
};
|
|
1249
|
+
decoders.StoriesFeedUpdatedEvent = (input) => {
|
|
1250
|
+
const typeMappings = {
|
|
1251
|
+
created_at: { type: "DatetimeType", isSingle: true },
|
|
1252
|
+
received_at: { type: "DatetimeType", isSingle: true },
|
|
1253
|
+
aggregated_activities: {
|
|
1254
|
+
type: "AggregatedActivityResponse",
|
|
1255
|
+
isSingle: false
|
|
1256
|
+
}
|
|
1257
|
+
};
|
|
1258
|
+
return decode(typeMappings, input);
|
|
1259
|
+
};
|
|
1249
1260
|
decoders.SubmitActionResponse = (input) => {
|
|
1250
1261
|
const typeMappings = {
|
|
1251
1262
|
item: { type: "ReviewQueueItemResponse", isSingle: true }
|
|
@@ -3693,7 +3704,7 @@ const getRateLimitFromResponseHeader = (response_headers) => {
|
|
|
3693
3704
|
};
|
|
3694
3705
|
return result;
|
|
3695
3706
|
};
|
|
3696
|
-
const version = "0.2.
|
|
3707
|
+
const version = "0.2.14";
|
|
3697
3708
|
class ApiClient {
|
|
3698
3709
|
constructor(apiKey, tokenManager, connectionIdManager, options) {
|
|
3699
3710
|
this.apiKey = apiKey;
|
|
@@ -3904,6 +3915,7 @@ const eventDecoderMapping = {
|
|
|
3904
3915
|
"feeds.poll.vote_casted": (data) => decoders.PollVoteCastedFeedEvent(data),
|
|
3905
3916
|
"feeds.poll.vote_changed": (data) => decoders.PollVoteChangedFeedEvent(data),
|
|
3906
3917
|
"feeds.poll.vote_removed": (data) => decoders.PollVoteRemovedFeedEvent(data),
|
|
3918
|
+
"feeds.stories_feed.updated": (data) => decoders.StoriesFeedUpdatedEvent(data),
|
|
3907
3919
|
"health.check": (data) => decoders.HealthCheckEvent(data),
|
|
3908
3920
|
"moderation.custom_action": (data) => decoders.ModerationCustomActionEvent(data),
|
|
3909
3921
|
"moderation.flagged": (data) => decoders.ModerationFlaggedEvent(data),
|
|
@@ -4432,6 +4444,27 @@ const uniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
|
4432
4444
|
});
|
|
4433
4445
|
return existingArray.concat(filteredArrayToMerge);
|
|
4434
4446
|
};
|
|
4447
|
+
const replaceUniqueArrayMerge = (existingArray, arrayToMerge, getKey) => {
|
|
4448
|
+
const existingMap = /* @__PURE__ */ new Map();
|
|
4449
|
+
(existingArray ?? []).forEach((item) => {
|
|
4450
|
+
existingMap.set(getKey(item), item);
|
|
4451
|
+
});
|
|
4452
|
+
const result = [];
|
|
4453
|
+
arrayToMerge.forEach((item) => {
|
|
4454
|
+
existingMap.set(getKey(item), item);
|
|
4455
|
+
});
|
|
4456
|
+
existingArray.forEach((originalItem) => {
|
|
4457
|
+
const updatedItem = existingMap.get(getKey(originalItem));
|
|
4458
|
+
if (updatedItem) {
|
|
4459
|
+
result.push(updatedItem);
|
|
4460
|
+
existingMap.delete(getKey(originalItem));
|
|
4461
|
+
}
|
|
4462
|
+
});
|
|
4463
|
+
existingMap.forEach((item) => {
|
|
4464
|
+
result.push(item);
|
|
4465
|
+
});
|
|
4466
|
+
return result;
|
|
4467
|
+
};
|
|
4435
4468
|
const Constants = {
|
|
4436
4469
|
DEFAULT_COMMENT_PAGINATION: "first"
|
|
4437
4470
|
};
|
|
@@ -5562,13 +5595,84 @@ function handleActivityMarked(event) {
|
|
|
5562
5595
|
function handleFeedUpdated(event) {
|
|
5563
5596
|
this.state.partialNext({ ...event.feed });
|
|
5564
5597
|
}
|
|
5565
|
-
const
|
|
5598
|
+
const addAggregatedActivitiesToState = (newAggregatedActivities, aggregatedActivities, position) => {
|
|
5599
|
+
let result;
|
|
5600
|
+
if (newAggregatedActivities.length === 0) {
|
|
5601
|
+
result = {
|
|
5602
|
+
changed: false,
|
|
5603
|
+
aggregated_activities: []
|
|
5604
|
+
};
|
|
5605
|
+
} else {
|
|
5606
|
+
result = {
|
|
5607
|
+
changed: true,
|
|
5608
|
+
aggregated_activities: []
|
|
5609
|
+
};
|
|
5610
|
+
}
|
|
5611
|
+
switch (position) {
|
|
5612
|
+
case "start":
|
|
5613
|
+
result.aggregated_activities = uniqueArrayMerge(
|
|
5614
|
+
newAggregatedActivities,
|
|
5615
|
+
aggregatedActivities ?? [],
|
|
5616
|
+
(a) => a.group
|
|
5617
|
+
);
|
|
5618
|
+
break;
|
|
5619
|
+
case "end":
|
|
5620
|
+
result.aggregated_activities = uniqueArrayMerge(
|
|
5621
|
+
aggregatedActivities ?? [],
|
|
5622
|
+
newAggregatedActivities,
|
|
5623
|
+
(a) => a.group
|
|
5624
|
+
);
|
|
5625
|
+
break;
|
|
5626
|
+
case "replace":
|
|
5627
|
+
result.aggregated_activities = replaceUniqueArrayMerge(
|
|
5628
|
+
aggregatedActivities ?? [],
|
|
5629
|
+
newAggregatedActivities,
|
|
5630
|
+
(a) => a.group
|
|
5631
|
+
);
|
|
5632
|
+
break;
|
|
5633
|
+
}
|
|
5634
|
+
return result;
|
|
5635
|
+
};
|
|
5636
|
+
const updateNotificationStatus = (newNotificationStatus, currentNotificationStatus) => {
|
|
5637
|
+
if (!newNotificationStatus && !currentNotificationStatus) {
|
|
5638
|
+
return {
|
|
5639
|
+
changed: false,
|
|
5640
|
+
notification_status: void 0
|
|
5641
|
+
};
|
|
5642
|
+
} else if (!newNotificationStatus) {
|
|
5643
|
+
return {
|
|
5644
|
+
changed: false,
|
|
5645
|
+
notification_status: currentNotificationStatus
|
|
5646
|
+
};
|
|
5647
|
+
} else {
|
|
5648
|
+
return {
|
|
5649
|
+
changed: true,
|
|
5650
|
+
notification_status: {
|
|
5651
|
+
...newNotificationStatus
|
|
5652
|
+
}
|
|
5653
|
+
};
|
|
5654
|
+
}
|
|
5655
|
+
};
|
|
5656
|
+
const updateNotificationFeedFromEvent = (event, currentAggregatedActivities, currentNotificationStatus) => {
|
|
5566
5657
|
const updates = {};
|
|
5567
|
-
if (event.notification_status) {
|
|
5568
|
-
|
|
5658
|
+
if (event.notification_status && currentNotificationStatus) {
|
|
5659
|
+
const notificationStatusResult = updateNotificationStatus(
|
|
5660
|
+
event.notification_status,
|
|
5661
|
+
currentNotificationStatus
|
|
5662
|
+
);
|
|
5663
|
+
if (notificationStatusResult.changed) {
|
|
5664
|
+
updates.notification_status = notificationStatusResult.notification_status;
|
|
5665
|
+
}
|
|
5569
5666
|
}
|
|
5570
|
-
if (event.aggregated_activities) {
|
|
5571
|
-
|
|
5667
|
+
if (event.aggregated_activities && currentAggregatedActivities) {
|
|
5668
|
+
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
5669
|
+
event.aggregated_activities,
|
|
5670
|
+
currentAggregatedActivities,
|
|
5671
|
+
"start"
|
|
5672
|
+
);
|
|
5673
|
+
if (aggregatedActivitiesResult.changed) {
|
|
5674
|
+
updates.aggregated_activities = aggregatedActivitiesResult.aggregated_activities;
|
|
5675
|
+
}
|
|
5572
5676
|
}
|
|
5573
5677
|
if (Object.keys(updates).length > 0) {
|
|
5574
5678
|
return {
|
|
@@ -5581,7 +5685,11 @@ const updateNotificationFeedFromEvent = (event) => {
|
|
|
5581
5685
|
};
|
|
5582
5686
|
};
|
|
5583
5687
|
function handleNotificationFeedUpdated(event) {
|
|
5584
|
-
const result = updateNotificationFeedFromEvent(
|
|
5688
|
+
const result = updateNotificationFeedFromEvent(
|
|
5689
|
+
event,
|
|
5690
|
+
this.currentState.aggregated_activities,
|
|
5691
|
+
this.currentState.notification_status
|
|
5692
|
+
);
|
|
5585
5693
|
if (result.changed) {
|
|
5586
5694
|
this.state.partialNext({
|
|
5587
5695
|
notification_status: result.data?.notification_status,
|
|
@@ -5589,6 +5697,35 @@ function handleNotificationFeedUpdated(event) {
|
|
|
5589
5697
|
});
|
|
5590
5698
|
}
|
|
5591
5699
|
}
|
|
5700
|
+
function updateStoriesFeedFromEvent(aggregatedActivities, event) {
|
|
5701
|
+
if (!aggregatedActivities) {
|
|
5702
|
+
return {
|
|
5703
|
+
changed: false
|
|
5704
|
+
};
|
|
5705
|
+
}
|
|
5706
|
+
if (event.aggregated_activities) {
|
|
5707
|
+
const result = addAggregatedActivitiesToState(
|
|
5708
|
+
event.aggregated_activities,
|
|
5709
|
+
aggregatedActivities,
|
|
5710
|
+
"replace"
|
|
5711
|
+
);
|
|
5712
|
+
return result;
|
|
5713
|
+
}
|
|
5714
|
+
return {
|
|
5715
|
+
changed: false
|
|
5716
|
+
};
|
|
5717
|
+
}
|
|
5718
|
+
function handleStoriesFeedUpdated(event) {
|
|
5719
|
+
const result = updateStoriesFeedFromEvent(
|
|
5720
|
+
this.currentState.aggregated_activities,
|
|
5721
|
+
event
|
|
5722
|
+
);
|
|
5723
|
+
if (result.changed) {
|
|
5724
|
+
this.state.partialNext({
|
|
5725
|
+
aggregated_activities: result.data?.aggregated_activities
|
|
5726
|
+
});
|
|
5727
|
+
}
|
|
5728
|
+
}
|
|
5592
5729
|
function handleWatchStarted() {
|
|
5593
5730
|
this.state.partialNext({ watch: true });
|
|
5594
5731
|
}
|
|
@@ -5631,6 +5768,7 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
5631
5768
|
"feeds.feed_member.removed": handleFeedMemberRemoved.bind(this),
|
|
5632
5769
|
"feeds.feed_member.updated": handleFeedMemberUpdated.bind(this),
|
|
5633
5770
|
"feeds.notification_feed.updated": handleNotificationFeedUpdated.bind(this),
|
|
5771
|
+
"feeds.stories_feed.updated": handleStoriesFeedUpdated.bind(this),
|
|
5634
5772
|
// the poll events should be removed from here
|
|
5635
5773
|
"feeds.poll.closed": _Feed.noop,
|
|
5636
5774
|
"feeds.poll.deleted": _Feed.noop,
|
|
@@ -5710,9 +5848,20 @@ const _Feed = class _Feed extends FeedApi {
|
|
|
5710
5848
|
currentActivities,
|
|
5711
5849
|
"end"
|
|
5712
5850
|
);
|
|
5713
|
-
|
|
5851
|
+
const aggregatedActivitiesResult = addAggregatedActivitiesToState(
|
|
5852
|
+
response.aggregated_activities,
|
|
5853
|
+
this.currentState.aggregated_activities,
|
|
5854
|
+
"end"
|
|
5855
|
+
);
|
|
5856
|
+
const notificationStatusResult = updateNotificationStatus(
|
|
5857
|
+
response.notification_status,
|
|
5858
|
+
this.currentState.notification_status
|
|
5859
|
+
);
|
|
5860
|
+
if (result.changed || aggregatedActivitiesResult.changed || notificationStatusResult.changed) {
|
|
5714
5861
|
this.state.partialNext({
|
|
5715
5862
|
activities: result.activities,
|
|
5863
|
+
aggregated_activities: aggregatedActivitiesResult.aggregated_activities,
|
|
5864
|
+
notification_status: notificationStatusResult.notification_status,
|
|
5716
5865
|
next: response.next,
|
|
5717
5866
|
prev: response.prev
|
|
5718
5867
|
});
|
|
@@ -6690,7 +6839,8 @@ export {
|
|
|
6690
6839
|
configureLoggers as o,
|
|
6691
6840
|
getLogger as p,
|
|
6692
6841
|
ensureExhausted as q,
|
|
6842
|
+
replaceUniqueArrayMerge as r,
|
|
6693
6843
|
shouldUpdateState as s,
|
|
6694
6844
|
uniqueArrayMerge as u
|
|
6695
6845
|
};
|
|
6696
|
-
//# sourceMappingURL=index-
|
|
6846
|
+
//# sourceMappingURL=index-B3HHiF9S.mjs.map
|