* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* 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
* #856 - support for modifying and updating observation photos locally/remotely; reordering of photos fix
* ESLint fix
* Fixed tests
* Fixed tests
* Fixes related to tests
* 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
* 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
* 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
* 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
Prevents adding an ID from suggestions from returning you to ObsEdit like it does in the new obs flow. Closes#851
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
* Update to realm 12
* Remove unused mocks to fix some tests
* Fix test by unmocking ObsEditProvider
* Fix more tests by removing mocks/changing when tests write to realm
* Remove mocks on ObsEdit component test and fix accessibility labels
* Fix hooks tests with realm
* Set test path for realm; finish fixing tests
* Small tweak
* Upgrade realm/react library
* Migrate schema
* Simplify ObsEditProvider by moving functions into local state & calling reducer less frequently
* Fix delete all observations
* Fixes
* Move index selection to MediaViewer via params
* Access ObsEditContext on top level of ObsEdit and pass props
* Move context to top level screen components
* Fix tests
* Use waitFor to fix ObsDetails integration test
* Alphabetize props; remove realm check; refactor new Id method
---------
Co-authored-by: Ken-ichi Ueda <kenichi.ueda@gmail.com>
Separated PhotoCarousel view and delete into separate buttons
Fixes#837 by separating the two separate press interactions into two separate
buttons, which is probably also better for accessibility (screen reader can
read two separate labels for two separate actions). Also addresses a layout
bug in landscape on iPad.
Also *might* introduce a bug with orientation lock reverting when rotating
device while in delete mode. Only happens in Android, may not be new