stream-chat-react-native-core 5.4.2-beta.1 → 5.4.2-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +122 -433
  2. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  3. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
  4. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
  5. package/lib/commonjs/components/MessageList/NetworkDownIndicator.js +14 -6
  6. package/lib/commonjs/components/MessageList/NetworkDownIndicator.js.map +1 -1
  7. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +134 -85
  8. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  9. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +39 -17
  10. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  11. package/lib/commonjs/hooks/useAppStateListener.js +9 -15
  12. package/lib/commonjs/hooks/useAppStateListener.js.map +1 -1
  13. package/lib/commonjs/version.json +1 -1
  14. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +122 -433
  15. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  16. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +358 -0
  17. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -0
  18. package/lib/module/components/MessageList/NetworkDownIndicator.js +14 -6
  19. package/lib/module/components/MessageList/NetworkDownIndicator.js.map +1 -1
  20. package/lib/module/contexts/messageInputContext/MessageInputContext.js +134 -85
  21. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  22. package/lib/module/contexts/overlayContext/OverlayProvider.js +39 -17
  23. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  24. package/lib/module/hooks/useAppStateListener.js +9 -15
  25. package/lib/module/hooks/useAppStateListener.js.map +1 -1
  26. package/lib/module/version.json +1 -1
  27. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts +0 -11
  28. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts +16 -0
  29. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -1
  30. package/lib/typescript/hooks/__tests__/useAppStateListener.test.d.ts +1 -0
  31. package/package.json +2 -2
  32. package/src/components/AttachmentPicker/AttachmentPicker.tsx +79 -322
  33. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +245 -0
  34. package/src/components/MessageList/NetworkDownIndicator.tsx +13 -10
  35. package/src/contexts/messageInputContext/MessageInputContext.tsx +27 -25
  36. package/src/contexts/overlayContext/OverlayProvider.tsx +28 -4
  37. package/src/hooks/__tests__/useAppStateListener.test.tsx +41 -0
  38. package/src/hooks/useAppStateListener.ts +9 -12
  39. package/src/version.json +1 -1
@@ -9,12 +9,12 @@ exports.AttachmentPicker = void 0;
9
9
 
10
10
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
11
 
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
13
 
16
14
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
15
 
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
18
18
  var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _reactNative = require("react-native");
@@ -25,14 +25,12 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
25
25
 
26
26
  var _duration = _interopRequireDefault(require("dayjs/plugin/duration"));
27
27
 
28
- var _mimeTypes = require("mime-types");
28
+ var _AttachmentPickerItem = require("./components/AttachmentPickerItem");
29
29
 
30
30
  var _AttachmentPickerContext = require("../../contexts/attachmentPickerContext/AttachmentPickerContext");
31
31
 
32
32
  var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
33
33
 
34
- var _icons = require("../../icons");
35
-
36
34
  var _native = require("../../native");
37
35
 
38
36
  var _utils = require("../../utils/utils");
@@ -49,22 +47,6 @@ _dayjs["default"].extend(_duration["default"]);
49
47
  var styles = _reactNative.StyleSheet.create({
50
48
  container: {
51
49
  flexGrow: 1
52
- },
53
- durationText: {
54
- fontWeight: 'bold'
55
- },
56
- overlay: {
57
- alignItems: 'flex-end',
58
- flex: 1
59
- },
60
- videoView: {
61
- bottom: 5,
62
- display: 'flex',
63
- flexDirection: 'row',
64
- justifyContent: 'space-between',
65
- paddingHorizontal: 5,
66
- position: 'absolute',
67
- width: '100%'
68
50
  }
69
51
  });
70
52
 
@@ -72,302 +54,7 @@ var screenHeight = (0, _utils.vh)(100);
72
54
 
73
55
  var fullScreenHeight = _reactNative.Dimensions.get('window').height;
74
56
 
75
- var AttachmentVideo = function AttachmentVideo(props) {
76
- var asset = props.asset,
77
- ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
78
- maxNumberOfFiles = props.maxNumberOfFiles,
79
- numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
80
- numberOfUploads = props.numberOfUploads,
81
- selected = props.selected,
82
- setSelectedFiles = props.setSelectedFiles;
83
-
84
- var _useTheme = (0, _ThemeContext.useTheme)(),
85
- _useTheme$theme = _useTheme.theme,
86
- _useTheme$theme$attac = _useTheme$theme.attachmentPicker,
87
- durationText = _useTheme$theme$attac.durationText,
88
- image = _useTheme$theme$attac.image,
89
- imageOverlay = _useTheme$theme$attac.imageOverlay,
90
- _useTheme$theme$color = _useTheme$theme.colors,
91
- overlay = _useTheme$theme$color.overlay,
92
- white = _useTheme$theme$color.white;
93
-
94
- var duration = asset.duration,
95
- playableDuration = asset.playableDuration,
96
- uri = asset.uri;
97
- var videoDuration = duration ? duration : playableDuration;
98
- var ONE_HOUR_IN_SECONDS = 3600;
99
- var durationLabel = '00:00';
100
-
101
- if (videoDuration) {
102
- var isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;
103
- var formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';
104
-
105
- var formattedVideoDuration = _dayjs["default"].duration(videoDuration, 'second').format(formattedDurationParam);
106
-
107
- durationLabel = formattedVideoDuration;
108
- }
109
-
110
- var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
111
-
112
- var onPressVideo = function () {
113
- var _ref = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
114
- var localAssetURI;
115
- return _regenerator["default"].wrap(function _callee$(_context) {
116
- while (1) {
117
- switch (_context.prev = _context.next) {
118
- case 0:
119
- _context.t0 = asset.id;
120
-
121
- if (!_context.t0) {
122
- _context.next = 5;
123
- break;
124
- }
125
-
126
- _context.next = 4;
127
- return (0, _native.getLocalAssetUri)(asset.id);
128
-
129
- case 4:
130
- _context.t0 = _context.sent;
131
-
132
- case 5:
133
- localAssetURI = _context.t0;
134
-
135
- if (selected) {
136
- setSelectedFiles(function (files) {
137
- return files.filter(function (file) {
138
- return file.uri !== asset.uri;
139
- });
140
- });
141
- } else {
142
- setSelectedFiles(function (files) {
143
- if (numberOfUploads >= maxNumberOfFiles) {
144
- _reactNative.Alert.alert('Maximum number of files reached');
145
-
146
- return files;
147
- }
148
-
149
- return [].concat((0, _toConsumableArray2["default"])(files), [{
150
- duration: durationLabel,
151
- name: asset.filename,
152
- size: asset.fileSize,
153
- type: 'video',
154
- uri: localAssetURI || asset.uri
155
- }]);
156
- });
157
- }
158
-
159
- case 7:
160
- case "end":
161
- return _context.stop();
162
- }
163
- }
164
- }, _callee);
165
- }));
166
-
167
- return function onPressVideo() {
168
- return _ref.apply(this, arguments);
169
- };
170
- }();
171
-
172
- return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
173
- onPress: onPressVideo,
174
- __self: _this,
175
- __source: {
176
- fileName: _jsxFileName,
177
- lineNumber: 138,
178
- columnNumber: 5
179
- }
180
- }, _react["default"].createElement(_reactNative.ImageBackground, {
181
- source: {
182
- uri: uri
183
- },
184
- style: [{
185
- height: size,
186
- margin: 1,
187
- width: size
188
- }, image],
189
- __self: _this,
190
- __source: {
191
- fileName: _jsxFileName,
192
- lineNumber: 139,
193
- columnNumber: 7
194
- }
195
- }, selected && _react["default"].createElement(_reactNative.View, {
196
- style: [styles.overlay, {
197
- backgroundColor: overlay
198
- }, imageOverlay],
199
- __self: _this,
200
- __source: {
201
- fileName: _jsxFileName,
202
- lineNumber: 151,
203
- columnNumber: 11
204
- }
205
- }, _react["default"].createElement(ImageOverlaySelectedComponent, {
206
- __self: _this,
207
- __source: {
208
- fileName: _jsxFileName,
209
- lineNumber: 152,
210
- columnNumber: 13
211
- }
212
- })), _react["default"].createElement(_reactNative.View, {
213
- style: styles.videoView,
214
- __self: _this,
215
- __source: {
216
- fileName: _jsxFileName,
217
- lineNumber: 155,
218
- columnNumber: 9
219
- }
220
- }, _react["default"].createElement(_icons.Recorder, {
221
- height: 20,
222
- pathFill: white,
223
- width: 25,
224
- __self: _this,
225
- __source: {
226
- fileName: _jsxFileName,
227
- lineNumber: 156,
228
- columnNumber: 11
229
- }
230
- }), videoDuration ? _react["default"].createElement(_reactNative.Text, {
231
- style: [styles.durationText, durationText, {
232
- color: white
233
- }],
234
- __self: _this,
235
- __source: {
236
- fileName: _jsxFileName,
237
- lineNumber: 158,
238
- columnNumber: 13
239
- }
240
- }, durationLabel) : null)));
241
- };
242
-
243
- var AttachmentImage = function AttachmentImage(props) {
244
- var asset = props.asset,
245
- ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
246
- maxNumberOfFiles = props.maxNumberOfFiles,
247
- numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
248
- numberOfUploads = props.numberOfUploads,
249
- selected = props.selected,
250
- setSelectedImages = props.setSelectedImages;
251
-
252
- var _useTheme2 = (0, _ThemeContext.useTheme)(),
253
- _useTheme2$theme = _useTheme2.theme,
254
- _useTheme2$theme$atta = _useTheme2$theme.attachmentPicker,
255
- image = _useTheme2$theme$atta.image,
256
- imageOverlay = _useTheme2$theme$atta.imageOverlay,
257
- overlay = _useTheme2$theme.colors.overlay;
258
-
259
- var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
260
- var uri = asset.uri;
261
-
262
- var onPressImage = function onPressImage() {
263
- if (selected) {
264
- setSelectedImages(function (images) {
265
- return images.filter(function (image) {
266
- return image.uri !== asset.uri;
267
- });
268
- });
269
- } else {
270
- setSelectedImages(function (images) {
271
- if (numberOfUploads >= maxNumberOfFiles) {
272
- _reactNative.Alert.alert('Maximum number of files reached');
273
-
274
- return images;
275
- }
276
-
277
- return [].concat((0, _toConsumableArray2["default"])(images), [asset]);
278
- });
279
- }
280
- };
281
-
282
- return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
283
- onPress: onPressImage,
284
- __self: _this,
285
- __source: {
286
- fileName: _jsxFileName,
287
- lineNumber: 204,
288
- columnNumber: 5
289
- }
290
- }, _react["default"].createElement(_reactNative.ImageBackground, {
291
- source: {
292
- uri: uri
293
- },
294
- style: [{
295
- height: size,
296
- margin: 1,
297
- width: size
298
- }, image],
299
- __self: _this,
300
- __source: {
301
- fileName: _jsxFileName,
302
- lineNumber: 205,
303
- columnNumber: 7
304
- }
305
- }, selected && _react["default"].createElement(_reactNative.View, {
306
- style: [styles.overlay, {
307
- backgroundColor: overlay
308
- }, imageOverlay],
309
- __self: _this,
310
- __source: {
311
- fileName: _jsxFileName,
312
- lineNumber: 217,
313
- columnNumber: 11
314
- }
315
- }, _react["default"].createElement(ImageOverlaySelectedComponent, {
316
- __self: _this,
317
- __source: {
318
- fileName: _jsxFileName,
319
- lineNumber: 218,
320
- columnNumber: 13
321
- }
322
- }))));
323
- };
324
-
325
- var renderItem = function renderItem(_ref2) {
326
- var item = _ref2.item;
327
- var asset = item.asset,
328
- ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
329
- maxNumberOfFiles = item.maxNumberOfFiles,
330
- numberOfAttachmentPickerImageColumns = item.numberOfAttachmentPickerImageColumns,
331
- numberOfUploads = item.numberOfUploads,
332
- selected = item.selected,
333
- setSelectedFiles = item.setSelectedFiles,
334
- setSelectedImages = item.setSelectedImages;
335
- var contentType = (0, _mimeTypes.lookup)(asset.filename) || 'multipart/form-data';
336
- var fileType = asset.filename ? contentType.startsWith('image/') ? 'image' : 'video' : asset.type === 'video' ? 'video' : 'image';
337
- return fileType === 'image' ? _react["default"].createElement(AttachmentImage, {
338
- asset: asset,
339
- ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
340
- maxNumberOfFiles: maxNumberOfFiles,
341
- numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
342
- numberOfUploads: numberOfUploads,
343
- selected: selected,
344
- setSelectedImages: setSelectedImages,
345
- __self: _this,
346
- __source: {
347
- fileName: _jsxFileName,
348
- lineNumber: 249,
349
- columnNumber: 5
350
- }
351
- }) : _react["default"].createElement(AttachmentVideo, {
352
- asset: asset,
353
- ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
354
- maxNumberOfFiles: maxNumberOfFiles,
355
- numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
356
- numberOfUploads: numberOfUploads,
357
- selected: selected,
358
- setSelectedFiles: setSelectedFiles,
359
- __self: _this,
360
- __source: {
361
- fileName: _jsxFileName,
362
- lineNumber: 259,
363
- columnNumber: 5
364
- }
365
- });
366
- };
367
-
368
57
  var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
369
- var _StatusBar$currentHei, _StatusBar$currentHei2;
370
-
371
58
  var AttachmentPickerBottomSheetHandle = props.AttachmentPickerBottomSheetHandle,
372
59
  attachmentPickerBottomSheetHandleHeight = props.attachmentPickerBottomSheetHandleHeight,
373
60
  attachmentPickerBottomSheetHeight = props.attachmentPickerBottomSheetHeight,
@@ -380,10 +67,10 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
380
67
  numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
381
68
  translucentStatusBar = props.translucentStatusBar;
382
69
 
383
- var _useTheme3 = (0, _ThemeContext.useTheme)(),
384
- _useTheme3$theme = _useTheme3.theme,
385
- bottomSheetContentContainer = _useTheme3$theme.attachmentPicker.bottomSheetContentContainer,
386
- white = _useTheme3$theme.colors.white;
70
+ var _useTheme = (0, _ThemeContext.useTheme)(),
71
+ _useTheme$theme = _useTheme.theme,
72
+ bottomSheetContentContainer = _useTheme$theme.attachmentPicker.bottomSheetContentContainer,
73
+ white = _useTheme$theme.colors.white;
387
74
 
388
75
  var _useAttachmentPickerC = (0, _AttachmentPickerContext.useAttachmentPickerContext)(),
389
76
  closePicker = _useAttachmentPickerC.closePicker,
@@ -401,89 +88,72 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
401
88
  currentIndex = _useState2[0],
402
89
  setCurrentIndex = _useState2[1];
403
90
 
404
- var _useState3 = (0, _react.useState)(),
91
+ var endCursorRef = (0, _react.useRef)();
92
+
93
+ var _useState3 = (0, _react.useState)(false),
405
94
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
406
- endCursor = _useState4[0],
407
- setEndCursor = _useState4[1];
95
+ photoError = _useState4[0],
96
+ setPhotoError = _useState4[1];
97
+
98
+ var hasNextPageRef = (0, _react.useRef)(true);
408
99
 
409
100
  var _useState5 = (0, _react.useState)(false),
410
101
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
411
- photoError = _useState6[0],
412
- setPhotoError = _useState6[1];
102
+ loadingPhotos = _useState6[0],
103
+ setLoadingPhotos = _useState6[1];
413
104
 
414
- var _useState7 = (0, _react.useState)(true),
105
+ var _useState7 = (0, _react.useState)([]),
415
106
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
416
- hasNextPage = _useState8[0],
417
- setHasNextPage = _useState8[1];
418
-
419
- var _useState9 = (0, _react.useState)(false),
420
- _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
421
- loadingPhotos = _useState10[0],
422
- setLoadingPhotos = _useState10[1];
423
-
424
- var _useState11 = (0, _react.useState)([]),
425
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
426
- photos = _useState12[0],
427
- setPhotos = _useState12[1];
428
-
429
- var bottomSheetCloseOnKeyboardShowTimeout = (0, _react.useRef)();
430
-
431
- var getMorePhotos = function () {
432
- var _ref3 = (0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee2() {
433
- var results;
434
- return _regenerator["default"].wrap(function _callee2$(_context2) {
435
- while (1) {
436
- switch (_context2.prev = _context2.next) {
437
- case 0:
438
- if (!(hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images')) {
439
- _context2.next = 16;
440
- break;
441
- }
442
-
443
- setLoadingPhotos(true);
444
- _context2.prev = 2;
445
- _context2.next = 5;
446
- return (0, _native.getPhotos)({
447
- after: endCursor,
448
- first: numberOfAttachmentImagesToLoadPerCall != null ? numberOfAttachmentImagesToLoadPerCall : 60
449
- });
450
-
451
- case 5:
452
- results = _context2.sent;
453
-
454
- if (endCursor) {
455
- setPhotos([].concat((0, _toConsumableArray2["default"])(photos), (0, _toConsumableArray2["default"])(results.assets)));
456
- } else {
457
- setPhotos(results.assets);
458
- }
459
-
460
- setEndCursor(results.endCursor);
461
- setHasNextPage(results.hasNextPage || false);
462
- _context2.next = 15;
107
+ photos = _useState8[0],
108
+ setPhotos = _useState8[1];
109
+
110
+ var attemptedToLoadPhotosOnOpenRef = (0, _react.useRef)(false);
111
+ var getMorePhotos = (0, _react.useCallback)((0, _asyncToGenerator2["default"])(_regenerator["default"].mark(function _callee() {
112
+ var endCursor, results;
113
+ return _regenerator["default"].wrap(function _callee$(_context) {
114
+ while (1) {
115
+ switch (_context.prev = _context.next) {
116
+ case 0:
117
+ if (!(hasNextPageRef.current && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images')) {
118
+ _context.next = 17;
463
119
  break;
464
-
465
- case 11:
466
- _context2.prev = 11;
467
- _context2.t0 = _context2["catch"](2);
468
- console.log(_context2.t0);
469
- setPhotoError(true);
470
-
471
- case 15:
472
- setLoadingPhotos(false);
473
-
474
- case 16:
475
- case "end":
476
- return _context2.stop();
477
- }
120
+ }
121
+
122
+ setPhotoError(false);
123
+ setLoadingPhotos(true);
124
+ endCursor = endCursorRef.current;
125
+ _context.prev = 4;
126
+ _context.next = 7;
127
+ return (0, _native.getPhotos)({
128
+ after: endCursor,
129
+ first: numberOfAttachmentImagesToLoadPerCall != null ? numberOfAttachmentImagesToLoadPerCall : 60
130
+ });
131
+
132
+ case 7:
133
+ results = _context.sent;
134
+ endCursorRef.current = results.endCursor;
135
+ setPhotos(function (prevPhotos) {
136
+ return endCursor ? [].concat((0, _toConsumableArray2["default"])(prevPhotos), (0, _toConsumableArray2["default"])(results.assets)) : results.assets;
137
+ });
138
+ hasNextPageRef.current = !!results.hasNextPage;
139
+ _context.next = 16;
140
+ break;
141
+
142
+ case 13:
143
+ _context.prev = 13;
144
+ _context.t0 = _context["catch"](4);
145
+ setPhotoError(true);
146
+
147
+ case 16:
148
+ setLoadingPhotos(false);
149
+
150
+ case 17:
151
+ case "end":
152
+ return _context.stop();
478
153
  }
479
- }, _callee2, null, [[2, 11]]);
480
- }));
481
-
482
- return function getMorePhotos() {
483
- return _ref3.apply(this, arguments);
484
- };
485
- }();
486
-
154
+ }
155
+ }, _callee, null, [[4, 13]]);
156
+ })), [currentIndex, selectedPicker, loadingPhotos]);
487
157
  (0, _react.useEffect)(function () {
488
158
  var backAction = function backAction() {
489
159
  if (selectedPicker) {
@@ -500,55 +170,39 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
500
170
  return function () {
501
171
  return backHandler.remove();
502
172
  };
503
- }, [selectedPicker]);
173
+ }, [selectedPicker, closePicker]);
504
174
  (0, _react.useEffect)(function () {
505
- var hideAttachmentPicker = function hideAttachmentPicker() {
506
- if (bottomSheetCloseOnKeyboardShowTimeout.current) {
507
- clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);
508
- }
509
-
510
- setSelectedPicker(undefined);
511
- bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(function () {
512
- var _current;
175
+ var keyboardShowEvent = _reactNative.Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow';
513
176
 
514
- return (_current = ref.current) == null ? void 0 : _current.close();
515
- }, 150);
516
- };
177
+ var keyboardSubscription = _reactNative.Keyboard.addListener(keyboardShowEvent, closePicker);
517
178
 
518
- var keyboardSubscription = _reactNative.Platform.OS === 'ios' ? _reactNative.Keyboard.addListener('keyboardWillShow', hideAttachmentPicker) : _reactNative.Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);
519
179
  return function () {
520
180
  if (keyboardSubscription != null && keyboardSubscription.remove) {
521
181
  keyboardSubscription.remove();
522
182
  return;
523
183
  }
524
184
 
525
- if (_reactNative.Platform.OS === 'ios') {
526
- _reactNative.Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);
527
- } else {
528
- _reactNative.Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);
529
- }
530
-
531
- if (bottomSheetCloseOnKeyboardShowTimeout.current) {
532
- clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);
533
- }
185
+ _reactNative.Keyboard.removeListener(keyboardShowEvent, closePicker);
534
186
  };
535
- }, []);
187
+ }, [closePicker]);
536
188
  (0, _react.useEffect)(function () {
537
189
  if (currentIndex < 0) {
538
190
  setSelectedPicker(undefined);
539
191
 
540
192
  if (!loadingPhotos) {
541
- setEndCursor(undefined);
542
- setHasNextPage(true);
193
+ endCursorRef.current = undefined;
194
+ hasNextPageRef.current = true;
195
+ attemptedToLoadPhotosOnOpenRef.current = false;
196
+ setPhotoError(false);
543
197
  }
544
198
  }
545
- }, [currentIndex]);
199
+ }, [currentIndex, loadingPhotos]);
546
200
  (0, _react.useEffect)(function () {
547
- if (selectedPicker === 'images' && endCursor === undefined && currentIndex > -1 && !loadingPhotos) {
548
- setPhotoError(false);
201
+ if (!attemptedToLoadPhotosOnOpenRef.current && selectedPicker === 'images' && endCursorRef.current === undefined && currentIndex > -1 && !loadingPhotos) {
549
202
  getMorePhotos();
203
+ attemptedToLoadPhotosOnOpenRef.current = true;
550
204
  }
551
- }, [currentIndex, selectedPicker]);
205
+ }, [currentIndex, selectedPicker, getMorePhotos, loadingPhotos]);
552
206
  var selectedPhotos = photos.map(function (asset) {
553
207
  return {
554
208
  asset: asset,
@@ -566,10 +220,45 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
566
220
  };
567
221
  });
568
222
  var handleHeight = attachmentPickerBottomSheetHandleHeight || 20;
569
- var statusBarHeight = (_StatusBar$currentHei = _reactNative.StatusBar.currentHeight) != null ? _StatusBar$currentHei : 0;
570
- var bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;
571
- var androidBottomBarHeightAdjustment = _reactNative.Platform.OS === 'android' ? bottomBarHeight === statusBarHeight ? translucentStatusBar ? 0 : (_StatusBar$currentHei2 = _reactNative.StatusBar.currentHeight) != null ? _StatusBar$currentHei2 : 0 : translucentStatusBar ? bottomBarHeight > statusBarHeight ? -bottomBarHeight + statusBarHeight : bottomBarHeight > 0 ? -statusBarHeight : 0 : bottomBarHeight > 0 ? 0 : statusBarHeight : 0;
572
- var initialSnapPoint = (attachmentPickerBottomSheetHeight != null ? attachmentPickerBottomSheetHeight : _reactNative.Platform.OS === 'android') ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);
223
+
224
+ var getAndroidBottomBarHeightAdjustment = function getAndroidBottomBarHeightAdjustment() {
225
+ if (_reactNative.Platform.OS === 'android') {
226
+ var _StatusBar$currentHei;
227
+
228
+ var statusBarHeight = (_StatusBar$currentHei = _reactNative.StatusBar.currentHeight) != null ? _StatusBar$currentHei : 0;
229
+ var bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;
230
+
231
+ if (bottomBarHeight === statusBarHeight) {
232
+ return translucentStatusBar ? 0 : statusBarHeight;
233
+ } else {
234
+ if (translucentStatusBar) {
235
+ if (bottomBarHeight > statusBarHeight) {
236
+ return -bottomBarHeight + statusBarHeight;
237
+ } else {
238
+ return bottomBarHeight > 0 ? -statusBarHeight : 0;
239
+ }
240
+ } else {
241
+ return bottomBarHeight > 0 ? 0 : statusBarHeight;
242
+ }
243
+ }
244
+ }
245
+
246
+ return 0;
247
+ };
248
+
249
+ var getInitialSnapPoint = function getInitialSnapPoint() {
250
+ if (attachmentPickerBottomSheetHeight !== undefined) {
251
+ return attachmentPickerBottomSheetHeight;
252
+ }
253
+
254
+ if (_reactNative.Platform.OS === 'android') {
255
+ return 308 + (fullScreenHeight - screenHeight + getAndroidBottomBarHeightAdjustment()) - handleHeight;
256
+ } else {
257
+ return 308 + (fullScreenHeight - screenHeight);
258
+ }
259
+ };
260
+
261
+ var initialSnapPoint = getInitialSnapPoint();
573
262
  var finalSnapPoint = _reactNative.Platform.OS === 'android' ? fullScreenHeight - topInset - handleHeight : fullScreenHeight - topInset;
574
263
  var snapPoints = (0, _react.useMemo)(function () {
575
264
  return [initialSnapPoint, finalSnapPoint];
@@ -586,7 +275,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
586
275
  __self: _this,
587
276
  __source: {
588
277
  fileName: _jsxFileName,
589
- lineNumber: 507,
278
+ lineNumber: 264,
590
279
  columnNumber: 9
591
280
  }
592
281
  }, _react["default"].createElement(_bottomSheet.BottomSheetFlatList, {
@@ -601,22 +290,22 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
601
290
  },
602
291
  numColumns: numberOfAttachmentPickerImageColumns != null ? numberOfAttachmentPickerImageColumns : 3,
603
292
  onEndReached: getMorePhotos,
604
- renderItem: renderItem,
293
+ renderItem: _AttachmentPickerItem.renderAttachmentPickerItem,
605
294
  __self: _this,
606
295
  __source: {
607
296
  fileName: _jsxFileName,
608
- lineNumber: 523,
297
+ lineNumber: 280,
609
298
  columnNumber: 11
610
299
  }
611
300
  })), selectedPicker === 'images' && photoError && _react["default"].createElement(AttachmentPickerError, {
612
- attachmentPickerBottomSheetHeight: attachmentPickerBottomSheetHeight,
301
+ attachmentPickerBottomSheetHeight: initialSnapPoint,
613
302
  attachmentPickerErrorButtonText: attachmentPickerErrorButtonText,
614
303
  AttachmentPickerErrorImage: AttachmentPickerErrorImage,
615
304
  attachmentPickerErrorText: attachmentPickerErrorText,
616
305
  __self: _this,
617
306
  __source: {
618
307
  fileName: _jsxFileName,
619
- lineNumber: 538,
308
+ lineNumber: 295,
620
309
  columnNumber: 11
621
310
  }
622
311
  }));