// @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}
>
);
};
export default GroupPhotos;