Skip to content

Commit 056b25d

Browse files
authored
Merge pull request #484 from jeff-phillips-18/message-bar-fix
fix(MessageBar): Call onSendMessage only once for new messages
2 parents 00aba53 + 206fc94 commit 056b25d

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

packages/module/src/MessageBar/MessageBar.tsx

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,15 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
141141
return lines > 2;
142142
};
143143

144-
const setAutoWidth = (field: HTMLTextAreaElement) => {
144+
const setAutoWidth = React.useCallback((field: HTMLTextAreaElement) => {
145145
const parent = field.parentElement;
146146
if (parent) {
147147
const grandparent = parent.parentElement;
148148
if (textIsLongerThan2Lines(field) && grandparent) {
149149
grandparent.style.setProperty('flex-basis', `100%`);
150150
}
151151
}
152-
};
152+
}, []);
153153

154154
const handleNewLine = (field: HTMLTextAreaElement) => {
155155
const parent = field.parentElement;
@@ -188,7 +188,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
188188
return () => {
189189
window.removeEventListener('resize', resetHeight);
190190
};
191-
}, []);
191+
}, [setAutoWidth]);
192192

193193
React.useEffect(() => {
194194
const field = textareaRef.current;
@@ -200,7 +200,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
200200
setAutoWidth(field);
201201
}
202202
}
203-
}, [displayMode, message]);
203+
}, [displayMode, message, setAutoWidth]);
204204

205205
React.useEffect(() => {
206206
const field = textareaRef.current;
@@ -210,33 +210,37 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
210210
}
211211
}, [hasSentMessage]);
212212

213-
const handleChange = React.useCallback((event) => {
214-
onChange && onChange(event, event.target.value);
215-
if (textareaRef.current) {
216-
if (event.target.value === '') {
217-
setInitialLineHeight(textareaRef.current);
218-
} else {
219-
setAutoHeight(textareaRef.current);
213+
const handleChange = React.useCallback(
214+
(event) => {
215+
onChange && onChange(event, event.target.value);
216+
if (textareaRef.current) {
217+
if (event.target.value === '') {
218+
setInitialLineHeight(textareaRef.current);
219+
} else {
220+
setAutoHeight(textareaRef.current);
221+
}
220222
}
221-
}
222-
setMessage(event.target.value);
223-
}, []);
223+
setMessage(event.target.value);
224+
},
225+
[onChange]
226+
);
224227

225228
// Handle sending message
226-
const handleSend = React.useCallback(() => {
227-
setMessage((m) => {
228-
onSendMessage(m);
229+
const handleSend = React.useCallback(
230+
(newMessage: string | number) => {
231+
onSendMessage(newMessage);
229232
setHasSentMessage(true);
230-
return '';
231-
});
232-
}, [onSendMessage]);
233+
setMessage('');
234+
},
235+
[onSendMessage]
236+
);
233237

234238
const handleKeyDown = React.useCallback(
235239
(event: React.KeyboardEvent) => {
236240
if (event.key === 'Enter' && !event.shiftKey) {
237241
event.preventDefault();
238242
if (!isSendButtonDisabled && !hasStopButton) {
239-
handleSend();
243+
handleSend(message);
240244
}
241245
}
242246
if (event.key === 'Enter' && event.shiftKey) {
@@ -245,7 +249,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
245249
}
246250
}
247251
},
248-
[handleSend, isSendButtonDisabled, handleStopButton]
252+
[isSendButtonDisabled, hasStopButton, handleSend, message]
249253
);
250254

251255
const handleAttachMenuToggle = () => {
@@ -301,7 +305,7 @@ export const MessageBar: React.FunctionComponent<MessageBarProps> = ({
301305
{(alwayShowSendButton || message) && (
302306
<SendButton
303307
value={message}
304-
onClick={handleSend}
308+
onClick={() => handleSend(message)}
305309
isDisabled={isSendButtonDisabled}
306310
tooltipContent={buttonProps?.send?.tooltipContent}
307311
{...buttonProps?.send?.props}

0 commit comments

Comments
 (0)