* Perform some trivial TypeScript migrations.
No changes needed to convert these files.
* Remove unused comments
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Migrate `ErrorBoundary` boundary to TypeScript.
* Extend from PropsWithChildren
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* 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>
* Migrate `RotatingINatIconButton` component to TypeScript.
* Let functional component return type be inferred
* Change Props to an interface
* Extend Props from PropsWithChildren
* Import as type
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Update package.json
* Update AppDelegate.mm
* Update Podfile
* Update .gitignore
* Update link-inat-model-files.sh
* Add plist file to project
* Update project.pbxproj
* Add analytics package
* Update project.pbxproj
* Update PrivacyInfo.xcprivacy
* Basic screen tracking
* Basic button press logging to firebase
* Update package-lock.json
* Update Podfile.lock
* Add Android setup
* Update .gitignore
* Add analytics mock
* Ignore rubocop warning here
* Create GoogleService-Info.example.plist
* Create google-services.example.json
* Add instructions to set up Firebase configs
* Update e2e_ios.yml
* Update e2e_android.yml
* Better plural
* Use specific XCode version in e2e CI
* Update GoogleService-Info.example.plist
* Revert "Update GoogleService-Info.example.plist"
This reverts commit 0bc0ed4862.
* We need an actual real app id or we get a crash during app start
* My bad, we do need both files for building
* Also set API key
* Add comments
* Add comment
* Update Podfile.lock
* Revert "Use specific XCode version in e2e CI"
This reverts commit cbd63d1b5d.
* Rename file without changes
* Revert "Rename file without changes"
This reverts commit a3de5e100d.
* Rename file without changes
* Refactor InlineUserBase to TS
* Update component Props
* Import as type
* Check if the user displayed is the current user and if so
also display the user image while offline.
* Update src/components/SharedComponents/InlineUser/InlineUserBase.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update InlineUser.test.js
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Prevent WebView iframe loads from updating source
* Use request type directly from the library that provides this param
---------
Co-authored-by: Johannes Klein <johannes.t.klein@gmail.com>
* Move file and fix warnings
* Add state type
* Change to interface
* Call setState only once per image load
This fixes the OflineNotice being shown even when. load succeeds.
* Copy over fix into default mode PhotoContainer
* Update src/components/ObsDetailsDefaultMode/PhotoContainer.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update PhotoContainer.tsx
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update react-native-share-menu
* Update Podfile.lock
* Create react-native-share-menu+6.0.0.patch
This is required as long as we are not setting use_frameworks to static
* Breaking change: Android react-native-share-menu now also has same Share structure as iOS
* Remove Android specific test structure
Because Android and iOS now have the same return type from our fork of react-native-share-menu
* MOB-835 - show info icon and link in taxon search results when searching from explore filters modal
* Migrate ExploreTaxonSearchModal to TS
* Close Explore filters modal on info button pressed
* Fix order
---------
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
* Only log sentinel files only if there is any data in the stages array
* Fix indentation
* Also delete sentinel files when exiting camera through Gallery button
* Update AICameraButtons.tsx
* Start screen in a loading state for 700ms
One idea I have about the bug is that maybe it takes a few renders to initialize the device. As we are immediately backing out of the screen in case we have no device, maybe just adding a few ms to give the native side time helps.
* If no device is selected log the length of devices available
* Add missing mock