stream-chat-react 10.9.0 → 10.10.0

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 (169) hide show
  1. package/dist/browser.full-bundle.js +2212 -3323
  2. package/dist/browser.full-bundle.js.map +1 -1
  3. package/dist/browser.full-bundle.min.js +5 -5
  4. package/dist/browser.full-bundle.min.js.map +1 -1
  5. package/dist/components/Attachment/FileAttachment.js +1 -1
  6. package/dist/components/AutoCompleteTextarea/Textarea.d.ts.map +1 -1
  7. package/dist/components/AutoCompleteTextarea/Textarea.js +2 -0
  8. package/dist/components/Channel/Channel.d.ts +16 -4
  9. package/dist/components/Channel/Channel.d.ts.map +1 -1
  10. package/dist/components/Channel/Channel.js +23 -8
  11. package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts.map +1 -1
  12. package/dist/components/Channel/hooks/useCreateChannelStateContext.js +9 -1
  13. package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +3 -3
  14. package/dist/components/Channel/hooks/useEditMessageHandler.d.ts.map +1 -1
  15. package/dist/components/Channel/hooks/useEditMessageHandler.js +3 -3
  16. package/dist/components/ChannelSearch/index.d.ts +1 -0
  17. package/dist/components/ChannelSearch/index.d.ts.map +1 -1
  18. package/dist/components/MessageInput/AttachmentPreviewList.js +1 -1
  19. package/dist/components/MessageInput/DropzoneProvider.js +1 -1
  20. package/dist/components/MessageInput/EditMessageForm.js +1 -1
  21. package/dist/components/MessageInput/LinkPreviewList.d.ts +6 -0
  22. package/dist/components/MessageInput/LinkPreviewList.d.ts.map +1 -0
  23. package/dist/components/MessageInput/LinkPreviewList.js +34 -0
  24. package/dist/components/MessageInput/MessageInput.d.ts +6 -3
  25. package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
  26. package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
  27. package/dist/components/MessageInput/MessageInputFlat.js +14 -12
  28. package/dist/components/MessageInput/MessageInputSmall.js +1 -1
  29. package/dist/components/MessageInput/UploadsPreview.js +1 -1
  30. package/dist/components/MessageInput/hooks/useAttachments.d.ts +1 -1
  31. package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
  32. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  33. package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +10 -1
  34. package/dist/components/MessageInput/hooks/useFileState.d.ts +1 -1
  35. package/dist/components/MessageInput/hooks/useFileState.d.ts.map +1 -1
  36. package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts +31 -0
  37. package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts.map +1 -0
  38. package/dist/components/MessageInput/hooks/useLinkPreviews.js +120 -0
  39. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +36 -36
  40. package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
  41. package/dist/components/MessageInput/hooks/useMessageInputState.js +51 -13
  42. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +2 -1
  43. package/dist/components/MessageInput/hooks/useMessageInputText.d.ts.map +1 -1
  44. package/dist/components/MessageInput/hooks/useMessageInputText.js +3 -2
  45. package/dist/components/MessageInput/hooks/usePasteHandler.d.ts +3 -2
  46. package/dist/components/MessageInput/hooks/usePasteHandler.d.ts.map +1 -1
  47. package/dist/components/MessageInput/hooks/usePasteHandler.js +5 -2
  48. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -1
  49. package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
  50. package/dist/components/MessageInput/hooks/useSubmitHandler.js +38 -7
  51. package/dist/components/MessageInput/hooks/utils.d.ts +1 -1
  52. package/dist/components/MessageInput/hooks/utils.d.ts.map +1 -1
  53. package/dist/components/MessageInput/icons.d.ts +1 -0
  54. package/dist/components/MessageInput/icons.d.ts.map +1 -1
  55. package/dist/components/MessageInput/icons.js +2 -0
  56. package/dist/components/MessageInput/index.d.ts +1 -0
  57. package/dist/components/MessageInput/index.d.ts.map +1 -1
  58. package/dist/components/MessageInput/index.js +1 -0
  59. package/dist/components/MessageInput/types.d.ts +57 -0
  60. package/dist/components/MessageInput/types.d.ts.map +1 -0
  61. package/dist/components/MessageInput/types.js +19 -0
  62. package/dist/components/MessageList/VirtualizedMessageList.d.ts +3 -1
  63. package/dist/components/MessageList/VirtualizedMessageList.d.ts.map +1 -1
  64. package/dist/components/MessageList/VirtualizedMessageList.js +1 -1
  65. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +15 -0
  66. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts.map +1 -0
  67. package/dist/components/ReactFileUtilities/FileIcon/FileIcon.js +49 -0
  68. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts +23 -0
  69. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.d.ts.map +1 -0
  70. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v1.js +83 -0
  71. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts +25 -0
  72. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.d.ts.map +1 -0
  73. package/dist/components/ReactFileUtilities/FileIcon/FileIconSet/v2.js +194 -0
  74. package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts +19 -0
  75. package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts.map +1 -0
  76. package/dist/components/ReactFileUtilities/FileIcon/iconMap.js +96 -0
  77. package/dist/components/ReactFileUtilities/FileIcon/index.d.ts +2 -0
  78. package/dist/components/ReactFileUtilities/FileIcon/index.d.ts.map +1 -0
  79. package/dist/components/ReactFileUtilities/FileIcon/index.js +1 -0
  80. package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts +8 -0
  81. package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.d.ts.map +1 -0
  82. package/dist/components/ReactFileUtilities/FileIcon/mimeTypes.js +146 -0
  83. package/dist/components/ReactFileUtilities/FilePreviewer.d.ts +14 -0
  84. package/dist/components/ReactFileUtilities/FilePreviewer.d.ts.map +1 -0
  85. package/dist/components/ReactFileUtilities/FilePreviewer.js +31 -0
  86. package/dist/components/ReactFileUtilities/FileUploadButton.d.ts +13 -0
  87. package/dist/components/ReactFileUtilities/FileUploadButton.d.ts.map +1 -0
  88. package/dist/components/ReactFileUtilities/FileUploadButton.js +17 -0
  89. package/dist/components/ReactFileUtilities/IconButton.d.ts +9 -0
  90. package/dist/components/ReactFileUtilities/IconButton.d.ts.map +1 -0
  91. package/dist/components/ReactFileUtilities/IconButton.js +8 -0
  92. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +17 -0
  93. package/dist/components/ReactFileUtilities/ImageDropzone.d.ts.map +1 -0
  94. package/dist/components/ReactFileUtilities/ImageDropzone.js +53 -0
  95. package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts +21 -0
  96. package/dist/components/ReactFileUtilities/ImagePreviewer.d.ts.map +1 -0
  97. package/dist/components/ReactFileUtilities/ImagePreviewer.js +24 -0
  98. package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts +12 -0
  99. package/dist/components/ReactFileUtilities/ImageUploadButton.d.ts.map +1 -0
  100. package/dist/components/ReactFileUtilities/ImageUploadButton.js +13 -0
  101. package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts +8 -0
  102. package/dist/components/ReactFileUtilities/LoadingIndicator.d.ts.map +1 -0
  103. package/dist/components/ReactFileUtilities/LoadingIndicator.js +12 -0
  104. package/dist/components/ReactFileUtilities/Thumbnail.d.ts +10 -0
  105. package/dist/components/ReactFileUtilities/Thumbnail.d.ts.map +1 -0
  106. package/dist/components/ReactFileUtilities/Thumbnail.js +11 -0
  107. package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts +6 -0
  108. package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.d.ts.map +1 -0
  109. package/dist/components/ReactFileUtilities/ThumbnailPlaceholder.js +9 -0
  110. package/dist/components/ReactFileUtilities/UploadButton.d.ts +7 -0
  111. package/dist/components/ReactFileUtilities/UploadButton.d.ts.map +1 -0
  112. package/dist/components/ReactFileUtilities/UploadButton.js +29 -0
  113. package/dist/components/ReactFileUtilities/icons/AttachmentIcon.d.ts +5 -0
  114. package/dist/components/ReactFileUtilities/icons/AttachmentIcon.d.ts.map +1 -0
  115. package/dist/components/ReactFileUtilities/icons/AttachmentIcon.js +7 -0
  116. package/dist/components/ReactFileUtilities/icons/CloseIcon.d.ts +2 -0
  117. package/dist/components/ReactFileUtilities/icons/CloseIcon.d.ts.map +1 -0
  118. package/dist/components/ReactFileUtilities/icons/CloseIcon.js +11 -0
  119. package/dist/components/ReactFileUtilities/icons/FilePlaceholderIcon.d.ts +3 -0
  120. package/dist/components/ReactFileUtilities/icons/FilePlaceholderIcon.d.ts.map +1 -0
  121. package/dist/components/ReactFileUtilities/icons/FilePlaceholderIcon.js +16 -0
  122. package/dist/components/ReactFileUtilities/icons/PictureIcon.d.ts +5 -0
  123. package/dist/components/ReactFileUtilities/icons/PictureIcon.d.ts.map +1 -0
  124. package/dist/components/ReactFileUtilities/icons/PictureIcon.js +6 -0
  125. package/dist/components/ReactFileUtilities/icons/RetryIcon.d.ts +2 -0
  126. package/dist/components/ReactFileUtilities/icons/RetryIcon.d.ts.map +1 -0
  127. package/dist/components/ReactFileUtilities/icons/RetryIcon.js +3 -0
  128. package/dist/components/ReactFileUtilities/icons/index.d.ts +6 -0
  129. package/dist/components/ReactFileUtilities/icons/index.d.ts.map +1 -0
  130. package/dist/components/ReactFileUtilities/icons/index.js +5 -0
  131. package/dist/components/ReactFileUtilities/index.d.ts +14 -0
  132. package/dist/components/ReactFileUtilities/index.d.ts.map +1 -0
  133. package/dist/components/ReactFileUtilities/index.js +13 -0
  134. package/dist/components/ReactFileUtilities/types.d.ts +31 -0
  135. package/dist/components/ReactFileUtilities/types.d.ts.map +1 -0
  136. package/dist/components/ReactFileUtilities/types.js +1 -0
  137. package/dist/components/ReactFileUtilities/utils.d.ts +5 -0
  138. package/dist/components/ReactFileUtilities/utils.d.ts.map +1 -0
  139. package/dist/components/ReactFileUtilities/utils.js +157 -0
  140. package/dist/context/ChannelActionContext.d.ts +3 -3
  141. package/dist/context/ChannelActionContext.d.ts.map +1 -1
  142. package/dist/context/ChannelStateContext.d.ts +6 -1
  143. package/dist/context/ChannelStateContext.d.ts.map +1 -1
  144. package/dist/context/ComponentContext.d.ts +3 -0
  145. package/dist/context/ComponentContext.d.ts.map +1 -1
  146. package/dist/context/MessageInputContext.d.ts +22 -1
  147. package/dist/context/MessageInputContext.d.ts.map +1 -1
  148. package/dist/css/index.css +1 -1
  149. package/dist/css/index.css.map +1 -1
  150. package/dist/css/v2/index.css +1 -1
  151. package/dist/css/v2/index.css.map +1 -1
  152. package/dist/css/v2/index.layout.css +1 -1
  153. package/dist/css/v2/index.layout.css.map +1 -1
  154. package/dist/index.cjs.js +27297 -26274
  155. package/dist/index.cjs.js.map +1 -1
  156. package/dist/scss/_base.scss +17 -0
  157. package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +1 -0
  158. package/dist/scss/v2/LinkPreview/LinkPreview-layout.scss +49 -0
  159. package/dist/scss/v2/LinkPreview/LinkPreview-theme.scss +17 -0
  160. package/dist/scss/v2/LinkPreview/index.scss +2 -0
  161. package/dist/scss/v2/_base.scss +17 -0
  162. package/dist/scss/v2/index.layout.scss +1 -0
  163. package/dist/scss/v2/index.scss +1 -0
  164. package/dist/types/types.d.ts +12 -0
  165. package/dist/types/types.d.ts.map +1 -1
  166. package/dist/version.d.ts +1 -1
  167. package/dist/version.d.ts.map +1 -1
  168. package/dist/version.js +1 -1
  169. package/package.json +8 -9
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from 'react';
2
2
  export var useCreateMessageInputContext = function (value) {
3
- var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiIndex = value.emojiIndex, emojiPickerIsOpen = value.emojiPickerIsOpen, emojiPickerRef = value.emojiPickerRef, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleEmojiKeyDown = value.handleEmojiKeyDown, handleSubmit = value.handleSubmit, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectEmoji = value.onSelectEmoji, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openEmojiPicker = value.openEmojiPicker, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, shouldSubmit = value.shouldSubmit, showCommandsList = value.showCommandsList, showMentionsList = value.showMentionsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
3
+ var additionalTextareaProps = value.additionalTextareaProps, attachments = value.attachments, autocompleteTriggers = value.autocompleteTriggers, cancelURLEnrichment = value.cancelURLEnrichment, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeEmojiPicker = value.closeEmojiPicker, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, dismissLinkPreview = value.dismissLinkPreview, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiIndex = value.emojiIndex, emojiPickerIsOpen = value.emojiPickerIsOpen, emojiPickerRef = value.emojiPickerRef, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, findAndEnqueueURLsToEnrich = value.findAndEnqueueURLsToEnrich, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleEmojiKeyDown = value.handleEmojiKeyDown, handleSubmit = value.handleSubmit, imageOrder = value.imageOrder, imageUploads = value.imageUploads, insertText = value.insertText, isUploadEnabled = value.isUploadEnabled, linkPreviews = value.linkPreviews, maxFilesLeft = value.maxFilesLeft, maxRows = value.maxRows, mentionAllAppUsers = value.mentionAllAppUsers, mentioned_users = value.mentioned_users, mentionQueryParams = value.mentionQueryParams, message = value.message, noFiles = value.noFiles, numberOfUploads = value.numberOfUploads, onPaste = value.onPaste, onSelectEmoji = value.onSelectEmoji, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openEmojiPicker = value.openEmojiPicker, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, removeFile = value.removeFile, removeImage = value.removeImage, setCooldownRemaining = value.setCooldownRemaining, setText = value.setText, shouldSubmit = value.shouldSubmit, showCommandsList = value.showCommandsList, showMentionsList = value.showMentionsList, text = value.text, textareaRef = value.textareaRef, uploadFile = value.uploadFile, uploadImage = value.uploadImage, uploadNewFiles = value.uploadNewFiles, useMentionsTransliteration = value.useMentionsTransliteration;
4
4
  var editing = message === null || message === void 0 ? void 0 : message.editing;
5
5
  var fileUploadsValue = Object.entries(fileUploads)
6
6
  // eslint-disable-next-line
@@ -16,12 +16,14 @@ export var useCreateMessageInputContext = function (value) {
16
16
  return value.state;
17
17
  })
18
18
  .join();
19
+ var linkPreviewsValue = Array.from(linkPreviews.values()).join();
19
20
  var mentionedUsersLength = mentioned_users.length;
20
21
  var parentId = parent === null || parent === void 0 ? void 0 : parent.id;
21
22
  var messageInputContext = useMemo(function () { return ({
22
23
  additionalTextareaProps: additionalTextareaProps,
23
24
  attachments: attachments,
24
25
  autocompleteTriggers: autocompleteTriggers,
26
+ cancelURLEnrichment: cancelURLEnrichment,
25
27
  clearEditingState: clearEditingState,
26
28
  closeCommandsList: closeCommandsList,
27
29
  closeEmojiPicker: closeEmojiPicker,
@@ -30,6 +32,7 @@ export var useCreateMessageInputContext = function (value) {
30
32
  cooldownRemaining: cooldownRemaining,
31
33
  disabled: disabled,
32
34
  disableMentions: disableMentions,
35
+ dismissLinkPreview: dismissLinkPreview,
33
36
  doFileUploadRequest: doFileUploadRequest,
34
37
  doImageUploadRequest: doImageUploadRequest,
35
38
  emojiIndex: emojiIndex,
@@ -38,6 +41,7 @@ export var useCreateMessageInputContext = function (value) {
38
41
  errorHandler: errorHandler,
39
42
  fileOrder: fileOrder,
40
43
  fileUploads: fileUploads,
44
+ findAndEnqueueURLsToEnrich: findAndEnqueueURLsToEnrich,
41
45
  focus: focus,
42
46
  grow: grow,
43
47
  handleChange: handleChange,
@@ -47,6 +51,7 @@ export var useCreateMessageInputContext = function (value) {
47
51
  imageUploads: imageUploads,
48
52
  insertText: insertText,
49
53
  isUploadEnabled: isUploadEnabled,
54
+ linkPreviews: linkPreviews,
50
55
  maxFilesLeft: maxFilesLeft,
51
56
  maxRows: maxRows,
52
57
  mentionAllAppUsers: mentionAllAppUsers,
@@ -78,13 +83,17 @@ export var useCreateMessageInputContext = function (value) {
78
83
  uploadNewFiles: uploadNewFiles,
79
84
  useMentionsTransliteration: useMentionsTransliteration,
80
85
  }); }, [
86
+ cancelURLEnrichment,
81
87
  cooldownInterval,
82
88
  cooldownRemaining,
89
+ dismissLinkPreview,
83
90
  editing,
84
91
  emojiPickerIsOpen,
85
92
  fileUploadsValue,
93
+ findAndEnqueueURLsToEnrich,
86
94
  imageUploadsValue,
87
95
  isUploadEnabled,
96
+ linkPreviewsValue,
88
97
  mentionedUsersLength,
89
98
  parentId,
90
99
  publishTypingEvent,
@@ -1,4 +1,4 @@
1
- import type { FileUpload } from './useMessageInputState';
1
+ import type { FileUpload } from '../types';
2
2
  export declare const useFileState: <T extends Pick<FileUpload, "state">>(file: T) => {
3
3
  failed: boolean;
4
4
  finished: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useFileState.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useFileState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,eAAO,MAAM,YAAY;;;;CAQtB,CAAC"}
1
+ {"version":3,"file":"useFileState.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useFileState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,YAAY;;;;CAQtB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { Dispatch } from 'react';
2
+ import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
3
+ import type { DefaultStreamChatGenerics } from '../../../types/types';
4
+ import type { LinkPreview } from '../types';
5
+ import { SetLinkPreviewMode } from '../types';
6
+ import type { DebouncedFunc } from 'lodash';
7
+ export declare type URLEnrichmentConfig = {
8
+ /** Number of milliseconds to debounce firing the URL enrichment queries when typing. The default value is 1500(ms). */
9
+ debounceURLEnrichmentMs?: number;
10
+ /** Allows for toggling the URL enrichment and link previews in `MessageInput`. By default, the feature is disabled. */
11
+ enrichURLForPreview?: boolean;
12
+ /** Custom function to identify URLs in a string and request OG data */
13
+ findURLFn?: (text: string) => string[];
14
+ /** Custom function to react to link preview dismissal */
15
+ onLinkPreviewDismissed?: (linkPreview: LinkPreview) => void;
16
+ };
17
+ declare type UseEnrichURLsParams<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = URLEnrichmentConfig & {
18
+ dispatch: Dispatch<MessageInputReducerAction<StreamChatGenerics>>;
19
+ linkPreviews: MessageInputState<StreamChatGenerics>['linkPreviews'];
20
+ };
21
+ export declare type EnrichURLsController = {
22
+ /** Function cancels all the scheduled or in-progress URL enrichment queries and resets the state. */
23
+ cancelURLEnrichment: () => void;
24
+ /** Function called when a single link preview is dismissed. */
25
+ dismissLinkPreview: (linkPreview: LinkPreview) => void;
26
+ /** Function that triggers the search for URLs and their enrichment. */
27
+ findAndEnqueueURLsToEnrich?: DebouncedFunc<(text: string, mode?: SetLinkPreviewMode) => void>;
28
+ };
29
+ export declare const useLinkPreviews: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ debounceURLEnrichmentMs: debounceURLEnrichmentMsInputContext, dispatch, enrichURLForPreview, findURLFn: findURLFnInputContext, linkPreviews, onLinkPreviewDismissed: onLinkPreviewDismissedInputContext, }: UseEnrichURLsParams<StreamChatGenerics>) => EnrichURLsController;
30
+ export {};
31
+ //# sourceMappingURL=useLinkPreviews.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLinkPreviews.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useLinkPreviews.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,OAAO,CAAC;AAGjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAoB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,oBAAY,mBAAmB,GAAG;IAChC,uHAAuH;IACvH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uHAAuH;IACvH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACvC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,aAAK,mBAAmB,CACtB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,mBAAmB,GAAG;IACxB,QAAQ,EAAE,QAAQ,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClE,YAAY,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,CAAC;CACrE,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,qGAAqG;IACrG,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,+DAA+D;IAC/D,kBAAkB,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IACvD,uEAAuE;IACvE,0BAA0B,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC,CAAC;CAC/F,CAAC;AAEF,eAAO,MAAM,eAAe,+UASiB,oBAiI5C,CAAC"}
@@ -0,0 +1,120 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import { find } from 'linkifyjs';
24
+ import { useCallback, useEffect, useRef } from 'react';
25
+ import debounce from 'lodash.debounce';
26
+ import { useChannelStateContext, useChatContext } from '../../../context';
27
+ import { LinkPreviewState, SetLinkPreviewMode } from '../types';
28
+ export var useLinkPreviews = function (_a) {
29
+ var _b;
30
+ var debounceURLEnrichmentMsInputContext = _a.debounceURLEnrichmentMs, dispatch = _a.dispatch, _c = _a.enrichURLForPreview, enrichURLForPreview = _c === void 0 ? false : _c, findURLFnInputContext = _a.findURLFn, linkPreviews = _a.linkPreviews, onLinkPreviewDismissedInputContext = _a.onLinkPreviewDismissed;
31
+ var client = useChatContext().client;
32
+ // FIXME: the value of channelConfig is stale due to omitting it from the memoization deps in useCreateChannelStateContext
33
+ var _d = useChannelStateContext(), channelConfig = _d.channelConfig, debounceURLEnrichmentMsChannelContext = _d.debounceURLEnrichmentMs, findURLFnChannelContext = _d.findURLFn, onLinkPreviewDismissedChannelContext = _d.onLinkPreviewDismissed;
34
+ var shouldDiscardEnrichQueries = useRef(false);
35
+ var findURLFn = findURLFnInputContext !== null && findURLFnInputContext !== void 0 ? findURLFnInputContext : findURLFnChannelContext;
36
+ var onLinkPreviewDismissed = onLinkPreviewDismissedInputContext !== null && onLinkPreviewDismissedInputContext !== void 0 ? onLinkPreviewDismissedInputContext : onLinkPreviewDismissedChannelContext;
37
+ var debounceURLEnrichmentMs = (_b = debounceURLEnrichmentMsInputContext !== null && debounceURLEnrichmentMsInputContext !== void 0 ? debounceURLEnrichmentMsInputContext : debounceURLEnrichmentMsChannelContext) !== null && _b !== void 0 ? _b : 1500;
38
+ var dismissLinkPreview = useCallback(function (linkPreview) {
39
+ onLinkPreviewDismissed === null || onLinkPreviewDismissed === void 0 ? void 0 : onLinkPreviewDismissed(linkPreview);
40
+ var previewToRemoveMap = new Map();
41
+ linkPreview.state = LinkPreviewState.DISMISSED;
42
+ previewToRemoveMap.set(linkPreview.og_scrape_url, linkPreview);
43
+ dispatch({
44
+ linkPreviews: previewToRemoveMap,
45
+ mode: SetLinkPreviewMode.UPSERT,
46
+ type: 'setLinkPreviews',
47
+ });
48
+ }, [onLinkPreviewDismissed]);
49
+ var findAndEnqueueURLsToEnrich = useCallback(debounce(function (text, mode) {
50
+ if (mode === void 0) { mode = SetLinkPreviewMode.SET; }
51
+ var urls = findURLFn
52
+ ? findURLFn(text)
53
+ : find(text, 'url').reduce(function (acc, link) {
54
+ if (link.isLink)
55
+ acc.push(link.href);
56
+ return acc;
57
+ }, []);
58
+ shouldDiscardEnrichQueries.current = urls.length === 0;
59
+ dispatch({
60
+ linkPreviews: urls.reduce(function (acc, url) {
61
+ acc.set(url, { og_scrape_url: url, state: LinkPreviewState.QUEUED });
62
+ return acc;
63
+ }, new Map()),
64
+ mode: mode,
65
+ type: 'setLinkPreviews',
66
+ });
67
+ }, debounceURLEnrichmentMs, { leading: false, trailing: true }), [debounceURLEnrichmentMs, shouldDiscardEnrichQueries, findURLFn]);
68
+ var cancelURLEnrichment = useCallback(function () {
69
+ findAndEnqueueURLsToEnrich.cancel();
70
+ findAndEnqueueURLsToEnrich('');
71
+ findAndEnqueueURLsToEnrich.flush();
72
+ }, [findAndEnqueueURLsToEnrich]);
73
+ useEffect(function () {
74
+ var enqueuedLinks = Array.from(linkPreviews.values()).reduce(function (acc, linkPreview) {
75
+ if (linkPreview.state === 'queued') {
76
+ var loadingLinkPreview = __assign(__assign({}, linkPreview), { state: LinkPreviewState.LOADING });
77
+ acc.set(linkPreview.og_scrape_url, loadingLinkPreview);
78
+ }
79
+ return acc;
80
+ }, new Map());
81
+ if (!enqueuedLinks.size)
82
+ return;
83
+ dispatch({
84
+ linkPreviews: enqueuedLinks,
85
+ mode: SetLinkPreviewMode.UPSERT,
86
+ type: 'setLinkPreviews',
87
+ });
88
+ enqueuedLinks.forEach(function (linkPreview) {
89
+ client
90
+ .enrichURL(linkPreview.og_scrape_url)
91
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
92
+ .then(function (_a) {
93
+ var duration = _a.duration, ogAttachment = __rest(_a, ["duration"]);
94
+ if (shouldDiscardEnrichQueries.current)
95
+ return;
96
+ var linkPreviewsMap = new Map();
97
+ linkPreviewsMap.set(linkPreview.og_scrape_url, __assign(__assign({}, ogAttachment), { state: LinkPreviewState.LOADED }));
98
+ dispatch({
99
+ linkPreviews: linkPreviewsMap,
100
+ mode: SetLinkPreviewMode.UPSERT,
101
+ type: 'setLinkPreviews',
102
+ });
103
+ })
104
+ .catch(function () {
105
+ var linkPreviewsMap = new Map();
106
+ linkPreviewsMap.set(linkPreview.og_scrape_url, __assign(__assign({}, linkPreview), { state: LinkPreviewState.FAILED }));
107
+ dispatch({
108
+ linkPreviews: linkPreviewsMap,
109
+ mode: SetLinkPreviewMode.UPSERT,
110
+ type: 'setLinkPreviews',
111
+ });
112
+ });
113
+ });
114
+ }, [shouldDiscardEnrichQueries, linkPreviews]);
115
+ return {
116
+ cancelURLEnrichment: cancelURLEnrichment,
117
+ dismissLinkPreview: dismissLinkPreview,
118
+ findAndEnqueueURLsToEnrich: (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.url_enrichment) && enrichURLForPreview ? findAndEnqueueURLsToEnrich : undefined,
119
+ };
120
+ };
@@ -1,39 +1,12 @@
1
1
  import React from 'react';
2
2
  import type { EmojiData, NimbleEmojiIndex } from 'emoji-mart';
3
- import type { FileLike } from 'react-file-utils';
3
+ import type { FileLike } from '../../ReactFileUtilities';
4
4
  import type { Attachment, Message, UserResponse } from 'stream-chat';
5
5
  import type { MessageInputProps } from '../MessageInput';
6
- import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
7
- export declare type FileUpload = {
8
- file: {
9
- name: string;
10
- lastModified?: number;
11
- lastModifiedDate?: Date;
12
- size?: number;
13
- type?: string;
14
- uri?: string;
15
- };
16
- id: string;
17
- state: 'finished' | 'failed' | 'uploading';
18
- thumb_url?: string;
19
- url?: string;
20
- };
21
- export declare type ImageUpload<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
22
- file: {
23
- name: string;
24
- height?: number;
25
- lastModified?: number;
26
- lastModifiedDate?: Date;
27
- size?: number;
28
- type?: string;
29
- uri?: string;
30
- width?: number;
31
- };
32
- id: string;
33
- state: 'finished' | 'failed' | 'uploading';
34
- previewUri?: string;
35
- url?: string;
36
- } & Pick<Attachment<StreamChatGenerics>, 'og_scrape_url' | 'title' | 'title_link' | 'author_name' | 'text'>;
6
+ import type { CustomTrigger, DefaultStreamChatGenerics, SendMessageOptions } from '../../../types/types';
7
+ import { EnrichURLsController } from './useLinkPreviews';
8
+ import type { FileUpload, ImageUpload, LinkPreviewMap } from '../types';
9
+ import { SetLinkPreviewMode } from '../types';
37
10
  export declare type MessageInputState<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
38
11
  attachments: Attachment<StreamChatGenerics>[];
39
12
  emojiPickerIsOpen: boolean;
@@ -41,6 +14,7 @@ export declare type MessageInputState<StreamChatGenerics extends DefaultStreamCh
41
14
  fileUploads: Record<string, FileUpload>;
42
15
  imageOrder: string[];
43
16
  imageUploads: Record<string, ImageUpload>;
17
+ linkPreviews: LinkPreviewMap;
44
18
  mentioned_users: UserResponse<StreamChatGenerics>[];
45
19
  setText: (text: string) => void;
46
20
  text: string;
@@ -72,6 +46,11 @@ declare type SetFileUploadAction = {
72
46
  thumb_url?: string;
73
47
  url?: string;
74
48
  };
49
+ declare type SetLinkPreviewsAction = {
50
+ linkPreviews: LinkPreviewMap;
51
+ mode: SetLinkPreviewMode;
52
+ type: 'setLinkPreviews';
53
+ };
75
54
  declare type RemoveImageUploadAction = {
76
55
  id: string;
77
56
  type: 'removeImageUpload';
@@ -84,13 +63,13 @@ declare type AddMentionedUserAction<StreamChatGenerics extends DefaultStreamChat
84
63
  type: 'addMentionedUser';
85
64
  user: UserResponse<StreamChatGenerics>;
86
65
  };
87
- export declare type MessageInputReducerAction<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = SetEmojiPickerIsOpenAction | SetTextAction | ClearAction | SetImageUploadAction | SetFileUploadAction | RemoveImageUploadAction | RemoveFileUploadAction | AddMentionedUserAction<StreamChatGenerics>;
88
- export declare type MessageInputHookProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
66
+ export declare type MessageInputReducerAction<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = SetEmojiPickerIsOpenAction | SetTextAction | ClearAction | SetImageUploadAction | SetFileUploadAction | SetLinkPreviewsAction | RemoveImageUploadAction | RemoveFileUploadAction | AddMentionedUserAction<StreamChatGenerics>;
67
+ export declare type MessageInputHookProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = EnrichURLsController & {
89
68
  closeEmojiPicker: React.MouseEventHandler<HTMLElement>;
90
69
  emojiPickerRef: React.MutableRefObject<HTMLDivElement | null>;
91
70
  handleChange: React.ChangeEventHandler<HTMLTextAreaElement>;
92
71
  handleEmojiKeyDown: React.KeyboardEventHandler<HTMLSpanElement>;
93
- handleSubmit: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>) => void;
72
+ handleSubmit: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>, options?: SendMessageOptions) => void;
94
73
  insertText: (textToInsert: string) => void;
95
74
  isUploadEnabled: boolean;
96
75
  maxFilesLeft: number;
@@ -120,6 +99,27 @@ export declare type MentionsListState = {
120
99
  /**
121
100
  * hook for MessageInput state
122
101
  */
123
- export declare const useMessageInputState: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>) => MessageInputState<StreamChatGenerics> & MessageInputHookProps<StreamChatGenerics> & CommandsListState & MentionsListState;
102
+ export declare const useMessageInputState: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>) => MessageInputState<StreamChatGenerics> & EnrichURLsController & {
103
+ closeEmojiPicker: React.MouseEventHandler<HTMLElement>;
104
+ emojiPickerRef: React.MutableRefObject<HTMLDivElement | null>;
105
+ handleChange: React.ChangeEventHandler<HTMLTextAreaElement>;
106
+ handleEmojiKeyDown: React.KeyboardEventHandler<HTMLSpanElement>;
107
+ handleSubmit: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>> | undefined, options?: SendMessageOptions) => void;
108
+ insertText: (textToInsert: string) => void;
109
+ isUploadEnabled: boolean;
110
+ maxFilesLeft: number;
111
+ numberOfUploads: number;
112
+ onPaste: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;
113
+ onSelectEmoji: (emoji: EmojiData) => void;
114
+ onSelectUser: (item: UserResponse<StreamChatGenerics>) => void;
115
+ openEmojiPicker: React.MouseEventHandler<HTMLSpanElement>;
116
+ removeFile: (id: string) => void;
117
+ removeImage: (id: string) => void;
118
+ textareaRef: React.MutableRefObject<HTMLTextAreaElement | null | undefined>;
119
+ uploadFile: (id: string) => void;
120
+ uploadImage: (id: string) => void;
121
+ uploadNewFiles: (files: FileList | File[]) => void;
122
+ emojiIndex?: NimbleEmojiIndex | undefined;
123
+ } & CommandsListState & MentionsListState;
124
124
  export {};
125
125
  //# sourceMappingURL=useMessageInputState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMessageInputState.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useMessageInputState.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputState.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ import { useMessageInputText } from './useMessageInputText';
18
18
  import { useEmojiPicker } from './useEmojiPicker';
19
19
  import { useSubmitHandler } from './useSubmitHandler';
20
20
  import { usePasteHandler } from './usePasteHandler';
21
+ import { useLinkPreviews } from './useLinkPreviews';
22
+ import { LinkPreviewState, SetLinkPreviewMode } from '../types';
21
23
  var makeEmptyMessageInputState = function () { return ({
22
24
  attachments: [],
23
25
  emojiPickerIsOpen: false,
@@ -25,6 +27,7 @@ var makeEmptyMessageInputState = function () { return ({
25
27
  fileUploads: {},
26
28
  imageOrder: [],
27
29
  imageUploads: {},
30
+ linkPreviews: new Map(),
28
31
  mentioned_users: [],
29
32
  setText: function () { return null; },
30
33
  text: '',
@@ -33,7 +36,7 @@ var makeEmptyMessageInputState = function () { return ({
33
36
  * Initializes the state. Empty if the message prop is falsy.
34
37
  */
35
38
  var initState = function (message) {
36
- var _a, _b, _c, _d, _e;
39
+ var _a, _b, _c, _d, _e, _f, _g;
37
40
  if (!message) {
38
41
  return makeEmptyMessageInputState();
39
42
  }
@@ -78,9 +81,15 @@ var initState = function (message) {
78
81
  };
79
82
  return acc;
80
83
  }, {})) !== null && _d !== void 0 ? _d : {};
84
+ var linkPreviews = (_f = (_e = message.attachments) === null || _e === void 0 ? void 0 : _e.reduce(function (acc, attachment) {
85
+ if (!attachment.og_scrape_url)
86
+ return acc;
87
+ acc.set(attachment.og_scrape_url, __assign(__assign({}, attachment), { state: LinkPreviewState.LOADED }));
88
+ return acc;
89
+ }, new Map())) !== null && _f !== void 0 ? _f : new Map();
81
90
  var imageOrder = Object.keys(imageUploads);
82
91
  var fileOrder = Object.keys(fileUploads);
83
- var attachments = ((_e = message.attachments) === null || _e === void 0 ? void 0 : _e.filter(function (_a) {
92
+ var attachments = ((_g = message.attachments) === null || _g === void 0 ? void 0 : _g.filter(function (_a) {
84
93
  var type = _a.type;
85
94
  return type !== 'file' && type !== 'image';
86
95
  })) || [];
@@ -92,6 +101,7 @@ var initState = function (message) {
92
101
  fileUploads: fileUploads,
93
102
  imageOrder: imageOrder,
94
103
  imageUploads: imageUploads,
104
+ linkPreviews: linkPreviews,
95
105
  mentioned_users: mentioned_users,
96
106
  setText: function () { return null; },
97
107
  text: message.text || '',
@@ -127,6 +137,32 @@ var messageInputReducer = function (state, action) {
127
137
  delete newUploadFields.type;
128
138
  return __assign(__assign({}, state), { fileOrder: fileOrder, fileUploads: __assign(__assign({}, state.fileUploads), (_b = {}, _b[action.id] = __assign(__assign({}, state.fileUploads[action.id]), newUploadFields), _b)) });
129
139
  }
140
+ case 'setLinkPreviews': {
141
+ var linkPreviews_1 = new Map(state.linkPreviews);
142
+ if (action.mode === SetLinkPreviewMode.REMOVE) {
143
+ Array.from(action.linkPreviews.keys()).forEach(function (key) {
144
+ linkPreviews_1.delete(key);
145
+ });
146
+ }
147
+ else {
148
+ Array.from(action.linkPreviews.values()).reduce(function (acc, linkPreview) {
149
+ var existingPreview = acc.get(linkPreview.og_scrape_url);
150
+ var alreadyEnqueued = linkPreview.state === LinkPreviewState.QUEUED &&
151
+ (existingPreview === null || existingPreview === void 0 ? void 0 : existingPreview.state) !== LinkPreviewState.FAILED;
152
+ if (existingPreview && alreadyEnqueued)
153
+ return acc;
154
+ acc.set(linkPreview.og_scrape_url, linkPreview);
155
+ return acc;
156
+ }, linkPreviews_1);
157
+ if (action.mode === SetLinkPreviewMode.SET) {
158
+ Array.from(state.linkPreviews.keys()).forEach(function (key) {
159
+ if (!action.linkPreviews.get(key))
160
+ linkPreviews_1.delete(key);
161
+ });
162
+ }
163
+ }
164
+ return __assign(__assign({}, state), { linkPreviews: linkPreviews_1 });
165
+ }
130
166
  case 'removeImageUpload': {
131
167
  if (!state.imageUploads[action.id])
132
168
  return state; // cannot remove anything
@@ -151,17 +187,19 @@ var messageInputReducer = function (state, action) {
151
187
  * hook for MessageInput state
152
188
  */
153
189
  export var useMessageInputState = function (props) {
154
- var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, getDefaultValue = props.getDefaultValue, message = props.message;
155
- var _a = useChannelStateContext('useMessageInputState'), _b = _a.channelCapabilities, channelCapabilities = _b === void 0 ? {} : _b, channelConfig = _a.channelConfig;
190
+ var _a;
191
+ var additionalTextareaProps = props.additionalTextareaProps, closeEmojiPickerOnClick = props.closeEmojiPickerOnClick, getDefaultValue = props.getDefaultValue, message = props.message, urlEnrichmentConfig = props.urlEnrichmentConfig;
192
+ var _b = useChannelStateContext('useMessageInputState'), _c = _b.channelCapabilities, channelCapabilities = _c === void 0 ? {} : _c, channelConfig = _b.channelConfig, enrichURLForPreviewChannelContext = _b.enrichURLForPreview;
156
193
  var defaultValue = (getDefaultValue === null || getDefaultValue === void 0 ? void 0 : getDefaultValue()) || (additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue);
157
194
  var initialStateValue = message ||
158
195
  (Array.isArray(defaultValue)
159
196
  ? { text: defaultValue.join('') }
160
197
  : { text: defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.toString() });
161
- var _c = useReducer(messageInputReducer, initialStateValue, initState), state = _c[0], dispatch = _c[1];
162
- var _d = useMessageInputText(props, state, dispatch), handleChange = _d.handleChange, insertText = _d.insertText, textareaRef = _d.textareaRef;
163
- var _e = useState(false), showCommandsList = _e[0], setShowCommandsList = _e[1];
164
- var _f = useState(false), showMentionsList = _f[0], setShowMentionsList = _f[1];
198
+ var _d = useReducer(messageInputReducer, initialStateValue, initState), state = _d[0], dispatch = _d[1];
199
+ var enrichURLsController = useLinkPreviews(__assign(__assign({ dispatch: dispatch, linkPreviews: state.linkPreviews }, urlEnrichmentConfig), { enrichURLForPreview: (_a = urlEnrichmentConfig === null || urlEnrichmentConfig === void 0 ? void 0 : urlEnrichmentConfig.enrichURLForPreview) !== null && _a !== void 0 ? _a : enrichURLForPreviewChannelContext }));
200
+ var _e = useMessageInputText(props, state, dispatch, enrichURLsController.findAndEnqueueURLsToEnrich), handleChange = _e.handleChange, insertText = _e.insertText, textareaRef = _e.textareaRef;
201
+ var _f = useState(false), showCommandsList = _f[0], setShowCommandsList = _f[1];
202
+ var _g = useState(false), showMentionsList = _g[0], setShowMentionsList = _g[1];
165
203
  var openCommandsList = function () {
166
204
  dispatch({
167
205
  getNewText: function () { return '/'; },
@@ -178,18 +216,18 @@ export var useMessageInputState = function (props) {
178
216
  setShowMentionsList(true);
179
217
  };
180
218
  var closeMentionsList = function () { return setShowMentionsList(false); };
181
- var _g = useEmojiPicker(state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick), closeEmojiPicker = _g.closeEmojiPicker, emojiPickerRef = _g.emojiPickerRef, handleEmojiKeyDown = _g.handleEmojiKeyDown, onSelectEmoji = _g.onSelectEmoji, openEmojiPicker = _g.openEmojiPicker;
182
- var _h = useAttachments(props, state, dispatch, textareaRef), maxFilesLeft = _h.maxFilesLeft, numberOfUploads = _h.numberOfUploads, removeFile = _h.removeFile, removeImage = _h.removeImage, uploadFile = _h.uploadFile, uploadImage = _h.uploadImage, uploadNewFiles = _h.uploadNewFiles;
183
- var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads).handleSubmit;
219
+ var _h = useEmojiPicker(state, dispatch, insertText, textareaRef, closeEmojiPickerOnClick), closeEmojiPicker = _h.closeEmojiPicker, emojiPickerRef = _h.emojiPickerRef, handleEmojiKeyDown = _h.handleEmojiKeyDown, onSelectEmoji = _h.onSelectEmoji, openEmojiPicker = _h.openEmojiPicker;
220
+ var _j = useAttachments(props, state, dispatch, textareaRef), maxFilesLeft = _j.maxFilesLeft, numberOfUploads = _j.numberOfUploads, removeFile = _j.removeFile, removeImage = _j.removeImage, uploadFile = _j.uploadFile, uploadImage = _j.uploadImage, uploadNewFiles = _j.uploadNewFiles;
221
+ var handleSubmit = useSubmitHandler(props, state, dispatch, numberOfUploads, enrichURLsController).handleSubmit;
184
222
  var isUploadEnabled = (channelConfig === null || channelConfig === void 0 ? void 0 : channelConfig.uploads) !== false && channelCapabilities['upload-file'] !== false;
185
- var onPaste = usePasteHandler(uploadNewFiles, insertText, isUploadEnabled).onPaste;
223
+ var onPaste = usePasteHandler(uploadNewFiles, insertText, isUploadEnabled, enrichURLsController.findAndEnqueueURLsToEnrich).onPaste;
186
224
  var onSelectUser = useCallback(function (item) {
187
225
  dispatch({ type: 'addMentionedUser', user: item });
188
226
  }, []);
189
227
  var setText = useCallback(function (text) {
190
228
  dispatch({ getNewText: function () { return text; }, type: 'setText' });
191
229
  }, []);
192
- return __assign(__assign({}, state), { closeCommandsList: closeCommandsList,
230
+ return __assign(__assign(__assign({}, state), enrichURLsController), { closeCommandsList: closeCommandsList,
193
231
  /**
194
232
  * TODO: fix the below at some point because this type casting is wrong
195
233
  * and just forced to not have warnings currently with the unknown casting
@@ -1,7 +1,8 @@
1
1
  import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
2
2
  import type { MessageInputProps } from '../MessageInput';
3
3
  import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
4
- export declare const useMessageInputText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>) => {
4
+ import type { EnrichURLsController } from './useLinkPreviews';
5
+ export declare const useMessageInputText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
5
6
  handleChange: import("react").ChangeEventHandler<HTMLTextAreaElement>;
6
7
  insertText: (textToInsert: string) => void;
7
8
  textareaRef: import("react").MutableRefObject<HTMLTextAreaElement | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"useMessageInputText.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,mBAAmB;;+BAyBb,MAAM;;CAsExB,CAAC"}
1
+ {"version":3,"file":"useMessageInputText.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useMessageInputText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,eAAO,MAAM,mBAAmB,6UAOD,oBAAoB,CAAC,4BAA4B,CAAC;;+BAmB9D,MAAM;;CAyExB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { useCallback, useEffect, useRef } from 'react';
2
2
  import { logChatPromiseExecution } from 'stream-chat';
3
3
  import { useChannelStateContext } from '../../../context/ChannelStateContext';
4
- export var useMessageInputText = function (props, state, dispatch) {
4
+ export var useMessageInputText = function (props, state, dispatch, findAndEnqueueURLsToEnrich) {
5
5
  var channel = useChannelStateContext('useMessageInputText').channel;
6
6
  var additionalTextareaProps = props.additionalTextareaProps, focus = props.focus, parent = props.parent, _a = props.publishTypingEvent, publishTypingEvent = _a === void 0 ? true : _a;
7
7
  var text = state.text;
@@ -60,10 +60,11 @@ export var useMessageInputText = function (props, state, dispatch) {
60
60
  getNewText: function () { return newText; },
61
61
  type: 'setText',
62
62
  });
63
+ findAndEnqueueURLsToEnrich === null || findAndEnqueueURLsToEnrich === void 0 ? void 0 : findAndEnqueueURLsToEnrich(newText);
63
64
  if (publishTypingEvent && newText && channel) {
64
65
  logChatPromiseExecution(channel.keystroke(parent === null || parent === void 0 ? void 0 : parent.id), 'start typing event');
65
66
  }
66
- }, [channel, parent, publishTypingEvent]);
67
+ }, [channel, findAndEnqueueURLsToEnrich, parent, publishTypingEvent]);
67
68
  return {
68
69
  handleChange: handleChange,
69
70
  insertText: insertText,
@@ -1,5 +1,6 @@
1
- import { FileLike } from 'react-file-utils';
2
- export declare const usePasteHandler: (uploadNewFiles: (files: FileList | FileLike[] | File[]) => void, insertText: (textToInsert: string) => void, isUploadEnabled: boolean) => {
1
+ import { FileLike } from '../../ReactFileUtilities';
2
+ import type { EnrichURLsController } from './useLinkPreviews';
3
+ export declare const usePasteHandler: (uploadNewFiles: (files: FileList | FileLike[] | File[]) => void, insertText: (textToInsert: string) => void, isUploadEnabled: boolean, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
3
4
  onPaste: (clipboardEvent: React.ClipboardEvent<HTMLTextAreaElement>) => void;
4
5
  };
5
6
  //# sourceMappingURL=usePasteHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePasteHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/usePasteHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAElG,eAAO,MAAM,eAAe,2BACF,QAAQ,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,KAAK,IAAI,6BACpC,MAAM,KAAK,IAAI,mBACzB,OAAO;8BAGL,oBAAoB,CAAC,mBAAmB,CAAC;CAyC7D,CAAC"}
1
+ {"version":3,"file":"usePasteHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/usePasteHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,eAAO,MAAM,eAAe,2BACF,QAAQ,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,KAAK,IAAI,6BACpC,MAAM,KAAK,IAAI,mBACzB,OAAO,+BACK,oBAAoB,CAAC,4BAA4B,CAAC;8BAG5D,oBAAoB,CAAC,mBAAmB,CAAC;CA2C7D,CAAC"}
@@ -35,8 +35,9 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
35
  }
36
36
  };
37
37
  import { useCallback } from 'react';
38
- import { dataTransferItemsHaveFiles, dataTransferItemsToFiles } from 'react-file-utils';
39
- export var usePasteHandler = function (uploadNewFiles, insertText, isUploadEnabled) {
38
+ import { dataTransferItemsHaveFiles, dataTransferItemsToFiles, } from '../../ReactFileUtilities';
39
+ import { SetLinkPreviewMode } from '../types';
40
+ export var usePasteHandler = function (uploadNewFiles, insertText, isUploadEnabled, findAndEnqueueURLsToEnrich) {
40
41
  var onPaste = useCallback(function (clipboardEvent) {
41
42
  if (!isUploadEnabled)
42
43
  return;
@@ -78,6 +79,8 @@ export var usePasteHandler = function (uploadNewFiles, insertText, isUploadEnabl
78
79
  case 2:
79
80
  pastedText = _a.sent();
80
81
  insertText(pastedText);
82
+ findAndEnqueueURLsToEnrich === null || findAndEnqueueURLsToEnrich === void 0 ? void 0 : findAndEnqueueURLsToEnrich(pastedText, SetLinkPreviewMode.UPSERT);
83
+ findAndEnqueueURLsToEnrich === null || findAndEnqueueURLsToEnrich === void 0 ? void 0 : findAndEnqueueURLsToEnrich.flush();
81
84
  _a.label = 3;
82
85
  case 3: return [2 /*return*/];
83
86
  }
@@ -2,7 +2,8 @@ import type { Message } from 'stream-chat';
2
2
  import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
3
3
  import type { MessageInputProps } from '../MessageInput';
4
4
  import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
5
- export declare const useSubmitHandler: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>, numberOfUploads: number) => {
5
+ import type { EnrichURLsController } from './useLinkPreviews';
6
+ export declare const useSubmitHandler: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>, numberOfUploads: number, enrichURLsController: EnrichURLsController) => {
6
7
  handleSubmit: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>> | undefined) => Promise<void>;
7
8
  };
8
9
  //# sourceMappingURL=useSubmitHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSubmitHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useSubmitHandler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,OAAO,EAAkB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAQrF,eAAO,MAAM,gBAAgB,iUAOV,MAAM;0BA6Ed,MAAM,kBAAkB;CAqGlC,CAAC"}
1
+ {"version":3,"file":"useSubmitHandler.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useSubmitHandler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,OAAO,EAAkB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAS9D,eAAO,MAAM,gBAAgB,iUAOV,MAAM,wBACD,oBAAoB;0BA+EjC,MAAM,kBAAkB;CAgJlC,CAAC"}