* Dismissable banner that opens login/signup
* Presist state, dynamic width
* Add LoginBanner in place of Dismissable banner, use typescript and rename shownOnce in createLayoutSlice
* LoginBanner typescript file
* Rename shownOnce to more descriptive onboardingShownOnce
* Revert shownOnce name change
* Navigate user back to ObsDetails from SuggestID -> Suggestions -> TaxonSearch
* Guard agains accessing taxon while observation is undefined
* Do not return early, instead check on each access of observation
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Add react-native-walkthrough-tooltip dependency
* WIP: Basic tooltip (always shown)
* Adjust arrow size
* Adjust background color
* Adjust tooltip shadow
* Adjust hight and vertical spacing
* Adjust border radius
* Adjust padding horizontal
* Only allow long press if tooltip is visible
* Move Tooltip into AddObsButton
* Show tooltip only once
Dismiss on long press of AddObsButton only
* Only show the tooltip if the user has only AI camera as an option
* Only show the tooltip on MyObservations screen
* Only show the tooltip on MyObservations screen for real
* Show tooltip after user making their second observation
* Code style
* Fix typo in comment
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Prevent navigation when modal is opened
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Remove return
* Update CustomTabBar.test.js.snap
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* 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
* Be specific about the first screen in each root tab navigator
* Correct version of cocoapods
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* 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
* Use mapping and more succinct filtering and sorting on obs list/grid
* Mapping for comments and ids
* Fixes for ids, comments, and belongs to user
* Make sure data is updated at end of list
* Make sure to update refs
* Make sure list updates when switching into advanced mode
* Remove log
* Fix test and crash
* Improve performance of mapping to improve fetching (load data onscreen) times
* Fix merge conflicts
* Upgrade to RN0.74 with upgrade helper
* Bump minor version
* Remove yarn files
* RN 0.74.7
* Update .flowconfig
* Update Gemfile.lock
* Update project.pbxproj
* Update PrivacyInfo.xcprivacy
* Refactor uri into constant
* Only use filename for name
Because using the full uri does no longer work like this.
* Check for uri being null
* Update metro.config.js
* Rubocop autocorrect
* Update package-lock.json
* Update react-native-vision-camera+4.0.5.patch
* 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>
* Revalidate jwt token before uploading observation and before attaching media
* Add logging to uploads and jwts
* Make logs more useful, add context and appstate
* Fix inat uploading mocks in tests
* Fix uploader test to reflect errors being thrown
* 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>
* 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>
* Split apart observation & media uploaders & add unit tests
* Use typescript
* Return only media items needed
* Fix tests related to uploading vs. uploaded status
* Remove undefined from union for observationUUID
Above and below in the callstack of those functions the type is only string, so that change seems to be fine for me to make directly on your PR.
* Extract an Operation interface (#2904)
* Type updates
* Update mapped param types
---------
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>
* Add Boolean to control button being shown
Same Button component, only with changed indentation
* Apply margin between buttons to hide button instead
* Move left margin to container
Because ID button is now optional but container is not.
* Increase margin between buttons
Not part of the ticket, but it was not according to designs.
* Use existing state for the button
* Update integration test
* Update duplicate testID
* Add unit test for showing button behaviour based on photos
* 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