stream-chat-react 11.14.0 → 11.15.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.
- package/dist/{Window-64e7e4c0.js → Window-847d5d88.js} +13829 -299
- package/dist/browser.full-bundle.js +48811 -35270
- package/dist/browser.full-bundle.js.map +1 -1
- package/dist/browser.full-bundle.min.js +4 -4
- package/dist/browser.full-bundle.min.js.map +1 -1
- package/dist/components/Attachment/Audio.d.ts.map +1 -1
- package/dist/components/Attachment/Audio.js +7 -4
- package/dist/components/Attachment/Card.d.ts +1 -1
- package/dist/components/Attachment/Card.d.ts.map +1 -1
- package/dist/components/Attachment/Card.js +4 -2
- package/dist/components/Attachment/VoiceRecording.d.ts.map +1 -1
- package/dist/components/Attachment/VoiceRecording.js +6 -4
- package/dist/components/Attachment/audioSampling.d.ts +10 -0
- package/dist/components/Attachment/audioSampling.d.ts.map +1 -0
- package/dist/components/Attachment/audioSampling.js +83 -0
- package/dist/components/Attachment/components/WaveProgressBar.d.ts +3 -10
- package/dist/components/Attachment/components/WaveProgressBar.d.ts.map +1 -1
- package/dist/components/Attachment/components/WaveProgressBar.js +23 -90
- package/dist/components/Attachment/hooks/useAudioController.d.ts +11 -3
- package/dist/components/Attachment/hooks/useAudioController.d.ts.map +1 -1
- package/dist/components/Attachment/hooks/useAudioController.js +89 -26
- package/dist/components/Attachment/index.d.ts +1 -0
- package/dist/components/Attachment/index.d.ts.map +1 -1
- package/dist/components/Attachment/index.js +1 -0
- package/dist/components/Attachment/utils.d.ts +5 -3
- package/dist/components/Attachment/utils.d.ts.map +1 -1
- package/dist/components/Attachment/utils.js +1 -0
- package/dist/components/Channel/Channel.d.ts +5 -1
- package/dist/components/Channel/Channel.d.ts.map +1 -1
- package/dist/components/Channel/Channel.js +2 -0
- package/dist/components/ChannelSearch/SearchResults.d.ts +2 -2
- package/dist/components/ChannelSearch/SearchResults.d.ts.map +1 -1
- package/dist/components/ChannelSearch/SearchResults.js +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts.map +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.js +1 -1
- package/dist/components/Emojis/EmojiPicker.d.ts +2 -2
- package/dist/components/Emojis/index.cjs.js +2 -2
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.d.ts +3 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +24 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.d.ts +4 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingButtons.js +5 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.d.ts +3 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +47 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts +8 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingPreview.js +21 -0
- package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.d.ts +6 -0
- package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/RecordingTimer.js +9 -0
- package/dist/components/MediaRecorder/AudioRecorder/index.d.ts +4 -0
- package/dist/components/MediaRecorder/AudioRecorder/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/AudioRecorder/index.js +3 -0
- package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts +8 -0
- package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts.map +1 -0
- package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.js +21 -0
- package/dist/components/MediaRecorder/classes/AmplitudeRecorder.d.ts +55 -0
- package/dist/components/MediaRecorder/classes/AmplitudeRecorder.d.ts.map +1 -0
- package/dist/components/MediaRecorder/classes/AmplitudeRecorder.js +93 -0
- package/dist/components/MediaRecorder/classes/BrowserPermission.d.ts +23 -0
- package/dist/components/MediaRecorder/classes/BrowserPermission.d.ts.map +1 -0
- package/dist/components/MediaRecorder/classes/BrowserPermission.js +98 -0
- package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts +83 -0
- package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts.map +1 -0
- package/dist/components/MediaRecorder/classes/MediaRecorderController.js +313 -0
- package/dist/components/MediaRecorder/classes/index.d.ts +4 -0
- package/dist/components/MediaRecorder/classes/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/classes/index.js +2 -0
- package/dist/components/MediaRecorder/hooks/index.d.ts +2 -0
- package/dist/components/MediaRecorder/hooks/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/hooks/index.js +1 -0
- package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts +20 -0
- package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts.map +1 -0
- package/dist/components/MediaRecorder/hooks/useMediaRecorder.js +73 -0
- package/dist/components/MediaRecorder/index.d.ts +6 -0
- package/dist/components/MediaRecorder/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/index.js +5 -0
- package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts +11 -0
- package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/BehaviorSubject.js +34 -0
- package/dist/components/MediaRecorder/observable/Observable.d.ts +18 -0
- package/dist/components/MediaRecorder/observable/Observable.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/Observable.js +29 -0
- package/dist/components/MediaRecorder/observable/Observer.d.ts +10 -0
- package/dist/components/MediaRecorder/observable/Observer.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/Observer.js +3 -0
- package/dist/components/MediaRecorder/observable/Subject.d.ts +16 -0
- package/dist/components/MediaRecorder/observable/Subject.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/Subject.js +70 -0
- package/dist/components/MediaRecorder/observable/Subscription.d.ts +11 -0
- package/dist/components/MediaRecorder/observable/Subscription.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/Subscription.js +13 -0
- package/dist/components/MediaRecorder/observable/index.d.ts +6 -0
- package/dist/components/MediaRecorder/observable/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/observable/index.js +5 -0
- package/dist/components/MediaRecorder/transcode/audioProcessing.d.ts +16 -0
- package/dist/components/MediaRecorder/transcode/audioProcessing.d.ts.map +1 -0
- package/dist/components/MediaRecorder/transcode/audioProcessing.js +51 -0
- package/dist/components/MediaRecorder/transcode/index.d.ts +8 -0
- package/dist/components/MediaRecorder/transcode/index.d.ts.map +1 -0
- package/dist/components/MediaRecorder/transcode/index.js +18 -0
- package/dist/components/MediaRecorder/transcode/mp3.d.ts +2 -0
- package/dist/components/MediaRecorder/transcode/mp3.d.ts.map +1 -0
- package/dist/components/MediaRecorder/transcode/mp3.js +53 -0
- package/dist/components/MediaRecorder/transcode/wav.d.ts +8 -0
- package/dist/components/MediaRecorder/transcode/wav.d.ts.map +1 -0
- package/dist/components/MediaRecorder/transcode/wav.js +117 -0
- package/dist/components/MessageInput/AttachmentPreviewList.d.ts +2 -1
- package/dist/components/MessageInput/AttachmentPreviewList.d.ts.map +1 -1
- package/dist/components/MessageInput/AttachmentPreviewList.js +66 -20
- package/dist/components/MessageInput/CooldownTimer.d.ts.map +1 -1
- package/dist/components/MessageInput/CooldownTimer.js +4 -17
- package/dist/components/MessageInput/MessageInput.d.ts +10 -0
- package/dist/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputFlat.js +31 -9
- package/dist/components/MessageInput/MessageInputSmall.d.ts.map +1 -1
- package/dist/components/MessageInput/MessageInputSmall.js +3 -2
- package/dist/components/MessageInput/SendButton.d.ts +8 -0
- package/dist/components/MessageInput/SendButton.d.ts.map +1 -0
- package/dist/components/MessageInput/SendButton.js +9 -0
- package/dist/components/MessageInput/hooks/useAttachments.d.ts +5 -2
- package/dist/components/MessageInput/hooks/useAttachments.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useAttachments.js +87 -3
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +12 -2
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +22 -7
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useMessageInputState.js +31 -5
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -2
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts.map +1 -1
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +15 -6
- package/dist/components/MessageInput/hooks/useTimeElapsed.d.ts +10 -0
- package/dist/components/MessageInput/hooks/useTimeElapsed.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/useTimeElapsed.js +30 -0
- package/dist/components/MessageInput/hooks/useTimer.d.ts +4 -0
- package/dist/components/MessageInput/hooks/useTimer.d.ts.map +1 -0
- package/dist/components/MessageInput/hooks/useTimer.js +20 -0
- package/dist/components/MessageInput/icons.d.ts +5 -6
- package/dist/components/MessageInput/icons.d.ts.map +1 -1
- package/dist/components/MessageInput/icons.js +13 -10
- package/dist/components/MessageInput/index.d.ts +1 -0
- package/dist/components/MessageInput/index.d.ts.map +1 -1
- package/dist/components/MessageInput/index.js +1 -0
- package/dist/components/MessageInput/types.d.ts +36 -1
- package/dist/components/MessageInput/types.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/types.d.ts +1 -0
- package/dist/components/ReactFileUtilities/types.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/utils.d.ts +9 -1
- package/dist/components/ReactFileUtilities/utils.d.ts.map +1 -1
- package/dist/components/ReactFileUtilities/utils.js +25 -0
- package/dist/components/Reactions/utils/utils.d.ts +2 -1
- package/dist/components/Reactions/utils/utils.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/context/ComponentContext.d.ts +7 -4
- package/dist/context/ComponentContext.d.ts.map +1 -1
- package/dist/context/MessageInputContext.d.ts +4 -1
- package/dist/context/MessageInputContext.d.ts.map +1 -1
- package/dist/i18n/Streami18n.d.ts +13 -0
- package/dist/i18n/Streami18n.d.ts.map +1 -1
- package/dist/i18n/de.json +13 -0
- package/dist/i18n/en.json +13 -0
- package/dist/i18n/es.json +13 -0
- package/dist/i18n/fr.json +13 -0
- package/dist/i18n/hi.json +13 -0
- package/dist/i18n/it.json +13 -0
- package/dist/i18n/ja.json +13 -0
- package/dist/i18n/ko.json +13 -0
- package/dist/i18n/nl.json +13 -0
- package/dist/i18n/pt.json +13 -0
- package/dist/i18n/ru.json +13 -0
- package/dist/i18n/tr.json +13 -0
- package/dist/index.cjs.js +22 -3
- package/dist/utils/mergeDeep.d.ts +4 -0
- package/dist/utils/mergeDeep.d.ts.map +1 -0
- package/dist/utils/mergeDeep.js +5 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -1
- package/dist/components/MessageInput/hooks/useFileState.d.ts +0 -7
- package/dist/components/MessageInput/hooks/useFileState.d.ts.map +0 -1
- package/dist/components/MessageInput/hooks/useFileState.js +0 -8
|
@@ -1,17 +1,66 @@
|
|
|
1
1
|
import clsx from 'clsx';
|
|
2
2
|
import React, { useCallback, useState } from 'react';
|
|
3
|
+
import { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from './icons';
|
|
4
|
+
import { isAudioAttachment, isMediaAttachment, isVoiceRecordingAttachment, PlayButton, } from '../Attachment';
|
|
3
5
|
import { BaseImage as DefaultBaseImage } from '../Gallery';
|
|
6
|
+
import { useAudioController } from '../Attachment/hooks/useAudioController';
|
|
7
|
+
import { RecordingTimer } from '../MediaRecorder';
|
|
4
8
|
import { FileIcon } from '../ReactFileUtilities';
|
|
5
9
|
import { useComponentContext, useMessageInputContext } from '../../context';
|
|
6
|
-
import { useFileState } from './hooks/useFileState';
|
|
7
|
-
import { CloseIcon, DownloadIcon, LoadingIndicatorIcon, RetryIcon } from './icons';
|
|
8
10
|
export var AttachmentPreviewList = function () {
|
|
9
|
-
var _a = useMessageInputContext('AttachmentPreviewList'), fileOrder = _a.fileOrder, imageOrder = _a.imageOrder;
|
|
11
|
+
var _a = useMessageInputContext('AttachmentPreviewList'), attachments = _a.attachments, fileOrder = _a.fileOrder, imageOrder = _a.imageOrder, removeAttachment = _a.removeAttachment, uploadAttachment = _a.uploadAttachment;
|
|
10
12
|
return (React.createElement("div", { className: 'str-chat__attachment-preview-list' },
|
|
11
13
|
React.createElement("div", { className: 'str-chat__attachment-list-scroll-container', "data-testid": 'attachment-list-scroll-container' },
|
|
14
|
+
attachments.map(function (attachment) {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
if (isVoiceRecordingAttachment(attachment)) {
|
|
17
|
+
return (React.createElement(VoiceRecordingPreview, { attachment: attachment, handleRetry: uploadAttachment, key: ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) || attachment.asset_url, mimeType: attachment.mime_type, removeAttachment: removeAttachment }));
|
|
18
|
+
}
|
|
19
|
+
else if (isAudioAttachment(attachment) || isMediaAttachment(attachment)) {
|
|
20
|
+
// unnecessary to pass handleRetry as video and audio if among attachments is already uploaded
|
|
21
|
+
// - user looking at the edit message input
|
|
22
|
+
return (React.createElement(FilePreview, { attachment: attachment, handleRetry: uploadAttachment, key: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.id) || attachment.asset_url, removeAttachment: removeAttachment }));
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}),
|
|
12
26
|
imageOrder.map(function (id) { return (React.createElement(ImagePreviewItem, { id: id, key: id })); }),
|
|
13
27
|
fileOrder.map(function (id) { return (React.createElement(FilePreviewItem, { id: id, key: id })); }))));
|
|
14
28
|
};
|
|
29
|
+
var VoiceRecordingPreview = function (_a) {
|
|
30
|
+
var _b, _c, _d;
|
|
31
|
+
var attachment = _a.attachment, handleRetry = _a.handleRetry, mimeType = _a.mimeType, removeAttachment = _a.removeAttachment;
|
|
32
|
+
var _e = useAudioController({ mimeType: mimeType }), audioRef = _e.audioRef, isPlaying = _e.isPlaying, secondsElapsed = _e.secondsElapsed, togglePlay = _e.togglePlay;
|
|
33
|
+
return (React.createElement("div", { className: 'str-chat__attachment-preview-voice-recording', "data-testid": 'attachment-preview-voice-recording' },
|
|
34
|
+
React.createElement("audio", { ref: audioRef },
|
|
35
|
+
React.createElement("source", { "data-testid": 'audio-source', src: attachment.asset_url, type: attachment.mime_type })),
|
|
36
|
+
React.createElement(PlayButton, { isPlaying: isPlaying, onClick: togglePlay }),
|
|
37
|
+
React.createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.uploadState) === 'uploading', onClick: function () { var _a; return ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) && removeAttachment(attachment.$internal.id); } },
|
|
38
|
+
React.createElement(CloseIcon, null)),
|
|
39
|
+
((_c = attachment.$internal) === null || _c === void 0 ? void 0 : _c.uploadState) === 'failed' && !!handleRetry && (React.createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: function () { return handleRetry(attachment); } },
|
|
40
|
+
React.createElement(RetryIcon, null))),
|
|
41
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-metadata' },
|
|
42
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-file-name', title: attachment.title }, attachment.title),
|
|
43
|
+
typeof attachment.duration !== 'undefined' && (React.createElement(RecordingTimer, { durationSeconds: secondsElapsed || attachment.duration })),
|
|
44
|
+
((_d = attachment.$internal) === null || _d === void 0 ? void 0 : _d.uploadState) === 'uploading' && React.createElement(LoadingIndicatorIcon, { size: 17 })),
|
|
45
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
|
|
46
|
+
React.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type, version: '2' }))));
|
|
47
|
+
};
|
|
48
|
+
var FilePreview = function (_a) {
|
|
49
|
+
var _b, _c, _d, _e;
|
|
50
|
+
var attachment = _a.attachment, handleRetry = _a.handleRetry, removeAttachment = _a.removeAttachment;
|
|
51
|
+
return (React.createElement("div", { className: 'str-chat__attachment-preview-file', "data-testid": 'attachment-preview-file' },
|
|
52
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-file-icon' },
|
|
53
|
+
React.createElement(FileIcon, { filename: attachment.title, mimeType: attachment.mime_type, version: '2' })),
|
|
54
|
+
React.createElement("button", { className: 'str-chat__attachment-preview-delete', "data-testid": 'file-preview-item-delete-button', disabled: ((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.uploadState) === 'uploading', onClick: function () { var _a, _b; return ((_a = attachment.$internal) === null || _a === void 0 ? void 0 : _a.id) && removeAttachment((_b = attachment.$internal) === null || _b === void 0 ? void 0 : _b.id); } },
|
|
55
|
+
React.createElement(CloseIcon, null)),
|
|
56
|
+
((_c = attachment.$internal) === null || _c === void 0 ? void 0 : _c.uploadState) === 'failed' && !!handleRetry && (React.createElement("button", { className: 'str-chat__attachment-preview-error str-chat__attachment-preview-error-file', "data-testid": 'file-preview-item-retry-button', onClick: function () { return handleRetry(attachment); } },
|
|
57
|
+
React.createElement(RetryIcon, null))),
|
|
58
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-file-end' },
|
|
59
|
+
React.createElement("div", { className: 'str-chat__attachment-preview-file-name', title: attachment.title }, attachment.title),
|
|
60
|
+
((_d = attachment.$internal) === null || _d === void 0 ? void 0 : _d.uploadState) === 'finished' && (React.createElement("a", { className: 'str-chat__attachment-preview-file-download', download: true, href: attachment.asset_url, rel: 'noreferrer', target: '_blank' },
|
|
61
|
+
React.createElement(DownloadIcon, null))),
|
|
62
|
+
((_e = attachment.$internal) === null || _e === void 0 ? void 0 : _e.uploadState) === 'uploading' && React.createElement(LoadingIndicatorIcon, { size: 17 }))));
|
|
63
|
+
};
|
|
15
64
|
export var ImagePreviewItem = function (_a) {
|
|
16
65
|
var _b;
|
|
17
66
|
var id = _a.id;
|
|
@@ -42,25 +91,22 @@ export var ImagePreviewItem = function (_a) {
|
|
|
42
91
|
var FilePreviewItem = function (_a) {
|
|
43
92
|
var id = _a.id;
|
|
44
93
|
var _b = useMessageInputContext('FilePreviewItem'), fileUploads = _b.fileUploads, removeFile = _b.removeFile, uploadFile = _b.uploadFile;
|
|
45
|
-
var handleRemove = useCallback(function (
|
|
46
|
-
e.stopPropagation();
|
|
94
|
+
var handleRemove = useCallback(function (id) {
|
|
47
95
|
removeFile(id);
|
|
48
|
-
}, [removeFile
|
|
49
|
-
var handleRetry = useCallback(function () { return uploadFile(id); }, [uploadFile
|
|
96
|
+
}, [removeFile]);
|
|
97
|
+
var handleRetry = useCallback(function (attachment) { return attachment.$internal && uploadFile(attachment.$internal.id); }, [uploadFile]);
|
|
50
98
|
var file = fileUploads[id];
|
|
51
|
-
var state = useFileState(file);
|
|
52
99
|
if (!file)
|
|
53
100
|
return null;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
state.uploading && React.createElement(LoadingIndicatorIcon, { size: 17 }))));
|
|
101
|
+
var attachment = {
|
|
102
|
+
$internal: {
|
|
103
|
+
file: file.file,
|
|
104
|
+
id: id,
|
|
105
|
+
uploadState: file.state,
|
|
106
|
+
},
|
|
107
|
+
asset_url: file.url,
|
|
108
|
+
mime_type: file.file.type,
|
|
109
|
+
title: file.file.name,
|
|
110
|
+
};
|
|
111
|
+
return (React.createElement(FilePreview, { attachment: attachment, handleRetry: handleRetry, removeAttachment: handleRemove }));
|
|
66
112
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CooldownTimer.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/CooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"CooldownTimer.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/CooldownTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAChF,CAAC;AACF,eAAO,MAAM,aAAa,yBAA0B,kBAAkB,sBAQrE,CAAC"}
|
|
@@ -1,20 +1,7 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTimer } from './hooks/useTimer';
|
|
2
3
|
export var CooldownTimer = function (_a) {
|
|
3
4
|
var cooldownInterval = _a.cooldownInterval;
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
var countdownTimeout;
|
|
7
|
-
if (typeof seconds === 'number' && seconds > 0) {
|
|
8
|
-
countdownTimeout = setTimeout(function () {
|
|
9
|
-
setSeconds(seconds - 1);
|
|
10
|
-
}, 1000);
|
|
11
|
-
}
|
|
12
|
-
return function () {
|
|
13
|
-
clearTimeout(countdownTimeout);
|
|
14
|
-
};
|
|
15
|
-
}, [seconds]);
|
|
16
|
-
useEffect(function () {
|
|
17
|
-
setSeconds(cooldownInterval !== null && cooldownInterval !== void 0 ? cooldownInterval : 0);
|
|
18
|
-
}, [cooldownInterval]);
|
|
19
|
-
return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, seconds));
|
|
5
|
+
var secondsLeft = useTimer({ startFrom: cooldownInterval });
|
|
6
|
+
return (React.createElement("div", { className: 'str-chat__message-input-cooldown', "data-testid": 'cooldown-timer' }, secondsLeft));
|
|
20
7
|
};
|
|
@@ -7,6 +7,7 @@ import type { MessageToSend } from '../../context/ChannelActionContext';
|
|
|
7
7
|
import type { CustomTrigger, DefaultStreamChatGenerics, SendMessageOptions, UnknownType } from '../../types/types';
|
|
8
8
|
import type { URLEnrichmentConfig } from './hooks/useLinkPreviews';
|
|
9
9
|
import type { FileUpload, ImageUpload } from './types';
|
|
10
|
+
import type { CustomAudioRecordingConfig } from '../MediaRecorder';
|
|
10
11
|
export type EmojiSearchIndexResult = {
|
|
11
12
|
id: string;
|
|
12
13
|
name: string;
|
|
@@ -22,6 +23,15 @@ export interface EmojiSearchIndex<T extends UnknownType = UnknownType> {
|
|
|
22
23
|
export type MessageInputProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger> = {
|
|
23
24
|
/** Additional props to be passed to the underlying `AutoCompleteTextarea` component, [available props](https://www.npmjs.com/package/react-textarea-autosize) */
|
|
24
25
|
additionalTextareaProps?: React.TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
26
|
+
/**
|
|
27
|
+
* When enabled, recorded messages won’t be sent immediately.
|
|
28
|
+
* Instead, they will “stack up” with other attachments in the message composer allowing the user to send multiple attachments as part of the same message.
|
|
29
|
+
*/
|
|
30
|
+
asyncMessagesMultiSendEnabled?: boolean;
|
|
31
|
+
/** Allows to configure the audio recording parameters for voice messages. */
|
|
32
|
+
audioRecordingConfig?: CustomAudioRecordingConfig;
|
|
33
|
+
/** Controls whether the users will be provided with the UI to record voice messages. */
|
|
34
|
+
audioRecordingEnabled?: boolean;
|
|
25
35
|
/** Function to clear the editing state while editing a message */
|
|
26
36
|
clearEditingState?: () => void;
|
|
27
37
|
/** If true, disables the text input */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAOjD,OAAO,EAAE,aAAa,EAA0B,MAAM,mCAAmC,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAuB,MAAM,gCAAgC,CAAC;AAG5F,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,KAAK,EACV,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageInput.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MessageInputFlat.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputFlat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAsCzE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,eAAO,MAAM,gBAAgB,2GA+B5B,CAAC"}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
import { __assign } from "tslib";
|
|
2
|
-
import React, { useEffect, useMemo } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
3
|
import { FileUploadButton, ImageDropzone, UploadButton } from '../ReactFileUtilities';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import { useDropzone } from 'react-dropzone';
|
|
6
6
|
import { nanoid } from 'nanoid';
|
|
7
|
-
import { FileUploadIconFlat as DefaultFileUploadIcon,
|
|
7
|
+
import { FileUploadIconFlat as DefaultFileUploadIcon, UploadIcon as DefaultUploadIcon, } from './icons';
|
|
8
|
+
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
9
|
+
import { SendButton as DefaultSendButton } from './SendButton';
|
|
10
|
+
import { AudioRecorder as DefaultAudioRecorder, RecordingPermissionDeniedNotification as DefaultRecordingPermissionDeniedNotification, StartRecordingAudioButton as DefaultStartRecordingAudioButton, RecordingPermission, } from '../MediaRecorder';
|
|
8
11
|
import { QuotedMessagePreview as DefaultQuotedMessagePreview, QuotedMessagePreviewHeader, } from './QuotedMessagePreview';
|
|
9
12
|
import { AttachmentPreviewList as DefaultAttachmentPreviewList } from './AttachmentPreviewList';
|
|
10
13
|
import { LinkPreviewList as DefaultLinkPreviewList } from './LinkPreviewList';
|
|
11
14
|
import { UploadsPreview } from './UploadsPreview';
|
|
12
15
|
import { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';
|
|
13
16
|
import { Tooltip } from '../Tooltip/Tooltip';
|
|
17
|
+
import { RecordingAttachmentType } from '../MediaRecorder/classes';
|
|
14
18
|
import { useChatContext } from '../../context/ChatContext';
|
|
15
19
|
import { useChannelActionContext } from '../../context/ChannelActionContext';
|
|
16
20
|
import { useChannelStateContext } from '../../context/ChannelStateContext';
|
|
17
21
|
import { useTranslationContext } from '../../context/TranslationContext';
|
|
18
22
|
import { useMessageInputContext } from '../../context/MessageInputContext';
|
|
19
23
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
20
|
-
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
21
24
|
export var MessageInputFlat = function () {
|
|
22
25
|
var quotedMessage = useChannelStateContext('MessageInputFlat').quotedMessage;
|
|
23
26
|
var setQuotedMessage = useChannelActionContext('MessageInputFlat').setQuotedMessage;
|
|
@@ -74,8 +77,12 @@ var MessageInputV1 = function () {
|
|
|
74
77
|
var MessageInputV2 = function () {
|
|
75
78
|
var _a = useChannelStateContext('MessageInputV2'), _b = _a.acceptedFiles, acceptedFiles = _b === void 0 ? [] : _b, multipleUploads = _a.multipleUploads, quotedMessage = _a.quotedMessage;
|
|
76
79
|
var t = useTranslationContext('MessageInputV2').t;
|
|
77
|
-
var _c = useMessageInputContext('MessageInputV2'), cooldownRemaining = _c.cooldownRemaining, findAndEnqueueURLsToEnrich = _c.findAndEnqueueURLsToEnrich, handleSubmit = _c.handleSubmit, hideSendButton = _c.hideSendButton, isUploadEnabled = _c.isUploadEnabled, linkPreviews = _c.linkPreviews, maxFilesLeft = _c.maxFilesLeft, message = _c.message, numberOfUploads = _c.numberOfUploads, setCooldownRemaining = _c.setCooldownRemaining, text = _c.text, uploadNewFiles = _c.uploadNewFiles;
|
|
78
|
-
var _d = useComponentContext('MessageInputV2'), _e = _d.
|
|
80
|
+
var _c = useMessageInputContext('MessageInputV2'), asyncMessagesMultiSendEnabled = _c.asyncMessagesMultiSendEnabled, attachments = _c.attachments, cooldownRemaining = _c.cooldownRemaining, findAndEnqueueURLsToEnrich = _c.findAndEnqueueURLsToEnrich, handleSubmit = _c.handleSubmit, hideSendButton = _c.hideSendButton, isUploadEnabled = _c.isUploadEnabled, linkPreviews = _c.linkPreviews, maxFilesLeft = _c.maxFilesLeft, message = _c.message, numberOfUploads = _c.numberOfUploads, recordingController = _c.recordingController, setCooldownRemaining = _c.setCooldownRemaining, text = _c.text, uploadNewFiles = _c.uploadNewFiles;
|
|
81
|
+
var _d = useComponentContext('MessageInputV2'), _e = _d.AudioRecorder, AudioRecorder = _e === void 0 ? DefaultAudioRecorder : _e, _f = _d.AttachmentPreviewList, AttachmentPreviewList = _f === void 0 ? DefaultAttachmentPreviewList : _f, _g = _d.CooldownTimer, CooldownTimer = _g === void 0 ? DefaultCooldownTimer : _g, _h = _d.FileUploadIcon, FileUploadIcon = _h === void 0 ? DefaultUploadIcon : _h, _j = _d.LinkPreviewList, LinkPreviewList = _j === void 0 ? DefaultLinkPreviewList : _j, _k = _d.QuotedMessagePreview, QuotedMessagePreview = _k === void 0 ? DefaultQuotedMessagePreview : _k, _l = _d.RecordingPermissionDeniedNotification, RecordingPermissionDeniedNotification = _l === void 0 ? DefaultRecordingPermissionDeniedNotification : _l, _m = _d.SendButton, SendButton = _m === void 0 ? DefaultSendButton : _m, _o = _d.StartRecordingAudioButton, StartRecordingAudioButton = _o === void 0 ? DefaultStartRecordingAudioButton : _o, EmojiPicker = _d.EmojiPicker;
|
|
82
|
+
var _p = useState(false), showRecordingPermissionDeniedNotification = _p[0], setShowRecordingPermissionDeniedNotification = _p[1];
|
|
83
|
+
var closePermissionDeniedNotification = useCallback(function () {
|
|
84
|
+
setShowRecordingPermissionDeniedNotification(false);
|
|
85
|
+
}, []);
|
|
79
86
|
var id = useMemo(function () { return nanoid(); }, []);
|
|
80
87
|
var accept = useMemo(function () {
|
|
81
88
|
return acceptedFiles.reduce(function (mediaTypeMap, mediaType) {
|
|
@@ -84,18 +91,25 @@ var MessageInputV2 = function () {
|
|
|
84
91
|
return mediaTypeMap;
|
|
85
92
|
}, {});
|
|
86
93
|
}, [acceptedFiles]);
|
|
87
|
-
var
|
|
94
|
+
var _q = useDropzone({
|
|
88
95
|
accept: accept,
|
|
89
96
|
disabled: !isUploadEnabled || maxFilesLeft === 0,
|
|
90
97
|
multiple: multipleUploads,
|
|
91
98
|
noClick: true,
|
|
92
99
|
onDrop: uploadNewFiles,
|
|
93
|
-
}), getRootProps =
|
|
100
|
+
}), getRootProps = _q.getRootProps, isDragActive = _q.isDragActive, isDragReject = _q.isDragReject;
|
|
101
|
+
if (recordingController.recordingState)
|
|
102
|
+
return React.createElement(AudioRecorder, null);
|
|
94
103
|
// TODO: "!message" condition is a temporary fix for shared
|
|
95
104
|
// state when editing a message (fix shared state issue)
|
|
96
105
|
var displayQuotedMessage = !message && quotedMessage && !quotedMessage.parent_id;
|
|
106
|
+
var recordingEnabled = !!(recordingController.recorder && navigator.mediaDevices); // account for requirement on iOS as per this bug report: https://bugs.webkit.org/show_bug.cgi?id=252303
|
|
107
|
+
var isRecording = !!recordingController.recordingState;
|
|
97
108
|
return (React.createElement(React.Fragment, null,
|
|
98
109
|
React.createElement("div", __assign({}, getRootProps({ className: 'str-chat__message-input' })),
|
|
110
|
+
recordingEnabled &&
|
|
111
|
+
recordingController.permissionState === 'denied' &&
|
|
112
|
+
showRecordingPermissionDeniedNotification && (React.createElement(RecordingPermissionDeniedNotification, { onClose: closePermissionDeniedNotification, permissionName: RecordingPermission.MIC })),
|
|
99
113
|
findAndEnqueueURLsToEnrich && (React.createElement(LinkPreviewList, { linkPreviews: Array.from(linkPreviews.values()) })),
|
|
100
114
|
isDragActive && (React.createElement("div", { className: clsx('str-chat__dropzone-container', {
|
|
101
115
|
'str-chat__dropzone-container--not-accepted': isDragReject,
|
|
@@ -110,9 +124,17 @@ var MessageInputV2 = function () {
|
|
|
110
124
|
React.createElement(FileUploadIcon, null))),
|
|
111
125
|
React.createElement("div", { className: 'str-chat__message-textarea-container' },
|
|
112
126
|
displayQuotedMessage && React.createElement(QuotedMessagePreview, { quotedMessage: quotedMessage }),
|
|
113
|
-
isUploadEnabled && !!numberOfUploads && React.createElement(AttachmentPreviewList, null),
|
|
127
|
+
isUploadEnabled && !!(numberOfUploads || attachments.length) && (React.createElement(AttachmentPreviewList, null)),
|
|
114
128
|
React.createElement("div", { className: 'str-chat__message-textarea-with-emoji-picker' },
|
|
115
129
|
React.createElement(ChatAutoComplete, null),
|
|
116
130
|
EmojiPicker && React.createElement(EmojiPicker, null))),
|
|
117
|
-
!hideSendButton && (React.createElement(React.Fragment, null, cooldownRemaining ? (React.createElement(CooldownTimer, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining })) : (React.createElement(
|
|
131
|
+
!hideSendButton && (React.createElement(React.Fragment, null, cooldownRemaining ? (React.createElement(CooldownTimer, { cooldownInterval: cooldownRemaining, setCooldownRemaining: setCooldownRemaining })) : (React.createElement(React.Fragment, null,
|
|
132
|
+
React.createElement(SendButton, { disabled: !numberOfUploads && !text.length && !attachments.length, sendMessage: handleSubmit }),
|
|
133
|
+
recordingEnabled && (React.createElement(StartRecordingAudioButton, { disabled: isRecording ||
|
|
134
|
+
(!asyncMessagesMultiSendEnabled &&
|
|
135
|
+
attachments.some(function (a) { return a.type === RecordingAttachmentType.VOICE_RECORDING; })), onClick: function () {
|
|
136
|
+
var _a;
|
|
137
|
+
(_a = recordingController.recorder) === null || _a === void 0 ? void 0 : _a.start();
|
|
138
|
+
setShowRecordingPermissionDeniedNotification(true);
|
|
139
|
+
} }))))))))));
|
|
118
140
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageInputSmall.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/MessageInputSmall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAqBzC,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAElF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,oJAmH7B,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
2
|
import { FileUploadButton, ImageDropzone } from '../ReactFileUtilities';
|
|
3
|
-
import { FileUploadIconFlat as DefaultFileUploadIcon,
|
|
3
|
+
import { FileUploadIconFlat as DefaultFileUploadIcon, EmojiIconSmall } from './icons';
|
|
4
4
|
import { UploadsPreview } from './UploadsPreview';
|
|
5
|
+
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
6
|
+
import { SendButton as DefaultSendButton } from './SendButton';
|
|
5
7
|
import { ChatAutoComplete } from '../ChatAutoComplete/ChatAutoComplete';
|
|
6
8
|
import { Tooltip } from '../Tooltip/Tooltip';
|
|
7
9
|
import { useChatContext } from '../../context/ChatContext';
|
|
@@ -11,7 +13,6 @@ import { useTranslationContext } from '../../context/TranslationContext';
|
|
|
11
13
|
import { useMessageInputContext } from '../../context/MessageInputContext';
|
|
12
14
|
import { useComponentContext } from '../../context/ComponentContext';
|
|
13
15
|
import { QuotedMessagePreview as DefaultQuotedMessagePreview } from './QuotedMessagePreview';
|
|
14
|
-
import { CooldownTimer as DefaultCooldownTimer } from './CooldownTimer';
|
|
15
16
|
/**
|
|
16
17
|
* @deprecated This component has beend deprecated in favor of [`MessageInputFlat`](./MessageInputFlat.tsx) from which
|
|
17
18
|
* `MessageInputSmall` "inherited" most of the code with only slight modification to classNames
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Message } from 'stream-chat';
|
|
3
|
+
import type { DefaultStreamChatGenerics } from '../../types/types';
|
|
4
|
+
export type SendButtonProps<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
|
|
5
|
+
sendMessage: (event: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>) => void;
|
|
6
|
+
} & React.ComponentProps<'button'>;
|
|
7
|
+
export declare const SendButton: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ sendMessage, ...rest }: SendButtonProps<StreamChatGenerics>) => React.JSX.Element;
|
|
8
|
+
//# sourceMappingURL=SendButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendButton.d.ts","sourceRoot":"","sources":["../../../src/components/MessageInput/SendButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,eAAe,CACzB,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E;IACF,WAAW,EAAE,CACX,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KACrD,IAAI,CAAC;CACX,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACnC,eAAO,MAAM,UAAU,wKAoBtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useChatContext } from '../../context';
|
|
4
|
+
import { SendIconV1, SendIconV2 } from './icons';
|
|
5
|
+
export var SendButton = function (_a) {
|
|
6
|
+
var sendMessage = _a.sendMessage, rest = __rest(_a, ["sendMessage"]);
|
|
7
|
+
var themeVersion = useChatContext('SendButton').themeVersion;
|
|
8
|
+
return (React.createElement("button", __assign({ "aria-label": 'Send', className: 'str-chat__send-button', "data-testid": 'send-button', onClick: sendMessage, type: 'button' }, rest), themeVersion === '2' ? React.createElement(SendIconV2, null) : React.createElement(SendIconV1, null)));
|
|
9
|
+
};
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type { FileLike } from '../../ReactFileUtilities';
|
|
2
|
-
import type { MessageInputProps } from '../MessageInput';
|
|
3
1
|
import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
|
|
2
|
+
import type { MessageInputProps } from '../MessageInput';
|
|
3
|
+
import type { LocalAttachment } from '../types';
|
|
4
|
+
import type { FileLike } from '../../ReactFileUtilities';
|
|
4
5
|
import type { CustomTrigger, DefaultStreamChatGenerics } from '../../../types/types';
|
|
5
6
|
export declare const useAttachments: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: import("react").Dispatch<MessageInputReducerAction<StreamChatGenerics>>, textareaRef: React.MutableRefObject<HTMLTextAreaElement | undefined>) => {
|
|
6
7
|
maxFilesLeft: number;
|
|
7
8
|
numberOfUploads: number;
|
|
9
|
+
removeAttachment: (id: string) => void;
|
|
8
10
|
removeFile: (id: string) => void;
|
|
9
11
|
removeImage: (id: string) => void;
|
|
12
|
+
uploadAttachment: (att: LocalAttachment<StreamChatGenerics>) => Promise<LocalAttachment<StreamChatGenerics>>;
|
|
10
13
|
uploadFile: (id: string) => void;
|
|
11
14
|
uploadImage: (id: string) => Promise<void>;
|
|
12
15
|
uploadNewFiles: (files: FileList | File[] | FileLike[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAttachments.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useAttachments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAttachments.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useAttachments.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAIrF,eAAO,MAAM,cAAc,6TAOZ,MAAM,gBAAgB,CAAC,mBAAmB,GAAG,SAAS,CAAC;;;2BA6DtC,MAAM;;;;;;4BA5B1B,QAAQ,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE;CAuIzC,CAAC"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { __assign, __awaiter, __generator, __rest } from "tslib";
|
|
1
2
|
import { useCallback } from 'react';
|
|
2
3
|
import { nanoid } from 'nanoid';
|
|
3
4
|
import { useImageUploads } from './useImageUploads';
|
|
4
5
|
import { useFileUploads } from './useFileUploads';
|
|
5
|
-
import {
|
|
6
|
+
import { checkUploadPermissions } from './utils';
|
|
7
|
+
import { useChannelActionContext, useChannelStateContext, useChatContext, useTranslationContext, } from '../../../context';
|
|
6
8
|
var apiMaxNumberOfFiles = 10;
|
|
7
9
|
export var useAttachments = function (props, state, dispatch, textareaRef) {
|
|
8
|
-
var noFiles = props.noFiles;
|
|
10
|
+
var doFileUploadRequest = props.doFileUploadRequest, errorHandler = props.errorHandler, noFiles = props.noFiles;
|
|
9
11
|
var fileUploads = state.fileUploads, imageUploads = state.imageUploads;
|
|
10
|
-
var
|
|
12
|
+
var getAppSettings = useChatContext('useAttachments').getAppSettings;
|
|
13
|
+
var t = useTranslationContext('useAttachments').t;
|
|
14
|
+
var addNotification = useChannelActionContext('useAttachments').addNotification;
|
|
15
|
+
var _a = useChannelStateContext('useAttachments'), channel = _a.channel, maxNumberOfFiles = _a.maxNumberOfFiles, multipleUploads = _a.multipleUploads;
|
|
11
16
|
var _b = useFileUploads(props, state, dispatch), removeFile = _b.removeFile, uploadFile = _b.uploadFile;
|
|
12
17
|
var _c = useImageUploads(props, state, dispatch), removeImage = _c.removeImage, uploadImage = _c.uploadImage;
|
|
13
18
|
// Number of files that the user can still add. Should never be more than the amount allowed by the API.
|
|
@@ -50,11 +55,90 @@ export var useAttachments = function (props, state, dispatch, textareaRef) {
|
|
|
50
55
|
},
|
|
51
56
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
57
|
[maxFilesLeft, noFiles]);
|
|
58
|
+
var removeAttachment = function (id) {
|
|
59
|
+
dispatch({ id: id, type: 'removeAttachment' });
|
|
60
|
+
};
|
|
61
|
+
var uploadAttachment = useCallback(function (att) { return __awaiter(void 0, void 0, void 0, function () {
|
|
62
|
+
var $internal, attachment, id, file, canUpload, notificationText, response, uploadedAttachment, error_1, finalError, failedAttachment;
|
|
63
|
+
var _a;
|
|
64
|
+
return __generator(this, function (_b) {
|
|
65
|
+
switch (_b.label) {
|
|
66
|
+
case 0:
|
|
67
|
+
$internal = att.$internal, attachment = __rest(att, ["$internal"]);
|
|
68
|
+
if (!($internal === null || $internal === void 0 ? void 0 : $internal.file))
|
|
69
|
+
return [2 /*return*/, att];
|
|
70
|
+
id = (_a = $internal === null || $internal === void 0 ? void 0 : $internal.id) !== null && _a !== void 0 ? _a : nanoid();
|
|
71
|
+
file = $internal.file;
|
|
72
|
+
return [4 /*yield*/, checkUploadPermissions({
|
|
73
|
+
addNotification: addNotification,
|
|
74
|
+
file: file,
|
|
75
|
+
getAppSettings: getAppSettings,
|
|
76
|
+
t: t,
|
|
77
|
+
uploadType: 'file',
|
|
78
|
+
})];
|
|
79
|
+
case 1:
|
|
80
|
+
canUpload = _b.sent();
|
|
81
|
+
if (!canUpload) {
|
|
82
|
+
notificationText = t('Missing permissions to upload the attachment');
|
|
83
|
+
console.error(new Error(notificationText));
|
|
84
|
+
addNotification(notificationText, 'error');
|
|
85
|
+
return [2 /*return*/, att];
|
|
86
|
+
}
|
|
87
|
+
dispatch({
|
|
88
|
+
attachment: __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { id: id, uploadState: 'uploading' }) }),
|
|
89
|
+
type: 'upsertAttachment',
|
|
90
|
+
});
|
|
91
|
+
_b.label = 2;
|
|
92
|
+
case 2:
|
|
93
|
+
_b.trys.push([2, 7, , 8]);
|
|
94
|
+
response = void 0;
|
|
95
|
+
if (!doFileUploadRequest) return [3 /*break*/, 4];
|
|
96
|
+
return [4 /*yield*/, doFileUploadRequest(file, channel)];
|
|
97
|
+
case 3:
|
|
98
|
+
response = _b.sent();
|
|
99
|
+
return [3 /*break*/, 6];
|
|
100
|
+
case 4: return [4 /*yield*/, channel.sendFile(file)];
|
|
101
|
+
case 5:
|
|
102
|
+
response = _b.sent();
|
|
103
|
+
_b.label = 6;
|
|
104
|
+
case 6:
|
|
105
|
+
uploadedAttachment = __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { uploadState: 'finished' }), asset_url: response.file });
|
|
106
|
+
dispatch({
|
|
107
|
+
attachment: uploadedAttachment,
|
|
108
|
+
type: 'upsertAttachment',
|
|
109
|
+
});
|
|
110
|
+
return [2 /*return*/, uploadedAttachment];
|
|
111
|
+
case 7:
|
|
112
|
+
error_1 = _b.sent();
|
|
113
|
+
finalError = { message: t('Error uploading attachment'), name: 'Error' };
|
|
114
|
+
if (typeof error_1.message === 'string') {
|
|
115
|
+
finalError = error_1;
|
|
116
|
+
}
|
|
117
|
+
else if (typeof error_1 === 'object') {
|
|
118
|
+
finalError = Object.assign(finalError, error_1);
|
|
119
|
+
}
|
|
120
|
+
console.error(finalError);
|
|
121
|
+
addNotification(finalError.message, 'error');
|
|
122
|
+
failedAttachment = __assign(__assign({}, attachment), { $internal: __assign(__assign({}, $internal), { uploadState: 'failed' }) });
|
|
123
|
+
dispatch({
|
|
124
|
+
attachment: failedAttachment,
|
|
125
|
+
type: 'upsertAttachment',
|
|
126
|
+
});
|
|
127
|
+
if (errorHandler) {
|
|
128
|
+
errorHandler(finalError, 'upload-attachment', file);
|
|
129
|
+
}
|
|
130
|
+
return [2 /*return*/, failedAttachment];
|
|
131
|
+
case 8: return [2 /*return*/];
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}); }, [addNotification, channel, doFileUploadRequest, dispatch, errorHandler, getAppSettings, t]);
|
|
53
135
|
return {
|
|
54
136
|
maxFilesLeft: maxFilesLeft,
|
|
55
137
|
numberOfUploads: numberOfUploads,
|
|
138
|
+
removeAttachment: removeAttachment,
|
|
56
139
|
removeFile: removeFile,
|
|
57
140
|
removeImage: removeImage,
|
|
141
|
+
uploadAttachment: uploadAttachment,
|
|
58
142
|
uploadFile: uploadFile,
|
|
59
143
|
uploadImage: uploadImage,
|
|
60
144
|
uploadNewFiles: uploadNewFiles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreateMessageInputContext.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCreateMessageInputContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"useCreateMessageInputContext.d.ts","sourceRoot":"","sources":["../../../../src/components/MessageInput/hooks/useCreateMessageInputContext.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAErF,eAAO,MAAM,4BAA4B,wOAmLxC,CAAC"}
|
|
@@ -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, cancelURLEnrichment = value.cancelURLEnrichment, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, dismissLinkPreview = value.dismissLinkPreview, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiSearchIndex = value.emojiSearchIndex, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, findAndEnqueueURLsToEnrich = value.findAndEnqueueURLsToEnrich, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleSubmit = value.handleSubmit, hideSendButton = value.hideSendButton, 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, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, 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, asyncMessagesMultiSendEnabled = value.asyncMessagesMultiSendEnabled, attachments = value.attachments, audioRecordingEnabled = value.audioRecordingEnabled, autocompleteTriggers = value.autocompleteTriggers, cancelURLEnrichment = value.cancelURLEnrichment, clearEditingState = value.clearEditingState, closeCommandsList = value.closeCommandsList, closeMentionsList = value.closeMentionsList, cooldownInterval = value.cooldownInterval, cooldownRemaining = value.cooldownRemaining, disabled = value.disabled, disableMentions = value.disableMentions, dismissLinkPreview = value.dismissLinkPreview, doFileUploadRequest = value.doFileUploadRequest, doImageUploadRequest = value.doImageUploadRequest, emojiSearchIndex = value.emojiSearchIndex, errorHandler = value.errorHandler, fileOrder = value.fileOrder, fileUploads = value.fileUploads, findAndEnqueueURLsToEnrich = value.findAndEnqueueURLsToEnrich, focus = value.focus, grow = value.grow, handleChange = value.handleChange, handleSubmit = value.handleSubmit, hideSendButton = value.hideSendButton, 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, onSelectUser = value.onSelectUser, openCommandsList = value.openCommandsList, openMentionsList = value.openMentionsList, overrideSubmitHandler = value.overrideSubmitHandler, parent = value.parent, publishTypingEvent = value.publishTypingEvent, recordingController = value.recordingController, removeAttachment = value.removeAttachment, 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, uploadAttachment = value.uploadAttachment, 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
|
|
@@ -21,7 +21,9 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
21
21
|
var parentId = parent === null || parent === void 0 ? void 0 : parent.id;
|
|
22
22
|
var messageInputContext = useMemo(function () { return ({
|
|
23
23
|
additionalTextareaProps: additionalTextareaProps,
|
|
24
|
+
asyncMessagesMultiSendEnabled: asyncMessagesMultiSendEnabled,
|
|
24
25
|
attachments: attachments,
|
|
26
|
+
audioRecordingEnabled: audioRecordingEnabled,
|
|
25
27
|
autocompleteTriggers: autocompleteTriggers,
|
|
26
28
|
cancelURLEnrichment: cancelURLEnrichment,
|
|
27
29
|
clearEditingState: clearEditingState,
|
|
@@ -64,6 +66,8 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
64
66
|
overrideSubmitHandler: overrideSubmitHandler,
|
|
65
67
|
parent: parent,
|
|
66
68
|
publishTypingEvent: publishTypingEvent,
|
|
69
|
+
recordingController: recordingController,
|
|
70
|
+
removeAttachment: removeAttachment,
|
|
67
71
|
removeFile: removeFile,
|
|
68
72
|
removeImage: removeImage,
|
|
69
73
|
setCooldownRemaining: setCooldownRemaining,
|
|
@@ -73,6 +77,7 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
73
77
|
showMentionsList: showMentionsList,
|
|
74
78
|
text: text,
|
|
75
79
|
textareaRef: textareaRef,
|
|
80
|
+
uploadAttachment: uploadAttachment,
|
|
76
81
|
uploadFile: uploadFile,
|
|
77
82
|
uploadImage: uploadImage,
|
|
78
83
|
uploadNewFiles: uploadNewFiles,
|
|
@@ -80,6 +85,8 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
80
85
|
}); },
|
|
81
86
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
82
87
|
[
|
|
88
|
+
asyncMessagesMultiSendEnabled,
|
|
89
|
+
audioRecordingEnabled,
|
|
83
90
|
cancelURLEnrichment,
|
|
84
91
|
cooldownInterval,
|
|
85
92
|
cooldownRemaining,
|
|
@@ -88,6 +95,7 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
88
95
|
emojiSearchIndex,
|
|
89
96
|
fileUploadsValue,
|
|
90
97
|
findAndEnqueueURLsToEnrich,
|
|
98
|
+
handleSubmit,
|
|
91
99
|
hideSendButton,
|
|
92
100
|
imageUploadsValue,
|
|
93
101
|
isUploadEnabled,
|
|
@@ -95,10 +103,12 @@ export var useCreateMessageInputContext = function (value) {
|
|
|
95
103
|
mentionedUsersLength,
|
|
96
104
|
parentId,
|
|
97
105
|
publishTypingEvent,
|
|
106
|
+
recordingController,
|
|
107
|
+
removeAttachment,
|
|
98
108
|
showCommandsList,
|
|
99
109
|
showMentionsList,
|
|
100
110
|
text,
|
|
101
|
-
|
|
111
|
+
uploadAttachment,
|
|
102
112
|
]);
|
|
103
113
|
return messageInputContext;
|
|
104
114
|
};
|