* 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>
* Update user-facing terminology from gallery to photo library
* Update terminology for devs to make the user-facing change easier to remember
* Update snapshots
* 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
* 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
* Change black text to dark gray text
* Start simplifying to a single color scheme
* Remove custom paper theme colors
* More theme cleanup
* Styling specifically for RNPaper components
* Update snapshots to use hex colors, not rbga
* 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
* Add and remove strings
* Drawer TS
* INatIcon TS
* Fix import
* INatIcon TS
* ActivityIndicator TS
* Button TS
* Optional param
* Add ViewStyle prop back in
* WarningSheet TS
* Add string
* Update Logout.js
* Add types
* Change log out label to not navigate but set state
* Imports
* Show warning sheet on log out press
* Actually sign out user from warning sheet
* Remove sign out fct from Logout screen
* Change logger context
* Remove Logout
* Use Heading4 instead of local style
* Use Icon instead of Button
* Pixel pushing
* Prop testID down
* Remove unused login state
* Login TS
* Update type
* Replace Whitney fonts with Lato
* Escape font family names so Lato works on iOS
* Update custom fonts
* Typography file cleanup
* Rename constants to appConstants
* Fix margins in AddObsModal
* 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
* Added font files for Book and Semibold, Added MediumText component.
* Update snaopshots for font changes
* Body1 and Body3 changed to Whitney Medium, changes to italic fonts weights on ObsListItem, seperate component for ScientificName
* 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
* 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
* Obscuration cell and accuracy circle on ObsDetail map
* DetailsMap view
* Copy and share location from DetailsMap
* Patched react-native-maps to address bug with showsUserLocation
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* Start building explore screen
* Header for Explore screen
* Fix button build
* Move ObsFlashList to shared components for use in Explore
* Fix background transparency on SegmentedButtons
* Use reusable components for map and ObservationLocation
* Use search observations API to show results in explore views
* Add infinite scroll hook to species, observers, and identifiers views
* Update snapshots and create ExploreFlashList for consistent header animation
* Float segmented buttons above observation lists in explore
* Use queryparams for API calls; add loading state to each view
* Update side menu
* UI for side menu
* Add placeholder components; adjust for small screen sizes
* Code cleanup
* Update snapshots
* Query for second username element in e2e test
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Use Body3 for username
* Add a11y role to user icon
* Add a11y matcher to tests
* Add snapshot test for normal state
* Fix mock user
* Rearrange test
* Update InlineUser.test.js.snap
* Update InlineUser test with i18n init
* Update UserIcon.test.js
* Replace icon components
* Update InlineUser.test.js.snap
* Different icon
* Update UserIcon.test.js
* Update snapshot tests for InlineUser
* Update InlineUser.test.js.snap
* Update .eslintrc.js
* Create index.js
* Change Button usage in GridItem
* Replace imports
* Add strings
* Add hint prop to button
* Add a11y hint prop to EvidenceButton
* Add EvidenceButton to index
* Add a11y props to EvidenceButton
* Update UiLibrary.js
* Add a11y props to CloseButton
* Add CloseButton to index and UiLib
* Rename function
* Update string
* Add a11y props to AddObsButton
* Add Tabs to index
* Linebreak
* Add Typography to index
* Remove unused text
* Refactor UserIcon test coverage in it's own test
* Add UserIcon to index
* Add UserIcon to UiLib
* Add InlineUser to index
* Add Quality badge to index
* Update UiLibrary.js
* Remove unused component
* Change AddObsButton a11y label
* Change hint
* Use consistent uri in snapshots
* Add snapshot to InlineUser
* Fix wrong user key
* Update Tabs.test.js
* Snapshot TODO
* Update NavButton.js
* Update snapshot
* Add snapshot for active user icon
* Remove snapshot result
* Add ActivityCount to index
* Update UiLibrary.js