Skip to content

Commit c85e689

Browse files
committed
fix: useeffect re-render when text change in useMessageDetailsForState
1 parent eb88e46 commit c85e689

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

package/src/components/MessageInput/InputButtons.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useCallback } from 'react';
22
import { StyleSheet, View } from 'react-native';
33

44
import {
@@ -64,14 +64,18 @@ export const InputButtonsWithContext = <
6464
},
6565
} = useTheme();
6666

67+
const handleShowMoreOptions = useCallback(() => {
68+
setShowMoreOptions(true);
69+
}, [setShowMoreOptions]);
70+
6771
const ownCapabilities = useOwnCapabilitiesContext();
6872

6973
if (giphyActive) {
7074
return null;
7175
}
7276

7377
return !showMoreOptions && (hasCameraPicker || hasImagePicker || hasFilePicker) && hasCommands ? (
74-
<MoreOptionsButton handleOnPress={() => setShowMoreOptions(true)} />
78+
<MoreOptionsButton handleOnPress={handleShowMoreOptions} />
7579
) : (
7680
<>
7781
{(hasCameraPicker || hasImagePicker || hasFilePicker) && ownCapabilities.uploadFile && (

package/src/components/MessageInput/MoreOptionsButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import type { GestureResponderEvent } from 'react-native';
3-
import { TouchableOpacity } from 'react-native-gesture-handler';
3+
import { TouchableOpacity } from 'react-native';
44

55
import { useTheme } from '../../contexts/themeContext/ThemeContext';
66
import { CircleRight } from '../../icons/CircleRight';

package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,22 @@ export const useMessageDetailsForState = <
2222
const [imageUploads, setImageUploads] = useState<ImageUpload[]>([]);
2323
const [mentionedUsers, setMentionedUsers] = useState<string[]>([]);
2424
const [numberOfUploads, setNumberOfUploads] = useState(0);
25-
const [showMoreOptions, setShowMoreOptions] = useState(true);
2625

2726
const initialTextValue = initialValue || '';
2827
const [text, setText] = useState(initialTextValue);
2928

29+
const isEqualToInitialText = text === initialTextValue;
30+
31+
const [showMoreOptions, setShowMoreOptions] = useState(true);
32+
3033
useEffect(() => {
31-
if (text !== initialTextValue) {
34+
if (!isEqualToInitialText) {
3235
setShowMoreOptions(false);
3336
}
3437
if (fileUploads.length || imageUploads.length) {
3538
setShowMoreOptions(false);
3639
}
37-
// eslint-disable-next-line react-hooks/exhaustive-deps
38-
}, [text, imageUploads.length, fileUploads.length]);
40+
}, [isEqualToInitialText, imageUploads.length, fileUploads.length]);
3941

4042
const messageValue = message ? stringifyMessage(message) : '';
4143

0 commit comments

Comments
 (0)