* Build UI for loading state between AI->Match
* Make designs for AI loading screen match Figma
* Selective changes from bf872e2d4f
* Selective changes from 9ed81f99c7
* Selective changes from 4bc7c3474f
* Selective changes from 4916cf70fb
* Replace loading state from store with props
* Add some types
* Make component agnostic of what skipping does
* Remove debug info
* Add more debug data
* Elongate loading state if online errors out and offline is still loading in sequence
* Remove underline
This classname had no effect as far as I can tell.
* Hide skip button when it has no function
* Remove a comment that slipped through partial cherry-picking
* Split apart online and offline fetch status
Weird but even though they start in sequence it happened to me that online error was received after offline was fetched successfully. So, Let's split apart online and offline loading state.
---------
Co-authored-by: Amanda Bullington <albullington@gmail.com>
* Do not show double gap for when no zoom button to show
* Add location-off icon
* Basic location button for camera
* Do not show new button in default mode
* In advanced mode using geomodel is opt-in with the button state
* Basic info box layout
* Add opacity
* Update strings.ftl
* Use location if present
* If no location permission given, show permission gate on pressing use location
* Minor restyle for offline text
* Refactor LocationStatus and add animation
* Update snapshot tests
* Update user-facing terminology from gallery to photo library
* Update terminology for devs to make the user-facing change easier to remember
* Update snapshots
* feat: add text labels to bottom tabs
* fix: treat icon and text as single pressable for screen readers in bottom tabs
* feat: float AddObs button outside of bottom tab bar
Closes MOB-254
---------
Co-authored-by: Kirk van Gorkom <55742+kvangork@users.noreply.github.com>
Adds internal feedback form that posts to our logging infrastructure.
Also,
* Adds maxLength prop to TextInputSheet w/ UI to show characters remaining
* Adds optional description to TextInputSheet
* Adjusts TextInputSheet input height to fit area left by the keyboard
Closes#1844
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* 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
* 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
* Restore photo deletion
* Rename methods for accessing media files
* Added integration test for photo deletion
* Cleaned up some accessibility labels
Closes#1429
* 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
* Show settings menu item to all users
* Add strings
* Update strings.ftl
* Add a logged out section to Settings
* Refactor logged in section
* Prop to use small label
* Restyle radio buttons
* Add react-native-mmkv
* Show logged in section only when logged in
* Add a boolean if user is advanced
* Hook for storage
* Change bottom tab button based on isAdvancedUser
* Add string
* Change supported AR camera version
* Refactor navigation out of AddObsModal
* Create new observation only on ObsEdit navigation inside Modal
* Reset store needs to happen before making new observation
* Merge conflicts removed some strings, put them back
* Remove comment
* Refactor AddObsModal test to unit test only
* Refactor navigation parts into integration test
* Add test case for advanced user
* Code style
* Add test case for advanced user to Tab bar
* Do not use a user object for snapshot tests, only the advanced user layout
* Use advanced user layout in navigation tests
* StandardCamera test with advanced user layout
* Add default value for boolean setting
* Remove default value as it is breaking immediate update of UI
* Refactor persisted layout value to be a part of zustand store
* Refactor persisted state into one bound store
* Explicit state for snapshot needed?
* Revert "Explicit state for snapshot needed?"
This reverts commit d448edc3dc.
* Remove snapshot test
* Tried to get accessibilityHints to conform to Apple guidelines
* Tried to make some more helpful `accessibilityLabel`s
* Used fork of fluent_conv to support function results as selectors in Fluent
* Custom VOWORCON function for Fluent
Note that there are still many accessibility problems for screen readers. This
just tries to make sure the strings up for translation are somewhat less
confusing in that context.
Part of #1223
* Upgrade to RN 0.73 with upgrade helper
* Upgrade testing-library
* Comment announcements
* Comment out UserProfle test
* Mock function used to calculate masonry layout
* There should not be a modal here
* There is actually also no modal here
* Use View if SafeAreaView is undefined
* Replace fast image library that was failing tests because of not being maintained
* Clear mocks in useTaxon test
* Remove legacy deps from testing flow
* Snapshot update
* Revert "Snapshot update"
This reverts commit bca8b296df.
* Update package-lock.json
* Clean-start
* Update project.pbxproj
* Reenable test that failed before updating dependency
* Reenable test that failed because of dependencies
* Remove comment
FYI, this also essentially outlaws variables in translation keys because a key
that is only used with interpolated strings will never appear as "used".
Also starts using a convention of adding info to i18n keys that do not relate
to the text after double dashes, e.g. `Unknown--taxon = Unknown` for a string
that is specifically meant to describe a missing taxon but only needs to have
the word "Unknown".
* Changed several accessibilityHints to 3rd person
* Made several accessibilityLabels shorter and more verb-oriented
* Removed many unused i18n keys
* Refactored variables in i18n keys
* Removed some unused code from the old Settings
* Add test for UserProfile species button from MyObs screen
* Finish initial tests for navigating to Explore from MyObs
* Check API calls are made with correct params
* Use RootExplore screen in CustomTabBar and write test for navigating cyclical Explore -> TaxonDetails
* Add navigation check for UserProfile from root explore screen
* Simplify RootExplore screen; show nearby data for species view
* Mock location permissions for Explore navigation tests
* Update snapshot
* Merge from main
* Fix tests for Explore navigation
* Restyle community taxon section
* Use fave/unfave mutation in case of need_id metric
* Add votes field to Observation
* Change useIsConnected to TS
* Refactor fetching of remote observation into hook
Also includes the code to update local copy of a user's own observation
* Use const as key instead of string
* Remove unused prop
* Only send obs uuid to DQA
* Get obs in DQA container
* Rebuild object that is to check as it was send in nav params
* Refactor qualityGrade
* Refactor set to not loading state
* Update test to reflect fetching of obs
* Refactor too long lines
* Refetch remote observation after success in adding/removing vote
* Change qualitcMetrics to make use of observation.votes as well
Also refactored the object structure to use more efficient and performant filtering and finding in child components.
* Only use data slice for DQA buttons
* Refactor DQAButtons to only work with data slice relevant to that metric
* Special case for needs_id metric
* Also show loading indicator when fetching remote obs
* Add TODO
* Check only for vote of this user
* Optional chaining for user id
* Update test
* Enable fetching of remote if local is falsy
* Invalidate query on mutation
* Only set loading to false after refetch is finished
* Split up DQA test into unit tests and integration tests
* Use factory for mock user
* Add needs_id DQAVoteButtons unit test
* Revert hook to js
* Check for observation before using it
* Undo code style changes
* Remove unused value
* Refactor faves to be derived from votes
* Refactor needs_id interaction into standalone fcts
* Code style
* Added basic navigation test for StandardCamera & SoundRecorder
* Abstracted camera nav buttons and used in SoundRecorder
* Show sounds in the MediaViewer
* Added sounds to ObsEdit, w/ MediaViewer support
* Ensure sounds get both uploaded and added to observations
* Local sound deletion
* Remote sound deletion
* Rudimentary and deeply unperformative sound visualization
Closes#869
* Shows indicator in tab bar when you have new updates
* Should update every minute
* Make unread updates indicator go away when you view the updates
Closes#900
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* 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
* 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
* Remove console statements in production build
* Move uploadReducer into separate file
* Create reducer for creating obs; combine reducers
* Fixes with createObsReducer
* Move album, passes test states out of global context
* Bug fixes for ObsEdit flow
* Create photo gallery container
* Set accessibility test todo for PhotoGallery
* Improve FlashList performance MyObs
* Prevent flicker on modal close
* Create less rerenders in MyObservations
* Memoize drawer items for less rerendering
* Memoize custom tab bar
* Remove unused libraries and update snapshot
* Fix and prune dependencies
* Add AddObsModal tests
* Fix e2e test android by making comment confirm button visible
* Use callbacks and memoization to cause less rerenders
* Fix tests
* Remove unused code
* Remove log
* Minimize calls to check whether internet is reachable
* Remove unused code
* Remove console statements in production build
* Move uploadReducer into separate file
* Create reducer for creating obs; combine reducers
* Fixes with createObsReducer
* Move album, passes test states out of global context
* Bug fixes for ObsEdit flow
* Create photo gallery container
* Set accessibility test todo for PhotoGallery
* Improve FlashList performance MyObs
* Prevent flicker on modal close
* Create less rerenders in MyObservations
* Memoize drawer items for less rerendering
* Memoize custom tab bar
* Remove unused libraries and update snapshot
* Fix and prune dependencies
* Add AddObsModal tests
* Fix e2e test android by making comment confirm button visible