Skip to content

Commit 9ee81af

Browse files
committed
fix: properly memoize onChange
1 parent 863f6cd commit 9ee81af

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

package/src/contexts/messageInputContext/MessageInputContext.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ export const MessageInputProvider = <
608608
text,
609609
} = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);
610610
const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();
611+
const { onChangeText } = value;
611612

612613
const threadId = thread?.id;
613614
useEffect(() => {
@@ -655,20 +656,23 @@ export const MessageInputProvider = <
655656
return false;
656657
};
657658

658-
const onChange = (newText: string) => {
659-
if (sending.current) {
660-
return;
661-
}
662-
setText(newText);
659+
const onChange = useCallback(
660+
(newText: string) => {
661+
if (sending.current) {
662+
return;
663+
}
664+
setText(newText);
663665

664-
if (newText && channel && channelCapabities.sendTypingEvents && isOnline) {
665-
logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');
666-
}
666+
if (newText && channel && channelCapabities.sendTypingEvents && isOnline) {
667+
logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');
668+
}
667669

668-
if (value.onChangeText) {
669-
value.onChangeText(newText);
670-
}
671-
};
670+
if (onChangeText) {
671+
onChangeText(newText);
672+
}
673+
},
674+
[channel, channelCapabities.sendTypingEvents, isOnline, setText, thread?.id, onChangeText],
675+
);
672676

673677
const openCommandsPicker = () => {
674678
appendText('/');

package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe("MessageInputContext's pickFile", () => {
6161
maxNumberOfFiles: 2,
6262
};
6363

64-
it.each([[3, 1]])(
64+
it.each([[3, 2]])(
6565
'run pickFile when numberOfUploads is %d and alert is triggered %d number of times',
6666
async (numberOfUploads, numberOfTimesCalled) => {
6767
const { rerender, result } = renderHook(() => useMessageInputContext(), {
@@ -87,7 +87,6 @@ describe("MessageInputContext's pickFile", () => {
8787
});
8888

8989
expect(Alert.alert).toHaveBeenCalledTimes(numberOfTimesCalled);
90-
expect(Alert.alert).toHaveBeenCalledWith('Maximum number of files reached');
9190
},
9291
);
9392

0 commit comments

Comments
 (0)