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.
Files changed (77) hide show
  1. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +1 -3
  2. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  3. package/lib/commonjs/components/Channel/Channel.js +42 -25
  4. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  5. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +70 -54
  6. package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  7. package/lib/commonjs/components/MessageInput/InputButtons.js +18 -15
  8. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  9. package/lib/commonjs/components/MessageInput/MessageInput.js +15 -8
  10. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  11. package/lib/commonjs/components/MessageInput/MoreOptionsButton.js +2 -2
  12. package/lib/commonjs/components/MessageInput/MoreOptionsButton.js.map +1 -1
  13. package/lib/commonjs/components/MessageList/MessageList.js +0 -1
  14. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  15. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +66 -66
  16. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  17. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +5 -1
  18. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  19. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +10 -9
  20. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  21. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +23 -14
  22. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  23. package/lib/commonjs/version.json +1 -1
  24. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +1 -3
  25. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js.map +1 -1
  26. package/lib/module/components/Channel/Channel.js +42 -25
  27. package/lib/module/components/Channel/Channel.js.map +1 -1
  28. package/lib/module/components/Message/MessageSimple/MessageSimple.js +70 -54
  29. package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
  30. package/lib/module/components/MessageInput/InputButtons.js +18 -15
  31. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  32. package/lib/module/components/MessageInput/MessageInput.js +15 -8
  33. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  34. package/lib/module/components/MessageInput/MoreOptionsButton.js +2 -2
  35. package/lib/module/components/MessageInput/MoreOptionsButton.js.map +1 -1
  36. package/lib/module/components/MessageList/MessageList.js +0 -1
  37. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  38. package/lib/module/contexts/messageInputContext/MessageInputContext.js +66 -66
  39. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  40. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +5 -1
  41. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  42. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +10 -9
  43. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  44. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +23 -14
  45. package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
  46. package/lib/module/version.json +1 -1
  47. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts +1 -2
  48. package/lib/typescript/components/AutoCompleteInput/AutoCompleteInput.d.ts.map +1 -1
  49. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  50. package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
  51. package/lib/typescript/components/MessageInput/InputButtons.d.ts +1 -1
  52. package/lib/typescript/components/MessageInput/InputButtons.d.ts.map +1 -1
  53. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  54. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  55. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  56. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +2 -0
  57. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  58. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  59. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  60. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts.map +1 -1
  61. package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +17 -21
  64. package/src/components/Channel/Channel.tsx +58 -34
  65. package/src/components/Channel/__tests__/Channel.test.js +8 -3
  66. package/src/components/Message/MessageSimple/MessageSimple.tsx +112 -70
  67. package/src/components/MessageInput/InputButtons.tsx +14 -10
  68. package/src/components/MessageInput/MessageInput.tsx +15 -8
  69. package/src/components/MessageInput/MoreOptionsButton.tsx +1 -1
  70. package/src/components/MessageList/MessageList.tsx +0 -1
  71. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +291 -815
  72. package/src/contexts/messageInputContext/MessageInputContext.tsx +20 -16
  73. package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +1 -2
  74. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +6 -0
  75. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +6 -4
  76. package/src/contexts/suggestionsContext/SuggestionsContext.tsx +33 -14
  77. 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 = (newText: string) => {
659
- if (sending.current) {
660
- return;
661
- }
662
- setText(newText);
661
+ const onChange = useCallback(
662
+ (newText: string) => {
663
+ if (sending.current) {
664
+ return;
665
+ }
666
+ setText(newText);
663
667
 
664
- if (newText && channel && channelCapabities.sendTypingEvents && isOnline) {
665
- logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');
666
- }
668
+ if (newText && channel && channelCapabities.sendTypingEvents && isOnline) {
669
+ logChatPromiseExecution(channel.keystroke(thread?.id), 'start typing event');
670
+ }
667
671
 
668
- if (value.onChangeText) {
669
- value.onChangeText(newText);
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, 1]])(
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 (text !== initialTextValue) {
34
+ if (!isEqualToInitialText) {
32
35
  setShowMoreOptions(false);
33
36
  }
34
37
  if (fileUploads.length || imageUploads.length) {
35
38
  setShowMoreOptions(false);
36
39
  }
37
- // eslint-disable-next-line react-hooks/exhaustive-deps
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 = (newSuggestions: Suggestions<StreamChatGenerics>) => {
108
- setSuggestions(newSuggestions);
109
- setSuggestionsViewActive(!!triggerType);
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
- ...value,
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
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "6.7.2"
2
+ "version": "6.7.3-beta.2"
3
3
  }