mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2026-06-23 06:59:10 -04:00
Merge branch 'main' into mob-1182-disable-firebase-for-unauthenticated-users-and-users-with
This commit is contained in:
46
package-lock.json
generated
46
package-lock.json
generated
@@ -91,7 +91,7 @@
|
||||
"react-native-paper": "^5.12.3",
|
||||
"react-native-permissions": "^4.1.5",
|
||||
"react-native-reanimated": "^3.19.5",
|
||||
"react-native-reanimated-carousel": "^3.5.1",
|
||||
"react-native-reanimated-carousel": "^4.0.3",
|
||||
"react-native-render-html": "^6.3.4",
|
||||
"react-native-restart": "^0.0.27",
|
||||
"react-native-safe-area-context": "^5.6.2",
|
||||
@@ -7730,14 +7730,6 @@
|
||||
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@trysound/sax": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
||||
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@tsconfig/node10": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
|
||||
@@ -20972,13 +20964,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-native-reanimated-carousel": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/react-native-reanimated-carousel/-/react-native-reanimated-carousel-3.5.1.tgz",
|
||||
"integrity": "sha512-9BBQV6JAYSQm2lV7MFtT4mzapXmW4IZO6s38gfiJL84Jg23ivGB1UykcNQauKgtHyhtW2NuZJzItb1s42lM+hA==",
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/react-native-reanimated-carousel/-/react-native-reanimated-carousel-4.0.3.tgz",
|
||||
"integrity": "sha512-YZXlvZNghR5shFcI9hTA7h7bEhh97pfUSLZvLBAshpbkuYwJDKmQXejO/199T6hqGq0wCRwR0CWf2P4Vs6A4Fw==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"react": ">=16.8.0",
|
||||
"react-native": ">=0.6.0",
|
||||
"react-native-gesture-handler": ">=2.0.0",
|
||||
"react": ">=18.0.0",
|
||||
"react-native": ">=0.70.3",
|
||||
"react-native-gesture-handler": ">=2.9.0",
|
||||
"react-native-reanimated": ">=3.0.0"
|
||||
}
|
||||
},
|
||||
@@ -21976,6 +21969,15 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sax": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz",
|
||||
"integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==",
|
||||
"license": "BlueOak-1.0.0",
|
||||
"engines": {
|
||||
"node": ">=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/scheduler": {
|
||||
"version": "0.26.0",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
|
||||
@@ -22950,16 +22952,18 @@
|
||||
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
|
||||
},
|
||||
"node_modules/svgo": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
|
||||
"integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz",
|
||||
"integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@trysound/sax": "0.2.0",
|
||||
"commander": "^7.2.0",
|
||||
"css-select": "^5.1.0",
|
||||
"css-tree": "^2.2.1",
|
||||
"css-tree": "^2.3.1",
|
||||
"css-what": "^6.1.0",
|
||||
"csso": "^5.0.5",
|
||||
"picocolors": "^1.0.0"
|
||||
"picocolors": "^1.0.0",
|
||||
"sax": "^1.5.0"
|
||||
},
|
||||
"bin": {
|
||||
"svgo": "bin/svgo"
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
"react-native-paper": "^5.12.3",
|
||||
"react-native-permissions": "^4.1.5",
|
||||
"react-native-reanimated": "^3.19.5",
|
||||
"react-native-reanimated-carousel": "^3.5.1",
|
||||
"react-native-reanimated-carousel": "^4.0.3",
|
||||
"react-native-render-html": "^6.3.4",
|
||||
"react-native-restart": "^0.0.27",
|
||||
"react-native-safe-area-context": "^5.6.2",
|
||||
|
||||
@@ -8,7 +8,7 @@ import Zoom from "components/Camera/Buttons/Zoom";
|
||||
import TabletButtons from "components/Camera/TabletButtons";
|
||||
import { View } from "components/styledComponents";
|
||||
import React from "react";
|
||||
import type { GestureResponderEvent, ViewStyle } from "react-native";
|
||||
import type { ViewStyle } from "react-native";
|
||||
import DeviceInfo from "react-native-device-info";
|
||||
import type { CameraDeviceFormat, TakePhotoOptions } from "react-native-vision-camera";
|
||||
import { useLayoutPrefs } from "sharedHooks";
|
||||
@@ -18,10 +18,10 @@ import AIDebugButton from "./AIDebugButton";
|
||||
const isTablet = DeviceInfo.isTablet();
|
||||
|
||||
interface Props {
|
||||
handleZoomButtonPress: ( _event: GestureResponderEvent ) => void;
|
||||
handleZoomButtonPress: ( ) => void;
|
||||
confidenceThreshold?: number;
|
||||
cropRatio?: string;
|
||||
flipCamera: ( _event: GestureResponderEvent ) => void;
|
||||
flipCamera: ( ) => void;
|
||||
fps?: number;
|
||||
handleClose: ( ) => void;
|
||||
hasFlash: boolean;
|
||||
@@ -39,10 +39,10 @@ interface Props {
|
||||
takePhoto: () => Promise<void>;
|
||||
takePhotoOptions: TakePhotoOptions;
|
||||
takingPhoto: boolean;
|
||||
toggleFlash: ( _event: GestureResponderEvent ) => void;
|
||||
toggleFlash: ( ) => void;
|
||||
zoomTextValue: string;
|
||||
useLocation: boolean;
|
||||
toggleLocation: ( _event: GestureResponderEvent ) => void;
|
||||
toggleLocation: ( ) => void;
|
||||
deleteSentinelFile: ( ) => Promise<void>;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@ import RotatableIconWrapper from "components/Camera/RotatableIconWrapper";
|
||||
// eslint-disable-next-line max-len
|
||||
import TransparentCircleButton from "components/SharedComponents/Buttons/TransparentCircleButton";
|
||||
import React from "react";
|
||||
import type { GestureResponderEvent, ViewStyle } from "react-native";
|
||||
import type { ViewStyle } from "react-native";
|
||||
import type { TakePhotoOptions } from "react-native-vision-camera";
|
||||
import { useTranslation } from "sharedHooks";
|
||||
|
||||
interface Props {
|
||||
rotatableAnimatedStyle: ViewStyle;
|
||||
toggleFlash: ( _event: GestureResponderEvent ) => void;
|
||||
toggleFlash: ( ) => void;
|
||||
hasFlash?: boolean;
|
||||
takePhotoOptions: TakePhotoOptions;
|
||||
flashClassName?: string;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import RotatableIconWrapper from "components/Camera/RotatableIconWrapper";
|
||||
import TransparentCircleButton from "components/SharedComponents/Buttons/TransparentCircleButton";
|
||||
import React from "react";
|
||||
import type { GestureResponderEvent, ViewStyle } from "react-native";
|
||||
import type { ViewStyle } from "react-native";
|
||||
import { useTranslation } from "sharedHooks";
|
||||
|
||||
interface Props {
|
||||
rotatableAnimatedStyle: ViewStyle;
|
||||
toggleLocation: ( _event: GestureResponderEvent ) => void;
|
||||
toggleLocation: ( ) => void;
|
||||
useLocation?: boolean;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
} from "providers/ExploreContext";
|
||||
import React, {
|
||||
useCallback,
|
||||
useMemo,
|
||||
useState,
|
||||
} from "react";
|
||||
import { FlatList } from "react-native";
|
||||
@@ -29,6 +30,8 @@ const DROP_SHADOW = getShadow( {
|
||||
offsetHeight: 4,
|
||||
} );
|
||||
|
||||
const Footer = ( ) => <View className="h-[336px]" />;
|
||||
|
||||
interface Props {
|
||||
closeModal: () => void;
|
||||
hasPermissions?: boolean;
|
||||
@@ -124,15 +127,13 @@ const ExploreLocationSearch = ( {
|
||||
}
|
||||
};
|
||||
|
||||
const renderEmptyList = ( ) => (
|
||||
const emptyListComponent = useMemo( ( ) => (
|
||||
<EmptySearchResults
|
||||
isLoading={isLoading}
|
||||
searchQuery={locationName}
|
||||
refetch={refetch}
|
||||
/>
|
||||
);
|
||||
|
||||
const renderFooter = ( ) => <View className="h-[336px]" />;
|
||||
), [isLoading, locationName, refetch] );
|
||||
|
||||
const buttons = [
|
||||
{
|
||||
@@ -175,8 +176,8 @@ const ExploreLocationSearch = ( {
|
||||
data={data}
|
||||
renderItem={renderItem}
|
||||
keyExtractor={item => item.id}
|
||||
ListEmptyComponent={renderEmptyList}
|
||||
ListFooterComponent={renderFooter}
|
||||
ListEmptyComponent={emptyListComponent}
|
||||
ListFooterComponent={Footer}
|
||||
/>
|
||||
{renderPermissionsGate( { onPermissionGranted: setNearbyLocation } )}
|
||||
</ViewWrapper>
|
||||
|
||||
@@ -30,7 +30,7 @@ interface Props extends PropsWithChildren {
|
||||
icon?: string;
|
||||
// Only show the icon with all the same layout, don't make it a button
|
||||
iconOnly?: boolean;
|
||||
onPress: ( _event?: GestureResponderEvent ) => void;
|
||||
onPress: ( _event: GestureResponderEvent ) => void;
|
||||
// Inserts a white or colored view under the icon so an holes in the shape show as
|
||||
// white
|
||||
preventTransparency?: boolean;
|
||||
@@ -178,7 +178,7 @@ const INatIconButton = ( {
|
||||
);
|
||||
}
|
||||
|
||||
const handlePressWithTracking = ( event?: GestureResponderEvent ) => {
|
||||
const handlePressWithTracking = ( event: GestureResponderEvent ) => {
|
||||
if ( testID ) {
|
||||
const currentRoute = getCurrentRoute( );
|
||||
logger.info( `Button tap: ${testID}-${currentRoute?.name || "undefined"}` );
|
||||
|
||||
Reference in New Issue
Block a user