* Set default explore view to observations
* Rearrange ObservationsViewBar buttons to always show grid first and map first in Explore
* Set initialRegion of Explore map to same zoom level as location picker, using delta
* Consolidate map code into MapView with ref forwarding to allow animation & initialRegion set
* Stop controlling the map region from zustand, since we're using initialRegion
* Make sure we're not double animating when navigating to a new place
* Use ref to only get map boundaries exactly when they're needed, instead of tracking in state
* Make sure current location button does the same as NEARBY button
* Update Explore integration tests to reflect observations view as first view
* Fix navigation Explore tests to reflect landing on observations view
* Update MapView unit tests
* Check location permissions in MapView on current location button
* Code cleanup
* Fix tests and add test for location permissions
* To Mob 720: add some types and null guards (#2878)
* Update Map with Region type
* Type initialRegion
* Guard against null
* Guard against undefined coordinates
* Center loading indicator but not fill space (#2880)
Move the loading indicator to the center of the parent (and back left and top for half its size).
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Prevent lots of extra renders from useTaxonSearch; prevent TaxonResult from refetching remote taxon
* Add debounce to SearchBar to prevent unnecessary API calls
* Reset local value when clearing search
* Change text on Match loading screen (#2838) (#2841)
* Change copy for Match header & omit check for already seen species (#2837) (#2840)
* Fix: prevent multiple taps on Buttons like Suggest Id (#2833)
* Add debounce to Button to make sure users can't double tap any buttons / navigate twice
* Fix tests by mocking the Button component with a quick debounce
* Remove useEffect
* Add tracking for Button taps
* Use PressableWithTracking and handlePress in INatIconButton to track all pressables with a testID
* Import as UnstyledPressableWithTracking for consistency
* Add debounce to Button to make sure users can't double tap any buttons / navigate twice
* Fix tests by mocking the Button component with a quick debounce
* Open more options on long press
* Add tests for long press
* Rearranging Settings screen with new layout
* Add toggle for advanced settings in layout slice; fix default mode toggle
* Update settings with navigation flows
* Fix tests
* Change power mode switch for e2e test
* Fix settings test for green button toggle
* Fix advanced user toggle in e2e test (which hides pivot cards)
* Changes based on design convo; test fixes
* Fix e2e tests
* Follow user flow chart and update nav accordingly
* Rename function
* Fix test
* Can be null so check for false only
* Little less spacing between radio button rows
* Minor UI updates
* Remove check for previous setting in UI
* This is no longer used anywhere
* Update AICamera.test.js
* Update AICamera.test.js
* Update AICamera.test.js
* Update Suggestions.test.js
* Update Settings.test.js
* Update LanguageSettings.test.js
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Text updates and AICamera icon update for onboarding carousel
* Update background image camera permission
* Update text for permission gates
* Update text match screen, login signup, and camera
* Fix AICamera test
* Do not make FlashList wrapper accessible
Because it takes away a11y from the single items, and makes the list unscrollable with a11y commands.
* Remove a11y label
This was read without the actual param passed in so made no sense. Removing it for now. In that way at least the actual ID text is read.
* Make bottom sheet container not accesible
* 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>
We are not sure if this screen will stay like this so this seems to me to be a better way. We are just expanding the interface to allow a customization that is already possible to pass through. Instead of adding a new "largeText" mode.
* Removes location picker from match screen, fetches user location and reloads suggestions instead
* fix variable name
* Remove unused prop
* changes requested, changes to fetching place guess, changes to refetch offline
* Close permission gate when permissions denied initially
* change toggle to set in reducer
* add optional chaining to location values
* Add optional chaining for place name
* Closing on initial block optional
The function of closing the permission gate on pressing the initial block button was as far as I can see only scoped to the Match container.
---------
Co-authored-by: Johannes Klein <johannes.t.klein@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
* A key like this does not exist because we don't save rep Photo to realm
* Show rep photo on suggestions
* Add comment
* Update types.d.ts
* Move code around
* Send rep photo ID to taxon result
* Send rep photo to taxon result
* Add white background to box on taxon details
Closes MOB-491
* Comments
* Only send ID around and move photo to top
* Send first photo id also from match screen
* If rep photo is of same taxon, only send ID, else send entire photo to taxon details
* Refactor taxon image
* Updated realm types
* If rep photo is of other taxon send entire object
* Create copy of realm taxon
Avoids an error "object has been invalidated and deleted" which I didn't have tome to track down.
* Rename MyObsEmptyLoggedOut because it will have a logged in state as well
* Add a copy of InlineUser for headers
* Prop in currentUser and isConnected
* Use HeaderUser on empty my obs
* Adjust top position based on safe area insets
* Also use HeaderUser for MyObsList
* Refactor User components to use a base component
* npm calls for separate tests
* Revert "npm calls for separate tests"
This reverts commit 6317e0eda5.
* 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
Sets camera values to defaults, exactly like Seek works.
Loading indicator while other suggestions are being fetched.
Fix a bug with lingering state of previous score_image request.
Refactor top suggestion to a state.
* Add title string
* Label for icon button
* Restyle 3rd party sign in section
* Add apple svg icon
* Use apple svg
* Add google icon
* Update strings.ftl
* Partially bold string
* SignUpForm TS
* SignUpConfirmation TS
* Rename signup screens
* SignUpConfirmation TS
* Remove string
* TS fixes
* Button text change
* Remove superfluous margin
* Move two text fields to sign up confirmation
* Revert "Remove superfluous margin"
This reverts commit 6a8fe1e7cf.
* Add TODO
* Remove text under Continue button
* Reorder states
* Close button only on login
* LoginSignupWrapper TS
* SignUp TS
* Remove Learn More screen
* Update text input field label
* Remove email confirmation screen
* Disable button when inputs empty
* Navigate to main after register
* Only show one check box
* Add error component to first signup screen
* Partially italics string
* Remove previous text
* SignUpConfirmationForm TS
* Add a type
* Make exclamation mark appear white
* Example email validation
* Updated Learn More webview title
* Comment out some registration fields from previous checkboxes
* Add comment
* Update Error.tsx
* Set all previously separate checkbox consents to true if the one is checked
* Revert removal of LearnMore screen
* Navigate to Learn More screen
* Update LoginForm.tsx
* Revert "Remove email confirmation screen"
This reverts commit 52c396e411.
* Use pink_flower as background for Learn More screen
* Remove old confirmation screen
* Remove LearnMore demo
* Show translated error text for common errors
* Force dark buttons in signup/login flow screens
* Add text to forgot password page
* Change text input label
* 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
* 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
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
* fix: save or discard the observation from the match screen
* feat: add Match header and footer to TaxonDetails from Match
* refactor: rename TaxonDetailsHeader prop controlling right element
* feat: show search from TaxonDetails via Match
Closes MOB-353
Closes MOB-358
Closes MOB-359