// @flow import { useNavigation } from "@react-navigation/native"; import { MAX_PHOTOS_ALLOWED } from "components/Camera/StandardCamera/StandardCamera"; import { Body2, Button, ButtonBar, CustomFlashList, FloatingActionBar, INatIcon, INatIconButton, } from "components/SharedComponents"; import ViewWrapper from "components/SharedComponents/ViewWrapper"; import { Pressable, View } from "components/styledComponents"; import { t } from "i18next"; import type { Node } from "react"; import React, { useCallback, useMemo, useState } from "react"; import { useGridLayout } from "sharedHooks"; import colors from "styles/tailwindColors"; import GroupPhotoImage from "./GroupPhotoImage"; type Props = { combinePhotos: Function, groupedPhotos: Object[], isCreatingObservations?: boolean, navBasedOnUserSettings: Function, removePhotos: Function, selectedObservations: Object[], selectObservationPhotos: Function, separatePhotos: Function, totalPhotos: number } const GroupPhotos = ( { combinePhotos, groupedPhotos, isCreatingObservations, navBasedOnUserSettings, removePhotos, selectedObservations, selectObservationPhotos, separatePhotos, totalPhotos, }: Props ): Node => { const navigation = useNavigation( ); const { flashListStyle, gridItemStyle, gridItemWidth, numColumns, } = useGridLayout( ); const [buttonBarHeight, setButtonBarHeight] = useState( null ); const extractKey = ( item, index ) => ( item.empty ? "empty" : `${item.photos[0].uri}${index}` ); const noObsSelected = selectedObservations.length === 0; const oneObsSelected = selectedObservations.length === 1; const obsWithMultiplePhotosSelected = selectedObservations?.[0]?.photos?.length > 1; const renderImage = useCallback( item => ( ), [gridItemStyle, selectedObservations, selectObservationPhotos] ); const addPhotos = useCallback( () => { navigation.navigate( "NoBottomTabStackNavigator", { screen: "PhotoLibrary", params: { fromGroupPhotos: true }, } ); }, [navigation] ); // $FlowIgnore const renderItem = useCallback( ( { item } ) => { if ( item.empty ) { return ( ); } // $FlowIgnore return renderImage( item ); }, [gridItemStyle, renderImage, addPhotos] ); const renderHeader = ( ) => ( {t( "Group-photos-onboarding" )} ); const onLayout = event => { const { height, } = event.nativeEvent.layout; setButtonBarHeight( height ); }; const data = useMemo( ( ) => { const newData = [].concat( groupedPhotos ); if ( totalPhotos < MAX_PHOTOS_ALLOWED ) { newData.push( { empty: true } ); } return newData; }, [groupedPhotos, totalPhotos] ); const extraData = { selectedObservations, gridItemWidth, }; return ( 0 && typeof buttonBarHeight === "number"} position="bottomStart" containerClass="ml-[15px] rounded-md" footerHeight={buttonBarHeight} >