stream-chat-react-native-core 4.7.0-beta.4 → 4.7.0-beta.5

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.
@@ -1,6 +1,17 @@
1
1
  import React from 'react';
2
2
  import { BottomSheetHandleProps } from '@gorhom/bottom-sheet';
3
3
  import type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';
4
+ import type { Asset, File } from '../../types/types';
5
+ export declare type AttachmentPickerItemType = {
6
+ asset: Asset;
7
+ ImageOverlaySelectedComponent: React.ComponentType;
8
+ maxNumberOfFiles: number;
9
+ numberOfUploads: number;
10
+ selected: boolean;
11
+ setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;
12
+ setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;
13
+ numberOfAttachmentPickerImageColumns?: number;
14
+ };
4
15
  export declare type AttachmentPickerProps = {
5
16
  /**
6
17
  * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) of attachment picker.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "4.7.0-beta.4",
4
+ "version": "4.7.0-beta.5",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useMemo, useRef, useState } from 'react';
2
2
  import {
3
+ Alert,
3
4
  BackHandler,
4
5
  Dimensions,
5
6
  ImageBackground,
@@ -56,23 +57,20 @@ const styles = StyleSheet.create({
56
57
  const screenHeight = vh(100);
57
58
  const fullScreenHeight = Dimensions.get('window').height;
58
59
 
59
- type AttachmentImageProps = {
60
+ export type AttachmentPickerItemType = {
60
61
  asset: Asset;
61
62
  ImageOverlaySelectedComponent: React.ComponentType;
62
63
  maxNumberOfFiles: number;
64
+ numberOfUploads: number;
63
65
  selected: boolean;
66
+ setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;
64
67
  setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;
65
68
  numberOfAttachmentPickerImageColumns?: number;
66
69
  };
67
70
 
68
- type AttachmentVideoProps = {
69
- asset: Asset;
70
- ImageOverlaySelectedComponent: React.ComponentType;
71
- maxNumberOfFiles: number;
72
- selected: boolean;
73
- setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;
74
- numberOfAttachmentPickerImageColumns?: number;
75
- };
71
+ type AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;
72
+
73
+ type AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;
76
74
 
77
75
  const AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {
78
76
  const {
@@ -80,6 +78,7 @@ const AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {
80
78
  ImageOverlaySelectedComponent,
81
79
  maxNumberOfFiles,
82
80
  numberOfAttachmentPickerImageColumns,
81
+ numberOfUploads,
83
82
  selected,
84
83
  setSelectedFiles,
85
84
  } = props;
@@ -115,7 +114,8 @@ const AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {
115
114
  setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));
116
115
  } else {
117
116
  setSelectedFiles((files) => {
118
- if (files.length >= maxNumberOfFiles) {
117
+ if (numberOfUploads >= maxNumberOfFiles) {
118
+ Alert.alert('Maximum number of files reached');
119
119
  return files;
120
120
  }
121
121
  return [
@@ -169,6 +169,7 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
169
169
  ImageOverlaySelectedComponent,
170
170
  maxNumberOfFiles,
171
171
  numberOfAttachmentPickerImageColumns,
172
+ numberOfUploads,
172
173
  selected,
173
174
  setSelectedImages,
174
175
  } = props;
@@ -188,7 +189,8 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
188
189
  setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));
189
190
  } else {
190
191
  setSelectedImages((images) => {
191
- if (images.length >= maxNumberOfFiles) {
192
+ if (numberOfUploads >= maxNumberOfFiles) {
193
+ Alert.alert('Maximum number of files reached');
192
194
  return images;
193
195
  }
194
196
  return [...images, asset];
@@ -219,24 +221,13 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
219
221
  );
220
222
  };
221
223
 
222
- const renderImage = ({
223
- item,
224
- }: {
225
- item: {
226
- asset: Asset;
227
- ImageOverlaySelectedComponent: React.ComponentType;
228
- maxNumberOfFiles: number;
229
- selected: boolean;
230
- setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;
231
- setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;
232
- numberOfAttachmentPickerImageColumns?: number;
233
- };
234
- }) => {
224
+ const renderItem = ({ item }: { item: AttachmentPickerItemType }) => {
235
225
  const {
236
226
  asset,
237
227
  ImageOverlaySelectedComponent,
238
228
  maxNumberOfFiles,
239
229
  numberOfAttachmentPickerImageColumns,
230
+ numberOfUploads,
240
231
  selected,
241
232
  setSelectedFiles,
242
233
  setSelectedImages,
@@ -258,6 +249,7 @@ const renderImage = ({
258
249
  ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}
259
250
  maxNumberOfFiles={maxNumberOfFiles}
260
251
  numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}
252
+ numberOfUploads={numberOfUploads}
261
253
  selected={selected}
262
254
  setSelectedImages={setSelectedImages}
263
255
  />
@@ -267,6 +259,7 @@ const renderImage = ({
267
259
  ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}
268
260
  maxNumberOfFiles={maxNumberOfFiles}
269
261
  numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}
262
+ numberOfUploads={numberOfUploads}
270
263
  selected={selected}
271
264
  setSelectedFiles={setSelectedFiles}
272
265
  />
@@ -453,6 +446,7 @@ export const AttachmentPicker = React.forwardRef(
453
446
  ImageOverlaySelectedComponent,
454
447
  maxNumberOfFiles,
455
448
  numberOfAttachmentPickerImageColumns,
449
+ numberOfUploads: selectedFiles.length + selectedImages.length,
456
450
  selected:
457
451
  selectedImages.some((image) => image.uri === asset.uri) ||
458
452
  selectedFiles.some((file) => file.uri === asset.uri),
@@ -535,7 +529,7 @@ export const AttachmentPicker = React.forwardRef(
535
529
  keyExtractor={(item) => item.asset.uri}
536
530
  numColumns={numberOfAttachmentPickerImageColumns ?? 3}
537
531
  onEndReached={getMorePhotos}
538
- renderItem={renderImage}
532
+ renderItem={renderItem}
539
533
  />
540
534
  </BottomSheet>
541
535
  {selectedPicker === 'images' && photoError && (
@@ -447,7 +447,7 @@ export const MessageInputProvider = <
447
447
  }>({});
448
448
  const [giphyActive, setGiphyActive] = useState(false);
449
449
  const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);
450
- const { editing, hasFilePicker, hasImagePicker, initialValue, maxNumberOfFiles } = value;
450
+ const { editing, hasFilePicker, hasImagePicker, initialValue } = value;
451
451
  const {
452
452
  fileUploads,
453
453
  imageUploads,
@@ -536,7 +536,7 @@ export const MessageInputProvider = <
536
536
  };
537
537
 
538
538
  const openAttachmentPicker = () => {
539
- if (hasImagePicker && !fileUploads.length) {
539
+ if (hasImagePicker) {
540
540
  Keyboard.dismiss();
541
541
  openPicker();
542
542
  setSelectedPicker('images');
@@ -548,7 +548,7 @@ export const MessageInputProvider = <
548
548
  * https://github.com/gorhom/react-native-bottom-sheet/issues/446
549
549
  */
550
550
  setTimeout(openPicker, 600);
551
- } else if (hasFilePicker && numberOfUploads < maxNumberOfFiles) {
551
+ } else if (hasFilePicker) {
552
552
  pickFile();
553
553
  }
554
554
  };
@@ -572,6 +572,7 @@ export const MessageInputProvider = <
572
572
 
573
573
  const pickFile = async () => {
574
574
  if (numberOfUploads >= value.maxNumberOfFiles) {
575
+ Alert.alert('Maximum number of files reached');
575
576
  return;
576
577
  }
577
578
 
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "4.7.0-beta.4"
2
+ "version": "4.7.0-beta.5"
3
3
  }