stream-chat-react-native-core 6.7.2 → 6.7.3-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +1 -3
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +42 -25
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +70 -54
- package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
- package/lib/commonjs/components/MessageInput/InputButtons.js +18 -15
- package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +15 -8
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MoreOptionsButton.js +2 -2
- package/lib/commonjs/components/MessageInput/MoreOptionsButton.js.map +1 -1
- package/lib/commonjs/components/MessageList/MessageList.js +0 -1
- package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +66 -66
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +5 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +10 -9
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +23 -14
- package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +1 -3
- package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +42 -25
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageSimple.js +70 -54
- package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
- package/lib/module/components/MessageInput/InputButtons.js +18 -15
- package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +15 -8
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/components/MessageInput/MoreOptionsButton.js +2 -2
- package/lib/module/components/MessageInput/MoreOptionsButton.js.map +1 -1
- package/lib/module/components/MessageList/MessageList.js +0 -1
- package/lib/module/components/MessageList/MessageList.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +66 -66
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +5 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +10 -9
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +23 -14
- package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts +1 -2
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts.map +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/InputButtons.d.ts +1 -1
- package/lib/typescript/components/MessageInput/InputButtons.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +2 -0
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts.map +1 -1
- package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +17 -21
- package/src/components/Channel/Channel.tsx +58 -34
- package/src/components/Channel/__tests__/Channel.test.js +8 -3
- package/src/components/Message/MessageSimple/MessageSimple.tsx +112 -70
- package/src/components/MessageInput/InputButtons.tsx +14 -10
- package/src/components/MessageInput/MessageInput.tsx +15 -8
- package/src/components/MessageInput/MoreOptionsButton.tsx +1 -1
- package/src/components/MessageList/MessageList.tsx +0 -1
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +291 -815
- package/src/contexts/messageInputContext/MessageInputContext.tsx +20 -16
- package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +1 -2
- package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +6 -0
- package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +6 -4
- package/src/contexts/suggestionsContext/SuggestionsContext.tsx +33 -14
- package/src/version.json +1 -1
|
@@ -125,6 +125,7 @@ export type LocalMessageInputContext<
|
|
|
125
125
|
url: string;
|
|
126
126
|
};
|
|
127
127
|
};
|
|
128
|
+
giphyEnabled: boolean;
|
|
128
129
|
closeAttachmentPicker: () => void;
|
|
129
130
|
/** The time at which the active cooldown will end */
|
|
130
131
|
cooldownEndsAt: Date;
|
|
@@ -151,6 +152,7 @@ export type LocalMessageInputContext<
|
|
|
151
152
|
*/
|
|
152
153
|
fileUploads: FileUpload[];
|
|
153
154
|
giphyActive: boolean;
|
|
155
|
+
hasText: boolean;
|
|
154
156
|
/**
|
|
155
157
|
* An array of image objects which are set for upload. It has the following structure:
|
|
156
158
|
*
|
|
@@ -608,6 +610,7 @@ export const MessageInputProvider = <
|
|
|
608
610
|
text,
|
|
609
611
|
} = useMessageDetailsForState<StreamChatGenerics>(editing, initialValue);
|
|
610
612
|
const { endsAt: cooldownEndsAt, start: startCooldown } = useCooldown<StreamChatGenerics>();
|
|
613
|
+
const { onChangeText } = value;
|
|
611
614
|
|
|
612
615
|
const threadId = thread?.id;
|
|
613
616
|
useEffect(() => {
|
|
@@ -655,20 +658,23 @@ export const MessageInputProvider = <
|
|
|
655
658
|
return false;
|
|
656
659
|
};
|
|
657
660
|
|
|
658
|
-
const onChange = (
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
661
|
+
const onChange = useCallback(
|
|
662
|
+
(newText: string) => {
|
|
663
|
+
if (sending.current) {
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
setText(newText);
|
|
663
667
|
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
668
|
+
if (newText && channel && channelCapabities.sendTypingEvents && isOnline) {
|
|
669
|
+
logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');
|
|
670
|
+
}
|
|
667
671
|
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
+
if (onChangeText) {
|
|
673
|
+
onChangeText(newText);
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
[channel, channelCapabities.sendTypingEvents, isOnline, setText, thread?.id, onChangeText],
|
|
677
|
+
);
|
|
672
678
|
|
|
673
679
|
const openCommandsPicker = () => {
|
|
674
680
|
appendText('/');
|
|
@@ -948,10 +954,6 @@ export const MessageInputProvider = <
|
|
|
948
954
|
const prevText = giphyEnabled && giphyActive ? `/giphy ${text}` : text;
|
|
949
955
|
setText('');
|
|
950
956
|
|
|
951
|
-
if (inputBoxRef.current) {
|
|
952
|
-
inputBoxRef.current.clear();
|
|
953
|
-
}
|
|
954
|
-
|
|
955
957
|
const attachments = [] as Attachment<StreamChatGenerics>[];
|
|
956
958
|
for (const image of imageUploads) {
|
|
957
959
|
if (enableOfflineSupport) {
|
|
@@ -1446,6 +1448,7 @@ export const MessageInputProvider = <
|
|
|
1446
1448
|
cooldownEndsAt,
|
|
1447
1449
|
fileUploads,
|
|
1448
1450
|
giphyActive,
|
|
1451
|
+
giphyEnabled,
|
|
1449
1452
|
imageUploads,
|
|
1450
1453
|
inputBoxRef,
|
|
1451
1454
|
isValidMessage,
|
|
@@ -1490,6 +1493,7 @@ export const MessageInputProvider = <
|
|
|
1490
1493
|
uploadNewImage,
|
|
1491
1494
|
...value,
|
|
1492
1495
|
closePollCreationDialog,
|
|
1496
|
+
hasText: !!text,
|
|
1493
1497
|
openPollCreationDialog,
|
|
1494
1498
|
sendMessage, // overriding the originally passed in sendMessage
|
|
1495
1499
|
showPollCreationDialog,
|
|
@@ -61,7 +61,7 @@ describe("MessageInputContext's pickFile", () => {
|
|
|
61
61
|
maxNumberOfFiles: 2,
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
it.each([[3,
|
|
64
|
+
it.each([[3, 2]])(
|
|
65
65
|
'run pickFile when numberOfUploads is %d and alert is triggered %d number of times',
|
|
66
66
|
async (numberOfUploads, numberOfTimesCalled) => {
|
|
67
67
|
const { rerender, result } = renderHook(() => useMessageInputContext(), {
|
|
@@ -87,7 +87,6 @@ describe("MessageInputContext's pickFile", () => {
|
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
expect(Alert.alert).toHaveBeenCalledTimes(numberOfTimesCalled);
|
|
90
|
-
expect(Alert.alert).toHaveBeenCalledWith('Maximum number of files reached');
|
|
91
90
|
},
|
|
92
91
|
);
|
|
93
92
|
|
|
@@ -41,11 +41,13 @@ export const useCreateMessageInputContext = <
|
|
|
41
41
|
FileUploadPreview,
|
|
42
42
|
fileUploads,
|
|
43
43
|
giphyActive,
|
|
44
|
+
giphyEnabled,
|
|
44
45
|
handleAttachButtonPress,
|
|
45
46
|
hasCameraPicker,
|
|
46
47
|
hasCommands,
|
|
47
48
|
hasFilePicker,
|
|
48
49
|
hasImagePicker,
|
|
50
|
+
hasText,
|
|
49
51
|
ImageUploadPreview,
|
|
50
52
|
imageUploads,
|
|
51
53
|
initialValue,
|
|
@@ -164,11 +166,13 @@ export const useCreateMessageInputContext = <
|
|
|
164
166
|
FileUploadPreview,
|
|
165
167
|
fileUploads,
|
|
166
168
|
giphyActive,
|
|
169
|
+
giphyEnabled,
|
|
167
170
|
handleAttachButtonPress,
|
|
168
171
|
hasCameraPicker,
|
|
169
172
|
hasCommands,
|
|
170
173
|
hasFilePicker,
|
|
171
174
|
hasImagePicker,
|
|
175
|
+
hasText,
|
|
172
176
|
ImageUploadPreview,
|
|
173
177
|
imageUploads,
|
|
174
178
|
initialValue,
|
|
@@ -246,6 +250,8 @@ export const useCreateMessageInputContext = <
|
|
|
246
250
|
editingdep,
|
|
247
251
|
fileUploadsValue,
|
|
248
252
|
giphyActive,
|
|
253
|
+
giphyEnabled,
|
|
254
|
+
hasText,
|
|
249
255
|
imageUploadsValue,
|
|
250
256
|
maxMessageLength,
|
|
251
257
|
mentionedUsersLength,
|
|
@@ -22,20 +22,22 @@ export const useMessageDetailsForState = <
|
|
|
22
22
|
const [imageUploads, setImageUploads] = useState<ImageUpload[]>([]);
|
|
23
23
|
const [mentionedUsers, setMentionedUsers] = useState<string[]>([]);
|
|
24
24
|
const [numberOfUploads, setNumberOfUploads] = useState(0);
|
|
25
|
-
const [showMoreOptions, setShowMoreOptions] = useState(true);
|
|
26
25
|
|
|
27
26
|
const initialTextValue = initialValue || '';
|
|
28
27
|
const [text, setText] = useState(initialTextValue);
|
|
29
28
|
|
|
29
|
+
const isEqualToInitialText = text === initialTextValue;
|
|
30
|
+
|
|
31
|
+
const [showMoreOptions, setShowMoreOptions] = useState(true);
|
|
32
|
+
|
|
30
33
|
useEffect(() => {
|
|
31
|
-
if (
|
|
34
|
+
if (!isEqualToInitialText) {
|
|
32
35
|
setShowMoreOptions(false);
|
|
33
36
|
}
|
|
34
37
|
if (fileUploads.length || imageUploads.length) {
|
|
35
38
|
setShowMoreOptions(false);
|
|
36
39
|
}
|
|
37
|
-
|
|
38
|
-
}, [text, imageUploads.length, fileUploads.length]);
|
|
40
|
+
}, [isEqualToInitialText, imageUploads.length, fileUploads.length]);
|
|
39
41
|
|
|
40
42
|
const messageValue = message ? stringifyMessage(message) : '';
|
|
41
43
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { PropsWithChildren, useContext, useState } from 'react';
|
|
1
|
+
import React, { PropsWithChildren, useCallback, useContext, useMemo, useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { CommandResponse, UserResponse } from 'stream-chat';
|
|
4
4
|
|
|
@@ -95,35 +95,54 @@ export const SuggestionsProvider = <
|
|
|
95
95
|
children,
|
|
96
96
|
value,
|
|
97
97
|
}: PropsWithChildren<{ value?: Partial<SuggestionsContextValue<StreamChatGenerics>> }>) => {
|
|
98
|
+
const { AutoCompleteSuggestionHeader, AutoCompleteSuggestionItem, AutoCompleteSuggestionList } =
|
|
99
|
+
value ?? {};
|
|
98
100
|
const [triggerType, setTriggerType] = useState<SuggestionComponentType | null>(null);
|
|
99
101
|
const [suggestions, setSuggestions] = useState<Suggestions<StreamChatGenerics>>();
|
|
100
102
|
const [suggestionsViewActive, setSuggestionsViewActive] = useState(false);
|
|
101
103
|
|
|
102
|
-
const openSuggestions = (component: SuggestionComponentType) => {
|
|
104
|
+
const openSuggestions = useCallback((component: SuggestionComponentType) => {
|
|
103
105
|
setTriggerType(component);
|
|
104
106
|
setSuggestionsViewActive(true);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
const updateSuggestions = (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
}, []);
|
|
108
|
+
|
|
109
|
+
const updateSuggestions = useCallback(
|
|
110
|
+
(newSuggestions: Suggestions<StreamChatGenerics>) => {
|
|
111
|
+
setSuggestions(newSuggestions);
|
|
112
|
+
setSuggestionsViewActive(!!triggerType);
|
|
113
|
+
},
|
|
114
|
+
[triggerType],
|
|
115
|
+
);
|
|
111
116
|
|
|
112
|
-
const closeSuggestions = () => {
|
|
117
|
+
const closeSuggestions = useCallback(() => {
|
|
113
118
|
setTriggerType(null);
|
|
114
119
|
setSuggestions(undefined);
|
|
115
120
|
setSuggestionsViewActive(false);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const suggestionsContext = {
|
|
119
|
-
|
|
121
|
+
}, []);
|
|
122
|
+
|
|
123
|
+
const suggestionsContext = useMemo(() => {
|
|
124
|
+
return {
|
|
125
|
+
AutoCompleteSuggestionHeader,
|
|
126
|
+
AutoCompleteSuggestionItem,
|
|
127
|
+
AutoCompleteSuggestionList,
|
|
128
|
+
closeSuggestions,
|
|
129
|
+
openSuggestions,
|
|
130
|
+
suggestions,
|
|
131
|
+
suggestionsViewActive,
|
|
132
|
+
triggerType,
|
|
133
|
+
updateSuggestions,
|
|
134
|
+
};
|
|
135
|
+
}, [
|
|
136
|
+
AutoCompleteSuggestionHeader,
|
|
137
|
+
AutoCompleteSuggestionItem,
|
|
138
|
+
AutoCompleteSuggestionList,
|
|
120
139
|
closeSuggestions,
|
|
121
140
|
openSuggestions,
|
|
122
141
|
suggestions,
|
|
123
142
|
suggestionsViewActive,
|
|
124
143
|
triggerType,
|
|
125
144
|
updateSuggestions,
|
|
126
|
-
|
|
145
|
+
]);
|
|
127
146
|
|
|
128
147
|
return (
|
|
129
148
|
<SuggestionsContext.Provider value={suggestionsContext as unknown as SuggestionsContextValue}>
|
package/src/version.json
CHANGED