stream-chat-react-native-core 5.8.1-beta.3 → 5.8.1-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.
Files changed (24) hide show
  1. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +38 -65
  2. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  3. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +22 -21
  4. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  5. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +82 -112
  6. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  7. package/lib/commonjs/types/types.js.map +1 -1
  8. package/lib/commonjs/version.json +1 -1
  9. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +38 -65
  10. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  11. package/lib/module/components/MessageInput/FileUploadPreview.js +22 -21
  12. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  13. package/lib/module/contexts/messageInputContext/MessageInputContext.js +82 -112
  14. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  15. package/lib/module/types/types.js.map +1 -1
  16. package/lib/module/version.json +1 -1
  17. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -6
  18. package/lib/typescript/types/types.d.ts +1 -0
  19. package/package.json +1 -1
  20. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +3 -5
  21. package/src/components/MessageInput/FileUploadPreview.tsx +1 -0
  22. package/src/contexts/messageInputContext/MessageInputContext.tsx +10 -32
  23. package/src/types/types.ts +1 -0
  24. package/src/version.json +1 -1
@@ -3,9 +3,7 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.renderAttachmentPickerItem = void 0;
6
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
7
6
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
8
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
7
  var _react = _interopRequireDefault(require("react"));
10
8
  var _reactNative = require("react-native");
11
9
  var _bottomSheet = require("@gorhom/bottom-sheet");
@@ -13,7 +11,6 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
13
11
  var _mimeTypes = require("mime-types");
14
12
  var _ThemeContext = require("../../../contexts/themeContext/ThemeContext");
15
13
  var _icons = require("../../../icons");
16
- var _native = require("../../../native");
17
14
  var _utils = require("../../../utils/utils");
18
15
  var _this = this,
19
16
  _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx";
@@ -47,60 +44,36 @@ var AttachmentVideo = function AttachmentVideo(props) {
47
44
  durationLabel = formattedVideoDuration;
48
45
  }
49
46
  var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
50
- var onPressVideo = function () {
51
- var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
52
- var localAssetURI;
53
- return _regenerator["default"].wrap(function _callee$(_context) {
54
- while (1) switch (_context.prev = _context.next) {
55
- case 0:
56
- _context.t0 = asset.id;
57
- if (!_context.t0) {
58
- _context.next = 5;
59
- break;
60
- }
61
- _context.next = 4;
62
- return (0, _native.getLocalAssetUri)(asset.id);
63
- case 4:
64
- _context.t0 = _context.sent;
65
- case 5:
66
- localAssetURI = _context.t0;
67
- if (selected) {
68
- setSelectedFiles(function (files) {
69
- return files.filter(function (file) {
70
- return file.uri !== asset.uri;
71
- });
72
- });
73
- } else {
74
- setSelectedFiles(function (files) {
75
- if (numberOfUploads >= maxNumberOfFiles) {
76
- _reactNative.Alert.alert('Maximum number of files reached');
77
- return files;
78
- }
79
- return [].concat((0, _toConsumableArray2["default"])(files), [{
80
- duration: durationLabel,
81
- name: asset.filename,
82
- size: asset.fileSize,
83
- type: 'video',
84
- uri: localAssetURI || asset.uri
85
- }]);
86
- });
87
- }
88
- case 7:
89
- case "end":
90
- return _context.stop();
47
+ var onPressVideo = function onPressVideo() {
48
+ if (selected) {
49
+ setSelectedFiles(function (files) {
50
+ return files.filter(function (file) {
51
+ return file.uri !== asset.uri;
52
+ });
53
+ });
54
+ } else {
55
+ setSelectedFiles(function (files) {
56
+ if (numberOfUploads >= maxNumberOfFiles) {
57
+ _reactNative.Alert.alert('Maximum number of files reached');
58
+ return files;
91
59
  }
92
- }, _callee);
93
- }));
94
- return function onPressVideo() {
95
- return _ref.apply(this, arguments);
96
- };
97
- }();
60
+ return [].concat((0, _toConsumableArray2["default"])(files), [{
61
+ duration: durationLabel,
62
+ id: asset.id,
63
+ name: asset.filename,
64
+ size: asset.fileSize,
65
+ type: 'video',
66
+ uri: asset.uri
67
+ }]);
68
+ });
69
+ }
70
+ };
98
71
  return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
99
72
  onPress: onPressVideo,
100
73
  __self: _this,
101
74
  __source: {
102
75
  fileName: _jsxFileName,
103
- lineNumber: 93,
76
+ lineNumber: 91,
104
77
  columnNumber: 5
105
78
  }
106
79
  }, _react["default"].createElement(_reactNative.ImageBackground, {
@@ -115,7 +88,7 @@ var AttachmentVideo = function AttachmentVideo(props) {
115
88
  __self: _this,
116
89
  __source: {
117
90
  fileName: _jsxFileName,
118
- lineNumber: 94,
91
+ lineNumber: 92,
119
92
  columnNumber: 7
120
93
  }
121
94
  }, selected && _react["default"].createElement(_reactNative.View, {
@@ -125,14 +98,14 @@ var AttachmentVideo = function AttachmentVideo(props) {
125
98
  __self: _this,
126
99
  __source: {
127
100
  fileName: _jsxFileName,
128
- lineNumber: 106,
101
+ lineNumber: 104,
129
102
  columnNumber: 11
130
103
  }
131
104
  }, _react["default"].createElement(ImageOverlaySelectedComponent, {
132
105
  __self: _this,
133
106
  __source: {
134
107
  fileName: _jsxFileName,
135
- lineNumber: 107,
108
+ lineNumber: 105,
136
109
  columnNumber: 13
137
110
  }
138
111
  })), _react["default"].createElement(_reactNative.View, {
@@ -140,7 +113,7 @@ var AttachmentVideo = function AttachmentVideo(props) {
140
113
  __self: _this,
141
114
  __source: {
142
115
  fileName: _jsxFileName,
143
- lineNumber: 110,
116
+ lineNumber: 108,
144
117
  columnNumber: 9
145
118
  }
146
119
  }, _react["default"].createElement(_icons.Recorder, {
@@ -150,7 +123,7 @@ var AttachmentVideo = function AttachmentVideo(props) {
150
123
  __self: _this,
151
124
  __source: {
152
125
  fileName: _jsxFileName,
153
- lineNumber: 111,
126
+ lineNumber: 109,
154
127
  columnNumber: 11
155
128
  }
156
129
  }), videoDuration ? _react["default"].createElement(_reactNative.Text, {
@@ -160,7 +133,7 @@ var AttachmentVideo = function AttachmentVideo(props) {
160
133
  __self: _this,
161
134
  __source: {
162
135
  fileName: _jsxFileName,
163
- lineNumber: 113,
136
+ lineNumber: 111,
164
137
  columnNumber: 13
165
138
  }
166
139
  }, durationLabel) : null)));
@@ -203,7 +176,7 @@ var AttachmentImage = function AttachmentImage(props) {
203
176
  __self: _this,
204
177
  __source: {
205
178
  fileName: _jsxFileName,
206
- lineNumber: 159,
179
+ lineNumber: 157,
207
180
  columnNumber: 5
208
181
  }
209
182
  }, _react["default"].createElement(_reactNative.ImageBackground, {
@@ -218,7 +191,7 @@ var AttachmentImage = function AttachmentImage(props) {
218
191
  __self: _this,
219
192
  __source: {
220
193
  fileName: _jsxFileName,
221
- lineNumber: 160,
194
+ lineNumber: 158,
222
195
  columnNumber: 7
223
196
  }
224
197
  }, selected && _react["default"].createElement(_reactNative.View, {
@@ -228,14 +201,14 @@ var AttachmentImage = function AttachmentImage(props) {
228
201
  __self: _this,
229
202
  __source: {
230
203
  fileName: _jsxFileName,
231
- lineNumber: 172,
204
+ lineNumber: 170,
232
205
  columnNumber: 11
233
206
  }
234
207
  }, _react["default"].createElement(ImageOverlaySelectedComponent, {
235
208
  __self: _this,
236
209
  __source: {
237
210
  fileName: _jsxFileName,
238
- lineNumber: 173,
211
+ lineNumber: 171,
239
212
  columnNumber: 13
240
213
  }
241
214
  }))));
@@ -249,8 +222,8 @@ var getFileType = function getFileType(asset) {
249
222
  return asset.type === 'video' ? 'video' : 'image';
250
223
  }
251
224
  };
252
- var renderAttachmentPickerItem = function renderAttachmentPickerItem(_ref2) {
253
- var item = _ref2.item;
225
+ var renderAttachmentPickerItem = function renderAttachmentPickerItem(_ref) {
226
+ var item = _ref.item;
254
227
  var asset = item.asset,
255
228
  ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
256
229
  maxNumberOfFiles = item.maxNumberOfFiles,
@@ -271,7 +244,7 @@ var renderAttachmentPickerItem = function renderAttachmentPickerItem(_ref2) {
271
244
  __self: _this,
272
245
  __source: {
273
246
  fileName: _jsxFileName,
274
- lineNumber: 206,
247
+ lineNumber: 204,
275
248
  columnNumber: 5
276
249
  }
277
250
  }) : _react["default"].createElement(AttachmentVideo, {
@@ -285,7 +258,7 @@ var renderAttachmentPickerItem = function renderAttachmentPickerItem(_ref2) {
285
258
  __self: _this,
286
259
  __source: {
287
260
  fileName: _jsxFileName,
288
- lineNumber: 216,
261
+ lineNumber: 214,
289
262
  columnNumber: 5
290
263
  }
291
264
  });
@@ -1 +1 @@
1
- {"version":3,"names":["AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","numberOfUploads","selected","setSelectedFiles","useTheme","theme","attachmentPicker","durationText","image","imageOverlay","colors","overlay","white","duration","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","dayjs","format","size","vw","onPressVideo","id","getLocalAssetUri","localAssetURI","files","filter","file","Alert","alert","name","filename","fileSize","type","height","margin","width","styles","backgroundColor","videoView","color","AttachmentImage","setSelectedImages","onPressImage","images","getFileType","contentType","lookup","startsWith","renderAttachmentPickerItem","item","fileType","StyleSheet","create","fontWeight","alignItems","flex","bottom","display","flexDirection","justifyContent","paddingHorizontal","position"],"sources":["AttachmentPickerItem.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Alert, ImageBackground, StyleSheet, Text, View } from 'react-native';\n\nimport { TouchableOpacity } from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport { lookup } from 'mime-types';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../../icons';\nimport { getLocalAssetUri } from '../../../native';\nimport type { Asset, File } from '../../../types/types';\nimport { vw } from '../../../utils/utils';\n\ntype AttachmentPickerItemType = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n numberOfUploads: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;\n\ntype AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = async () => {\n // For the case of expo messaging app where you need to fetch the asset uri from asset id\n const localAssetURI = asset.id && (await getLocalAssetUri(asset.id));\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: localAssetURI || asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst getFileType = (asset: Asset) => {\n const { filename } = asset;\n if (filename) {\n const contentType = lookup(filename) || 'multipart/form-data';\n return contentType.startsWith('image/') ? 'image' : 'video';\n } else {\n return asset.type === 'video' ? 'video' : 'image';\n }\n};\n\nexport const renderAttachmentPickerItem = ({ item }: { item: AttachmentPickerItemType }) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const fileType = getFileType(asset);\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","numberOfUploads","selected","setSelectedFiles","useTheme","theme","attachmentPicker","durationText","image","imageOverlay","colors","overlay","white","duration","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","dayjs","format","size","vw","onPressVideo","files","filter","file","Alert","alert","id","name","filename","fileSize","type","height","margin","width","styles","backgroundColor","videoView","color","AttachmentImage","setSelectedImages","onPressImage","images","getFileType","contentType","lookup","startsWith","renderAttachmentPickerItem","item","fileType","StyleSheet","create","fontWeight","alignItems","flex","bottom","display","flexDirection","justifyContent","paddingHorizontal","position"],"sources":["AttachmentPickerItem.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Alert, ImageBackground, StyleSheet, Text, View } from 'react-native';\n\nimport { TouchableOpacity } from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport { lookup } from 'mime-types';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../../icons';\nimport type { Asset, File } from '../../../types/types';\nimport { vw } from '../../../utils/utils';\n\ntype AttachmentPickerItemType = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n numberOfUploads: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;\n\ntype AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = () => {\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n id: asset.id,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst getFileType = (asset: Asset) => {\n const { filename } = asset;\n if (filename) {\n const contentType = lookup(filename) || 'multipart/form-data';\n return contentType.startsWith('image/') ? 'image' : 'video';\n } else {\n return asset.type === 'video' ? 'video' : 'image';\n }\n};\n\nexport const renderAttachmentPickerItem = ({ item }: { item: AttachmentPickerItemType }) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const fileType = getFileType(asset);\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n"],"mappings":"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"}
@@ -73,7 +73,8 @@ var styles = _reactNative.StyleSheet.create({
73
73
  overlay: {
74
74
  borderRadius: 12,
75
75
  marginLeft: 8,
76
- marginRight: 8
76
+ marginRight: 8,
77
+ marginTop: 2
77
78
  },
78
79
  unsupportedFile: {
79
80
  flexDirection: 'row',
@@ -105,7 +106,7 @@ var UnsupportedFileTypeOrFileSizeIndicator = function UnsupportedFileTypeOrFileS
105
106
  __self: _this,
106
107
  __source: {
107
108
  fileName: _jsxFileName,
108
- lineNumber: 106,
109
+ lineNumber: 107,
109
110
  columnNumber: 5
110
111
  }
111
112
  }, _react["default"].createElement(_Warning.Warning, {
@@ -116,7 +117,7 @@ var UnsupportedFileTypeOrFileSizeIndicator = function UnsupportedFileTypeOrFileS
116
117
  __self: _this,
117
118
  __source: {
118
119
  fileName: _jsxFileName,
119
- lineNumber: 107,
120
+ lineNumber: 108,
120
121
  columnNumber: 7
121
122
  }
122
123
  }), _react["default"].createElement(_reactNative.Text, {
@@ -126,7 +127,7 @@ var UnsupportedFileTypeOrFileSizeIndicator = function UnsupportedFileTypeOrFileS
126
127
  __self: _this,
127
128
  __source: {
128
129
  fileName: _jsxFileName,
129
- lineNumber: 113,
130
+ lineNumber: 114,
130
131
  columnNumber: 7
131
132
  }
132
133
  }, t('File type not supported'))) : _react["default"].createElement(_WritingDirectionAwareText.WritingDirectionAwareText, {
@@ -136,7 +137,7 @@ var UnsupportedFileTypeOrFileSizeIndicator = function UnsupportedFileTypeOrFileS
136
137
  __self: _this,
137
138
  __source: {
138
139
  fileName: _jsxFileName,
139
- lineNumber: 118,
140
+ lineNumber: 119,
140
141
  columnNumber: 5
141
142
  }
142
143
  }, item.file.duration || (0, _FileAttachment.getFileSizeDisplayText)(item.file.size));
@@ -216,7 +217,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
216
217
  return _react["default"].createElement(_react["default"].Fragment, {
217
218
  __source: {
218
219
  fileName: _jsxFileName,
219
- lineNumber: 222,
220
+ lineNumber: 223,
220
221
  columnNumber: 7
221
222
  }
222
223
  }, _react["default"].createElement(_UploadProgressIndicator.UploadProgressIndicator, {
@@ -230,7 +231,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
230
231
  __self: _this,
231
232
  __source: {
232
233
  fileName: _jsxFileName,
233
- lineNumber: 223,
234
+ lineNumber: 224,
234
235
  columnNumber: 9
235
236
  }
236
237
  }, (_item$file$type = item.file.type) != null && _item$file$type.startsWith('audio/') && (0, _native.isAudioPackageAvailable)() ? _react["default"].createElement(_reactNative.View, {
@@ -240,7 +241,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
240
241
  __self: _this,
241
242
  __source: {
242
243
  fileName: _jsxFileName,
243
- lineNumber: 231,
244
+ lineNumber: 232,
244
245
  columnNumber: 13
245
246
  }
246
247
  }, _react["default"].createElement(_reactNative.View, {
@@ -255,7 +256,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
255
256
  __self: _this,
256
257
  __source: {
257
258
  fileName: _jsxFileName,
258
- lineNumber: 237,
259
+ lineNumber: 238,
259
260
  columnNumber: 15
260
261
  }
261
262
  }, _react["default"].createElement(AudioAttachment, {
@@ -267,7 +268,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
267
268
  __self: _this,
268
269
  __source: {
269
270
  fileName: _jsxFileName,
270
- lineNumber: 254,
271
+ lineNumber: 255,
271
272
  columnNumber: 17
272
273
  }
273
274
  }))) : _react["default"].createElement(_reactNative.View, {
@@ -280,7 +281,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
280
281
  __self: _this,
281
282
  __source: {
282
283
  fileName: _jsxFileName,
283
- lineNumber: 264,
284
+ lineNumber: 265,
284
285
  columnNumber: 13
285
286
  }
286
287
  }, _react["default"].createElement(_reactNative.View, {
@@ -288,7 +289,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
288
289
  __self: _this,
289
290
  __source: {
290
291
  fileName: _jsxFileName,
291
- lineNumber: 279,
292
+ lineNumber: 280,
292
293
  columnNumber: 15
293
294
  }
294
295
  }, _react["default"].createElement(_reactNative.View, {
@@ -296,7 +297,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
296
297
  __self: _this,
297
298
  __source: {
298
299
  fileName: _jsxFileName,
299
- lineNumber: 280,
300
+ lineNumber: 281,
300
301
  columnNumber: 17
301
302
  }
302
303
  }, _react["default"].createElement(FileAttachmentIcon, {
@@ -304,7 +305,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
304
305
  __self: _this,
305
306
  __source: {
306
307
  fileName: _jsxFileName,
307
- lineNumber: 281,
308
+ lineNumber: 282,
308
309
  columnNumber: 19
309
310
  }
310
311
  })), _react["default"].createElement(_reactNative.View, {
@@ -312,7 +313,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
312
313
  __self: _this,
313
314
  __source: {
314
315
  fileName: _jsxFileName,
315
- lineNumber: 283,
316
+ lineNumber: 284,
316
317
  columnNumber: 17
317
318
  }
318
319
  }, _react["default"].createElement(_reactNative.Text, {
@@ -328,7 +329,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
328
329
  __self: _this,
329
330
  __source: {
330
331
  fileName: _jsxFileName,
331
- lineNumber: 284,
332
+ lineNumber: 285,
332
333
  columnNumber: 19
333
334
  }
334
335
  }, item.file.name.slice(0, 12) + '...' + item.file.name.slice(lastIndexOfDot)), indicatorType !== null && _react["default"].createElement(UnsupportedFileTypeOrFileSizeIndicator, {
@@ -337,7 +338,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
337
338
  __self: _this,
338
339
  __source: {
339
340
  fileName: _jsxFileName,
340
- lineNumber: 304,
341
+ lineNumber: 305,
341
342
  columnNumber: 21
342
343
  }
343
344
  })))), _react["default"].createElement(_reactNative.TouchableOpacity, {
@@ -351,7 +352,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
351
352
  __self: _this,
352
353
  __source: {
353
354
  fileName: _jsxFileName,
354
- lineNumber: 313,
355
+ lineNumber: 314,
355
356
  columnNumber: 11
356
357
  }
357
358
  }, _react["default"].createElement(_Close.Close, {
@@ -359,7 +360,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
359
360
  __self: _this,
360
361
  __source: {
361
362
  fileName: _jsxFileName,
362
- lineNumber: 320,
363
+ lineNumber: 321,
363
364
  columnNumber: 13
364
365
  }
365
366
  }))));
@@ -395,7 +396,7 @@ var FileUploadPreviewWithContext = function FileUploadPreviewWithContext(props)
395
396
  __self: _this,
396
397
  __source: {
397
398
  fileName: _jsxFileName,
398
- lineNumber: 336,
399
+ lineNumber: 337,
399
400
  columnNumber: 5
400
401
  }
401
402
  }) : null;
@@ -431,7 +432,7 @@ var FileUploadPreview = function FileUploadPreview(props) {
431
432
  __self: _this,
432
433
  __source: {
433
434
  fileName: _jsxFileName,
434
- lineNumber: 401,
435
+ lineNumber: 402,
435
436
  columnNumber: 5
436
437
  }
437
438
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["FILE_PREVIEW_HEIGHT","WARNING_ICON_SIZE","styles","StyleSheet","create","dismiss","borderRadius","height","position","right","top","width","fileContainer","borderWidth","flexDirection","justifyContent","marginBottom","paddingLeft","paddingRight","fileContentContainer","fileIcon","alignItems","alignSelf","filenameText","fontSize","fontWeight","paddingHorizontal","fileSizeText","fileTextContainer","flatList","maxHeight","overlay","marginLeft","marginRight","unsupportedFile","unsupportedFileText","marginHorizontal","warningIconStyle","marginTop","UnsupportedFileTypeOrFileSizeIndicator","indicatorType","item","useTheme","theme","colors","accent_red","grey","grey_dark","messageInput","fileUploadPreview","useTranslationContext","t","ProgressIndicatorTypes","NOT_SUPPORTED","color","file","duration","getFileSizeDisplayText","size","FileUploadPreviewWithContext","props","AudioAttachment","enableOfflineSupport","FileAttachmentIcon","fileUploads","removeFile","setFileUploads","uploadFile","flatListRef","useRef","useState","flatListWidth","setFlatListWidth","onLoad","index","prevFileUploads","map","fileUpload","id","onProgress","currentTime","hasEnd","progress","onPlayPause","pausedStatus","paused","black","grey_gainsboro","grey_whisper","white","audioAttachmentFileContainer","renderItem","getIndicatorTypeForFileState","state","lastIndexOfDot","name","lastIndexOf","newFile","type","startsWith","isAudioPackageAvailable","FileState","UPLOADED","length","backgroundColor","borderColor","I18nManager","isRTL","writingDirection","slice","fileUploadsLength","useEffect","current","setTimeout","scrollToEnd","_","offset","nativeEvent","layout","areEqual","prevProps","nextProps","nextFileUploads","every","prevFileUpload","MemoizedFileUploadPreview","React","memo","FileUploadPreview","useChatContext","useMessageInputContext","useMessagesContext","displayName"],"sources":["FileUploadPreview.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { FlatList, I18nManager, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { UploadProgressIndicator } from './UploadProgressIndicator';\n\nimport { ChatContextValue, useChatContext } from '../../contexts';\nimport {\n FileUpload,\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../contexts/translationContext/TranslationContext';\nimport { Close } from '../../icons/Close';\nimport { Warning } from '../../icons/Warning';\nimport { isAudioPackageAvailable } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { FileState, getIndicatorTypeForFileState, ProgressIndicatorTypes } from '../../utils/utils';\nimport { getFileSizeDisplayText } from '../Attachment/FileAttachment';\nimport { WritingDirectionAwareText } from '../RTLComponents/WritingDirectionAwareText';\n\nconst FILE_PREVIEW_HEIGHT = 60;\nconst WARNING_ICON_SIZE = 16;\n\nconst styles = StyleSheet.create({\n dismiss: {\n borderRadius: 24,\n height: 24,\n position: 'absolute',\n right: 8,\n top: 8,\n width: 24,\n },\n fileContainer: {\n borderRadius: 12,\n borderWidth: 1,\n flexDirection: 'row',\n height: FILE_PREVIEW_HEIGHT,\n justifyContent: 'space-between',\n marginBottom: 8,\n paddingLeft: 8,\n paddingRight: 8,\n },\n fileContentContainer: { flexDirection: 'row' },\n fileIcon: {\n alignItems: 'center',\n alignSelf: 'center',\n justifyContent: 'center',\n },\n filenameText: {\n fontSize: 14,\n fontWeight: 'bold',\n paddingHorizontal: 10,\n },\n fileSizeText: {\n fontSize: 12,\n paddingHorizontal: 10,\n },\n fileTextContainer: {\n height: '100%',\n justifyContent: 'space-around',\n },\n flatList: { marginBottom: 12, maxHeight: FILE_PREVIEW_HEIGHT * 2.5 + 16 },\n overlay: {\n borderRadius: 12,\n marginLeft: 8,\n marginRight: 8,\n },\n unsupportedFile: {\n flexDirection: 'row',\n paddingLeft: 10,\n },\n unsupportedFileText: {\n fontSize: 12,\n marginHorizontal: 4,\n },\n warningIconStyle: {\n borderRadius: 24,\n marginTop: 2,\n },\n});\n\nconst UnsupportedFileTypeOrFileSizeIndicator = ({\n indicatorType,\n item,\n}: {\n indicatorType: typeof ProgressIndicatorTypes[keyof typeof ProgressIndicatorTypes];\n item: FileUpload;\n}) => {\n const {\n theme: {\n colors: { accent_red, grey, grey_dark },\n messageInput: {\n fileUploadPreview: { fileSizeText },\n },\n },\n } = useTheme();\n\n const { t } = useTranslationContext();\n\n return indicatorType === ProgressIndicatorTypes.NOT_SUPPORTED ? (\n <View style={styles.unsupportedFile}>\n <Warning\n height={WARNING_ICON_SIZE}\n pathFill={accent_red}\n style={styles.warningIconStyle}\n width={WARNING_ICON_SIZE}\n />\n <Text style={[styles.unsupportedFileText, { color: grey_dark }]}>\n {t('File type not supported')}\n </Text>\n </View>\n ) : (\n <WritingDirectionAwareText style={[styles.fileSizeText, { color: grey }, fileSizeText]}>\n {item.file.duration || getFileSizeDisplayText(item.file.size)}\n </WritingDirectionAwareText>\n );\n};\n\ntype FileUploadPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageInputContextValue<StreamChatGenerics>,\n 'fileUploads' | 'removeFile' | 'uploadFile' | 'setFileUploads'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'AudioAttachment' | 'FileAttachmentIcon'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'enableOfflineSupport'>;\n\nconst FileUploadPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n AudioAttachment,\n enableOfflineSupport,\n FileAttachmentIcon,\n fileUploads,\n removeFile,\n setFileUploads,\n uploadFile,\n } = props;\n\n const flatListRef = useRef<FlatList<FileUpload> | null>(null);\n const [flatListWidth, setFlatListWidth] = useState(0);\n\n // Handler triggered when an audio is loaded in the message input. The initial state is defined for the audio here and the duration is set.\n const onLoad = (index: string, duration: number) => {\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n duration: fileUpload.id === index ? duration : fileUpload.duration,\n })),\n );\n };\n\n // The handler which is triggered when the audio progresses/ the thumb is dragged in the progress control. The progressed duration is set here.\n const onProgress = (index: string, currentTime?: number, hasEnd?: boolean) => {\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n progress:\n fileUpload.id === index\n ? hasEnd\n ? 1\n : currentTime\n ? currentTime / (fileUpload.duration as number)\n : 0\n : fileUpload.progress,\n })),\n );\n };\n\n // The handler which controls or sets the paused/played state of the audio.\n const onPlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n paused: fileUpload.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n paused: true,\n })),\n );\n }\n };\n\n const {\n theme: {\n colors: { black, grey_dark, grey_gainsboro, grey_whisper, white },\n messageInput: {\n fileUploadPreview: {\n audioAttachmentFileContainer,\n dismiss,\n fileContainer,\n fileContentContainer,\n filenameText,\n fileTextContainer,\n flatList,\n },\n },\n },\n } = useTheme();\n\n const renderItem = ({ index, item }: { index: number; item: FileUpload }) => {\n const indicatorType = getIndicatorTypeForFileState(item.state, enableOfflineSupport);\n\n const lastIndexOfDot = item.file.name.lastIndexOf('.');\n\n return (\n <>\n <UploadProgressIndicator\n action={() => {\n uploadFile({ newFile: item });\n }}\n style={styles.overlay}\n type={indicatorType}\n >\n {item.file.type?.startsWith('audio/') && isAudioPackageAvailable() ? (\n <View\n style={[\n { marginBottom: item.state === FileState.UPLOADED ? 8 : 0 },\n audioAttachmentFileContainer,\n ]}\n >\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n backgroundColor: white,\n borderColor: grey_whisper,\n width: -16,\n },\n fileContainer,\n ]}\n testID='audio-attachment-upload-preview'\n >\n <AudioAttachment\n item={item}\n onLoad={onLoad}\n onPlayPause={onPlayPause}\n onProgress={onProgress}\n testID='audio-attachment-upload-preview'\n />\n </View>\n </View>\n ) : (\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n borderColor: grey_whisper,\n width: flatListWidth - 16,\n },\n fileContainer,\n ]}\n >\n <View style={[styles.fileContentContainer, fileContentContainer]}>\n <View style={styles.fileIcon}>\n <FileAttachmentIcon mimeType={item.file.type} />\n </View>\n <View style={[styles.fileTextContainer, fileTextContainer]}>\n <Text\n numberOfLines={1}\n style={[\n styles.filenameText,\n {\n color: black,\n width:\n flatListWidth -\n 16 - // 16 = horizontal padding\n 40 - // 40 = file icon size\n 24 - // 24 = close icon size\n 24, // 24 = internal padding\n },\n I18nManager.isRTL ? { writingDirection: 'rtl' } : { writingDirection: 'ltr' },\n filenameText,\n ]}\n >\n {item.file.name.slice(0, 12) + '...' + item.file.name.slice(lastIndexOfDot)}\n </Text>\n {indicatorType !== null && (\n <UnsupportedFileTypeOrFileSizeIndicator\n indicatorType={indicatorType}\n item={item}\n />\n )}\n </View>\n </View>\n </View>\n )}\n <TouchableOpacity\n onPress={() => {\n removeFile(item.id);\n }}\n style={[styles.dismiss, { backgroundColor: grey_gainsboro }, dismiss]}\n testID='remove-file-upload-preview'\n >\n <Close pathFill={grey_dark} />\n </TouchableOpacity>\n </UploadProgressIndicator>\n </>\n );\n };\n\n const fileUploadsLength = fileUploads.length;\n\n useEffect(() => {\n if (fileUploadsLength && flatListRef.current) {\n setTimeout(() => flatListRef.current?.scrollToEnd(), 1);\n }\n }, [fileUploadsLength]);\n\n return fileUploadsLength ? (\n <FlatList\n data={fileUploads}\n getItemLayout={(_, index) => ({\n index,\n length: FILE_PREVIEW_HEIGHT + 8,\n offset: (FILE_PREVIEW_HEIGHT + 8) * index,\n })}\n keyExtractor={(item) => `${item.id}`}\n onLayout={({\n nativeEvent: {\n layout: { width },\n },\n }) => {\n setFlatListWidth(width);\n }}\n ref={flatListRef}\n renderItem={renderItem}\n style={[styles.flatList, flatList]}\n />\n ) : null;\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n nextProps: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { fileUploads: prevFileUploads } = prevProps;\n const { fileUploads: nextFileUploads } = nextProps;\n\n return (\n prevFileUploads.length === nextFileUploads.length &&\n prevFileUploads.every(\n (prevFileUpload, index) =>\n prevFileUpload.state === nextFileUploads[index].state &&\n prevFileUpload.paused === nextFileUploads[index].paused &&\n prevFileUpload.progress === nextFileUploads[index].progress &&\n prevFileUpload.duration === nextFileUploads[index].duration,\n )\n );\n};\n\nconst MemoizedFileUploadPreview = React.memo(\n FileUploadPreviewWithContext,\n areEqual,\n) as typeof FileUploadPreviewWithContext;\n\nexport type FileUploadPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<FileUploadPreviewPropsWithContext<StreamChatGenerics>>;\n\n/**\n * FileUploadPreview\n * UI Component to preview the files set for upload\n */\nexport const FileUploadPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: FileUploadPreviewProps<StreamChatGenerics>,\n) => {\n const { enableOfflineSupport } = useChatContext<StreamChatGenerics>();\n const { fileUploads, removeFile, setFileUploads, uploadFile } =\n useMessageInputContext<StreamChatGenerics>();\n const { AudioAttachment, FileAttachmentIcon } = useMessagesContext<StreamChatGenerics>();\n\n return (\n <MemoizedFileUploadPreview\n {...{\n AudioAttachment,\n FileAttachmentIcon,\n fileUploads,\n removeFile,\n setFileUploads,\n uploadFile,\n }}\n {...{ enableOfflineSupport }}\n {...props}\n />\n );\n};\n\nFileUploadPreview.displayName = 'FileUploadPreview{messageInput{fileUploadPreview}}';\n"],"mappings":"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"}
1
+ {"version":3,"names":["FILE_PREVIEW_HEIGHT","WARNING_ICON_SIZE","styles","StyleSheet","create","dismiss","borderRadius","height","position","right","top","width","fileContainer","borderWidth","flexDirection","justifyContent","marginBottom","paddingLeft","paddingRight","fileContentContainer","fileIcon","alignItems","alignSelf","filenameText","fontSize","fontWeight","paddingHorizontal","fileSizeText","fileTextContainer","flatList","maxHeight","overlay","marginLeft","marginRight","marginTop","unsupportedFile","unsupportedFileText","marginHorizontal","warningIconStyle","UnsupportedFileTypeOrFileSizeIndicator","indicatorType","item","useTheme","theme","colors","accent_red","grey","grey_dark","messageInput","fileUploadPreview","useTranslationContext","t","ProgressIndicatorTypes","NOT_SUPPORTED","color","file","duration","getFileSizeDisplayText","size","FileUploadPreviewWithContext","props","AudioAttachment","enableOfflineSupport","FileAttachmentIcon","fileUploads","removeFile","setFileUploads","uploadFile","flatListRef","useRef","useState","flatListWidth","setFlatListWidth","onLoad","index","prevFileUploads","map","fileUpload","id","onProgress","currentTime","hasEnd","progress","onPlayPause","pausedStatus","paused","black","grey_gainsboro","grey_whisper","white","audioAttachmentFileContainer","renderItem","getIndicatorTypeForFileState","state","lastIndexOfDot","name","lastIndexOf","newFile","type","startsWith","isAudioPackageAvailable","FileState","UPLOADED","length","backgroundColor","borderColor","I18nManager","isRTL","writingDirection","slice","fileUploadsLength","useEffect","current","setTimeout","scrollToEnd","_","offset","nativeEvent","layout","areEqual","prevProps","nextProps","nextFileUploads","every","prevFileUpload","MemoizedFileUploadPreview","React","memo","FileUploadPreview","useChatContext","useMessageInputContext","useMessagesContext","displayName"],"sources":["FileUploadPreview.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { FlatList, I18nManager, StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { UploadProgressIndicator } from './UploadProgressIndicator';\n\nimport { ChatContextValue, useChatContext } from '../../contexts';\nimport {\n FileUpload,\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../contexts/translationContext/TranslationContext';\nimport { Close } from '../../icons/Close';\nimport { Warning } from '../../icons/Warning';\nimport { isAudioPackageAvailable } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { FileState, getIndicatorTypeForFileState, ProgressIndicatorTypes } from '../../utils/utils';\nimport { getFileSizeDisplayText } from '../Attachment/FileAttachment';\nimport { WritingDirectionAwareText } from '../RTLComponents/WritingDirectionAwareText';\n\nconst FILE_PREVIEW_HEIGHT = 60;\nconst WARNING_ICON_SIZE = 16;\n\nconst styles = StyleSheet.create({\n dismiss: {\n borderRadius: 24,\n height: 24,\n position: 'absolute',\n right: 8,\n top: 8,\n width: 24,\n },\n fileContainer: {\n borderRadius: 12,\n borderWidth: 1,\n flexDirection: 'row',\n height: FILE_PREVIEW_HEIGHT,\n justifyContent: 'space-between',\n marginBottom: 8,\n paddingLeft: 8,\n paddingRight: 8,\n },\n fileContentContainer: { flexDirection: 'row' },\n fileIcon: {\n alignItems: 'center',\n alignSelf: 'center',\n justifyContent: 'center',\n },\n filenameText: {\n fontSize: 14,\n fontWeight: 'bold',\n paddingHorizontal: 10,\n },\n fileSizeText: {\n fontSize: 12,\n paddingHorizontal: 10,\n },\n fileTextContainer: {\n height: '100%',\n justifyContent: 'space-around',\n },\n flatList: { marginBottom: 12, maxHeight: FILE_PREVIEW_HEIGHT * 2.5 + 16 },\n overlay: {\n borderRadius: 12,\n marginLeft: 8,\n marginRight: 8,\n marginTop: 2,\n },\n unsupportedFile: {\n flexDirection: 'row',\n paddingLeft: 10,\n },\n unsupportedFileText: {\n fontSize: 12,\n marginHorizontal: 4,\n },\n warningIconStyle: {\n borderRadius: 24,\n marginTop: 2,\n },\n});\n\nconst UnsupportedFileTypeOrFileSizeIndicator = ({\n indicatorType,\n item,\n}: {\n indicatorType: typeof ProgressIndicatorTypes[keyof typeof ProgressIndicatorTypes];\n item: FileUpload;\n}) => {\n const {\n theme: {\n colors: { accent_red, grey, grey_dark },\n messageInput: {\n fileUploadPreview: { fileSizeText },\n },\n },\n } = useTheme();\n\n const { t } = useTranslationContext();\n\n return indicatorType === ProgressIndicatorTypes.NOT_SUPPORTED ? (\n <View style={styles.unsupportedFile}>\n <Warning\n height={WARNING_ICON_SIZE}\n pathFill={accent_red}\n style={styles.warningIconStyle}\n width={WARNING_ICON_SIZE}\n />\n <Text style={[styles.unsupportedFileText, { color: grey_dark }]}>\n {t('File type not supported')}\n </Text>\n </View>\n ) : (\n <WritingDirectionAwareText style={[styles.fileSizeText, { color: grey }, fileSizeText]}>\n {item.file.duration || getFileSizeDisplayText(item.file.size)}\n </WritingDirectionAwareText>\n );\n};\n\ntype FileUploadPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n MessageInputContextValue<StreamChatGenerics>,\n 'fileUploads' | 'removeFile' | 'uploadFile' | 'setFileUploads'\n> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'AudioAttachment' | 'FileAttachmentIcon'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'enableOfflineSupport'>;\n\nconst FileUploadPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n AudioAttachment,\n enableOfflineSupport,\n FileAttachmentIcon,\n fileUploads,\n removeFile,\n setFileUploads,\n uploadFile,\n } = props;\n\n const flatListRef = useRef<FlatList<FileUpload> | null>(null);\n const [flatListWidth, setFlatListWidth] = useState(0);\n\n // Handler triggered when an audio is loaded in the message input. The initial state is defined for the audio here and the duration is set.\n const onLoad = (index: string, duration: number) => {\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n duration: fileUpload.id === index ? duration : fileUpload.duration,\n })),\n );\n };\n\n // The handler which is triggered when the audio progresses/ the thumb is dragged in the progress control. The progressed duration is set here.\n const onProgress = (index: string, currentTime?: number, hasEnd?: boolean) => {\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n progress:\n fileUpload.id === index\n ? hasEnd\n ? 1\n : currentTime\n ? currentTime / (fileUpload.duration as number)\n : 0\n : fileUpload.progress,\n })),\n );\n };\n\n // The handler which controls or sets the paused/played state of the audio.\n const onPlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n paused: fileUpload.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setFileUploads((prevFileUploads) =>\n prevFileUploads.map((fileUpload) => ({\n ...fileUpload,\n paused: true,\n })),\n );\n }\n };\n\n const {\n theme: {\n colors: { black, grey_dark, grey_gainsboro, grey_whisper, white },\n messageInput: {\n fileUploadPreview: {\n audioAttachmentFileContainer,\n dismiss,\n fileContainer,\n fileContentContainer,\n filenameText,\n fileTextContainer,\n flatList,\n },\n },\n },\n } = useTheme();\n\n const renderItem = ({ index, item }: { index: number; item: FileUpload }) => {\n const indicatorType = getIndicatorTypeForFileState(item.state, enableOfflineSupport);\n\n const lastIndexOfDot = item.file.name.lastIndexOf('.');\n\n return (\n <>\n <UploadProgressIndicator\n action={() => {\n uploadFile({ newFile: item });\n }}\n style={styles.overlay}\n type={indicatorType}\n >\n {item.file.type?.startsWith('audio/') && isAudioPackageAvailable() ? (\n <View\n style={[\n { marginBottom: item.state === FileState.UPLOADED ? 8 : 0 },\n audioAttachmentFileContainer,\n ]}\n >\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n backgroundColor: white,\n borderColor: grey_whisper,\n width: -16,\n },\n fileContainer,\n ]}\n testID='audio-attachment-upload-preview'\n >\n <AudioAttachment\n item={item}\n onLoad={onLoad}\n onPlayPause={onPlayPause}\n onProgress={onProgress}\n testID='audio-attachment-upload-preview'\n />\n </View>\n </View>\n ) : (\n <View\n style={[\n styles.fileContainer,\n index === fileUploads.length - 1\n ? {\n marginBottom: 0,\n }\n : {},\n {\n borderColor: grey_whisper,\n width: flatListWidth - 16,\n },\n fileContainer,\n ]}\n >\n <View style={[styles.fileContentContainer, fileContentContainer]}>\n <View style={styles.fileIcon}>\n <FileAttachmentIcon mimeType={item.file.type} />\n </View>\n <View style={[styles.fileTextContainer, fileTextContainer]}>\n <Text\n numberOfLines={1}\n style={[\n styles.filenameText,\n {\n color: black,\n width:\n flatListWidth -\n 16 - // 16 = horizontal padding\n 40 - // 40 = file icon size\n 24 - // 24 = close icon size\n 24, // 24 = internal padding\n },\n I18nManager.isRTL ? { writingDirection: 'rtl' } : { writingDirection: 'ltr' },\n filenameText,\n ]}\n >\n {item.file.name.slice(0, 12) + '...' + item.file.name.slice(lastIndexOfDot)}\n </Text>\n {indicatorType !== null && (\n <UnsupportedFileTypeOrFileSizeIndicator\n indicatorType={indicatorType}\n item={item}\n />\n )}\n </View>\n </View>\n </View>\n )}\n <TouchableOpacity\n onPress={() => {\n removeFile(item.id);\n }}\n style={[styles.dismiss, { backgroundColor: grey_gainsboro }, dismiss]}\n testID='remove-file-upload-preview'\n >\n <Close pathFill={grey_dark} />\n </TouchableOpacity>\n </UploadProgressIndicator>\n </>\n );\n };\n\n const fileUploadsLength = fileUploads.length;\n\n useEffect(() => {\n if (fileUploadsLength && flatListRef.current) {\n setTimeout(() => flatListRef.current?.scrollToEnd(), 1);\n }\n }, [fileUploadsLength]);\n\n return fileUploadsLength ? (\n <FlatList\n data={fileUploads}\n getItemLayout={(_, index) => ({\n index,\n length: FILE_PREVIEW_HEIGHT + 8,\n offset: (FILE_PREVIEW_HEIGHT + 8) * index,\n })}\n keyExtractor={(item) => `${item.id}`}\n onLayout={({\n nativeEvent: {\n layout: { width },\n },\n }) => {\n setFlatListWidth(width);\n }}\n ref={flatListRef}\n renderItem={renderItem}\n style={[styles.flatList, flatList]}\n />\n ) : null;\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n nextProps: FileUploadPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { fileUploads: prevFileUploads } = prevProps;\n const { fileUploads: nextFileUploads } = nextProps;\n\n return (\n prevFileUploads.length === nextFileUploads.length &&\n prevFileUploads.every(\n (prevFileUpload, index) =>\n prevFileUpload.state === nextFileUploads[index].state &&\n prevFileUpload.paused === nextFileUploads[index].paused &&\n prevFileUpload.progress === nextFileUploads[index].progress &&\n prevFileUpload.duration === nextFileUploads[index].duration,\n )\n );\n};\n\nconst MemoizedFileUploadPreview = React.memo(\n FileUploadPreviewWithContext,\n areEqual,\n) as typeof FileUploadPreviewWithContext;\n\nexport type FileUploadPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<FileUploadPreviewPropsWithContext<StreamChatGenerics>>;\n\n/**\n * FileUploadPreview\n * UI Component to preview the files set for upload\n */\nexport const FileUploadPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: FileUploadPreviewProps<StreamChatGenerics>,\n) => {\n const { enableOfflineSupport } = useChatContext<StreamChatGenerics>();\n const { fileUploads, removeFile, setFileUploads, uploadFile } =\n useMessageInputContext<StreamChatGenerics>();\n const { AudioAttachment, FileAttachmentIcon } = useMessagesContext<StreamChatGenerics>();\n\n return (\n <MemoizedFileUploadPreview\n {...{\n AudioAttachment,\n FileAttachmentIcon,\n fileUploads,\n removeFile,\n setFileUploads,\n uploadFile,\n }}\n {...{ enableOfflineSupport }}\n {...props}\n />\n );\n};\n\nFileUploadPreview.displayName = 'FileUploadPreview{messageInput{fileUploadPreview}}';\n"],"mappings":"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"}