* Alternative return for match screen in absence of suggestion
* Add lower part text elements
* Add margin at bottom
* Copy code to make a new suggestions scrll for iconic taxa
* Removing not needed properties of the copied code
* Remove log
* Remove width constraints
* Add a state to track selected iconic taxon
* Comment and code style
* Pass prop down to taxa scroll
* Use new props in iconic taxa scroll
* Color border according to selected state
* Use iconic taxon as top ID if none given
* Remove testing code
* Update Match.test.js
* 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>
* Show simple my obs header only for logged-in users
* ActivityCount TS
* CommentsCount TS
* IdentificationsCount TS
* ObsStatus TS initial pass not looking at errors
* QualityGradeStatus TS
* Update RealmObservation interface
* Update RealmObservation interface
* ObsUploadStatus TS, plain copy, no errors yet
* Update types
* Update type
* IconicTaxonIcon TS
* ObsImage TS
* PhotoCount TS
* ObsImagePreview TS
* Image is only opaque when logged in
* DateDisplay TS
* Remove debug flag from UploadObsStatus
* Update type
* Prop to hide ObsUploadStatus
* Test observations need those otherwise they appear as needing edit
* Update imports
* Update vc plugin
* Update tests with breaking change: combined_score now 0-100
* Frame processor predictions are in range of 0-100 with new key
* Remove offline convert score to confidence
* Update calculateConfidence.js
* Common ancestor should use combine_score
* Offline suggestions have combined_scores now instead of scores
* Change filtering to range 0-100
* Only use combined_score for Match screen
* Update debug data
* Fic typo in tests
* Remove key from type
* Minimize the number of rerenders by splitting sheet logic into separate component
* Fix agree sheet
* Fix y offset for scrolling from notifications to activity item
* Change default MyObs layout to grid
* Rename testID
* Update tests expecting to start with list view
* Reverse order of buttons in layout selector
* Fix layout bug of having empty boxes on explore
* 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
* Remove FaveButton
* Remove ObsStatus
* Change community string
* Remove status text
* Add text to activity item
* Boolean prop to show this text
* Completely unrelated crash fix for suggestions on obs without photot
* Remove UUID
* Status section
* Update strings
* Move ID to Details
* Show ID explainer only conditionally
* Status section spacing
* Update ActivityItem.test.js
* fix: show observation datetime in the obs time zone
I.e. it doesn't offset the observation datetime into the viewer's time zone.
* test: adjust to literal times by default
* chore: update to date-fns 3.0
* wip: show time zone names with all times
* show time zone name whenever a time zone is passed to a formatting function
* store observation IANA time zone in Realm
Note that this required patching around a bug in Hermes in which it should be
returning a GMT offset for the short time zone but is instead just returning
GMT.
* fix: omit time zone for unuploaded obs
* feat: show relative time differences on ActivityItem headers
* fix: hide zone/offset on ObsEdit before upload when signed in
* fix: hide clock icon in activity item header in new default mode
Also
* stop using checkCamelAndSnakeCase when not necessary in DetailsTab.js
* make POJO types only refer to other POJO types
* remove assumed and undocumented meaning of page being zero from our use of
useInfiniteScroll in Explore; uses explicit type checks instead
* document byzantine pagination logic in useInfiniteExploreScroll
* fix broken infinite scroll when sorting by faves (was only showing first
page)
The underlying problem from 96c316a was setting initialPageParam to 1 in
useAuthenticatedInfiniteQuery, which seems rational, except
useInfiniteExploreScroll was using a false-ish value of page to detect when
it was requesting its first page. This does the same by being more explicit
about page's type without injecting undocumented meaning into the params we
hand to useInfiniteScroll.
* refactor: move Explore page param munging into unit tested helper
Closes MOB-400
* 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>
* refactor: convert UserIcon to TypeScript
* feat: show simple MyObs to signed in user; add user icon & login to header
* feat: show warning and edit button for unuploaded obs w/o basics
* refactor: consolidate ObsEdit navigation logic
* feat: show edit button with circle dots
* refactor: upload UploadQueuedRotatingIcon to the more reusable CircleDots
component
* refactor: upload icons to use more composition and fewer specialized, one-off
components
* fix: bugs in determining if an obs has date and coords
* refactor: extract MyObservationsSimple business logic into container
* refactor: get total obs count from relevant hooks
* feat: show remote species for signed in users
* fix: hide photo count icon when missing basics icon is present
* feat: show banner alerting user when missing location or date
Closes MOB-318
* Create useSuggestions hook with all online/offline logic for reuse in Match screen
* Show real online/offline suggestions on Match screen
* Code improvements
* Display top suggestion from useSuggestions, not AICamera
Simplified version of MyObs for signed out users with more than 1 obs. Currently only in debug mode.
Also:
* refactor: extract TaxonGridItem into a reusable component
* chore: TypeScript cleanup
Closes MOB-317
* Save TaxonPhoto to realm; display taxon on match screen
* Code tweaks
* Add match screen to navigation after AI camera in debug/default mode
* Fix test and refactor
* Fix issue with infinite renders in useLayoutPrefs
* Add functionality for advanced iNaturalist mode
* Fix language settings test by toggling advanced mode on
* Fix e2e tests by adding advanced user toggle
* Fix more tests in Settings with advanced toggle
* Create ObsDetailsDefaultMode and rearrange items on top of screen
* Move activity, details, and more into three different sections instead of tabs
* Styling cleanup; change Activity name to Community
* Fix scroll to activity item from Notifications
* Add ObsDetailsDefaultMode unit tests
* Show kebab menu on other users' observations
* fixes issues where side by side button text is cut off in different languages and large font sizes.
Refactor to use ButtonBar in all places with side by side buttons. Truncates header in ObsEdit when language text exeeds space to not push kebab menu off screen. Closes#2500.
* update snapshots
* clean up BottomButtons.tsx
* split notifications into tabs
* lots of TypeScript conversion
* feat: resize Heading5 and add Heading6 (closes#2480)
* fix: mark remote observations as viewed from ObsDetails
* feat: show indicator in Notifications tabs if unviewed notifications
Closes#2451
Searches the local database for taxa if there are no online results.
Also
* typescript conversions
* refactor and consolidate view logic around taxon search
Closes#2348
* Build out UI for multiple obs upload status and progress bar
* Show expected number of uploads/uploading in ObsEdit and MyObs progress bars
* Add test for upload progress
* Add tests
* Fix test
* Mock useUploadObservations to fix test
* Maybe fix tests in the cloud
* Reset unsynced number only if realm is still open
* Change text to size 2
* Change text size for date to Body2
* Change text size for other data to Body2
* Adjust tappable height for other data
* Adjust tappable height for date picker
* DatePicker TS
* Change padding of location section
* Push pixels to center icons with first line of text
* Fix a UI issue with evidence list not scrolling to the sides of the screen
* Align all icons at same vertical axis
* Apply margin to evidence list and iconic taxon list
* Add usePerformance load time to cameras and suggestions
* Declare when to hide delete photo mode without a useEffect
* Use StatusBar hidden component in CameraContainer, instead of useEffects
* Directly handle discards from bottom sheet instead of using useEffect
* Rewrite a whole bunch of camera code to be more declarative and less imperative
* Make sure permissions gate works as expected
* Code cleanup
* Consolidate focus/blur listeners in AICamera
* Fix timing issues in Suggestions tests
* Fix tests
* Ensure photos are still saving to gallery when write permission given & update saving photo state
* Make sure API calls have options to fetch correct lexicons; separate capitalization logic for each lexicon
* Fix Explore nav test
* Use auth token to fetch observation after upload; simplify upserting in obs infinite scroll
* Fix useSyncObservations test
* reduce prop surface area for map-related components
* map just receives an observation, not a bunch of its properties
* adjust a lot of logic based on observation.obscured to more specific logic
based on whether the current user can view the coordinates
* hide the map on ObsDetails if there are no coordinates
* show the spec'd explanation for why coordinates are obscured
* remove a prop that just hides a component if true; that should really be up
to the outer context
* fixed a bug on ObsDetail where the remote obs wasn't getting mapped to
Realm-ish attributes
* prevent button mashing from opening multiple TaxonDetails
* clean out the state related obs create / edit after exiting that flow so
that TaxonDetails (or anyone else trying to detect an obs being edited)
doesn't end up finding it when the user has finished creating / editing.
Closes#2271
* Disable row when upload is queued
* Show UploadQueuedRotatingIcon if obs is in queue with no progress
* Refactoring to make list rendering a little faster
* Fix UploadStatus test
* Fix tests
* Remove outdated snapshot
* Use a wrapper around Text for all typography components that sets
app-specific defaults, allowing default RTL to work
* feat: make iOS permission prompt text translatable
* fix: allow RTL layout of char limit on text input bottom sheet
* fix: allow RTL photo carousel on ObsDetails and TaxonDetails
Removes react-native-reanimated-carousel, which needs to be patched to support
RTL and maybe wasn't providing anything beyond FlatList for us anyway.
InfoPlist.xcstrings will not be automatically updated on Crowdin sync pending
a Crowdin bug.
Work toward #2099