Skip to content

Commit 2a06b88

Browse files
MartinCupelaarnautov-anton
authored andcommitted
feat: require Channel instance as the first argument to doSendMessageRequest (#2171)
Avoid forcing integrators to recreate `Channel` instance from CID inside `doSendMessageRequest` and provide it directly as the first argument. BREAKING CHANGE: the first argument to `doSendMessageRequest` is now Channel instance instead of `Channel.cid`
1 parent e8047f2 commit 2a06b88

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
id: minor-breaking-changes-v11
3+
sidebar_position: 4
4+
title: Minor breaking changes 11.0.0
5+
keywords: [migration guide, upgrade, breaking changes, v11]
6+
---
7+
8+
### Channel instance as a first argument to doSendMessageRequest
9+
10+
The `doSendMessageRequest` will from now on be passed the `Channel` instance instead of its CID to avoid forcing the developers to recreate a reference to the `Channel` instance inside the `doSendMessageRequest` function. The developers should adjust their implementation of `doSendMessageRequest` to call directly `await channel.sendMessage(messageData, options)`:
11+
12+
```ts
13+
import { ChannelProps } from 'stream-chat-react';
14+
15+
const doSendMessageRequest: ChannelProps['doSendMessageRequest'] = async (channel, messageData, options) => {
16+
// optional custom logic
17+
await channel.sendMessage(messageData, options);
18+
// optional custom logic
19+
}
20+
```

src/components/Channel/Channel.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ export type ChannelProps<
218218
) => Promise<MessageResponse<StreamChatGenerics>> | void;
219219
/** Custom action handler to override the default `channel.sendMessage` request function (advanced usage only) */
220220
doSendMessageRequest?: (
221-
channelId: string,
221+
channel: StreamChannel<StreamChatGenerics>,
222222
message: Message<StreamChatGenerics>,
223223
options?: SendMessageOptions,
224224
) => ReturnType<StreamChannel<StreamChatGenerics>['sendMessage']> | void;
@@ -771,7 +771,7 @@ const ChannelInner = <
771771
let messageResponse: void | SendMessageAPIResponse<StreamChatGenerics>;
772772

773773
if (doSendMessageRequest) {
774-
messageResponse = await doSendMessageRequest(channel.cid, messageData, options);
774+
messageResponse = await doSendMessageRequest(channel, messageData, options);
775775
} else {
776776
messageResponse = await channel.sendMessage(messageData, options);
777777
}

src/components/Channel/__tests__/Channel.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -994,7 +994,7 @@ describe('Channel', () => {
994994

995995
await waitFor(() =>
996996
expect(doSendMessageRequest).toHaveBeenCalledWith(
997-
channel.cid,
997+
channel,
998998
expect.objectContaining(message),
999999
undefined,
10001000
),

src/components/MessageInput/__tests__/MessageInput.test.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ function axeNoViolations(container) {
646646
await act(() => submit());
647647

648648
expect(submitMock).toHaveBeenCalledWith(
649-
channel.cid,
649+
channel,
650650
expect.objectContaining({
651651
text: messageText,
652652
}),
@@ -697,9 +697,10 @@ function axeNoViolations(container) {
697697
await act(() => submit());
698698

699699
await waitFor(() => {
700-
const calledMock = componentName === 'EditMessageForm' ? editMock : submitMock;
700+
const isEdit = componentName === 'EditMessageForm';
701+
const calledMock = isEdit ? editMock : submitMock;
701702
expect(calledMock).toHaveBeenCalledWith(
702-
expect.stringMatching(/.+:.+/),
703+
isEdit ? channel.cid : channel,
703704
expect.objectContaining(customMessageData),
704705
undefined,
705706
);
@@ -765,7 +766,7 @@ function axeNoViolations(container) {
765766
await act(() => submit());
766767

767768
expect(submitMock).toHaveBeenCalledWith(
768-
channel.cid,
769+
channel,
769770
expect.objectContaining({
770771
attachments: expect.arrayContaining([
771772
expect.objectContaining({
@@ -799,7 +800,7 @@ function axeNoViolations(container) {
799800
await act(() => submit());
800801

801802
expect(submitMock).toHaveBeenCalledWith(
802-
channel.cid,
803+
channel,
803804
expect.objectContaining({
804805
attachments: expect.arrayContaining([
805806
expect.objectContaining({
@@ -835,7 +836,7 @@ function axeNoViolations(container) {
835836
await act(() => submit());
836837

837838
expect(submitMock).toHaveBeenCalledWith(
838-
channel.cid,
839+
channel,
839840
expect.objectContaining({
840841
attachments: expect.arrayContaining([
841842
expect.objectContaining({
@@ -1040,7 +1041,7 @@ function axeNoViolations(container) {
10401041
await act(() => submit());
10411042

10421043
expect(submitMock).toHaveBeenCalledWith(
1043-
channel.cid,
1044+
channel,
10441045
expect.objectContaining({
10451046
mentioned_users: expect.arrayContaining([mentionId]),
10461047
}),

0 commit comments

Comments
 (0)