* MOB-860 - empty states for user's followers/following/projects screens
* Also expose isFetching from users list query
* Render either activity indicator or zero data component
* Render either activity indicator or zero data component
* Fix for: 0 is falsey
* Remove useCallback
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Don't require TS extensions in imports
* Resolve all import extension errors
* Remove file extension from import paths used in mocks
* Remove .d of type definition file paths
* Remove .d of type definition file and import as type
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Update package.json
* Update package-lock.json
* Enable plugin
* Update package.json
* Update package-lock.json
* Update .eslintrc.js
* Create a new object instead of mutating the existing one
* Update SoundRecorder.js
* Do not mutate prop directly
* Do not mutate store value directly
* Disable compiler for zoom hook
Because it uses reanimated logic, and previous work laid out we should specifically disregard a rule of react here, unsure what to do here for now.
* Move array for tracking results into component
* Disable compiler for StandardCamera
* Do not mutate store value directly
* Disable compiler for FullPageWebView
* Do not mutate route param
* Remove unnecessary check if state is true before setting it to false
* Fix: user might be undefined
* Update reanimated usage with new compiler compliant API
* Fix: taxon might be undefined
* Fix: taxon might be undefined
* Fix: common pitfall of trying to render text outside of Text component
* Update interface
* Add package override
* Update package-lock.json
* Refactor updating of user preferences into User model
* Remove no memo directive from zoom
* Update file imports
* Migrate safeRealmWrite to TS
* Update interface and import path
* Update interface
* Refactor useLocaalObservation hook to not mutate return value of a function that should not be mutated
* Update tests to new return structure
* Remove useSafeRoute hook
We get the same information from error contexts and surrounding documents, and this hook was violating the rules of react by conditionally calling another hook.
* Use optional chaining
* Update TaxonNamesSetting.test.js
* Fix: use optional chaining
* Extend on RNTLs renderHook instead of re-implementing
* Remove unnecessary mock
* Remove unnecessary mock
* Remove unecessary mock
* Remove trailing spaces
* chore: validate and normalize translations in addition to src strings
* fix: globalize lat/lng/acc in LocationPicker
* refactor: extract language picker into component
* refactor: globalized text
* feat: added a script to i18ncli called "checkify" that generates
localization files prepended with a checkmark to help see strings that are
not globalized
* fix: localize date formatting (closes#1622)
Closes#2102
* On user profile screen, if routed here with login as param search for user id
* UserText to TS
* Add linkify mention plugin dependency
* Rely on plugin for mention parsing
* Adjust rel
* Add a title attribute to mentions only
* Navigate to profile screen for mentions
* Use props
* Fix some types
* We dont really need this plugin if we check for href includes people link
* Replace user search api call with fetch by login
* Push new profiles on top of the navigation stack every time
* Add error strings
* If there is no user found for this id show error
This can happen I assume when a user changes the login but comments are not updated.
* Use this plugin
* Remove log
* Only react to anchors that have mention as a title
* Update types
* Another inferred type
* 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
* Remove tab bar when sharing photos into app; closes#1645
* Make explore view sticky with species as default view; closes#1614
* Fix Explore integration test; use default species view
* Catch 401 errors when we try to fetch remotely deleted obs for signed out
users
* Skip the check to see if a user is a friend on UserProfile when signed out
* Replace uses of RNFS.unlink() with a wrapper that ignores errors about files
not existing
* Tried to get safeRealmWrite to preserve error type before re-throwing
* Adjust spacing between description and dates on UserProfile
* Move child taxon arrows down a bit
* Fix padding in title area
* Moved carousel dots above title
* Made touches in the title area work on the carousel
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
* Use stored state in zustand; update navigation packages
* Split up slices; fix back button label in iOS
* Create hook for navigation params'
* Add param to ignore stored state in Explore
* Use saved state params in Explore when navigating from Explore search screens
* Downgrade datetimepicker
* Fix maximum update exceeded error
* Save test fix for later
* 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
* 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
* Start on project / details UI overhaul
* UI tweak
* Show HTML in ProjDetails; close search bar
* Add OverviewStats and relevant fetches to ProjectDetail
* Allow user to leave/join traditional projects
* Fix tests with mock react-native-paper
* Move login and camera screens into stack navigators
* Navigation fixes
* Create ObservationsStackNavigator
* Move drawer items into drawer nav
* Navigator fixes and improvements
* Nav improvements
* Fix navigation from ObsEdit
* Fix test
* Fix test
* Redo bottom tab nav with Explore as part of ObservationsStack
* Use ObsEdit and AddID in two stacks
* Move identify into ObservationsStack and fix headers
* Fix ObsEdit bottom button issue by using fixed positioning for tab bar
That required a few other changes to places where we were explicitly
compensating for the height of the tab bar. Also fixed some other minor
layout issues.
* Typo
* Add LocationPicker to ObservationsStackNavigator
---------
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
* Show remark in Add ID
* Lock screen orientation in StandardCamera for phones
* Stop crosshairs from blocking gestures in LocationPicker
* Changed thresholds for optimal accuracy in LocationPicker
* Tried to improve key for DisplayTaxonName
* Added stub content for Data tab on TaxonDetails
* Added delimiters and pluralization for counts on UserProfile
* Create tab navigator
* Add add obs button
* lint
* Wire up routes
* Fix login
* Add keys
* Fix delayed state bug
* Lint
* space parens
* Add details to tab nav
* Lint
* re-add back btn
* Rebase off main
* Fix format
* Fix back button
* Remove unused change
* Replace lowercase folder
* I don't know why that is needed
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* 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
* Regroup accessibility label strings at end of strings file
* Add accessibility test to AddID
* Add a11y labels to AddID
* Add a11y test to StandardCamera
* Add a11y props to StandardCamera
* Remove unit test with only todos
* Add a11y test to Messages
* Refactor PhotoScroll test into own file
* Add a11y test to ObsDetails
* Add a11y test to ObsList
* Add a11y matcher to PhotoGallery test
* Add a11y matcher to ProjectDetails test
* Add a11y matcher to ProjectObservations test
* Add a11y matcher to Projects test
* Add a11y props to ProjectList
* Add a11y props to ProjectTabs
* Add a11y matcher to Search
* Add a11y matcher to UserProfile test
* Add a11y test matcher to UserText test
* Update react-native-accessibility-engine
* Add a11y matcher to Tabs test
* Add a11y label to a selectable photo
* Refactor DataTab tests into separate file
* Refactor ActivityTab test out into own file
* Added a test how to check if a component uses a mocked container
* Add wrong a11y props to TextInput left icon
* Enable a11y test with actual BottomSheet because mock does not pass a11y props down
* Add a11y default props to Button
* Update Button component with new styling; closes#384
* Change button to Pressable instead of RNPaper to get border to show on Android
* Add disabled buttons to UI library
* Add multiple buttons in row
* Add multiple button examples