stream-chat-react-native-core 5.8.0-beta.2 → 5.8.0-beta.4
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/ChannelPreview/hooks/useChannelPreviewDisplayName.js +8 -2
- package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +50 -34
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +17 -7
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +8 -2
- package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +50 -34
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +17 -7
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/package.json +2 -2
- package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.tsx +2 -2
- package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayName.ts +10 -2
- package/src/components/MessageInput/MessageInput.tsx +34 -5
- package/src/components/MessageInput/__tests__/MessageInput.test.js +61 -11
- package/src/contexts/messageInputContext/MessageInputContext.tsx +21 -10
- package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +26 -0
- package/src/version.json +1 -1
- package/src/components/MessageInput/__tests__/__snapshots__/MessageInput.test.js.snap +0 -746
|
@@ -251,17 +251,26 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
251
251
|
});
|
|
252
252
|
}
|
|
253
253
|
}, [imagesForInput]);
|
|
254
|
+
var MEGA_BYTES_TO_BYTES = 1024 * 1024;
|
|
255
|
+
var MAX_FILE_SIZE_TO_UPLOAD_IN_MB = 100;
|
|
254
256
|
|
|
255
257
|
var uploadImagesHandler = function uploadImagesHandler() {
|
|
256
|
-
var
|
|
258
|
+
var imageToUpload = selectedImages.find(function (selectedImage) {
|
|
257
259
|
var uploadedImage = imageUploads.find(function (imageUpload) {
|
|
258
260
|
return imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri;
|
|
259
261
|
});
|
|
260
262
|
return !uploadedImage;
|
|
261
263
|
});
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
|
|
265
|
+
if (imageToUpload && Number(imageToUpload.fileSize) / MEGA_BYTES_TO_BYTES > MAX_FILE_SIZE_TO_UPLOAD_IN_MB) {
|
|
266
|
+
_reactNative.Alert.alert("Maximum file size upload limit reached, please upload an image below " + MAX_FILE_SIZE_TO_UPLOAD_IN_MB + "MB.");
|
|
267
|
+
|
|
268
|
+
setSelectedImages(selectedImages.filter(function (selectedImage) {
|
|
269
|
+
return selectedImage.uri !== imageToUpload.uri;
|
|
270
|
+
}));
|
|
271
|
+
} else {
|
|
272
|
+
if (imageToUpload) uploadNewImage(imageToUpload);
|
|
273
|
+
}
|
|
265
274
|
};
|
|
266
275
|
|
|
267
276
|
var removeImagesHandler = function removeImagesHandler() {
|
|
@@ -286,15 +295,22 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
286
295
|
}, [selectedImagesLength]);
|
|
287
296
|
(0, _react.useEffect)(function () {
|
|
288
297
|
if (selectedFilesLength > fileUploadsLength) {
|
|
289
|
-
var
|
|
298
|
+
var fileToUpload = selectedFiles.find(function (selectedFile) {
|
|
290
299
|
var uploadedFile = fileUploads.find(function (fileUpload) {
|
|
291
300
|
return fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri;
|
|
292
301
|
});
|
|
293
302
|
return !uploadedFile;
|
|
294
303
|
});
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
304
|
+
|
|
305
|
+
if (fileToUpload && Number(fileToUpload.size) / MEGA_BYTES_TO_BYTES > MAX_FILE_SIZE_TO_UPLOAD_IN_MB) {
|
|
306
|
+
_reactNative.Alert.alert("Maximum file size upload limit reached, please upload a file below " + MAX_FILE_SIZE_TO_UPLOAD_IN_MB + "MB.");
|
|
307
|
+
|
|
308
|
+
setSelectedFiles(selectedFiles.filter(function (selectedFile) {
|
|
309
|
+
return selectedFile.uri !== fileToUpload.uri;
|
|
310
|
+
}));
|
|
311
|
+
} else {
|
|
312
|
+
if (fileToUpload) uploadNewFile(fileToUpload);
|
|
313
|
+
}
|
|
298
314
|
} else {
|
|
299
315
|
var filesToRemove = fileUploads.filter(function (fileUpload) {
|
|
300
316
|
return !selectedFiles.find(function (selectedFile) {
|
|
@@ -430,21 +446,21 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
430
446
|
__self: _this,
|
|
431
447
|
__source: {
|
|
432
448
|
fileName: _jsxFileName,
|
|
433
|
-
lineNumber:
|
|
449
|
+
lineNumber: 511,
|
|
434
450
|
columnNumber: 7
|
|
435
451
|
}
|
|
436
452
|
}, editing && _react["default"].createElement(InputEditingStateHeader, {
|
|
437
453
|
__self: _this,
|
|
438
454
|
__source: {
|
|
439
455
|
fileName: _jsxFileName,
|
|
440
|
-
lineNumber:
|
|
456
|
+
lineNumber: 519,
|
|
441
457
|
columnNumber: 21
|
|
442
458
|
}
|
|
443
459
|
}), quotedMessage && _react["default"].createElement(InputReplyStateHeader, {
|
|
444
460
|
__self: _this,
|
|
445
461
|
__source: {
|
|
446
462
|
fileName: _jsxFileName,
|
|
447
|
-
lineNumber:
|
|
463
|
+
lineNumber: 520,
|
|
448
464
|
columnNumber: 27
|
|
449
465
|
}
|
|
450
466
|
}), _react["default"].createElement(_reactNative.View, {
|
|
@@ -452,7 +468,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
452
468
|
__self: _this,
|
|
453
469
|
__source: {
|
|
454
470
|
fileName: _jsxFileName,
|
|
455
|
-
lineNumber:
|
|
471
|
+
lineNumber: 521,
|
|
456
472
|
columnNumber: 9
|
|
457
473
|
}
|
|
458
474
|
}, Input ? _react["default"].createElement(Input, {
|
|
@@ -461,7 +477,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
461
477
|
__self: _this,
|
|
462
478
|
__source: {
|
|
463
479
|
fileName: _jsxFileName,
|
|
464
|
-
lineNumber:
|
|
480
|
+
lineNumber: 523,
|
|
465
481
|
columnNumber: 13
|
|
466
482
|
}
|
|
467
483
|
}) : _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_reactNative.View, {
|
|
@@ -469,14 +485,14 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
469
485
|
__self: _this,
|
|
470
486
|
__source: {
|
|
471
487
|
fileName: _jsxFileName,
|
|
472
|
-
lineNumber:
|
|
488
|
+
lineNumber: 529,
|
|
473
489
|
columnNumber: 15
|
|
474
490
|
}
|
|
475
491
|
}, InputButtons && _react["default"].createElement(InputButtons, {
|
|
476
492
|
__self: _this,
|
|
477
493
|
__source: {
|
|
478
494
|
fileName: _jsxFileName,
|
|
479
|
-
lineNumber:
|
|
495
|
+
lineNumber: 530,
|
|
480
496
|
columnNumber: 34
|
|
481
497
|
}
|
|
482
498
|
})), _react["default"].createElement(_reactNative.View, {
|
|
@@ -487,7 +503,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
487
503
|
__self: _this,
|
|
488
504
|
__source: {
|
|
489
505
|
fileName: _jsxFileName,
|
|
490
|
-
lineNumber:
|
|
506
|
+
lineNumber: 532,
|
|
491
507
|
columnNumber: 15
|
|
492
508
|
}
|
|
493
509
|
}, (typeof editing !== 'boolean' && (editing == null ? void 0 : editing.quoted_message) || quotedMessage) && _react["default"].createElement(_reactNative.View, {
|
|
@@ -495,21 +511,21 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
495
511
|
__self: _this,
|
|
496
512
|
__source: {
|
|
497
513
|
fileName: _jsxFileName,
|
|
498
|
-
lineNumber:
|
|
514
|
+
lineNumber: 543,
|
|
499
515
|
columnNumber: 19
|
|
500
516
|
}
|
|
501
517
|
}, _react["default"].createElement(Reply, {
|
|
502
518
|
__self: _this,
|
|
503
519
|
__source: {
|
|
504
520
|
fileName: _jsxFileName,
|
|
505
|
-
lineNumber:
|
|
521
|
+
lineNumber: 544,
|
|
506
522
|
columnNumber: 21
|
|
507
523
|
}
|
|
508
524
|
})), imageUploads.length ? _react["default"].createElement(ImageUploadPreview, {
|
|
509
525
|
__self: _this,
|
|
510
526
|
__source: {
|
|
511
527
|
fileName: _jsxFileName,
|
|
512
|
-
lineNumber:
|
|
528
|
+
lineNumber: 547,
|
|
513
529
|
columnNumber: 40
|
|
514
530
|
}
|
|
515
531
|
}) : null, imageUploads.length && fileUploads.length ? _react["default"].createElement(_reactNative.View, {
|
|
@@ -520,14 +536,14 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
520
536
|
__self: _this,
|
|
521
537
|
__source: {
|
|
522
538
|
fileName: _jsxFileName,
|
|
523
|
-
lineNumber:
|
|
539
|
+
lineNumber: 549,
|
|
524
540
|
columnNumber: 19
|
|
525
541
|
}
|
|
526
542
|
}) : null, fileUploads.length ? _react["default"].createElement(FileUploadPreview, {
|
|
527
543
|
__self: _this,
|
|
528
544
|
__source: {
|
|
529
545
|
fileName: _jsxFileName,
|
|
530
|
-
lineNumber:
|
|
546
|
+
lineNumber: 559,
|
|
531
547
|
columnNumber: 39
|
|
532
548
|
}
|
|
533
549
|
}) : null, giphyActive ? _react["default"].createElement(InputGiphySearch, {
|
|
@@ -535,7 +551,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
535
551
|
__self: _this,
|
|
536
552
|
__source: {
|
|
537
553
|
fileName: _jsxFileName,
|
|
538
|
-
lineNumber:
|
|
554
|
+
lineNumber: 561,
|
|
539
555
|
columnNumber: 19
|
|
540
556
|
}
|
|
541
557
|
}) : _react["default"].createElement(_reactNative.View, {
|
|
@@ -543,7 +559,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
543
559
|
__self: _this,
|
|
544
560
|
__source: {
|
|
545
561
|
fileName: _jsxFileName,
|
|
546
|
-
lineNumber:
|
|
562
|
+
lineNumber: 563,
|
|
547
563
|
columnNumber: 19
|
|
548
564
|
}
|
|
549
565
|
}, _react["default"].createElement(_AutoCompleteInput.AutoCompleteInput, {
|
|
@@ -552,7 +568,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
552
568
|
__self: _this,
|
|
553
569
|
__source: {
|
|
554
570
|
fileName: _jsxFileName,
|
|
555
|
-
lineNumber:
|
|
571
|
+
lineNumber: 564,
|
|
556
572
|
columnNumber: 21
|
|
557
573
|
}
|
|
558
574
|
}))), _react["default"].createElement(_reactNative.View, {
|
|
@@ -560,7 +576,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
560
576
|
__self: _this,
|
|
561
577
|
__source: {
|
|
562
578
|
fileName: _jsxFileName,
|
|
563
|
-
lineNumber:
|
|
579
|
+
lineNumber: 571,
|
|
564
580
|
columnNumber: 15
|
|
565
581
|
}
|
|
566
582
|
}, cooldownRemainingSeconds ? _react["default"].createElement(CooldownTimer, {
|
|
@@ -568,7 +584,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
568
584
|
__self: _this,
|
|
569
585
|
__source: {
|
|
570
586
|
fileName: _jsxFileName,
|
|
571
|
-
lineNumber:
|
|
587
|
+
lineNumber: 573,
|
|
572
588
|
columnNumber: 19
|
|
573
589
|
}
|
|
574
590
|
}) : _react["default"].createElement(SendButton, {
|
|
@@ -576,7 +592,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
576
592
|
__self: _this,
|
|
577
593
|
__source: {
|
|
578
594
|
fileName: _jsxFileName,
|
|
579
|
-
lineNumber:
|
|
595
|
+
lineNumber: 575,
|
|
580
596
|
columnNumber: 19
|
|
581
597
|
}
|
|
582
598
|
})))), _react["default"].createElement(ShowThreadMessageInChannelButton, {
|
|
@@ -584,7 +600,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
584
600
|
__self: _this,
|
|
585
601
|
__source: {
|
|
586
602
|
fileName: _jsxFileName,
|
|
587
|
-
lineNumber:
|
|
603
|
+
lineNumber: 585,
|
|
588
604
|
columnNumber: 9
|
|
589
605
|
}
|
|
590
606
|
})), triggerType && suggestions ? _react["default"].createElement(_reactNative.View, {
|
|
@@ -595,7 +611,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
595
611
|
__self: _this,
|
|
596
612
|
__source: {
|
|
597
613
|
fileName: _jsxFileName,
|
|
598
|
-
lineNumber:
|
|
614
|
+
lineNumber: 589,
|
|
599
615
|
columnNumber: 9
|
|
600
616
|
}
|
|
601
617
|
}, _react["default"].createElement(AutoCompleteSuggestionList, {
|
|
@@ -607,7 +623,7 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
607
623
|
__self: _this,
|
|
608
624
|
__source: {
|
|
609
625
|
fileName: _jsxFileName,
|
|
610
|
-
lineNumber:
|
|
626
|
+
lineNumber: 596,
|
|
611
627
|
columnNumber: 11
|
|
612
628
|
}
|
|
613
629
|
})) : null, selectedPicker && _react["default"].createElement(_reactNative.View, {
|
|
@@ -618,14 +634,14 @@ var MessageInputWithContext = function MessageInputWithContext(props) {
|
|
|
618
634
|
__self: _this,
|
|
619
635
|
__source: {
|
|
620
636
|
fileName: _jsxFileName,
|
|
621
|
-
lineNumber:
|
|
637
|
+
lineNumber: 606,
|
|
622
638
|
columnNumber: 9
|
|
623
639
|
}
|
|
624
640
|
}, _react["default"].createElement(_AttachmentSelectionBar.AttachmentSelectionBar, {
|
|
625
641
|
__self: _this,
|
|
626
642
|
__source: {
|
|
627
643
|
fileName: _jsxFileName,
|
|
628
|
-
lineNumber:
|
|
644
|
+
lineNumber: 618,
|
|
629
645
|
columnNumber: 11
|
|
630
646
|
}
|
|
631
647
|
})));
|
|
@@ -783,7 +799,7 @@ var MessageInput = function MessageInput(props) {
|
|
|
783
799
|
__self: _this,
|
|
784
800
|
__source: {
|
|
785
801
|
fileName: _jsxFileName,
|
|
786
|
-
lineNumber:
|
|
802
|
+
lineNumber: 824,
|
|
787
803
|
columnNumber: 12
|
|
788
804
|
}
|
|
789
805
|
});
|
|
@@ -843,7 +859,7 @@ var MessageInput = function MessageInput(props) {
|
|
|
843
859
|
__self: _this,
|
|
844
860
|
__source: {
|
|
845
861
|
fileName: _jsxFileName,
|
|
846
|
-
lineNumber:
|
|
862
|
+
lineNumber: 828,
|
|
847
863
|
columnNumber: 5
|
|
848
864
|
}
|
|
849
865
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageInput.tsx"],"names":["styles","StyleSheet","create","attachmentSeparator","borderBottomWidth","marginBottom","autoCompleteInputContainer","alignItems","flexDirection","paddingLeft","paddingRight","composerContainer","container","borderTopWidth","padding","inputBoxContainer","borderRadius","borderWidth","flex","optionsContainer","paddingBottom","replyContainer","paddingHorizontal","sendButtonContainer","suggestionsListContainer","elevation","left","position","right","shadowOffset","height","width","shadowOpacity","MessageInputWithContext","props","additionalTextInputProps","asyncIds","asyncUploads","AutoCompleteSuggestionList","closeAttachmentPicker","cooldownEndsAt","CooldownTimer","disabled","editing","FileUploadPreview","fileUploads","giphyActive","ImageUploadPreview","imageUploads","Input","inputBoxRef","InputButtons","InputEditingStateHeader","InputGiphySearch","InputReplyStateHeader","isOnline","isValidMessage","maxNumberOfFiles","members","mentionedUsers","numberOfUploads","quotedMessage","removeFile","removeImage","Reply","resetInput","SendButton","sending","sendMessageAsync","ShowThreadMessageInChannelButton","suggestions","thread","threadList","triggerType","uploadNewFile","uploadNewImage","watchers","setHeight","theme","colors","border","grey_whisper","white","white_smoke","messageInput","attachmentSelectionBar","suggestionListContainer","attachmentPickerBottomSheetHeight","attachmentSelectionBarHeight","bottomInset","selectedFiles","selectedImages","selectedPicker","setMaxNumberOfFiles","setSelectedFiles","setSelectedImages","cooldownRemainingSeconds","seconds","hasResetImages","setHasResetImages","hasResetFiles","setHasResetFiles","selectedImagesLength","length","imageUploadsLength","selectedFilesLength","fileUploadsLength","imagesForInput","forEach","image","id","file","uploadImagesHandler","imagesToUpload","filter","selectedImage","uploadedImage","find","imageUpload","uri","url","removeImagesHandler","imagesToRemove","filesToUpload","selectedFile","uploadedFile","fileUpload","filesToRemove","updatedSelectedImages","map","source","Boolean","updatedSelectedFiles","duration","name","size","type","editingExists","current","focus","asyncIdsString","join","asyncUploadsString","Object","values","state","keys","getMembers","result","member","user","push","getUsers","users","getWatchers","uniqueUsers","usersArray","additionalTextInputContainerProps","editable","undefined","newHeight","nativeEvent","layout","backgroundColor","borderColor","paddingVertical","quoted_message","borderBottomColor","marginHorizontal","bottom","data","onSelect","queryText","areEqual","prevProps","nextProps","prevAdditionalTextInputProps","prevAsyncUploads","prevDisabled","prevEditing","prevFileUploads","prevGiphyActive","prevImageUploads","prevIsOnline","prevIsValidMessage","prevMentionedUsers","prevQuotedMessage","prevSending","prevShowMoreOptions","showMoreOptions","prevSuggestions","prevT","t","prevThread","prevThreadList","nextAdditionalTextInputProps","nextAsyncUploads","nextDisabled","nextEditing","nextFileUploads","nextGiphyActive","nextImageUploads","nextIsOnline","nextIsValidMessage","nextMentionedUsers","nextQuotedMessage","nextSending","nextShowMoreOptions","nextSuggestions","nextT","nextThread","nextThreadList","tEqual","additionalTextInputPropsEven","disabledEqual","editingEqual","imageUploadsEqual","giphyActiveEqual","quotedMessageEqual","sendingEqual","showMoreOptionsEqual","isOnlineEqual","isValidMessageEqual","asyncUploadsEqual","every","key","fileUploadsEqual","mentionedUsersEqual","suggestionsEqual","index","threadEqual","text","reply_count","threadListEqual","MemoizedMessageInput","React","memo","MessageInput","ownCapabilities","clearEditingState","clearQuotedMessageState","SendMessageDisallowedIndicator","setGiphyActive","setShowMoreOptions","AutoCompleteSuggestionHeader","AutoCompleteSuggestionItem","sendMessage","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { useCountdown } from './hooks/useCountdown';\n\nimport { ChatContextValue, useChatContext } from '../../contexts';\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport {\n SuggestionsContextValue,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport type { Asset, DefaultStreamChatGenerics } from '../../types/types';\nimport { AttachmentSelectionBar } from '../AttachmentPicker/components/AttachmentSelectionBar';\nimport { AutoCompleteInput } from '../AutoCompleteInput/AutoCompleteInput';\n\nconst styles = StyleSheet.create({\n attachmentSeparator: {\n borderBottomWidth: 1,\n marginBottom: 10,\n },\n autoCompleteInputContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingLeft: 16,\n paddingRight: 16,\n },\n composerContainer: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n container: {\n borderTopWidth: 1,\n padding: 10,\n },\n inputBoxContainer: {\n borderRadius: 20,\n borderWidth: 1,\n flex: 1,\n },\n optionsContainer: {\n flexDirection: 'row',\n paddingBottom: 10,\n paddingRight: 10,\n },\n replyContainer: { paddingBottom: 12, paddingHorizontal: 8 },\n sendButtonContainer: { paddingBottom: 10, paddingLeft: 10 },\n suggestionsListContainer: {\n borderRadius: 10,\n elevation: 3,\n left: 8,\n position: 'absolute',\n right: 8,\n shadowOffset: { height: 1, width: 0 },\n shadowOpacity: 0.15,\n },\n});\n\ntype MessageInputPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'isOnline'> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'disabled' | 'members' | 'watchers'> &\n Pick<\n MessageInputContextValue<StreamChatGenerics>,\n | 'additionalTextInputProps'\n | 'asyncIds'\n | 'asyncUploads'\n | 'cooldownEndsAt'\n | 'CooldownTimer'\n | 'clearEditingState'\n | 'clearQuotedMessageState'\n | 'closeAttachmentPicker'\n | 'editing'\n | 'FileUploadPreview'\n | 'fileUploads'\n | 'giphyActive'\n | 'ImageUploadPreview'\n | 'imageUploads'\n | 'Input'\n | 'inputBoxRef'\n | 'InputButtons'\n | 'InputEditingStateHeader'\n | 'InputGiphySearch'\n | 'InputReplyStateHeader'\n | 'isValidMessage'\n | 'maxNumberOfFiles'\n | 'mentionedUsers'\n | 'numberOfUploads'\n | 'quotedMessage'\n | 'resetInput'\n | 'SendButton'\n | 'sending'\n | 'sendMessageAsync'\n | 'setShowMoreOptions'\n | 'setGiphyActive'\n | 'showMoreOptions'\n | 'ShowThreadMessageInChannelButton'\n | 'removeFile'\n | 'removeImage'\n | 'uploadNewFile'\n | 'uploadNewImage'\n > &\n Pick<MessagesContextValue<StreamChatGenerics>, 'Reply'> &\n Pick<\n SuggestionsContextValue<StreamChatGenerics>,\n | 'AutoCompleteSuggestionHeader'\n | 'AutoCompleteSuggestionItem'\n | 'AutoCompleteSuggestionList'\n | 'suggestions'\n | 'triggerType'\n > &\n Pick<ThreadContextValue<StreamChatGenerics>, 'thread'> &\n Pick<TranslationContextValue, 't'> & {\n threadList?: boolean;\n };\n\nconst MessageInputWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionList,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isOnline,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n ShowThreadMessageInChannelButton,\n suggestions,\n thread,\n threadList,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n } = props;\n\n const [height, setHeight] = useState(0);\n\n const {\n theme: {\n colors: { border, grey_whisper, white, white_smoke },\n messageInput: {\n attachmentSelectionBar,\n autoCompleteInputContainer,\n composerContainer,\n container,\n inputBoxContainer,\n optionsContainer,\n replyContainer,\n sendButtonContainer,\n suggestionsListContainer: { container: suggestionListContainer },\n },\n },\n } = useTheme();\n\n const {\n attachmentPickerBottomSheetHeight,\n attachmentSelectionBarHeight,\n bottomInset,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setMaxNumberOfFiles,\n setSelectedFiles,\n setSelectedImages,\n } = useAttachmentPickerContext();\n\n const { seconds: cooldownRemainingSeconds } = useCountdown(cooldownEndsAt);\n\n /**\n * Mounting and un-mounting logic are un-related in following useEffect.\n * While mounting we want to pass maxNumberOfFiles (which is prop on Channel component)\n * to AttachmentPicker (on OverlayProvider)\n *\n * While un-mounting, we want to close the picker e.g., while navigating away.\n */\n useEffect(() => {\n setMaxNumberOfFiles(maxNumberOfFiles ?? 10);\n\n return closeAttachmentPicker;\n }, []);\n\n const [hasResetImages, setHasResetImages] = useState(false);\n const [hasResetFiles, setHasResetFiles] = useState(false);\n const selectedImagesLength = hasResetImages ? selectedImages.length : 0;\n const imageUploadsLength = hasResetImages ? imageUploads.length : 0;\n const selectedFilesLength = hasResetFiles ? selectedFiles.length : 0;\n const fileUploadsLength = hasResetFiles ? fileUploads.length : 0;\n const imagesForInput = (!!thread && !!threadList) || (!thread && !threadList);\n\n useEffect(() => {\n setSelectedImages([]);\n if (imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n return () => setSelectedImages([]);\n }, []);\n\n useEffect(() => {\n setSelectedFiles([]);\n if (fileUploads.length) {\n fileUploads.forEach((file) => removeFile(file.id));\n }\n return () => setSelectedFiles([]);\n }, []);\n\n useEffect(() => {\n if (hasResetImages === false && imageUploadsLength === 0 && selectedImagesLength === 0) {\n setHasResetImages(true);\n }\n }, [imageUploadsLength, selectedImagesLength]);\n\n useEffect(() => {\n if (hasResetFiles === false && fileUploadsLength === 0 && selectedFilesLength === 0) {\n setHasResetFiles(true);\n }\n }, [fileUploadsLength, selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput === false && imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n }, [imagesForInput]);\n\n const uploadImagesHandler = () => {\n const imagesToUpload = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return !uploadedImage;\n });\n imagesToUpload.forEach((image) => uploadNewImage(image));\n };\n\n const removeImagesHandler = () => {\n const imagesToRemove = imageUploads.filter(\n (imageUpload) =>\n !selectedImages.find(\n (selectedImage) =>\n selectedImage.uri === imageUpload.file.uri || selectedImage.uri === imageUpload.url,\n ),\n );\n imagesToRemove.forEach((image) => removeImage(image.id));\n };\n\n useEffect(() => {\n if (imagesForInput) {\n if (selectedImagesLength > imageUploadsLength) {\n /** User selected an image in bottom sheet attachment picker */\n uploadImagesHandler();\n } else {\n /** User de-selected an image in bottom sheet attachment picker */\n removeImagesHandler();\n }\n }\n }, [selectedImagesLength]);\n\n useEffect(() => {\n if (selectedFilesLength > fileUploadsLength) {\n /** User selected a video in bottom sheet attachment picker */\n const filesToUpload = selectedFiles.filter((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return !uploadedFile;\n });\n filesToUpload.forEach((file) => uploadNewFile(file));\n } else {\n /** User de-selected a video in bottom sheet attachment picker */\n const filesToRemove = fileUploads.filter(\n (fileUpload) =>\n !selectedFiles.find(\n (selectedFile) =>\n selectedFile.uri === fileUpload.file.uri || selectedFile.uri === fileUpload.url,\n ),\n );\n filesToRemove.forEach((file) => removeFile(file.id));\n }\n }, [selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput) {\n if (imageUploadsLength < selectedImagesLength) {\n /** User removed some image from seleted images within ImageUploadPreview. */\n const updatedSelectedImages = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return uploadedImage;\n });\n setSelectedImages(updatedSelectedImages);\n } else if (imageUploadsLength > selectedImagesLength) {\n /**\n * User is editing some message which contains image attachments OR\n * image attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewImage` function from `MessageInputContext`.\n **/\n setSelectedImages(\n imageUploads\n .map((imageUpload) => ({\n height: imageUpload.file.height,\n source: imageUpload.file.source,\n uri: imageUpload.url || imageUpload.file.uri,\n width: imageUpload.file.width,\n }))\n .filter(Boolean) as Asset[],\n );\n }\n }\n }, [imageUploadsLength]);\n\n useEffect(() => {\n if (fileUploadsLength < selectedFilesLength) {\n /** User removed some video from seleted files within ImageUploadPreview. */\n const updatedSelectedFiles = selectedFiles.filter((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return uploadedFile;\n });\n setSelectedFiles(updatedSelectedFiles);\n } else if (fileUploadsLength > selectedFilesLength) {\n /**\n * User is editing some message which contains video attachments OR\n * video attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewFile` function from `MessageInputContext`.\n **/\n setSelectedFiles(\n fileUploads.map((fileUpload) => ({\n duration: fileUpload.file.duration,\n name: fileUpload.file.name,\n size: fileUpload.file.size,\n type: fileUpload.file.type,\n uri: fileUpload.file.uri,\n })),\n );\n }\n }, [fileUploadsLength]);\n\n const editingExists = !!editing;\n useEffect(() => {\n if (editing && inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n\n /**\n * Make sure to test `initialValue` functionality, if you are modifying following condition.\n *\n * We have the following condition, to make sure - when user comes out of \"editing message\" state,\n * we wipe out all the state around message input such as text, mentioned users, image uploads etc.\n * But it also means, this condition will be fired up on first render, which may result in clearing\n * the initial value set on input box, through the prop - `initialValue`.\n * This prop generally gets used for the case of draft message functionality.\n */\n if (\n !editing &&\n (giphyActive ||\n fileUploads.length > 0 ||\n mentionedUsers.length > 0 ||\n imageUploads.length > 0 ||\n numberOfUploads > 0)\n ) {\n resetInput();\n }\n }, [editingExists]);\n\n const asyncIdsString = asyncIds.join();\n const asyncUploadsString = Object.values(asyncUploads)\n .map(({ state, url }) => `${state}${url}`)\n .join();\n useEffect(() => {\n if (Object.keys(asyncUploads).length) {\n /**\n * When successful image upload response occurs after hitting send,\n * send a follow up message with the image\n */\n sending.current = true;\n asyncIds.forEach((id) => sendMessageAsync(id));\n sending.current = false;\n }\n }, [asyncIdsString, asyncUploadsString, sendMessageAsync]);\n\n const getMembers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (members && Object.values(members).length) {\n Object.values(members).forEach((member) => {\n if (member.user) {\n result.push(member.user);\n }\n });\n }\n\n return result;\n };\n\n const getUsers = () => {\n const users = [...getMembers(), ...getWatchers()];\n\n // make sure we don't list users twice\n const uniqueUsers: { [key: string]: UserResponse<StreamChatGenerics> } = {};\n for (const user of users) {\n if (user && !uniqueUsers[user.id]) {\n uniqueUsers[user.id] = user;\n }\n }\n const usersArray = Object.values(uniqueUsers);\n\n return usersArray;\n };\n\n const getWatchers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (watchers && Object.values(watchers).length) {\n result.push(...Object.values(watchers));\n }\n\n return result;\n };\n\n const additionalTextInputContainerProps = {\n editable: disabled ? false : undefined,\n ...additionalTextInputProps,\n };\n\n return (\n <>\n <View\n onLayout={({\n nativeEvent: {\n layout: { height: newHeight },\n },\n }) => setHeight(newHeight)}\n style={[styles.container, { backgroundColor: white, borderColor: border }, container]}\n >\n {editing && <InputEditingStateHeader />}\n {quotedMessage && <InputReplyStateHeader />}\n <View style={[styles.composerContainer, composerContainer]}>\n {Input ? (\n <Input\n additionalTextInputProps={additionalTextInputContainerProps}\n getUsers={getUsers}\n />\n ) : (\n <>\n <View style={[styles.optionsContainer, optionsContainer]}>\n {InputButtons && <InputButtons />}\n </View>\n <View\n style={[\n styles.inputBoxContainer,\n {\n borderColor: grey_whisper,\n paddingVertical: giphyActive ? 8 : 12,\n },\n inputBoxContainer,\n ]}\n >\n {((typeof editing !== 'boolean' && editing?.quoted_message) || quotedMessage) && (\n <View style={[styles.replyContainer, replyContainer]}>\n <Reply />\n </View>\n )}\n {imageUploads.length ? <ImageUploadPreview /> : null}\n {imageUploads.length && fileUploads.length ? (\n <View\n style={[\n styles.attachmentSeparator,\n {\n borderBottomColor: grey_whisper,\n marginHorizontal: giphyActive ? 8 : 12,\n },\n ]}\n />\n ) : null}\n {fileUploads.length ? <FileUploadPreview /> : null}\n {giphyActive ? (\n <InputGiphySearch disabled={!isOnline} />\n ) : (\n <View style={[styles.autoCompleteInputContainer, autoCompleteInputContainer]}>\n <AutoCompleteInput<StreamChatGenerics>\n additionalTextInputProps={additionalTextInputProps}\n cooldownActive={!!cooldownRemainingSeconds}\n />\n </View>\n )}\n </View>\n <View style={[styles.sendButtonContainer, sendButtonContainer]}>\n {cooldownRemainingSeconds ? (\n <CooldownTimer seconds={cooldownRemainingSeconds} />\n ) : (\n <SendButton\n disabled={\n disabled || sending.current || !isValidMessage() || (giphyActive && !isOnline)\n }\n />\n )}\n </View>\n </>\n )}\n </View>\n <ShowThreadMessageInChannelButton threadList={threadList} />\n </View>\n\n {triggerType && suggestions ? (\n <View\n style={[\n suggestionListContainer,\n styles.suggestionsListContainer,\n { backgroundColor: white, bottom: height },\n ]}\n >\n <AutoCompleteSuggestionList\n active={!!suggestions}\n data={suggestions.data}\n onSelect={suggestions.onSelect}\n queryText={suggestions.queryText}\n triggerType={triggerType}\n />\n </View>\n ) : null}\n {selectedPicker && (\n <View\n style={[\n {\n backgroundColor: white_smoke,\n height:\n (attachmentPickerBottomSheetHeight\n ? attachmentPickerBottomSheetHeight + (attachmentSelectionBarHeight ?? 52)\n : 360) - bottomInset,\n },\n attachmentSelectionBar,\n ]}\n >\n <AttachmentSelectionBar />\n </View>\n )}\n </>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageInputPropsWithContext<StreamChatGenerics>,\n nextProps: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps: prevAdditionalTextInputProps,\n asyncUploads: prevAsyncUploads,\n disabled: prevDisabled,\n editing: prevEditing,\n fileUploads: prevFileUploads,\n giphyActive: prevGiphyActive,\n imageUploads: prevImageUploads,\n isOnline: prevIsOnline,\n isValidMessage: prevIsValidMessage,\n mentionedUsers: prevMentionedUsers,\n quotedMessage: prevQuotedMessage,\n sending: prevSending,\n showMoreOptions: prevShowMoreOptions,\n suggestions: prevSuggestions,\n t: prevT,\n thread: prevThread,\n threadList: prevThreadList,\n } = prevProps;\n const {\n additionalTextInputProps: nextAdditionalTextInputProps,\n asyncUploads: nextAsyncUploads,\n disabled: nextDisabled,\n editing: nextEditing,\n fileUploads: nextFileUploads,\n giphyActive: nextGiphyActive,\n imageUploads: nextImageUploads,\n isOnline: nextIsOnline,\n isValidMessage: nextIsValidMessage,\n mentionedUsers: nextMentionedUsers,\n quotedMessage: nextQuotedMessage,\n sending: nextSending,\n showMoreOptions: nextShowMoreOptions,\n suggestions: nextSuggestions,\n t: nextT,\n thread: nextThread,\n threadList: nextThreadList,\n } = nextProps;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const additionalTextInputPropsEven =\n prevAdditionalTextInputProps === nextAdditionalTextInputProps;\n if (!additionalTextInputPropsEven) return false;\n\n const disabledEqual = prevDisabled === nextDisabled;\n if (!disabledEqual) return false;\n\n const editingEqual = !!prevEditing === !!nextEditing;\n if (!editingEqual) return false;\n\n const imageUploadsEqual = prevImageUploads.length === nextImageUploads.length;\n if (!imageUploadsEqual) return false;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id\n : !!prevQuotedMessage === !!nextQuotedMessage;\n if (!quotedMessageEqual) return false;\n\n const sendingEqual = prevSending.current === nextSending.current;\n if (!sendingEqual) return false;\n\n const showMoreOptionsEqual = prevShowMoreOptions === nextShowMoreOptions;\n if (!showMoreOptionsEqual) return false;\n\n const isOnlineEqual = prevIsOnline === nextIsOnline;\n if (!isOnlineEqual) return false;\n\n const isValidMessageEqual = prevIsValidMessage() === nextIsValidMessage();\n if (!isValidMessageEqual) return false;\n\n const asyncUploadsEqual = Object.keys(prevAsyncUploads).every(\n (key) =>\n prevAsyncUploads[key].state === nextAsyncUploads[key].state &&\n prevAsyncUploads[key].url === nextAsyncUploads[key].url,\n );\n if (!asyncUploadsEqual) return false;\n\n const fileUploadsEqual = prevFileUploads.length === nextFileUploads.length;\n if (!fileUploadsEqual) return false;\n\n const mentionedUsersEqual = prevMentionedUsers.length === nextMentionedUsers.length;\n if (!mentionedUsersEqual) return false;\n\n const suggestionsEqual =\n !!prevSuggestions?.data && !!nextSuggestions?.data\n ? prevSuggestions.data.length === nextSuggestions.data.length &&\n prevSuggestions.data.every(({ name }, index) => name === nextSuggestions.data[index].name)\n : !!prevSuggestions === !!nextSuggestions;\n if (!suggestionsEqual) return false;\n\n const threadEqual =\n prevThread?.id === nextThread?.id &&\n prevThread?.text === nextThread?.text &&\n prevThread?.reply_count === nextThread?.reply_count;\n if (!threadEqual) return false;\n\n const threadListEqual = prevThreadList === nextThreadList;\n if (!threadListEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageInput = React.memo(\n MessageInputWithContext,\n areEqual,\n) as typeof MessageInputWithContext;\n\nexport type MessageInputProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageInputPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for message input\n * It's a consumer of\n * [Channel Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/channel-context/),\n * [Chat Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/chat-context/),\n * [MessageInput Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/message-input-context/),\n * [Suggestions Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/suggestions-context/), and\n * [Translation Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/translation-context/)\n */\nexport const MessageInput = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputProps<StreamChatGenerics>,\n) => {\n const { isOnline } = useChatContext();\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const { disabled = false, members, watchers } = useChannelContext<StreamChatGenerics>();\n\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n SendMessageDisallowedIndicator,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n uploadNewFile,\n uploadNewImage,\n } = useMessageInputContext<StreamChatGenerics>();\n\n const { Reply } = useMessagesContext<StreamChatGenerics>();\n\n const {\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n suggestions,\n triggerType,\n } = useSuggestionsContext<StreamChatGenerics>();\n\n const { thread } = useThreadContext<StreamChatGenerics>();\n\n const { t } = useTranslationContext();\n\n if (!ownCapabilities.sendMessage && SendMessageDisallowedIndicator) {\n return <SendMessageDisallowedIndicator />;\n }\n\n return (\n <MemoizedMessageInput\n {...{\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isOnline,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n suggestions,\n t,\n thread,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n }}\n {...props}\n />\n );\n};\n\nMessageInput.displayName = 'MessageInput{messageInput}';\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageInput.tsx"],"names":["styles","StyleSheet","create","attachmentSeparator","borderBottomWidth","marginBottom","autoCompleteInputContainer","alignItems","flexDirection","paddingLeft","paddingRight","composerContainer","container","borderTopWidth","padding","inputBoxContainer","borderRadius","borderWidth","flex","optionsContainer","paddingBottom","replyContainer","paddingHorizontal","sendButtonContainer","suggestionsListContainer","elevation","left","position","right","shadowOffset","height","width","shadowOpacity","MessageInputWithContext","props","additionalTextInputProps","asyncIds","asyncUploads","AutoCompleteSuggestionList","closeAttachmentPicker","cooldownEndsAt","CooldownTimer","disabled","editing","FileUploadPreview","fileUploads","giphyActive","ImageUploadPreview","imageUploads","Input","inputBoxRef","InputButtons","InputEditingStateHeader","InputGiphySearch","InputReplyStateHeader","isOnline","isValidMessage","maxNumberOfFiles","members","mentionedUsers","numberOfUploads","quotedMessage","removeFile","removeImage","Reply","resetInput","SendButton","sending","sendMessageAsync","ShowThreadMessageInChannelButton","suggestions","thread","threadList","triggerType","uploadNewFile","uploadNewImage","watchers","setHeight","theme","colors","border","grey_whisper","white","white_smoke","messageInput","attachmentSelectionBar","suggestionListContainer","attachmentPickerBottomSheetHeight","attachmentSelectionBarHeight","bottomInset","selectedFiles","selectedImages","selectedPicker","setMaxNumberOfFiles","setSelectedFiles","setSelectedImages","cooldownRemainingSeconds","seconds","hasResetImages","setHasResetImages","hasResetFiles","setHasResetFiles","selectedImagesLength","length","imageUploadsLength","selectedFilesLength","fileUploadsLength","imagesForInput","forEach","image","id","file","MEGA_BYTES_TO_BYTES","MAX_FILE_SIZE_TO_UPLOAD_IN_MB","uploadImagesHandler","imageToUpload","find","selectedImage","uploadedImage","imageUpload","uri","url","Number","fileSize","Alert","alert","filter","removeImagesHandler","imagesToRemove","fileToUpload","selectedFile","uploadedFile","fileUpload","size","filesToRemove","updatedSelectedImages","map","source","Boolean","updatedSelectedFiles","duration","name","type","editingExists","current","focus","asyncIdsString","join","asyncUploadsString","Object","values","state","keys","getMembers","result","member","user","push","getUsers","users","getWatchers","uniqueUsers","usersArray","additionalTextInputContainerProps","editable","undefined","newHeight","nativeEvent","layout","backgroundColor","borderColor","paddingVertical","quoted_message","borderBottomColor","marginHorizontal","bottom","data","onSelect","queryText","areEqual","prevProps","nextProps","prevAdditionalTextInputProps","prevAsyncUploads","prevDisabled","prevEditing","prevFileUploads","prevGiphyActive","prevImageUploads","prevIsOnline","prevIsValidMessage","prevMentionedUsers","prevQuotedMessage","prevSending","prevShowMoreOptions","showMoreOptions","prevSuggestions","prevT","t","prevThread","prevThreadList","nextAdditionalTextInputProps","nextAsyncUploads","nextDisabled","nextEditing","nextFileUploads","nextGiphyActive","nextImageUploads","nextIsOnline","nextIsValidMessage","nextMentionedUsers","nextQuotedMessage","nextSending","nextShowMoreOptions","nextSuggestions","nextT","nextThread","nextThreadList","tEqual","additionalTextInputPropsEven","disabledEqual","editingEqual","imageUploadsEqual","giphyActiveEqual","quotedMessageEqual","sendingEqual","showMoreOptionsEqual","isOnlineEqual","isValidMessageEqual","asyncUploadsEqual","every","key","fileUploadsEqual","mentionedUsersEqual","suggestionsEqual","index","threadEqual","text","reply_count","threadListEqual","MemoizedMessageInput","React","memo","MessageInput","ownCapabilities","clearEditingState","clearQuotedMessageState","SendMessageDisallowedIndicator","setGiphyActive","setShowMoreOptions","AutoCompleteSuggestionHeader","AutoCompleteSuggestionItem","sendMessage","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Alert, StyleSheet, View } from 'react-native';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { useCountdown } from './hooks/useCountdown';\n\nimport { ChatContextValue, useChatContext } from '../../contexts';\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport {\n SuggestionsContextValue,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport type { Asset, DefaultStreamChatGenerics } from '../../types/types';\nimport { AttachmentSelectionBar } from '../AttachmentPicker/components/AttachmentSelectionBar';\nimport { AutoCompleteInput } from '../AutoCompleteInput/AutoCompleteInput';\n\nconst styles = StyleSheet.create({\n attachmentSeparator: {\n borderBottomWidth: 1,\n marginBottom: 10,\n },\n autoCompleteInputContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingLeft: 16,\n paddingRight: 16,\n },\n composerContainer: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n container: {\n borderTopWidth: 1,\n padding: 10,\n },\n inputBoxContainer: {\n borderRadius: 20,\n borderWidth: 1,\n flex: 1,\n },\n optionsContainer: {\n flexDirection: 'row',\n paddingBottom: 10,\n paddingRight: 10,\n },\n replyContainer: { paddingBottom: 12, paddingHorizontal: 8 },\n sendButtonContainer: { paddingBottom: 10, paddingLeft: 10 },\n suggestionsListContainer: {\n borderRadius: 10,\n elevation: 3,\n left: 8,\n position: 'absolute',\n right: 8,\n shadowOffset: { height: 1, width: 0 },\n shadowOpacity: 0.15,\n },\n});\n\ntype MessageInputPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'isOnline'> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'disabled' | 'members' | 'watchers'> &\n Pick<\n MessageInputContextValue<StreamChatGenerics>,\n | 'additionalTextInputProps'\n | 'asyncIds'\n | 'asyncUploads'\n | 'cooldownEndsAt'\n | 'CooldownTimer'\n | 'clearEditingState'\n | 'clearQuotedMessageState'\n | 'closeAttachmentPicker'\n | 'editing'\n | 'FileUploadPreview'\n | 'fileUploads'\n | 'giphyActive'\n | 'ImageUploadPreview'\n | 'imageUploads'\n | 'Input'\n | 'inputBoxRef'\n | 'InputButtons'\n | 'InputEditingStateHeader'\n | 'InputGiphySearch'\n | 'InputReplyStateHeader'\n | 'isValidMessage'\n | 'maxNumberOfFiles'\n | 'mentionedUsers'\n | 'numberOfUploads'\n | 'quotedMessage'\n | 'resetInput'\n | 'SendButton'\n | 'sending'\n | 'sendMessageAsync'\n | 'setShowMoreOptions'\n | 'setGiphyActive'\n | 'showMoreOptions'\n | 'ShowThreadMessageInChannelButton'\n | 'removeFile'\n | 'removeImage'\n | 'uploadNewFile'\n | 'uploadNewImage'\n > &\n Pick<MessagesContextValue<StreamChatGenerics>, 'Reply'> &\n Pick<\n SuggestionsContextValue<StreamChatGenerics>,\n | 'AutoCompleteSuggestionHeader'\n | 'AutoCompleteSuggestionItem'\n | 'AutoCompleteSuggestionList'\n | 'suggestions'\n | 'triggerType'\n > &\n Pick<ThreadContextValue<StreamChatGenerics>, 'thread'> &\n Pick<TranslationContextValue, 't'> & {\n threadList?: boolean;\n };\n\nconst MessageInputWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionList,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isOnline,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n ShowThreadMessageInChannelButton,\n suggestions,\n thread,\n threadList,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n } = props;\n\n const [height, setHeight] = useState(0);\n\n const {\n theme: {\n colors: { border, grey_whisper, white, white_smoke },\n messageInput: {\n attachmentSelectionBar,\n autoCompleteInputContainer,\n composerContainer,\n container,\n inputBoxContainer,\n optionsContainer,\n replyContainer,\n sendButtonContainer,\n suggestionsListContainer: { container: suggestionListContainer },\n },\n },\n } = useTheme();\n\n const {\n attachmentPickerBottomSheetHeight,\n attachmentSelectionBarHeight,\n bottomInset,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setMaxNumberOfFiles,\n setSelectedFiles,\n setSelectedImages,\n } = useAttachmentPickerContext();\n\n const { seconds: cooldownRemainingSeconds } = useCountdown(cooldownEndsAt);\n\n /**\n * Mounting and un-mounting logic are un-related in following useEffect.\n * While mounting we want to pass maxNumberOfFiles (which is prop on Channel component)\n * to AttachmentPicker (on OverlayProvider)\n *\n * While un-mounting, we want to close the picker e.g., while navigating away.\n */\n useEffect(() => {\n setMaxNumberOfFiles(maxNumberOfFiles ?? 10);\n\n return closeAttachmentPicker;\n }, []);\n\n const [hasResetImages, setHasResetImages] = useState(false);\n const [hasResetFiles, setHasResetFiles] = useState(false);\n const selectedImagesLength = hasResetImages ? selectedImages.length : 0;\n const imageUploadsLength = hasResetImages ? imageUploads.length : 0;\n const selectedFilesLength = hasResetFiles ? selectedFiles.length : 0;\n const fileUploadsLength = hasResetFiles ? fileUploads.length : 0;\n const imagesForInput = (!!thread && !!threadList) || (!thread && !threadList);\n\n useEffect(() => {\n setSelectedImages([]);\n if (imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n return () => setSelectedImages([]);\n }, []);\n\n useEffect(() => {\n setSelectedFiles([]);\n if (fileUploads.length) {\n fileUploads.forEach((file) => removeFile(file.id));\n }\n return () => setSelectedFiles([]);\n }, []);\n\n useEffect(() => {\n if (hasResetImages === false && imageUploadsLength === 0 && selectedImagesLength === 0) {\n setHasResetImages(true);\n }\n }, [imageUploadsLength, selectedImagesLength]);\n\n useEffect(() => {\n if (hasResetFiles === false && fileUploadsLength === 0 && selectedFilesLength === 0) {\n setHasResetFiles(true);\n }\n }, [fileUploadsLength, selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput === false && imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n }, [imagesForInput]);\n\n const MEGA_BYTES_TO_BYTES = 1024 * 1024;\n const MAX_FILE_SIZE_TO_UPLOAD_IN_MB = 100;\n\n const uploadImagesHandler = () => {\n const imageToUpload = selectedImages.find((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return !uploadedImage;\n });\n // Check if the file size of the image exceeds the threshold of 100MB\n if (\n imageToUpload &&\n Number(imageToUpload.fileSize) / MEGA_BYTES_TO_BYTES > MAX_FILE_SIZE_TO_UPLOAD_IN_MB\n ) {\n Alert.alert(\n `Maximum file size upload limit reached, please upload an image below ${MAX_FILE_SIZE_TO_UPLOAD_IN_MB}MB.`,\n );\n setSelectedImages(\n selectedImages.filter((selectedImage) => selectedImage.uri !== imageToUpload.uri),\n );\n } else {\n if (imageToUpload) uploadNewImage(imageToUpload);\n }\n };\n\n const removeImagesHandler = () => {\n const imagesToRemove = imageUploads.filter(\n (imageUpload) =>\n !selectedImages.find(\n (selectedImage) =>\n selectedImage.uri === imageUpload.file.uri || selectedImage.uri === imageUpload.url,\n ),\n );\n imagesToRemove.forEach((image) => removeImage(image.id));\n };\n\n useEffect(() => {\n if (imagesForInput) {\n if (selectedImagesLength > imageUploadsLength) {\n /** User selected an image in bottom sheet attachment picker */\n uploadImagesHandler();\n } else {\n /** User de-selected an image in bottom sheet attachment picker */\n removeImagesHandler();\n }\n }\n }, [selectedImagesLength]);\n\n useEffect(() => {\n if (selectedFilesLength > fileUploadsLength) {\n /** User selected a video in bottom sheet attachment picker */\n const fileToUpload = selectedFiles.find((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return !uploadedFile;\n });\n // Check if the file size exceeds the threshold of 100MB\n if (\n fileToUpload &&\n Number(fileToUpload.size) / MEGA_BYTES_TO_BYTES > MAX_FILE_SIZE_TO_UPLOAD_IN_MB\n ) {\n Alert.alert(\n `Maximum file size upload limit reached, please upload a file below ${MAX_FILE_SIZE_TO_UPLOAD_IN_MB}MB.`,\n );\n setSelectedFiles(\n selectedFiles.filter((selectedFile) => selectedFile.uri !== fileToUpload.uri),\n );\n } else {\n if (fileToUpload) uploadNewFile(fileToUpload);\n }\n } else {\n /** User de-selected a video in bottom sheet attachment picker */\n const filesToRemove = fileUploads.filter(\n (fileUpload) =>\n !selectedFiles.find(\n (selectedFile) =>\n selectedFile.uri === fileUpload.file.uri || selectedFile.uri === fileUpload.url,\n ),\n );\n filesToRemove.forEach((file) => removeFile(file.id));\n }\n }, [selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput) {\n if (imageUploadsLength < selectedImagesLength) {\n /** User removed some image from seleted images within ImageUploadPreview. */\n const updatedSelectedImages = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return uploadedImage;\n });\n setSelectedImages(updatedSelectedImages);\n } else if (imageUploadsLength > selectedImagesLength) {\n /**\n * User is editing some message which contains image attachments OR\n * image attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewImage` function from `MessageInputContext`.\n **/\n setSelectedImages(\n imageUploads\n .map((imageUpload) => ({\n height: imageUpload.file.height,\n source: imageUpload.file.source,\n uri: imageUpload.url || imageUpload.file.uri,\n width: imageUpload.file.width,\n }))\n .filter(Boolean) as Asset[],\n );\n }\n }\n }, [imageUploadsLength]);\n\n useEffect(() => {\n if (fileUploadsLength < selectedFilesLength) {\n /** User removed some video from seleted files within ImageUploadPreview. */\n const updatedSelectedFiles = selectedFiles.filter((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return uploadedFile;\n });\n setSelectedFiles(updatedSelectedFiles);\n } else if (fileUploadsLength > selectedFilesLength) {\n /**\n * User is editing some message which contains video attachments OR\n * video attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewFile` function from `MessageInputContext`.\n **/\n setSelectedFiles(\n fileUploads.map((fileUpload) => ({\n duration: fileUpload.file.duration,\n name: fileUpload.file.name,\n size: fileUpload.file.size,\n type: fileUpload.file.type,\n uri: fileUpload.file.uri,\n })),\n );\n }\n }, [fileUploadsLength]);\n\n const editingExists = !!editing;\n useEffect(() => {\n if (editing && inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n\n /**\n * Make sure to test `initialValue` functionality, if you are modifying following condition.\n *\n * We have the following condition, to make sure - when user comes out of \"editing message\" state,\n * we wipe out all the state around message input such as text, mentioned users, image uploads etc.\n * But it also means, this condition will be fired up on first render, which may result in clearing\n * the initial value set on input box, through the prop - `initialValue`.\n * This prop generally gets used for the case of draft message functionality.\n */\n if (\n !editing &&\n (giphyActive ||\n fileUploads.length > 0 ||\n mentionedUsers.length > 0 ||\n imageUploads.length > 0 ||\n numberOfUploads > 0)\n ) {\n resetInput();\n }\n }, [editingExists]);\n\n const asyncIdsString = asyncIds.join();\n const asyncUploadsString = Object.values(asyncUploads)\n .map(({ state, url }) => `${state}${url}`)\n .join();\n useEffect(() => {\n if (Object.keys(asyncUploads).length) {\n /**\n * When successful image upload response occurs after hitting send,\n * send a follow up message with the image\n */\n sending.current = true;\n asyncIds.forEach((id) => sendMessageAsync(id));\n sending.current = false;\n }\n }, [asyncIdsString, asyncUploadsString, sendMessageAsync]);\n\n const getMembers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (members && Object.values(members).length) {\n Object.values(members).forEach((member) => {\n if (member.user) {\n result.push(member.user);\n }\n });\n }\n\n return result;\n };\n\n const getUsers = () => {\n const users = [...getMembers(), ...getWatchers()];\n\n // make sure we don't list users twice\n const uniqueUsers: { [key: string]: UserResponse<StreamChatGenerics> } = {};\n for (const user of users) {\n if (user && !uniqueUsers[user.id]) {\n uniqueUsers[user.id] = user;\n }\n }\n const usersArray = Object.values(uniqueUsers);\n\n return usersArray;\n };\n\n const getWatchers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (watchers && Object.values(watchers).length) {\n result.push(...Object.values(watchers));\n }\n\n return result;\n };\n\n const additionalTextInputContainerProps = {\n editable: disabled ? false : undefined,\n ...additionalTextInputProps,\n };\n\n return (\n <>\n <View\n onLayout={({\n nativeEvent: {\n layout: { height: newHeight },\n },\n }) => setHeight(newHeight)}\n style={[styles.container, { backgroundColor: white, borderColor: border }, container]}\n >\n {editing && <InputEditingStateHeader />}\n {quotedMessage && <InputReplyStateHeader />}\n <View style={[styles.composerContainer, composerContainer]}>\n {Input ? (\n <Input\n additionalTextInputProps={additionalTextInputContainerProps}\n getUsers={getUsers}\n />\n ) : (\n <>\n <View style={[styles.optionsContainer, optionsContainer]}>\n {InputButtons && <InputButtons />}\n </View>\n <View\n style={[\n styles.inputBoxContainer,\n {\n borderColor: grey_whisper,\n paddingVertical: giphyActive ? 8 : 12,\n },\n inputBoxContainer,\n ]}\n >\n {((typeof editing !== 'boolean' && editing?.quoted_message) || quotedMessage) && (\n <View style={[styles.replyContainer, replyContainer]}>\n <Reply />\n </View>\n )}\n {imageUploads.length ? <ImageUploadPreview /> : null}\n {imageUploads.length && fileUploads.length ? (\n <View\n style={[\n styles.attachmentSeparator,\n {\n borderBottomColor: grey_whisper,\n marginHorizontal: giphyActive ? 8 : 12,\n },\n ]}\n />\n ) : null}\n {fileUploads.length ? <FileUploadPreview /> : null}\n {giphyActive ? (\n <InputGiphySearch disabled={!isOnline} />\n ) : (\n <View style={[styles.autoCompleteInputContainer, autoCompleteInputContainer]}>\n <AutoCompleteInput<StreamChatGenerics>\n additionalTextInputProps={additionalTextInputProps}\n cooldownActive={!!cooldownRemainingSeconds}\n />\n </View>\n )}\n </View>\n <View style={[styles.sendButtonContainer, sendButtonContainer]}>\n {cooldownRemainingSeconds ? (\n <CooldownTimer seconds={cooldownRemainingSeconds} />\n ) : (\n <SendButton\n disabled={\n disabled || sending.current || !isValidMessage() || (giphyActive && !isOnline)\n }\n />\n )}\n </View>\n </>\n )}\n </View>\n <ShowThreadMessageInChannelButton threadList={threadList} />\n </View>\n\n {triggerType && suggestions ? (\n <View\n style={[\n suggestionListContainer,\n styles.suggestionsListContainer,\n { backgroundColor: white, bottom: height },\n ]}\n >\n <AutoCompleteSuggestionList\n active={!!suggestions}\n data={suggestions.data}\n onSelect={suggestions.onSelect}\n queryText={suggestions.queryText}\n triggerType={triggerType}\n />\n </View>\n ) : null}\n {selectedPicker && (\n <View\n style={[\n {\n backgroundColor: white_smoke,\n height:\n (attachmentPickerBottomSheetHeight\n ? attachmentPickerBottomSheetHeight + (attachmentSelectionBarHeight ?? 52)\n : 360) - bottomInset,\n },\n attachmentSelectionBar,\n ]}\n >\n <AttachmentSelectionBar />\n </View>\n )}\n </>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageInputPropsWithContext<StreamChatGenerics>,\n nextProps: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps: prevAdditionalTextInputProps,\n asyncUploads: prevAsyncUploads,\n disabled: prevDisabled,\n editing: prevEditing,\n fileUploads: prevFileUploads,\n giphyActive: prevGiphyActive,\n imageUploads: prevImageUploads,\n isOnline: prevIsOnline,\n isValidMessage: prevIsValidMessage,\n mentionedUsers: prevMentionedUsers,\n quotedMessage: prevQuotedMessage,\n sending: prevSending,\n showMoreOptions: prevShowMoreOptions,\n suggestions: prevSuggestions,\n t: prevT,\n thread: prevThread,\n threadList: prevThreadList,\n } = prevProps;\n const {\n additionalTextInputProps: nextAdditionalTextInputProps,\n asyncUploads: nextAsyncUploads,\n disabled: nextDisabled,\n editing: nextEditing,\n fileUploads: nextFileUploads,\n giphyActive: nextGiphyActive,\n imageUploads: nextImageUploads,\n isOnline: nextIsOnline,\n isValidMessage: nextIsValidMessage,\n mentionedUsers: nextMentionedUsers,\n quotedMessage: nextQuotedMessage,\n sending: nextSending,\n showMoreOptions: nextShowMoreOptions,\n suggestions: nextSuggestions,\n t: nextT,\n thread: nextThread,\n threadList: nextThreadList,\n } = nextProps;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const additionalTextInputPropsEven =\n prevAdditionalTextInputProps === nextAdditionalTextInputProps;\n if (!additionalTextInputPropsEven) return false;\n\n const disabledEqual = prevDisabled === nextDisabled;\n if (!disabledEqual) return false;\n\n const editingEqual = !!prevEditing === !!nextEditing;\n if (!editingEqual) return false;\n\n const imageUploadsEqual = prevImageUploads.length === nextImageUploads.length;\n if (!imageUploadsEqual) return false;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id\n : !!prevQuotedMessage === !!nextQuotedMessage;\n if (!quotedMessageEqual) return false;\n\n const sendingEqual = prevSending.current === nextSending.current;\n if (!sendingEqual) return false;\n\n const showMoreOptionsEqual = prevShowMoreOptions === nextShowMoreOptions;\n if (!showMoreOptionsEqual) return false;\n\n const isOnlineEqual = prevIsOnline === nextIsOnline;\n if (!isOnlineEqual) return false;\n\n const isValidMessageEqual = prevIsValidMessage() === nextIsValidMessage();\n if (!isValidMessageEqual) return false;\n\n const asyncUploadsEqual = Object.keys(prevAsyncUploads).every(\n (key) =>\n prevAsyncUploads[key].state === nextAsyncUploads[key].state &&\n prevAsyncUploads[key].url === nextAsyncUploads[key].url,\n );\n if (!asyncUploadsEqual) return false;\n\n const fileUploadsEqual = prevFileUploads.length === nextFileUploads.length;\n if (!fileUploadsEqual) return false;\n\n const mentionedUsersEqual = prevMentionedUsers.length === nextMentionedUsers.length;\n if (!mentionedUsersEqual) return false;\n\n const suggestionsEqual =\n !!prevSuggestions?.data && !!nextSuggestions?.data\n ? prevSuggestions.data.length === nextSuggestions.data.length &&\n prevSuggestions.data.every(({ name }, index) => name === nextSuggestions.data[index].name)\n : !!prevSuggestions === !!nextSuggestions;\n if (!suggestionsEqual) return false;\n\n const threadEqual =\n prevThread?.id === nextThread?.id &&\n prevThread?.text === nextThread?.text &&\n prevThread?.reply_count === nextThread?.reply_count;\n if (!threadEqual) return false;\n\n const threadListEqual = prevThreadList === nextThreadList;\n if (!threadListEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageInput = React.memo(\n MessageInputWithContext,\n areEqual,\n) as typeof MessageInputWithContext;\n\nexport type MessageInputProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageInputPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for message input\n * It's a consumer of\n * [Channel Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/channel-context/),\n * [Chat Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/chat-context/),\n * [MessageInput Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/message-input-context/),\n * [Suggestions Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/suggestions-context/), and\n * [Translation Context](https://getstream.io/chat/docs/sdk/reactnative/contexts/translation-context/)\n */\nexport const MessageInput = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputProps<StreamChatGenerics>,\n) => {\n const { isOnline } = useChatContext();\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const { disabled = false, members, watchers } = useChannelContext<StreamChatGenerics>();\n\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n SendMessageDisallowedIndicator,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n uploadNewFile,\n uploadNewImage,\n } = useMessageInputContext<StreamChatGenerics>();\n\n const { Reply } = useMessagesContext<StreamChatGenerics>();\n\n const {\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n suggestions,\n triggerType,\n } = useSuggestionsContext<StreamChatGenerics>();\n\n const { thread } = useThreadContext<StreamChatGenerics>();\n\n const { t } = useTranslationContext();\n\n if (!ownCapabilities.sendMessage && SendMessageDisallowedIndicator) {\n return <SendMessageDisallowedIndicator />;\n }\n\n return (\n <MemoizedMessageInput\n {...{\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isOnline,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n suggestions,\n t,\n thread,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n }}\n {...props}\n />\n );\n};\n\nMessageInput.displayName = 'MessageInput{messageInput}';\n"]}
|
|
@@ -291,7 +291,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
|
|
|
291
291
|
|
|
292
292
|
var pickFile = function () {
|
|
293
293
|
var _ref2 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
|
|
294
|
-
var result;
|
|
294
|
+
var result, MEGA_BYTES_TO_BYTES, MAX_FILE_SIZE_TO_UPLOAD_IN_MB, totalFileSize;
|
|
295
295
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
296
296
|
while (1) {
|
|
297
297
|
switch (_context.prev = _context.next) {
|
|
@@ -322,14 +322,24 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
|
|
|
322
322
|
|
|
323
323
|
case 8:
|
|
324
324
|
result = _context.sent;
|
|
325
|
+
MEGA_BYTES_TO_BYTES = 1024 * 1024;
|
|
326
|
+
MAX_FILE_SIZE_TO_UPLOAD_IN_MB = 100;
|
|
325
327
|
|
|
326
328
|
if (!result.cancelled && result.docs) {
|
|
327
|
-
result.docs.
|
|
328
|
-
|
|
329
|
-
});
|
|
329
|
+
totalFileSize = result.docs.reduce(function (acc, doc) {
|
|
330
|
+
return acc + Number(doc.size);
|
|
331
|
+
}, 0);
|
|
332
|
+
|
|
333
|
+
if (totalFileSize / MEGA_BYTES_TO_BYTES > MAX_FILE_SIZE_TO_UPLOAD_IN_MB) {
|
|
334
|
+
_reactNative.Alert.alert("Maximum file size upload limit reached, please upload files below " + MAX_FILE_SIZE_TO_UPLOAD_IN_MB + "MB.");
|
|
335
|
+
} else {
|
|
336
|
+
result.docs.forEach(function (doc) {
|
|
337
|
+
uploadNewFile(doc);
|
|
338
|
+
});
|
|
339
|
+
}
|
|
330
340
|
}
|
|
331
341
|
|
|
332
|
-
case
|
|
342
|
+
case 12:
|
|
333
343
|
case "end":
|
|
334
344
|
return _context.stop();
|
|
335
345
|
}
|
|
@@ -1240,7 +1250,7 @@ var MessageInputProvider = function MessageInputProvider(_ref) {
|
|
|
1240
1250
|
__self: _this,
|
|
1241
1251
|
__source: {
|
|
1242
1252
|
fileName: _jsxFileName,
|
|
1243
|
-
lineNumber:
|
|
1253
|
+
lineNumber: 1199,
|
|
1244
1254
|
columnNumber: 5
|
|
1245
1255
|
}
|
|
1246
1256
|
}, children);
|
|
@@ -1267,7 +1277,7 @@ var withMessageInputContext = function withMessageInputContext(Component) {
|
|
|
1267
1277
|
__self: _this,
|
|
1268
1278
|
__source: {
|
|
1269
1279
|
fileName: _jsxFileName,
|
|
1270
|
-
lineNumber:
|
|
1280
|
+
lineNumber: 1239,
|
|
1271
1281
|
columnNumber: 12
|
|
1272
1282
|
}
|
|
1273
1283
|
}));
|