Commit Graph

314 Commits

Author SHA1 Message Date
Amanda Bullington
2bce3aa784 Prevent PhotoCount from rendering with no count on scroll (#1112)
* Remove ForeignObject from SVG to prevent PhotoCount from rendering blank; closes #1073

* Update snapshot

* Fix styling for photo count large sizes

* Update snapshots
2024-02-05 14:12:02 -08:00
Amanda Bullington
a3b1371682 Fix agree button taxon id (#1105)
* Fix agree button taxon_id and write test; closes #1036

* Code cleanup
2024-02-01 20:58:29 -08:00
Amanda Bullington
b69e5a9923 Reset IconicTaxonChooser when navigating multiple observations (#1100)
* Reset IconicTaxonChooser when navigating multiple observations; closes #1092

* Fix test undefined key error

* Remove console log
2024-01-31 15:42:22 -08:00
Amanda Bullington
ededfe82d1 Show ObsStatus in correct position after animating, ObsGridItem (#1099)
* Show ObsStatus in correct position after animating upload; closes #1056

* Update snapshots
2024-01-31 10:06:58 -08:00
Johannes Klein
49e9339c51 ObsDetail media masonry layout (#1085)
* Simple masonry layout

* Scrollable masonry

* Render SoundSlide in Masonry

* Fix previos commit

* Fix param name

* Optional style for photo slide

* Rename

* Use photo slide

* Open media viewer on press

* Rename components

* Rename component

* Add test for tablet obs media
2024-01-26 11:57:42 +01:00
Amanda Bullington
bb6a180527 Observation deletion on MyObservations (#1082)
* Delete local & remote observations on MyObs; show progress

* Update tests & add test for delete hook

* Fix test failures

* Add tests for deletion strings in Toolbar; add test for multiple deletion

* Clear deletion text on toolbar when user navigates away from MyObs

* Add a check in e2e test to make sure observation was deleted
2024-01-24 17:32:11 -08:00
Johannes Klein
47b3525228 Announcements (#1081)
* Update iNatjs

* Add webshell dependency

* Basic announcement fetching component

* Styling

* Dismiss function

* Error handling TODO

* Add param

* React to link presses

* Missing code

* Add unit test

* Add string

* Refactor search query and dismiss to use react-query

* Activity indicator when refetching

* Add query provider to test

* Mock component in other integration tests

* Move user agent to api

* Throw error instead of logging
2024-01-24 22:22:50 +01:00
Johannes Klein
60de855f6b Explore filters (#1067)
* Remove Explore Filters screen

* State for Explore filters modal

* Accept modal state in Header to open modal

* Basic explore filters modal

* Save taxon object to explore state on update

* Update types expected

* Pass state and update function into filters modal

* Receive new props

* Destructure taxon from props

* Restyle header View

* Add main Heading

* Add taxon section

* Restyle modal header

* Add numbers badge component

* TaxonResult add prop for general on press

* Make TaxonResult checkmark optional

* DisplayTaxon can receive children as right-side component

* Refactor ExploreFilters component tree

* Move header out of scroll view

* Update ExploreFilters.js

* Update ExploreFilters.js

* Add icon to display taxon

* Update ExploreFilters.js

* Add basic taxon search screen

* Use taxon result without checkmark, send taxon to Explore screen

* Add string

* Accept taxon on explore screen

* Add a dummy screen for explore location search

* Add type

* Store place in state when received as route param

* Basic explore filters location section

* Add strings

* Move filter modal to separate component, add sort by props

* Add screen for testing purposes

Because atm we can not have two modals open at the same time, I move filters to a separate screen for testing the other modals.

* Add initial filter params and do not pass down undefined ones

* Pass function to update sort by down

* Create SortBySheet.js

* Navigate to test screen instead

* Sort by button text

* Add default filters definition

* Call reset function if filters are not default

* Add prop and function to reset

* Add user search screen

* Move search screens

* Move references

* Replace list with flash list

* Add item separator

* Remove footer

* Return user to Explore

* On press handle for user list item

* Fix wrong imports

* If a user is in prop show user icon and edit button instead

* Refactor display taxon to be inside a Pressable

* Missing import

* Receive user in explore rout params

* Quality grade section header

* Placeholder

* Add TODO

* Calculate number of filters set

* Only send user id to explore screen

* Do send back user object, filter out user_id

* Add project section

* Refactor project list item into standalone component

* Change initial value to undefined

* Add project search screen

* Remove loading state

* Show project in filter modal

* If project is in param set it to state

* Add Checkboxes to filter modal

* Remove comment

* Taxonomic Ranks section UI

* Use props for checkboxes

* Update ExploreContainer.js

* Calculate actual query param

* Is Most Faved possible?

* Actually set sort by query params

* Save hrank and lrank to explore state, prop down

* Update ExploreContainer.js

* Show ranks in button text

* Radio modal to test taxonomic ranks

* Add sticky toolbar

* Update strings.ftl

* Date observed section bottom sheet

* Date observed prop

* Change padding

* Date observed all UI

* Taxonomic ranks section

* Add todo

* Refactor open sheets state

* Update button

* Add exact date picker sections

* Store dates in state

* Update strings.ftl

* Refactor function name

* Refactor constants

* Reset date states on mode change

* Set new months to state on change

* Configuration for showing months checkboxes

* Receive and update months with checkboxes

* Refactor RadioButton sheet to export radio button row

* Add Media section UI

* Add media state to Explore

* Start with Establishment Means section

* Add checkbox texts

* Add states

* Functions to update state

* Add sort by param for most faved

* Spacing for checkboxes

* Wild Status section UI

* Wild status state

* Reviewed UI section

* Reviewed state

* Set current user id as viewer_id for review true to work

* Remove testing code

* Photo licensing UI section

* Photo license state

* Prop down photo license update, use param in search

Forgotten in previous commit

* Unused prop

* Add noStatus state

* Change Establishment Means status to TODO

* Add TODO text

* Console log for testing params

* After rebase from main this was necessary

* Simple switch between two UIs

* Simple explore context

* Lift Provider one up

* Copy over photo license to new provider

* Copy over review filter

* Refactor to use enum

* Copy over wild status, and enum refactors

* Refactor some more state

* Remove unused navigation

* Refactor one state

* Refactor some more state

* Refactor some more state

* Remove testing screen

* Refactor some more state and derived state

* Do send over project as param from Project Details

* Update FilterModal.js

* Rename components

* Remove unused param handling

* Add keys

* Remove substring for key

* lrank and hrank combined counts as one only

* Use the correct constants

* Add key

* Fix issue with button text

* Add View Wrapper for filters section

* UI cosmetics

* Compare current filters state to a snapshot

* Change button level to focus

* Add context action to revert to snapshot

* Confirmation dialog strings

* Add confirmation sheet

* Send current user along to Explore from Home Header

Closes #887

* Date bottom sheets texts

* Show texts in modal

* Set search to worldwide on param received

* Send taxon as param to Explore from Taxon details screen

Closes #889

* Show all observations worldwide of project

* On species view pressed should navigate to explore species view

Closes #893

* Go to explore from users profile

* Navigate to species view from user profile

Closes #894

* Enable unclear filters

* Add taxon to context

* Use context for explore params further down the tree

* Refactor one state

* Remove unused action

* Remove unused state

* Refactor function

* Refactor state

* Refactor place_id, which concludes reducer refactor

* Refactor names

* Do not use key inside context's state

* Add a11y label

* Remove duplicate test ID

* Remove superfluous component

* Create ProjectListItem.test.js

* Add failing filter modal test

* Remove log

* Rename function

* Months strings

* Remove todo

* A11y labels

* Remove TODOs

* A11y label

* A11y label

* Refactor taxon search hook

* Update FilterModal.js

* A11y labels

* A11y not possible in react-native-paper lead to test fails

* Update TaxonSearch.test.js

* Add dropshadow

* Another dropshadow

* Add TODO text to UI elements that are not finished

* Reverse order

* Refactor constants

* Revert "Refactor constants"

This reverts commit 2f52e936d6.

* Refactor to use constants

* Refactor constants use

* Refactor constant use

* Refactor constants use

* Refactor constants use

* Refactor constants use

* Refactor code

* Add validation of date format

* Correct type for snapshot action

* Add taxonomic rank enum

* Taxon can be undefined

* More precise type

* Fix wrong string usage

* Refactor radio button row component

* Refactor ProjectListItem import

* Example usage of new ui elements

* Pull sort by sheet back inside filter modal

* Rename params

* Add useEffect dependency

* Rename param

* Fix broken function
2024-01-23 18:08:36 +01:00
Ken-ichi
e6b5cb8aa6 Obs details sounds (#1062)
* Extracted non-photo stuff from PhotoDisplay
* Separate component for FaveButton
* Prevent faves while signed out
* Separate component for nav header
* Stick nav header while scrolling until tabs
* Nav header has slight gradient for visibility over white content
* Renamed ObsDetails media components so they're not focused on photos
* Data and layout changes leading up to sound player on ObsDetail
* Add sound player to ObsDetails
* Swiping away while playing should pause playback
* Swiping back to sound and playing again should resume where you left off
* Allow viewing media while offline (images may be cached)
* Stop playback when navigating away from ObsDetails
* Fetch sounds in Explore so we can show sound icon
* Map all observation objects in explore with Realm-ish attributes
2024-01-22 13:12:01 -08:00
Ken-ichi
4e42ebc262 Community taxon opt out notice (#1060)
* Shows notice when user or obs is opted out of Community Taxon on ObsDetails
  (closes #882)
* Unifies mapApiToRealm methods around a single interface
* Ensure that the remote obs used on ObsDetail is normalized to look like a
  local obs
* Ensure some tests that use signIn() have isolated Realm instances
* Update current user's obs from ObsDetails (closes #1045) 
* Fixed CC0 license display on ObsDetails (was not actually related to
  updating the local copy of the obs
2024-01-18 20:16:30 -08:00
Ken-ichi Ueda
6b37ca1d2b Several minor fixes
* use showSwitchMapTypeButton option in Location Picker and ObsDetails map
* title of comment bottom sheet to "Add Comment"
* fixed position of current location button on map
* text of geoprivacy on ObsDetails to "Geoprivacy: Open"
* don't load offline suggestions while loading online
2024-01-16 17:52:23 -08:00
Amanda Bullington
51a3d171b2 Limit display taxon name on ObsGridItem (#1042)
* Ellipsize long common name text, ObsGridItem; closes #913

* Update snapshots
2024-01-16 16:52:10 -08:00
Ken-ichi
b815f451ea Offline fixes (#1025)
* Changed the default React Query retry handler to be synchronous; being async
  meant it returned a promise, which React Query interpreted as true-ish,
  which meant it retried forever
* React Query retry handler should log info about its query key, which should
  make those problems a bit easier to debug given a log
* Prevent useObservationUpdates from throwing errors when network requests
  fail, which they always do while offline
* Added our own ErrorBoundary that shows a component trace
* Prevent several uses of useAuthenticatedRequest when not online
* Work around bug in vision-camera-plugin-inatvision where it can't get
  dimensions of photos in Android
* Actually throw errors when vision-camera-plugin-inatvision's predictImage
  throws unexpected errors
* Allow online suggestions while signed out using anonymous JWT
2024-01-11 17:18:04 -08:00
Amanda Bullington
3e62df7bd4 Render correct photo count when combining multiple photos (#1024)
* Update PhotoCount component so correct count renders in GroupPhotos; closes #1015

* Add tests for combining photos in group photos container

* Add test for separating photos

* Add comment to PhotoCount component
2024-01-11 16:31:21 -08:00
Amanda Bullington
30a5a9fbec Use safe area insets to style tab bar padding (#1021)
* Use safe area insets to style tab bar padding; closes #945

* Update snapshot
2024-01-11 10:57:54 -08:00
Angie
379a8747b2 Merge pull request #1020 from inaturalist/770-dqa-screen-shows-an-error-modal-on-navigating-there
770 dqa screen shows an error modal on navigating there
2024-01-10 19:21:25 -08:00
Amanda Bullington
09b225a1e6 Pause button dark mode until post-MVP (#1019)
* Pause button dark mode until post-MVP; closes #994

* Update snapshots
2024-01-10 17:07:36 -08:00
Angie Ta
75c3894531 Merge branch 'main' into 770-dqa-screen-shows-an-error-modal-on-navigating-there 2024-01-10 16:41:31 -08:00
Amanda Bullington
7f6a25fa9f Show person icon as fallback when user is offline; closes #946 (#1017) 2024-01-10 14:34:10 -08:00
Amanda Bullington
d0cf6751cf Render loading wheel until data is available for FlashList (#1016)
* Render loading wheel until data is available for FlashList; closes #756

* Fix: show loading wheel in Explore before data rendered

* Fix test
2024-01-10 14:33:59 -08:00
Angie Ta
c5a0b9db64 Bug fix and cleanup code into DQAContainer, update tests 2024-01-09 22:25:33 -08:00
Amanda Bullington
1d23c1f1fa Make entire dropdown for notes tappable; closes #860 (#1012) 2024-01-09 18:30:29 -08:00
Ken-ichi
b18fd0408b Crash when uploading after deleting unsynced observation (#1010)
Syncing was broken when an unsynced obs was deleted

The main problem here was that MyObs state has a list of observations that
need upload, but since it was a plain array of Realm objects it crashed when
one of those objects was invalid, which happened after deletion. This fix
isn't great: it just makes it so the thing in state is a Realm.Results
object, which will update dynamically when its underlying data changes. We
could also JSONify what we have in state, but then you get into problems of
nested objects and deep JSONification.

Also
* Delete local obs if remote doesn't exist
* Bugfix: ObsDetail tried to mark non-existent remote obs as viewed
* Tried to handle react query retries better
2024-01-09 14:47:07 -08:00
Ken-ichi
ae9b2d2040 Minor style fixes for ObsDetails (#1011)
* Renamed CommunityTaxon to ObsDetailsHeader since it has more info than just the community taxon
* Made tabs stick on scroll instead of header
* Removed weird spacer element at the bottom of the activity
2024-01-09 13:45:29 -08:00
Amanda Bullington
f0aac96468 Agree button: match web functionality (#1009)
* Only show agree button on first taxon displayed; show on all ranks

* Show agree button only on first taxon displayed; show agree for ranks above species; closes #566

* Fix test
2024-01-09 12:39:58 -08:00
Amanda Bullington
9fd47453a1 Add Photo Permission Gate (#999)
* Add permission gate for adding photos

* Add permission gate for adding photos to library

* Show permission gate first time camera loads; allow navigation on future loads

* Show PermissionGate only when checkmark tapped

* Show permission gate when checkmark tapped

* Nav to obs edit when permission granted

* Fix ARCamera tests

* Update file names; remove unused files

* Rename method from usePrepareState hook
2024-01-09 11:18:10 -08:00
Amanda Bullington
21f83d7f58 Only show current ids in IdentificationCount; closes #995 (#1007) 2024-01-09 11:15:41 -08:00
Angie Ta
3de96e9184 Merge branch 'main' into 899-notifications-screen 2024-01-07 21:46:11 -08:00
Angie Ta
2e038abdeb Merge branch 'main' into 899-notifications-screen 2024-01-07 18:37:58 -08:00
Ken-ichi
799e0f4c4f Restore tests removed in recent suggeston fixes (#1001)
* Restored Suggestions navigation tests
* Restored SuggestionsWithSyncedObs.test.js tests
* Mocked vision-camera-plugin-inatvision instead of useOfflineSuggestions
* Removed unnecessarily complex object from navigation params

There were a lot of issues here, but the main ones (I think) were related to
rendering all the navigators and waiting for asynchronous stuff to happen
before proceeding with the test.
2024-01-05 19:48:46 -08:00
Angie Ta
ee74db5f1f Notifications Screen, observation notifications, no infinite scroll or user notifications 2024-01-05 01:50:25 -08:00
Amanda Bullington
dc19cac1f5 Rename test and component to CommunityTaxon (#985) 2023-12-19 11:16:49 -08:00
Amanda Bullington
cd18e970d7 Taxonomy component, TaxonDetails (#978)
* Style taxonomy ancestors and current taxon

* Link to TaxonDetails pages

* Add children to TaxonDetails taxonomy

* Add children taxa toggle

* Display children after button tap

* Wrap text'

* Fix italic font size in DisplayTaxonName

* Add tests to Taxonomy component

* Change Taxonomy test
2023-12-19 11:04:30 -08:00
budowski
6e944f68bb 856 reordering photos (#979)
* #856 - support for modifying and updating observation photos locally/remotely; reordering of photos fix

* ESLint fix

* Fixed tests

* Fixed tests

* Fixes related to tests
2023-12-18 15:27:27 -08:00
Ken-ichi Ueda
7840ba2751 Bugfix: could not add an ID using Suggestions from Explore 2023-12-15 20:50:37 -08:00
Ken-ichi
f7dc08a704 Suggestions fixes (#972)
* Bugfix: TaxonDetails was crashing if it received a null taxon
* Send lat and lng instead of latitude and longitude to the score_image
  endpoint
* Show offline suggestions when you are offline
* Show notice when viewing offline suggestions
* Moved code unique to useOnlineSuggestions into that file
* Ensure we use a medium size image to get suggestions when dealing with
  remote URLs
* More logging around React Query retries
* Use default retry logic for useAuthenticatedQuery
* Made a module-resolver shortcut for tests
* Move offline notice above top suggestion; hide when offlines exist but onlines do too
2023-12-15 19:58:12 -08:00
Amanda Bullington
b33119f5a4 Update checkboxes & fix tests (#971)
* Update checkboxes & fix tests

* Fix accessibility/tests

* Update pods
2023-12-15 09:36:40 +01:00
Ken-ichi
8119a3e5ca Taxon detail media viewer (#966)
* Access MediaViewer from TaxonDetails
* Added our own presets for ActivityIndicator
* TaxonDetail should show a local taxon if one is available
* Made it a little easier to import the custom logger
* Refactored MediaViewer to accept photo-like objects instead of URIs
* Added license / attribution button to MediaViewer
* Moved delete button into MainPhotoDisplay so each photo has its own button
  and it can be laid out relative to its photo
* Add custom header to MediaViewer when accessed from TaxonDetial
* Allow DisplayTaxonName to accept custom text components as props
* Added darker bg to photo on TaxonDetail to make title more legible
2023-12-14 17:18:41 -08:00
Amanda Bullington
73d2e9944b Suggestions first looks for online, then offline predictions; fixed tests to reflect this (#968) 2023-12-14 12:42:10 -08:00
Amanda Bullington
35f87cce43 Update title for unsynced observations, ObsEdit (#965)
* Show edit title; add tests; set current obs before nav to ObsEdit screen

* Use edit title when obs is not synced; rewrite ObsEdit tests to show nav works correctly with useStore

* Remove uuid in params to ObsEdit; no longer needed

* Fix e2e by ensuring ObsEdit doesn't rerender with deleted obs
2023-12-14 11:46:46 -08:00
Amanda Bullington
5c98d6665c Checkbox shared component (#963)
* Create shared checkbox component

* Add tests to Checkbox component

* Add snapshot and fix space in fill color
2023-12-14 10:01:48 -08:00
Amanda Bullington
04af1720d1 Show save button when user logged out; add BottomButtons tests (#964) 2023-12-13 15:48:47 -08:00
Ken-ichi Ueda
0ec3f02d42 Test fix
It's not clear to me why this fixes the TaxonSearch test, which seems to fail
even when you mock those API responses with empty data.
2023-12-13 11:16:34 -08:00
Amanda Bullington
f32a8812f5 Offline suggestions (#961)
* Use offline model for displaying sugggestions

* Simplify Suggestions/TaxonSearch screens using hooks

* Use updateObsKeys function from useStore

* Simplify code and fix unit tests

* Fix tests for offline predictions

* Fix faker urls

* Fetch remote taxa to display taxon photos in Suggestions

* Fix useTaxon code and test

* Use online vision results as backup for offline results

* Fix tests and add test for online predictions

* Use Flatlist for Suggestions and fix tests

* Move API call out of Attribution and fix test

* Fix tests

* Fix test warnings
2023-12-13 10:11:21 -08:00
Ken-ichi
d3f1f8ed6e View photos in MediaViewer from ObsDetail (#962)
* Unit tests for MediaViewer
* Added editable prop to MediaViewer
* MediaViewer navigation test
* Made MediaViewer a modal
2023-12-13 09:33:06 -08:00
Amanda Bullington
bded964b0a Add vision property to AR camera & suggestions for observation/id creation (#952)
* Add vision param to identification create; test vision false on TaxonSearch and true elsewhere

* Test that vision attribute is only used from Suggestions screen

* Add owners_identification_from_vision attribute to observations

* Fixes for vision attribute

* Make sure taxon is applied from Suggestions/TaxonSearch via ObsEdit

* Fix for ids vision

* Fix Suggestions tests
2023-12-07 11:07:47 -08:00
Johannes Klein
a59d9f567f Image recognition from local image (#953)
* Use different plugin branch

* Predict taxa for local image url in suggestions screen

WIP: This is working on iOS. On Android there is a crash. The pexample app in the plugin repository works on Android, so I assume the crash is happening because of some things here. Maybe the wrong url is passed in.
Anyway, I am only adding prediction for the local image and haven't wired up the results to state or UI.

* Use latest plugin commit

* Refactor cv model version to be imported from helper

* Refactor image prediction function call into helper module

* Mock for new vision plugin function
2023-12-06 00:38:42 +01:00
Amanda Bullington
808cbee452 Replace ObsEditProvider with zustand for global state management (#948)
* Add zustand to app

* Begin replacing ObsEditProvider with zustand for global state

* Use store and add tests

* Fix bugs

* Add test to check for deleted photos in StandardCamera

* Make sure evidence is only added to current observation; submit comment with ID on ObsDetail

* Fix ObsEditWithoutProvider tests

* Move store to where it's needed

* Fix tests

* Await evidence being added to obsPhotos from camera

* Add a note about slices to useStore
2023-12-05 14:10:00 -08:00
Ken-ichi
0c7c807b56 Realm & other bugfixes (#950)
* Updated faker; fixed bug w/ DisplayTaxonName trying to modify a Realm object
* Fixed crash going from ObsDetail to ObsEdit
* Fixed bug fetching observation dates (not clear how this didn't instantly crash_
* Bugfix: MyObs observation fetch was failing on taxa w/ float rank_level
2023-12-04 13:47:00 -08:00
Johannes Klein
66a0eda08d Dark mode styling button changes (#938)
* Add dark mode button snapshot tests

* Refactor dark mode styles to be a single function call

* Remove neutral button dark mode styling
2023-11-30 23:03:40 +01:00