11import React , { useEffect , useMemo , useRef , useState } from 'react' ;
22import {
3+ Alert ,
34 BackHandler ,
45 Dimensions ,
56 ImageBackground ,
@@ -56,30 +57,28 @@ const styles = StyleSheet.create({
5657const screenHeight = vh ( 100 ) ;
5758const fullScreenHeight = Dimensions . get ( 'window' ) . height ;
5859
59- type AttachmentImageProps = {
60+ export type AttachmentPickerItemType = {
6061 asset : Asset ;
6162 ImageOverlaySelectedComponent : React . ComponentType ;
6263 maxNumberOfFiles : number ;
64+ numberOfUploads : number ;
6365 selected : boolean ;
66+ setSelectedFiles : React . Dispatch < React . SetStateAction < File [ ] > > ;
6467 setSelectedImages : React . Dispatch < React . SetStateAction < Asset [ ] > > ;
6568 numberOfAttachmentPickerImageColumns ?: number ;
6669} ;
6770
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' > ;
7674
7775const AttachmentVideo : React . FC < AttachmentVideoProps > = ( props ) => {
7876 const {
7977 asset,
8078 ImageOverlaySelectedComponent,
8179 maxNumberOfFiles,
8280 numberOfAttachmentPickerImageColumns,
81+ numberOfUploads,
8382 selected,
8483 setSelectedFiles,
8584 } = props ;
@@ -116,7 +115,8 @@ const AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {
116115 setSelectedFiles ( ( files ) => files . filter ( ( file ) => file . uri !== asset . uri ) ) ;
117116 } else {
118117 setSelectedFiles ( ( files ) => {
119- if ( files . length >= maxNumberOfFiles ) {
118+ if ( numberOfUploads >= maxNumberOfFiles ) {
119+ Alert . alert ( 'Maximum number of files reached' ) ;
120120 return files ;
121121 }
122122 return [
@@ -170,6 +170,7 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
170170 ImageOverlaySelectedComponent,
171171 maxNumberOfFiles,
172172 numberOfAttachmentPickerImageColumns,
173+ numberOfUploads,
173174 selected,
174175 setSelectedImages,
175176 } = props ;
@@ -189,7 +190,8 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
189190 setSelectedImages ( ( images ) => images . filter ( ( image ) => image . uri !== asset . uri ) ) ;
190191 } else {
191192 setSelectedImages ( ( images ) => {
192- if ( images . length >= maxNumberOfFiles ) {
193+ if ( numberOfUploads >= maxNumberOfFiles ) {
194+ Alert . alert ( 'Maximum number of files reached' ) ;
193195 return images ;
194196 }
195197 return [ ...images , asset ] ;
@@ -220,24 +222,13 @@ const AttachmentImage: React.FC<AttachmentImageProps> = (props) => {
220222 ) ;
221223} ;
222224
223- const renderImage = ( {
224- item,
225- } : {
226- item : {
227- asset : Asset ;
228- ImageOverlaySelectedComponent : React . ComponentType ;
229- maxNumberOfFiles : number ;
230- selected : boolean ;
231- setSelectedFiles : React . Dispatch < React . SetStateAction < File [ ] > > ;
232- setSelectedImages : React . Dispatch < React . SetStateAction < Asset [ ] > > ;
233- numberOfAttachmentPickerImageColumns ?: number ;
234- } ;
235- } ) => {
225+ const renderItem = ( { item } : { item : AttachmentPickerItemType } ) => {
236226 const {
237227 asset,
238228 ImageOverlaySelectedComponent,
239229 maxNumberOfFiles,
240230 numberOfAttachmentPickerImageColumns,
231+ numberOfUploads,
241232 selected,
242233 setSelectedFiles,
243234 setSelectedImages,
@@ -259,6 +250,7 @@ const renderImage = ({
259250 ImageOverlaySelectedComponent = { ImageOverlaySelectedComponent }
260251 maxNumberOfFiles = { maxNumberOfFiles }
261252 numberOfAttachmentPickerImageColumns = { numberOfAttachmentPickerImageColumns }
253+ numberOfUploads = { numberOfUploads }
262254 selected = { selected }
263255 setSelectedImages = { setSelectedImages }
264256 />
@@ -268,6 +260,7 @@ const renderImage = ({
268260 ImageOverlaySelectedComponent = { ImageOverlaySelectedComponent }
269261 maxNumberOfFiles = { maxNumberOfFiles }
270262 numberOfAttachmentPickerImageColumns = { numberOfAttachmentPickerImageColumns }
263+ numberOfUploads = { numberOfUploads }
271264 selected = { selected }
272265 setSelectedFiles = { setSelectedFiles }
273266 />
@@ -454,6 +447,7 @@ export const AttachmentPicker = React.forwardRef(
454447 ImageOverlaySelectedComponent,
455448 maxNumberOfFiles,
456449 numberOfAttachmentPickerImageColumns,
450+ numberOfUploads : selectedFiles . length + selectedImages . length ,
457451 selected :
458452 selectedImages . some ( ( image ) => image . uri === asset . uri ) ||
459453 selectedFiles . some ( ( file ) => file . uri === asset . uri ) ,
@@ -536,7 +530,7 @@ export const AttachmentPicker = React.forwardRef(
536530 keyExtractor = { ( item ) => item . asset . uri }
537531 numColumns = { numberOfAttachmentPickerImageColumns ?? 3 }
538532 onEndReached = { getMorePhotos }
539- renderItem = { renderImage }
533+ renderItem = { renderItem }
540534 />
541535 </ BottomSheet >
542536 { selectedPicker === 'images' && photoError && (
0 commit comments