* Don't require TS extensions in imports
* Resolve all import extension errors
* Remove file extension from import paths used in mocks
* Remove .d of type definition file paths
* Remove .d of type definition file and import as type
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Update package.json
* Update package-lock.json
* Enable plugin
* Update package.json
* Update package-lock.json
* Update .eslintrc.js
* Create a new object instead of mutating the existing one
* Update SoundRecorder.js
* Do not mutate prop directly
* Do not mutate store value directly
* Disable compiler for zoom hook
Because it uses reanimated logic, and previous work laid out we should specifically disregard a rule of react here, unsure what to do here for now.
* Move array for tracking results into component
* Disable compiler for StandardCamera
* Do not mutate store value directly
* Disable compiler for FullPageWebView
* Do not mutate route param
* Remove unnecessary check if state is true before setting it to false
* Fix: user might be undefined
* Update reanimated usage with new compiler compliant API
* Fix: taxon might be undefined
* Fix: taxon might be undefined
* Fix: common pitfall of trying to render text outside of Text component
* Update interface
* Add package override
* Update package-lock.json
* Refactor updating of user preferences into User model
* Remove no memo directive from zoom
* Update file imports
* Migrate safeRealmWrite to TS
* Update interface and import path
* Update interface
* Refactor useLocaalObservation hook to not mutate return value of a function that should not be mutated
* Update tests to new return structure
* Remove useSafeRoute hook
We get the same information from error contexts and surrounding documents, and this hook was violating the rules of react by conditionally calling another hook.
* Use optional chaining
* Update TaxonNamesSetting.test.js
* Fix: use optional chaining
* Extend on RNTLs renderHook instead of re-implementing
* Remove unnecessary mock
* Remove unnecessary mock
* Remove unecessary mock
* Remove trailing spaces
* Reorder conditions
* This does not really do anything because the option
keys have different names
* The Add Location CTA should always ask for permission
The only state we show the Add Location CTA is if the observation does not have a location when landing on ObsEdit.
* Use an initial state wether an observation should watch users location
In this case we can override the state to true whenever we want to force the app to watch the location.
For example when the user grants location permission on the screen we want to watch no matter where the user came from.
* Remove unused or nowhere imported functions
* Use same navigation on Match as ObsEdit does
* Always ask for permission when the MyLocation button
is pressed on the map
* Add a loading state to the "Add Location button"
* Update import
* Import realm models as types
* Remove unused import
* Add function param types
* Add function param types
* Rename param for consistency
* Remove unused function param
* Type param
* Update type
* Add TODO
* Import function param type
* File rename without change
* Update imports
* Add some fct types
* Add fct param types
* Add function param types
* Update ObservationPhoto.ts
* Remove unused param
* Type fct param
* Add type
* Remove unused param
* Update comment
* Add fct param type as accessed by local context
* Add types from what is accessed in function
* Add types
* Remove unused types
* Add basic type, as is used in local context
* Bring require statement back
* Import other function param types
* Add property types
* Fix wrong extends
* Assert inputs and outputs for mapping a local observation photo to server action
* Update unit tests for errors
* Rename file
* Update imports
* Update package.json
* Update package-lock.json
* Update Podfile.lock
* Update vision camera patch (that removes branded metadate)
* Remove camera orientation prop and patch
* Remove frame processor orientation patch
No longer needed, and accepted by the vision-plugin
* Remove rotationLocalPhotoPatch as it is not used
* Do not rotate freshly taken photos anymore to save in a temporary folder
I have not yet removed the actual making of a copy of the photo into the temp folder. It is only no longer rotated.
* Remove unused deviceOrientation param
* Rename file
* Change function name as it no longer rotates
* Move image resize logic to the existing helper function
Instead of calling it a "patch"
* Move helper function to the only file it is imported into
* Latest camera library versions
* Revert "Latest camera library versions"
This reverts commit da6b2f7c28.
* Remove iPad camera orientation patch
* Update import
* Update Podfile.lock
* Show average scroll time
* Track fetching and scrolling performance, MyObs
* Limit default mode fields
* Update fields
* Make sure pagination and loading wheel work
* Limit the API requests we're making to what advanced users need
* Tweaks to add fetching metrics
* Remove one more field and console log
* Minimize unnecessary changes
* Keep debug mode scheme
* Fixes for ids, comments, and belongs to user
* Fix: Fetch data on infinite scroll using last observation id (#2930)
* Fetch using last observation ID when user reaches bottom of list
* Don't change momentum scroll which fetches updates to existing data
* Change TS warning about unused variables to error & support _unused in catch blocks
* Use TS recommended object instead of Object
* Set Function issues to warnings in TS files for later fixing
* Update navigators and create util for tabstack navigation
* Changes for react navigation 7
* Refactor to use navigateToTabStack throughout app
* Add comment about unmountOnBlur
* Get all unit tests passing; remove navutils & mock HeaderBackButton
* Fix animation issues in tests
* Temporarily remove parts of tests with back functionality
* Fix tests
* Delete ios/iNaturalistReactNative.xcodeproj/project.pbxproj
* Fix pbxproj
* Code cleanup; minimize unnecessary changes
* Fix tests
* Downgrade react-native-screens to v4.4.0 (#2918)
react-native-screens version 4.5.0 increases the react native version that it supports to 0.74.0+ (https://github.com/software-mansion/react-native-screens/pull/2613/files). So, by using 4.4.0 we are still able to build the app on Android as we are still on 0.73 for now (have tested and it works).
Have not seen any effect on the changes related to the latest react-navigation versions.
* Make requested changes
* Speed up Explore nearby tile loading (#2912)
* Create a performance tracker to show urltile load time in debug mode
* Set default radius to 1km, not 50km
* Code cleanup & TypeScript definitions
* Fix TypeError
* Address eslint error
* Make github actions happy
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* New Crowdin translations by GitHub Action (#2920)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
* MOB-690 - Add error context to 401 errors (#2921)
* MOB-690 - Add error context to 401 errors
* Add Object.defineProperty like in the other error classes
* Add logger line
* Also throw 401 error if the error object has no response property
---------
Co-authored-by: Yaron Budowski <budowski@gmail.com>
* v1.0.4+164
* Rebase with latest version of RN screens. Remove unused code and packages, add eslint package for TS, suppress TS errors (#2924)
* New Crowdin translations by GitHub Action (#2926)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
* New Crowdin translations by GitHub Action (#2929)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
* Use 3 separate initial routes for tabs; hide animations on drawer screens
* Fix test
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
Co-authored-by: Ken-ichi <kenichi.ueda@gmail.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Yaron Budowski <budowski@gmail.com>
* Create a performance tracker to show urltile load time in debug mode
* Set default radius to 1km, not 50km
* Code cleanup & TypeScript definitions
* Fix TypeError
* Address eslint error
* Make github actions happy
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* prevent multiple taps on ai camera button
* remove console log
* Add PressableWithDebounce component
* Add accessibilityState
* Change podfile lock to use same cocoapods as gemfile
* remove useeffect
* Change file extension
* Indentation
* Update type
* Extend PropsWithChildren
* Import type
* Add function param type
* use useFocusEffect instead of PressableWithDebounce in TakePhoto
* adding blur listener instead of using PressableWithDebounce
* Remove unused props
* Adapt to existing code style
* Move blur effect to CameraContainer (#2899)
* Move blur effect to CameraContainer
We can reuse the already existing `takingPhoto` state to disable the camera UI until the user navigates away.
* Also disable photo library on tablets
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Rename file
* Use PressableProps interface for PressableWithTracking
* Remove TODO
* Update handleLayout types
* Update allowed prop type
If SuggestionsResult can have ApiTaxon | RealmTaxon, we have to enable it in DisplayTaxonName as well, and rank_level can be undefined according to this union.
* Allow null
accessibleTaxonName uses currentUser directly from useCurrentUser which can be null.
* Use as to declare which type is used
* Source might be null
* Rename file
* Migrate flow to TS
* Update type
* Update type
* Rename file
* Update useTranslation.ts
* Check if instanceof Error
* Update imports
* Update type
* Rename file
* Migrate translatedRank to TS
* Migrate DisplayTaxonName to TS
* Also accept number for taxonId
* Those types are currently not optional
* Revert "Migrate translatedRank to TS"
This reverts commit c69cc18061.
* Rename taxon.js
* Add interfaces and types
* Remove adding a key to the function param
* Move fetchTaxonAndSave back to original file
* Move interface
* Update import
* Update types
* Rename some variables for clarity
* This is how it currently props down from only HOC
* Update imports
* Rename file
* Add param interface
* Update imports
* Revert "Move fetchTaxonAndSave back to original file"
This reverts commit 981ce228e8.
* Move fetchTaxonAndSave to own file
* Type inference is easiest way for React components
* Rename file
* Remove unused props
* Add types
* Update type
* Infer return type
* Update import
* Add interface
* Rename const and interface
* Update import (Merge conflict)
* MOB-708 - suggestions screen - show percentages instead of confidence dots
* Code review fixes
* Remove confidencePercentage from condition
* Reuse existing string from Match screen header
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Set default explore view to observations
* Rearrange ObservationsViewBar buttons to always show grid first and map first in Explore
* Set initialRegion of Explore map to same zoom level as location picker, using delta
* Consolidate map code into MapView with ref forwarding to allow animation & initialRegion set
* Stop controlling the map region from zustand, since we're using initialRegion
* Make sure we're not double animating when navigating to a new place
* Use ref to only get map boundaries exactly when they're needed, instead of tracking in state
* Make sure current location button does the same as NEARBY button
* Update Explore integration tests to reflect observations view as first view
* Fix navigation Explore tests to reflect landing on observations view
* Update MapView unit tests
* Check location permissions in MapView on current location button
* Code cleanup
* Fix tests and add test for location permissions
* To Mob 720: add some types and null guards (#2878)
* Update Map with Region type
* Type initialRegion
* Guard against null
* Guard against undefined coordinates
* Center loading indicator but not fill space (#2880)
Move the loading indicator to the center of the parent (and back left and top for half its size).
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Prevent lots of extra renders from useTaxonSearch; prevent TaxonResult from refetching remote taxon
* Add debounce to SearchBar to prevent unnecessary API calls
* Reset local value when clearing search
* Change text on Match loading screen (#2838) (#2841)
* Change copy for Match header & omit check for already seen species (#2837) (#2840)
* Fix: prevent multiple taps on Buttons like Suggest Id (#2833)
* Add debounce to Button to make sure users can't double tap any buttons / navigate twice
* Fix tests by mocking the Button component with a quick debounce
* Remove useEffect
* Add tracking for Button taps
* Use PressableWithTracking and handlePress in INatIconButton to track all pressables with a testID
* Import as UnstyledPressableWithTracking for consistency
* Add debounce to Button to make sure users can't double tap any buttons / navigate twice
* Fix tests by mocking the Button component with a quick debounce
* Open more options on long press
* Add tests for long press
* Rearranging Settings screen with new layout
* Add toggle for advanced settings in layout slice; fix default mode toggle
* Update settings with navigation flows
* Fix tests
* Change power mode switch for e2e test
* Fix settings test for green button toggle
* Fix advanced user toggle in e2e test (which hides pivot cards)
* Changes based on design convo; test fixes
* Fix e2e tests
* Follow user flow chart and update nav accordingly
* Rename function
* Fix test
* Can be null so check for false only
* Little less spacing between radio button rows
* Minor UI updates
* Remove check for previous setting in UI
* This is no longer used anywhere
* Update AICamera.test.js
* Update AICamera.test.js
* Update AICamera.test.js
* Update Suggestions.test.js
* Update Settings.test.js
* Update LanguageSettings.test.js
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Text updates and AICamera icon update for onboarding carousel
* Update background image camera permission
* Update text for permission gates
* Update text match screen, login signup, and camera
* Fix AICamera test
* Do not make FlashList wrapper accessible
Because it takes away a11y from the single items, and makes the list unscrollable with a11y commands.
* Remove a11y label
This was read without the actual param passed in so made no sense. Removing it for now. In that way at least the actual ID text is read.
* Make bottom sheet container not accesible