Files
iNaturalistReactNative/src/sharedHelpers/shouldFetchObservationLocation.ts
Amanda Bullington abd4bcee23 Refactored location fetching for accurate locations (#1788)
* Refactor to use watchPosition

* Update useWatchPosition with permissions/retry

* Replace useUserLocation with useWatchPosition and fix tests; return userLocation from watch position hook

* Only update observation keys when there's an observation

* Improve TypeScript definitions

* Revert TypeScript commit

* Revert "Only update observation keys when there's an observation"

This reverts commit a4cd17a513.

* Code cleanup: make useWatchPosition more modular

* Code cleanup; location permission in ObsEdit instead of subcomponent

* Use correct accuracy in Camera photos

* Camera fixes

* Fixes to watching position in ObsEdit

* Fix useWatchPosition tests

* Fix tests

* Make sure state updates when renavigating to OsEdit; test fixes
2024-07-16 09:23:09 -07:00

36 lines
1.2 KiB
TypeScript

import { galleryPhotosPath } from "appConstants/paths.ts";
import RNFS from "react-native-fs";
import { RealmObservation } from "realmModels/types.d.ts";
import {
TARGET_POSITIONAL_ACCURACY
} from "sharedHooks/useWatchPosition.ts";
const shouldFetchObservationLocation = ( observation: RealmObservation ) => {
const latitude = observation?.latitude;
const longitude = observation?.longitude;
const hasLocation = !!( latitude && longitude );
const originalPhotoUri = observation?.observationPhotos
&& observation?.observationPhotos[0]?.originalPhotoUri;
const isGalleryPhoto = originalPhotoUri?.includes( galleryPhotosPath );
// Shared photo paths will look something like Shared/AppGroup/sdgsdgsdgk
const isSharedPhoto = (
originalPhotoUri && !originalPhotoUri.includes( RNFS.DocumentDirectoryPath )
);
const isNewObservation = (
!observation?._created_at
&& !observation?._synced_at
);
const accGoodEnough = (
observation?.positional_accuracy
&& observation.positional_accuracy <= TARGET_POSITIONAL_ACCURACY
);
return observation
&& isNewObservation
&& ( !hasLocation || !accGoodEnough )
&& !isGalleryPhoto
&& !isSharedPhoto;
};
export default shouldFetchObservationLocation;