3787 Commits

Author SHA1 Message Date
Johannes Klein
3f45f6ee3a v1.0.20+208 v1.0.20+208 2026-04-14 22:51:48 +02:00
iNaturalist Crowdin Sync
95df6878e4 New Crowdin translations by GitHub Action (#3533)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-14 10:42:42 +02:00
Johannes Klein
551c0e50b0 Add a link for help us translate to settings (#3529)
* Basic button to test placement

* Inline URL follows current convention

* Replace button with link

* Lowercase string key
2026-04-14 09:15:15 +02:00
Johannes Klein
cb07ef8926 Minor ts migrations (#3525)
* Update useScrollToOffset.ts

* Update useScrollToOffset.ts

* Refactor to early return Early return

* Refactor to requestIdleCallback

* Update visionCameraPatches.ts

* Migrate logger to TS and fix wrong export
2026-04-14 09:14:26 +02:00
Johannes Klein
d5bab883ec Appa (#3517)
Apparently we were passing in undefined here for uri. Which doesn't produce good cv results on an undefined file. So, added a check statement and an early return.
2026-04-14 09:13:28 +02:00
Johannes Klein
16239e45f0 Update react-i18next to latest v15 (#3527)
* Update package.json

* Update package-lock.json

* Update package.json

* Update package-lock.json
2026-04-14 01:00:29 +02:00
Johannes Klein
d819d8dc88 Mob 1152 i18next to latest v25 (#3526)
* Update package.json

* Update package-lock.json

* Update package.json

* Update package-lock.json

* Update package.json

* Update package-lock.json
2026-04-14 00:59:29 +02:00
Johannes Klein
3036529323 Switch react-native-fs (#3524)
* Update package.json

* Update package-lock.json

* Update Podfile.lock

* Update PrivacyInfo.xcprivacy

* Update react-native-logs.config.ts

* Update paths.ts

* Update savePhotoToDocumentsDirectory.ts

* Update useAppSize.ts

* Update installData.ts

* Update mlModel.ts

* Update storageMetrics.ts

* Update removeAllFilesFromDirectory.ts

* Update util.ts

* Update removeSyncedFilesFromDirectory.ts

* Update contexts.ts

* Update index.ts

* Update Photo.ts

* Update Sound.js

* Update logManagementHelpers.ts

* Update PhotoLibrary.tsx

* Update flattenUploadParams.ts

* Update shouldFetchObservationLocation.ts

* Update Developer.tsx

* Update vision-camera.js

* Update sentinelFiles.ts

* Move mock

* Switch to unlink util
2026-04-14 00:57:20 +02:00
Johannes Klein
54059cb002 Update useDeferredStartup.ts (#3530) 2026-04-13 21:03:46 +02:00
iNaturalist Crowdin Sync
c6f56ab9c8 New Crowdin translations by GitHub Action (#3528)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-13 09:56:29 +02:00
dependabot[bot]
9987a2232e Bump mathjs and reassure (#3522)
Bumps [mathjs](https://github.com/josdejong/mathjs) to 15.2.0 and updates ancestor dependency [reassure](https://github.com/callstack/reassure). These dependencies need to be updated together.


Updates `mathjs` from 12.4.3 to 15.2.0
- [Changelog](https://github.com/josdejong/mathjs/blob/develop/HISTORY.md)
- [Commits](https://github.com/josdejong/mathjs/compare/v12.4.3...v15.2.0)

Updates `reassure` from 1.1.0 to 1.4.1
- [Release notes](https://github.com/callstack/reassure/releases)
- [Commits](https://github.com/callstack/reassure/commits)

---
updated-dependencies:
- dependency-name: mathjs
  dependency-version: 15.2.0
  dependency-type: indirect
- dependency-name: reassure
  dependency-version: 1.4.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 09:07:04 +02:00
dependabot[bot]
f67f705989 Bump axios from 1.13.6 to 1.15.0 (#3518)
Bumps [axios](https://github.com/axios/axios) from 1.13.6 to 1.15.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.6...v1.15.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.15.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-12 08:50:40 +02:00
Johannes Klein
157aaa0758 Replace deprecated assumption syntax (#3519) 2026-04-11 10:07:41 +02:00
iNaturalist Crowdin Sync
83c8ac87a8 New Crowdin translations by GitHub Action (#3521) 2026-04-10 17:43:59 +02:00
Abbey Campbell
1f55121b38 Merge pull request #3513 from inaturalist/mob-1177-ios-jwt-refresh-returning-503-during-downtime-2
Mob 1177 ios jwt refresh returning 503 during downtime 2
2026-04-09 16:14:31 -07:00
iNaturalist Crowdin Sync
5f9c7e2a40 New Crowdin translations by GitHub Action (#3516)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2026-04-09 23:25:31 +02:00
Johannes Klein
1e0ea0592c Fix: Bug in the "Open Email" button in the "Reset Password" flow on Android (#3515)
* Update package.json

* Update package-lock.json

* Add few more supported schemes

* Update package.json

* Update package-lock.json

* Update Podfile.lock

* Replace email methods

* Revert "Update package-lock.json"

This reverts commit 7396891732.

* Revert "Update package.json"

This reverts commit f0a28055cc.

* Revert "Replace email methods"

This reverts commit 16483b22ab.

* Update Podfile.lock

* Replace openInbox method
2026-04-09 22:22:12 +02:00
dependabot[bot]
4db4f1a466 Bump fast-xml-parser from 4.5.4 to 4.5.6 (#3514)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 4.5.4 to 4.5.6.
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.5.4...v4.5.6)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-version: 4.5.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 14:09:20 +02:00
Abbey Campbell
ff86c4ae2f skip retries only for 503 errors 2026-04-08 15:09:15 -07:00
Abbey Campbell
466ceae203 skip retries on server errors 2026-04-08 14:35:53 -07:00
Abbey Campbell
454e78211d refactor JWT refresh from IIFE to helper 2026-04-08 14:35:44 -07:00
Johannes Klein
164ca02fa0 Replace involuntary sign out on jwt 401 with user action to login again (#3502)
* MOB-1276: first pass

* Move realm clearing below other resets

Before we were seeing a crash where a user signsOut and while deleting realm still has a reference to a realm object somewhere the app crashes (something along the lines of "accessing object which has been invalidated or deleted", I think). Which meant that subsequent lines here after reaml.deleteAll were never hit. So, we got rid of realm but still had the signals that the user is logged in like jwt and mmkv stuff. This is problematic because UI and server request have different definitions of a user is logged in: 1) sensitive item named "username" exists, and 2) realm entry for current user exists.
I don't see how this change here get's rid of the actual crash, but at least we maybe have more likelihood of deleting all things we want to delete here.

According to @FLGMwt s investigations into this this closes MOB-820 https://linear.app/inaturalist/issue/MOB-820/user-account-seem-to-be-mixed-up#comment-80cd5378

* Do not clear auth cache and sensitive info on automatic login again initiation

I think we should fully rely on the login again action to refresh jwtToken, jwtGeneratedAt, and accessToken.

We don't know which one of them is corrupt at this point, and a re-login will give us correct new ones.

* Remove comments

A) I don't think it means that *for any reason* we delete the local database. Only when we had a 401 we were deleting everything.
B) is alleviated

* Quick fix idea

If we are on the login screen for the login again flow do not show a close button. This means the user has to close the app and open again. If the 401 persists the only action the user can take is to do the login again.

* Alternative fix: sign out on login again flow close

Adding back the X button to the login flow. Pressing it explains that this is a sign out action and signs the user out making sure we also clear realm during an entire sign out deletion flow.

* Remove test

* Update src/components/LoginSignUp/LoginForm.tsx

Co-authored-by: Ryan Stelly <ryan@inaturalist.org>

* Clean up previous code suggestion

* Revert "Clean up previous code suggestion"

This reverts commit 345bb31510.

* Revert "Update src/components/LoginSignUp/LoginForm.tsx"

This reverts commit 968fcd8601.

---------

Co-authored-by: sepeterson <10458078+sepeterson@users.noreply.github.com>
Co-authored-by: Ryan Stelly <ryan@inaturalist.org>
2026-04-08 22:34:35 +02:00
Abbey Campbell
f65f23cfc4 Merge pull request #3509 from inaturalist/mob-1036-others-tab-copy-update
add empty state copy for 'others' notifications tab
2026-04-08 09:00:09 -07:00
dependabot[bot]
3475407b8e Bump lodash from 4.17.23 to 4.18.1 (#3503)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-08 17:02:20 +02:00
Johannes Klein
574f1a3a69 v1.0.20+207 v1.0.20+207 2026-04-07 22:47:11 +02:00
Johannes Klein
cb4978ff01 Critical fix: Standard camera has no shutter button 2026-04-07 22:46:07 +02:00
Abbey Campbell
900bfa3790 rename translation keys to match copy 2026-04-07 13:45:44 -07:00
Johannes Klein
e09a47f943 Update version to 1.0.20 2026-04-07 22:44:35 +02:00
Abbey Campbell
19c37f9f59 pass boolean to notifications list to determine copy 2026-04-07 13:34:42 -07:00
Johannes Klein
04234e2d3b Bundle update 2026-04-07 21:24:44 +02:00
Johannes Klein
8597afb194 Defer some StartupService tasks to idle callbacks (#3494)
* Create new component for deferred startup tasks

* Function wrapper to defer a task with requestIdleCallback

* Split cache clearing into separate callbacks

So that we can interleave user interactions, I believe.

* We have no await anymore

Also add cancel by id to effect cleanup

* Move over getStorageMetrics

* Add optional timeout param

* Change order of tasks

* Add timeout to diagnostics

* Move findAndLogSentinelFiles over

* Move checkForPreviousCrash over

* Sorry, this does not belong to this PR

But since I am here already it is just a removal without consequences.

* Add TODO

* Do not return anything from findAndLogSentinelFiles

* Rename function

* Update react-native-fs.ts

We were treating every "app start" during testing as having had some sentinel files present from a previous session, i.e. having had an error during a previous camera usage session. Changing to not having sentinelFiles present seems a more sensible default for testing to me.

* Oh, git, why?

* Refactor component to hook
2026-04-07 21:09:36 +02:00
Abbey Campbell
08840f2b92 Merge pull request #3511 from inaturalist/mob-1177-ios-jwt-refresh-returning-503-during-downtime
dedupe concurrent JWT refresh
2026-04-07 11:30:55 -07:00
Abbey Campbell
c390540869 Merge pull request #3508 from inaturalist/mob-1255-use-useusersearch-hook-for-exploreusersearch
Mob 1255 use useusersearch hook for exploreusersearch
2026-04-07 11:30:37 -07:00
Johannes Klein
5667ae63ae Merge release branch v1.0.19+206 (#3505)
* switch back to uncontrolled inputs for comments (#3504)

* v1.0.19+206

---------

Co-authored-by: Abbey Campbell <campbellabbeya@gmail.com>
2026-04-07 19:05:24 +02:00
Johannes Klein
0ce6b61be7 Refactor capture button and enlarge it (#3506) 2026-04-07 18:11:59 +02:00
Abbey Campbell
ac465d9436 dedupe concurrent JWT refresh 2026-04-06 16:34:27 -07:00
Abbey Campbell
34732c751f add empty state copy for 'others' notifications tab 2026-04-06 15:05:24 -07:00
Ryan Stelly
ad62fc104f Add rozenite controls plugin with ff toggle (#3490)
* add controls rozenite plugin

* refactor rozenite config to useRozenite hook

* add TODO comment for lifting up nav rozenite config

* move rozenite controls from devDeps to deps

* switch ff toggle to use..... a toggle : p

* remove temp code disabling logbox
2026-04-03 14:26:05 -05:00
Seth Peterson
839c949b87 Merge pull request #3492 from inaturalist/mob-1009-get-android-detox-running-locally-again
MOB-1009 get android detox running locally again
2026-04-03 13:46:40 -05:00
sepeterson
13a338598a MOB-1009: not ts in mock 2026-04-03 11:45:58 -05:00
sepeterson
b974c2167e MOB-1009: stub installData mmkv mock 2026-04-03 11:39:34 -05:00
Johannes Klein
00b1902f43 Do not call format if we have no good fmt string (#3501) 2026-04-03 18:34:27 +02:00
sepeterson
8088d32845 MOB-1009: rm model download from e2e package.json script 2026-04-03 11:29:37 -05:00
Abbey Campbell
fb68358213 fix list remounting for empty state 2026-04-02 16:28:54 -07:00
Abbey Campbell
de7ead7afb ensure whole list is scrollable above keyboard 2026-04-02 16:19:34 -07:00
Abbey Campbell
f4f98c49c1 use userSearch hook in ExploreUserSearch 2026-04-02 16:06:03 -07:00
Abbey Campbell
8438d0248a Merge pull request #3486 from inaturalist/mob-1056-nav-bar-ui-changes
Mob 1056 nav bar UI changes
2026-04-02 11:23:57 -07:00
Johannes Klein
607428e16c TS migrations (#3493)
* Update NotificationsIcon.tsx

* Update NotificationsIconContainer.tsx

* Update NavButton.tsx
2026-04-02 19:25:36 +02:00
Seth Peterson
717c298894 Merge pull request #3485 from inaturalist/mob-90-importing-photo-while-offline-in-android-gets-stuck-on
MOB-90 add some error handling around photo gallery import
2026-04-02 09:50:59 -05:00
sepeterson
eb0293c216 MOB-90: clarify comment 2026-04-02 09:35:05 -05:00