Skip to content

Commit fa5e2b6

Browse files
author
jaapbakker88
authored
Merge pull request #118 from mahboubii/feature/override-do-send-message-request
Feature/override do send message request
2 parents 9f57d44 + 7227c19 commit fa5e2b6

File tree

4 files changed

+52
-7
lines changed

4 files changed

+52
-7
lines changed

src/components/Channel.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ const Channel = withChatContext(
7575
* Available built-in component (also accepts the same props as): [Attachment](https://getstream.github.io/stream-chat-react-native/#attachment)
7676
* */
7777
Attachment: PropTypes.oneOfType([PropTypes.node, PropTypes.elementType]),
78+
/**
79+
* Override send message request (Advanced usage only)
80+
* */
81+
doSendMessageRequest: PropTypes.func,
82+
/**
83+
* Override update message request (Advanced usage only)
84+
* */
85+
doUpdateMessageRequest: PropTypes.func,
7886
};
7987

8088
static defaultProps = {

src/components/ChannelInner.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ export class ChannelInner extends PureComponent {
124124
isOnline: PropTypes.bool,
125125
Message: PropTypes.oneOfType([PropTypes.node, PropTypes.elementType]),
126126
Attachment: PropTypes.oneOfType([PropTypes.node, PropTypes.elementType]),
127+
/** Override send message request (Advanced usage only) */
128+
doSendMessageRequest: PropTypes.func,
129+
/** Override update message request (Advanced usage only) */
130+
doUpdateMessageRequest: PropTypes.func,
127131
};
128132

129133
static defaultProps = {
@@ -352,6 +356,20 @@ export class ChannelInner extends PureComponent {
352356
return message;
353357
};
354358

359+
// eslint-disable-next-line require-await
360+
editMessage = async (updatedMessage) => {
361+
if (this.props.doUpdateMessageRequest) {
362+
return Promise.resolve(
363+
this.props.doUpdateMessageRequest(
364+
this.props.channel.cid,
365+
updatedMessage,
366+
),
367+
);
368+
}
369+
370+
return this.props.client.updateMessage(updatedMessage);
371+
};
372+
355373
_sendMessage = async (message) => {
356374
// Scrape the reserved fields if present.
357375
const {
@@ -380,7 +398,16 @@ export class ChannelInner extends PureComponent {
380398
};
381399

382400
try {
383-
const messageResponse = await this.props.channel.sendMessage(messageData);
401+
let messageResponse;
402+
if (this.props.doSendMessageRequest) {
403+
messageResponse = await this.props.doSendMessageRequest(
404+
this.props.channel.cid,
405+
messageData,
406+
);
407+
} else {
408+
messageResponse = await this.props.channel.sendMessage(messageData);
409+
}
410+
384411
// replace it after send is completed
385412
if (messageResponse.message) {
386413
messageResponse.message.status = 'received';
@@ -566,6 +593,7 @@ export class ChannelInner extends PureComponent {
566593
updateMessage: this.updateMessage,
567594
removeMessage: this.removeMessage,
568595
sendMessage: this.sendMessage,
596+
editMessage: this.editMessage,
569597
retrySendMessage: this.retrySendMessage,
570598
setEditingState: this.setEditingState,
571599
clearEditingState: this.clearEditingState,

src/components/MessageInput.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,11 +374,9 @@ const MessageInput = withKeyboardContext(
374374
// TODO: Remove this line and show an error when submit fails
375375
this.props.clearEditingState();
376376

377-
const updateMessagePromise = this.props.client
378-
.updateMessage(updatedMessage)
379-
.then(() => {
380-
this.props.clearEditingState();
381-
});
377+
const updateMessagePromise = this.props
378+
.editMessage(updatedMessage)
379+
.then(this.props.clearEditingState);
382380
logChatPromiseExecution(updateMessagePromise, 'update message');
383381
} else {
384382
try {
@@ -404,7 +402,7 @@ const MessageInput = withKeyboardContext(
404402

405403
updateMessage = async () => {
406404
try {
407-
await this.props.client.updateMessage({
405+
await this.props.client.editMessage({
408406
...this.props.editing,
409407
text: this.state.text,
410408
});

types/index.d.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export interface ChannelContextValue {
9191
updatedMessage: Client.MessageResponse,
9292
extraState?: object,
9393
): void;
94+
editMessage?(message: Client.Message): void | Promise<Client.MessageResponse>;
9495
retrySendMessage?(message: Client.Message): void;
9596
removeMessage?(updatedMessage: Client.MessageResponse): void;
9697
setEditingState?(message: Client.Message): void;
@@ -141,6 +142,16 @@ export interface ChannelProps extends ChatContextValue {
141142
EmptyStateIndicator?: React.ElementType<EmptyStateIndicatorProps>;
142143
Message?: React.ElementType<MessageUIComponentProps>;
143144
Attachment?: React.ElementType<AttachmentProps>;
145+
/** Function that overrides default sendMessage in chat client */
146+
doSendMessageRequest?(
147+
channelId: string,
148+
message: Client.Message,
149+
): void | Promise<Client.MessageResponse>;
150+
/** Function that overrides default updateMessage in chat client */
151+
doUpdateMessageRequest?(
152+
channelId: string,
153+
message: Client.Message,
154+
): void | Promise<Client.MessageResponse>;
144155
}
145156

146157
export type listType = 'channel' | 'message' | 'default';

0 commit comments

Comments
 (0)