Commit Graph

171 Commits

Author SHA1 Message Date
Amanda Bullington
c2f0b21167 Fixes for explore loading state after permissions granted (#1986)
* Fixes to loading explore after location permission; closes #1918

* Test fixes

* Test fix
2024-08-19 17:23:57 -07:00
Amanda Bullington
75e5193ae7 Upload status fixes (#1979)
* Uploads start as expected from ObsEdit; error state not shown while syncing; closes #1954

* Fix MyObs test

* Fix toolbar test
2024-08-16 13:12:36 -07:00
Amanda Bullington
3b9739e254 Set threshold for top offline suggestion & sort by ascending rank (#1972)
* Update pods

* Show high scoring taxon as offline top ID; closes #1963

* Leave comment about offline threshold

* Add human offline test
2024-08-14 14:39:02 -07:00
Ken-ichi
e08cd83d6a Control web access (#1970)
* Convert web view components to typescript
* Basic tests for URL handling in FullPageWebView
* Allowlist of domains in FullPageWebView
* Open links in browser in most situations
* Allow FullPageWebView to handle mailto links
* Throw errors if FullPageWebView is about to leak a JWT
* Restore FullPageWebView functionality to signup screens

Closes #1803
Closes #1934
2024-08-13 14:45:37 -07:00
Amanda Bullington
cf70a4358a Move modules from jest setup to __mocks__ (#1949)
* Get a few mocks working in __mocks__ folder

* Move more mocks into __mocks__

* Move mocks

* Move zustand mock

* Add more mocks to __mocks__

* More mocks

* Move more files to __mocks__ and audit existing mocks

* Mock react navigation in __mocks__

* Restore test to help with imports after jest env torn down

* Add fake timer to integration test with userEvent

* Add RN paper mock
2024-08-11 11:27:52 -07:00
Amanda Bullington
cf896a3a17 Toolbar upload status refreshes when user returns to MyObs (#1942)
* Write some failing navigation tests for MyObs navigation

* Add one more failing test to check for empty screen after all obs are deleted

* Update what happens on blur

* Changes to focus effect

* Revert "Changes to focus effect"

This reverts commit c779504cdf.

* Test: toolbar status reset when user leaves screen

* Unmock useFocusEffect in Jest; fix tests

* Minor nav mocking updates

* Fix import
2024-08-09 11:21:25 -07:00
Ken-ichi
bca4872def Ensure device stays awake during uploading can sleep after (#1939)
* Fix previous state in which it was never really allowed to sleep again after
  upload finished
* Rename `uploadObservations` to `startUploadObservations` to accurately
  describe what it does
* Minor improvements in ts typing
2024-08-08 14:46:18 -07:00
Ken-ichi
ea0afb87a9 Don't restart location fetch when view blurred (#1936)
* Don't restart location fetch when view blurred
* Removed what looked like an unnecessary callback in DisplayTaxonName
* Refactored tests
2024-08-07 17:33:22 -07:00
Johannes Klein
c81201cffa 1843 offline taxon search (#1864)
* realm TS

* provider/contexts TS

* todo

* useIconicTaxa TS

* Refactor taxa list into component

* Use TaxaList for taxon search screen

* Refactor render decision

* Use flex 1 container instead of footer

* Show offline notice for query without results

Refetch taxa when going back online

* Update required because of useIsConnected

* Await typing in test

* Mock useIconicTaxa

* Add tests to taxon search

* emitUploadProgress TS

* createUTFPosition TS

* convertScores TS

* Add field type

* Fix imports
2024-08-03 15:13:13 +02:00
Amanda Bullington
b8c08ae2d4 Reassure tests (#1914)
* Basic performance tests for key components

* Fix MyObs integration test with fake timers and less rerendering
2024-08-02 19:07:41 -07:00
Amanda Bullington
a781dca7c0 Settings: hide localization section & show internet errors (#1895)
* Hide App Language section in settings; hide locale check on app start

* Add Settings jest test
2024-07-31 10:38:37 -07:00
Amanda Bullington
9a0581670f Consolidate key-value stores (#1879)
* Switch to zustand mmkv storage instead of async storage

* Update hooks using async storage

* Remove asyncstorage

* Remove LocalPreferences

* Prevent collision upserting from infinite scroll & sync remote obs
2024-07-30 09:12:26 -07:00
Amanda Bullington
182196a205 Change url for connectivity check (#1868)
* Change connectivity url to ping inat; remove unnecessary useIsConnected hook; closes #1770

* Ensure inaturalist.org/ping is being pinged

* Fix e2e tests by using isConnected, not isInternetReachable
2024-07-26 20:16:32 -07:00
Amanda Bullington
b61ff38f7c Reset stack when user navigates from AddObsModal (#1858)
* Reset navigation stack when user navigates from AddObsModal; closes #1857

* Fix AddObs nav test
2024-07-25 09:58:54 -07:00
Amanda Bullington
5c1a5142a4 Load suggestions with location after permission granted (#1846)
* Refactor into useReducer

* Use reducer for Suggestions

* Offline working

* Progress on getting location permissions button to work as expected

* Code improvements

* Fix photo deletion test

* Fix AICamera nav test

* Ensure suggestions location permission uses location immediately

* Loading wheel fixes

* Fix photo deletion test

* Use online result to advance to obsedit in PhotoDeletion

* Fix test by using online mock
2024-07-24 22:19:05 -07:00
Amanda Bullington
fbd22f9e9d Fix location toggle on Suggestions (#1833)
* Fix Suggestions test & create test for online suggestions with location

* Fetch location according to toggle

* Update tests

* Show loading & remove prev queries when toggling location

* Fix loading test
2024-07-22 06:44:35 -07:00
Amanda Bullington
c3c98deeda Create new obs when backing out to AICamera (#1832)
* Write test to confirm only one obs photo added when backing out of AICamera

* Create new obs when backing out to AICamera; closes #1822
2024-07-19 09:57:16 -07:00
Amanda Bullington
59959317d7 Fix photo deletion test (#1830) 2024-07-19 07:47:59 -07:00
Amanda Bullington
92cafdde83 Land user on Suggestions when one photo imported (#1824)
* Create navigation test for PhotoGallery

* Code and test land user on Suggestions when one photo imported
2024-07-16 14:47:02 -07:00
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
budowski
656a1c6bf3 #1104 - when searching for taxon, use the general /search endpoint (#1717)
* #1104 - Taxon search - use general search endpoint (not taxa/search endpoint)

* Linter fixes

* Updated inaturalistjs library to v2.12.0

* Test fix

* Further test fixes

* Linter fixes
2024-07-15 17:34:00 -07:00
Ken-ichi
934e486402 Hide skip ID button on Suggestions sometimes (#1791)
* Hide skip ID button on Suggestions sometimes

We only want to show the text "Add an ID later" when one needs to move forward
without adding an ID, so this hides it

* When reached from ObsDetails (you can go back)
* When reaced from ObsEdit and there is an existing identification
  (you've already added an ID so if you're editing it you need to choose a
  taxon or back out)

* Update test

---------

Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
2024-07-12 13:34:27 +02:00
Johannes Klein
a52996f535 Changes to the way permissions are asked for (#1793)
* Replace name in permission requests

* TakePhoto TS

* PermissionGate TS

* Type

* PermissionGateContainer TS

* Interface

* Types

* LocationGate TS

* Remove LocationPermissionGate from Camera

* Remove write only permission

* Type

* ObsPhotoSelectionList TS

* Code style

* Show the improve with location button

* Create useLocationPermission.tsx

* Use new hook on suggestions

* Doc comment

* Use new hook in camera view

* Add strings

* Refactor Explore main content

* Use permission hook on RootExplore

* Add no location permission component

* Rename function

* Prop request permissions and use with button

* Default to Nearby label

* Remove Node type

* Projects TS

* Use useLocationPermission hook in projects screen

* Add string

* Prop permission down

* Refactor list render

* Refactor tab id into enum

* Tab type

* On nearby tab if without permission show button to prompt

* Leftovers

* Remove location permission gate from ObsEdit

* Use location permission hook on evidence section

* SearchBar TS

* Do not autoFocus on search bar in location picker.

Closes #1743

* Update type

* LocationSearch TS

* Show location permission gate on location picker's mount

* Add location permission to CurrentLocationButton

* Remove unused props of Map

* Remove unused exports from useMapLocation

* Migration

* Revert "Show location permission gate on location picker's mount"

This reverts commit 30ff75698c53d54d0b14cd2bd629f7155b743bf8.

* Add callbacks to useLocationPermission hook

* Show location permission ask on Obs Edit

* Remove unused string

* Reset explore filters should set location always to worldwide

* Add helper function to show place text in Explore

* Remove unused state of filter modal

* Show place text in filters modal with helper

* Show location permission button only for Nearby explore state

* Add a placeMode state

* Do not send placeMode to API

* Also treat limited permission as yes

* useLocationPermission in ExploreLocationSearch

* Refactor to setting place mode

Instead of logic based on the translated text of the place_guess string that is stored in ExploreContext, we are switching to an enum state that signifies which mode to show on explore:
1.) Nearby: Filters explore results based on the user's location. This also has a state without location permission that does not query the API.
2.) Place: Filtering by a specific place (as retrieved by /places API).
3.) Worldwide: Retrieve worldwide results, i.e. not having a place filter set.
4.) Map area: Filtering explore results precisely to the map rectangle shown on the explore map.

* Remove import from test

* Remove export

* Use blocked title only for blocked permission asks

* Move gallery permission container to Tab navigator as are the others

* Add gallery save title

* Split location permission explanation into two

* Update strings.ftl

* Only nav to location picker if permission was not  granted

* Check permission on app being foregrounded

* The location permission part is handled by useLocationPermission

* Do not store permission result in hook

* Use hasPermission from permissions hook

* Update fetchUserLocation.e2e-mock

* Move hook one higher

* Show user location if permission is given

* PermissionGate callbacks should use useCallback

* Add permission hook to map usage

* Fix test

* Update layout to be asserted

* Add location permission hook to Explore

* Remove console.log

* Few TS fixes

* Indentation

* Remove superficial check

* Update Podfile.lock
2024-07-12 11:00:24 +02:00
Ken-ichi
fe0229291e Restore photo deletion (#1789)
* Restore photo deletion
* Rename methods for accessing media files
* Added integration test for photo deletion
* Cleaned up some accessibility labels

Closes #1429
2024-07-10 15:23:53 -07:00
Amanda Bullington
ce39b03495 Changes to showing select taxon button & vision attribute; closes #1773 (#1790) 2024-07-10 13:18:27 -07:00
Amanda Bullington
452ebcbdf4 Navigate user correctly with selected ID when coming from TaxonDetails (#1766) 2024-07-03 16:29:46 -07:00
Ken-ichi
591d6dc0e5 DQA voting status (#1757)
* Readability / cleanup updates for DQA
* Moved from unnecessary use of useMutation to useQuery for fetching metrics
* Log API errors
* Avoid warnings in tests about updates outside of act
* Update header in DQA after vote changes quality grade

Closes #1504
2024-07-03 10:08:47 -07:00
Amanda Bullington
fca249c655 Show bottom sheet before confirming suggested ID in ObsDetails -> Suggestions flow (#1728)
* Allow user to open add comment sheet from another modal

* Code cleanup

* Add suggest ID bottom sheet to test

* Change names of test IDs in signed in e2e test for TextInputSheet
2024-07-01 16:05:56 -07:00
Amanda Bullington
cc8b610f2f Web parity for displaying top suggestion (#1721)
* Fix suggestions tests; use SectionList for suggestions

* Comment out offline test, Suggestions
2024-06-27 17:29:33 -07:00
Amanda Bullington
545a068ab9 Use loading wheel when switching selected photo; closes #1668 (#1709) 2024-06-25 10:01:44 -07:00
Amanda Bullington
d9d7a6ff06 Suggestions screen UI fixes, location toggle, and offline reloading state (#1708)
* UI changes to suggestions screen

* Update offline suggestions UI and allow refetch

* Allow user to search online suggestions with and without evidence location

* Add improve location button and refactor header

* Use loading screen correctly between location/ignore location

* Hide location permission button and code cleanup

* Fix test for suggestions changes
2024-06-24 16:26:40 -07:00
Amanda Bullington
76824636ef Human treatment in suggestions (#1693)
* Fix human suggestions

* Fix human test

* Fix tests
2024-06-18 12:39:59 -07:00
Ken-ichi Ueda
15029631f3 Removed redundant cleanup, hopefully deflakeing tests a bit 2024-06-13 10:43:46 -07:00
Ken-ichi
f3bcec2d2e Continuous location fetch in the cameras (#1673)
* Fetch location continuously in cameras until accuracy falls below threshold
* Unit test for useUserLocation
* Added untilAcc option to useUserLocation
* Bugfix: ObsEdit was not always fetching location for new camera photos

Closes #1340
2024-06-12 11:18:12 -07:00
Amanda Bullington
3b35e072b1 Default to first photo in Suggestions (#1649)
* Default to first photo in Suggestions; closes

* Fix tests for default selection on Suggestions
2024-06-05 12:12:14 -07:00
Ken-ichi
8dbbca04d9 Fail upload when network request failed (#1651)
* Fixed cancel upload button
* Uploads will timeout after 15s
* Moved MyObs tests unrelated to unsynced into the synced block
2024-06-04 18:23:59 -07:00
Amanda Bullington
806f786b2f Limit suggestions displayed when human suggestion is in suggestions list (#1650)
* Filter suggestions when human is a result; closes #1505

* Fix tests
2024-06-04 16:30:01 -07:00
Amanda Bullington
829fa70f34 Make explore view sticky; default to species view (#1647)
* Remove tab bar when sharing photos into app; closes #1645

* Make explore view sticky with species as default view; closes #1614

* Fix Explore integration test; use default species view
2024-06-04 15:07:15 -07:00
Amanda Bullington
aa167c669d Refactor upload functionality into hook/zustand (#1606)
* Refactor upload code into hook and zustand slice

* Create a single source of truth for toolbar and individual progress

* Fix unit tests

* Fix more tests

* Continue trying to simplify upload progress and status code

* Continued overhaul of upload code

* Fix exclamation point in Toolbar

* Fix total toolbar progress

* Fix tests

* Update snapshots

* Code cleanup

* Update MyObs test

* Fix most tests by not deleting realm

* Keep attempting to make toolbar text clear in subsequent tests

* Mock Zustand and reset state after all tests

In theory this should make testing with Zustand simpler. The real kicker is
that resetting state will fail if we're not careful about manually replacing
nested objects in Zustand state updates.

* Bugfix: removeAllFilesFromDirectory works with File objects, not raw paths

* Update status text when uploads canceled

* Only show red exclamation rotating icon after all uploads attempted

* Fix progress bar with zustand nested object

* Fix toolbar progress

---------

Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
2024-05-30 20:36:50 -07:00
Ken-ichi Ueda
0e6d5d3d1f Test fix: integration tests with unique realms must pass that realm to signIn 2024-05-25 23:00:02 -07:00
Johannes Klein
476dc7d560 1569 ai camera zoom (#1607)
* Add null check

* Update CameraWithDevice.tsx

* Refactor TS hook

* Reset zoom on navigation events
2024-05-24 12:33:00 +02:00
Amanda Bullington
2d74c72e37 Fetch remotely deleted observations automatically (#1602)
* Start automatically syncing remotely deleted observations

* Fix query invalidation in ObsDetails

* Fix deletion process

* Call deletions once every time a user lands on MyObs

* Fix deletion tests

* Fix tests
2024-05-22 20:34:57 -07:00
budowski
137f9f1b03 Display taxon name according to user settings (#1496)
* display taxon name according to user settings
* Cleaned up Taxonomy style a bit

---------

Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
2024-05-21 20:45:34 -07:00
Amanda Bullington
b12057cbc3 Clear synced photoUploads paths (#1527)
* Clear synced photoUploads paths

* Add mock for useQuery
2024-05-10 16:30:49 -07:00
Ken-ichi
0a1069fce9 Show notifications obs photos for remote obs (#1519)
---------

Co-authored-by: Angie Ta <angie@inaturalist.org>
2024-05-09 20:31:04 -07:00
Amanda Bullington
917f9da7be Clear cached photos for computervision/score_image (#1518)
* Refactor image-resizer into helper function for easy logging

* Create a folder for computerVisionSuggestions

* Display iNat app directories in Debug

* Delete old images from computerVisionSuggestions/ when navigating away from Suggestions

* Fix online suggestions API call

* Fix tests

* Clear computer vision directory when landing on Suggestions screen
2024-05-09 13:32:52 -07:00
Ken-ichi Ueda
8f0b5f654f Oh yeah tests 2024-05-08 17:11:25 -07:00
budowski
1cc3b7300d Always use latest added photo on suggestions (#1421)
* Close #1309 - suggestions screen - always use latest added photo; AR camera - replace all existing photos
* #1421 - in case of backing out from suggestions screen, back to AI camera, delete previous obs photo

---------

Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
2024-05-06 18:04:13 -07:00
Ken-ichi
a7a2e1c10f Show up-to-date metadata for observations immediately after upload (#1497)
This fetches a remote copy of each observation after upload to make sure the
client has the freshest copy of the data immediately.
2024-05-06 17:50:46 -07:00
Ken-ichi Ueda
9bd856f636 Bugfix: photos were not appearing on ObsEdit from ObsDetails 2024-05-03 21:35:46 -07:00