Skip to content

Commit 5196596

Browse files
committed
Merge remote-tracking branch 'upstream/main' into fix-85553-rbr-carousel-sorting
2 parents 9400b6e + e6e5bfd commit 5196596

427 files changed

Lines changed: 11160 additions & 4456 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mobile-Expensify

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ android {
111111
minSdkVersion rootProject.ext.minSdkVersion
112112
targetSdkVersion rootProject.ext.targetSdkVersion
113113
multiDexEnabled rootProject.ext.multiDexEnabled
114-
versionCode 1009036506
115-
versionName "9.3.65-6"
114+
versionCode 1009036605
115+
versionName "9.3.66-5"
116116
// Supported language variants must be declared here to avoid from being removed during the compilation.
117117
// This also helps us to not include unnecessary language variants in the APK.
118118
resConfigs "en", "es"

assets/images/bank-lock.svg

Lines changed: 1 addition & 0 deletions
Loading

config/eslint/eslint.config.mjs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,16 @@ const config = defineConfig([
269269
'@typescript-eslint/max-params': ['error', {max: 10}],
270270
'@typescript-eslint/naming-convention': [
271271
'error',
272+
{
273+
selector: ['variable', 'property'],
274+
format: null,
275+
// Allow __esModule because it is a well-known interop property injected by bundlers
276+
// (e.g. Babel/Webpack) and sometimes required by library internals (e.g. react-native-skia).
277+
filter: {
278+
regex: '^__esModule$',
279+
match: true,
280+
},
281+
},
272282
{
273283
selector: ['variable', 'property'],
274284
format: ['camelCase', 'UPPER_CASE', 'PascalCase'],

config/eslint/eslint.seatbelt.tsv

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116
"../../src/components/RadioButtonWithLabel.tsx" "no-restricted-syntax" 1
117117
"../../src/components/Reactions/AddReactionBubble.tsx" "react-hooks/refs" 1
118118
"../../src/components/Reactions/MiniQuickEmojiReactions.tsx" "react-hooks/refs" 1
119-
"../../src/components/ReimbursementAccountLoadingIndicator.tsx" "@typescript-eslint/no-deprecated" 1
120119
"../../src/components/ReportActionItem/MoneyRequestReceiptView.tsx" "react-hooks/set-state-in-effect" 1
121120
"../../src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx" "react-hooks/preserve-manual-memoization" 2
122121
"../../src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx" "react-hooks/refs" 1
@@ -279,7 +278,7 @@
279278
"../../src/libs/actions/Policy/PerDiem.ts" "no-restricted-syntax" 1
280279
"../../src/libs/actions/Policy/Plan.ts" "no-restricted-syntax" 1
281280
"../../src/libs/actions/Policy/Policy.ts" "no-restricted-syntax" 10
282-
"../../src/libs/actions/Policy/Policy.ts" "rulesdir/no-onyx-connect" 4
281+
"../../src/libs/actions/Policy/Policy.ts" "rulesdir/no-onyx-connect" 3
283282
"../../src/libs/actions/Policy/ReportField.ts" "no-restricted-syntax" 4
284283
"../../src/libs/actions/Policy/Rules.ts" "no-restricted-syntax" 3
285284
"../../src/libs/actions/Policy/Tag.ts" "no-restricted-syntax" 4
@@ -354,8 +353,6 @@
354353
"../../src/pages/Search/SearchAdvancedFiltersPage/SearchFiltersCardPage.tsx" "react-hooks/set-state-in-effect" 1
355354
"../../src/pages/Search/SearchPage.tsx" "react-hooks/refs" 31
356355
"../../src/pages/Search/SearchPage.tsx" "react-hooks/set-state-in-effect" 1
357-
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "react-hooks/immutability" 2
358-
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "react-hooks/preserve-manual-memoization" 1
359356
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "react-hooks/refs" 12
360357
"../../src/pages/TransactionMerge/MergeFieldReview.tsx" "no-restricted-syntax" 1
361358
"../../src/pages/TransactionMerge/TransactionMergeReceipts.tsx" "no-restricted-syntax" 1

contributingGuides/NAVIGATION.md

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -750,11 +750,49 @@ KEYBOARD_SHORTCUTS: {
750750
> and makes it harder to reason about which screens can trigger a given flow.
751751
> When in doubt, prefer an explicit list.
752752

753-
### Current limitations (work in progress)
753+
### Optional path parameters
754754

755-
- **Optional path parameters:** Suffixes must not include optional path params (e.g. `a/:reportID?`). Required path parameters (e.g. `flag/:reportActionID`) and query parameters are supported - see [Dynamic routes with query parameters](#dynamic-routes-with-query-parameters).
755+
Dynamic route suffixes may declare optional path parameters by appending `?` to the parameter name.
756+
An optional parameter can be present or absent in the URL; when absent, the corresponding key is
757+
omitted from the navigation state's `params` (it is **not** set to `undefined`).
756758

757-
If you try to use dynamic routes with optional path parameters now, you will either fail to navigate to the page at all or end up on a non-existent page, and the navigation will be broken.
759+
Optionals can appear anywhere in the suffix:
760+
761+
- **Trailing optional:** `member-details/:accountID?` matches both `member-details` and `member-details/123`.
762+
- **Middle optional:** `wrap/:p?/end` matches both `wrap/end` and `wrap/x/end`.
763+
- **Multiple optionals:** `a/:p1?/b/:p2?` matches `a/b`, `a/x/b`, `a/b/y`, and `a/x/b/y`.
764+
765+
#### Configuration example
766+
767+
```ts
768+
DYNAMIC_ROUTES: {
769+
MEMBER_DETAILS: {
770+
path: 'member-details/:accountID?',
771+
entryScreens: [SCREENS.WORKSPACE.MEMBERS],
772+
getRoute: (accountID?: string) => (accountID ? `member-details/${accountID}` : 'member-details'),
773+
},
774+
},
775+
```
776+
777+
#### Precedence rules
778+
779+
When several registered suffixes could match the same URL, the matcher uses a deterministic
780+
three-phase order. Each phase exhausts all sub-suffix lengths (longest to shortest) before the
781+
next phase begins:
782+
783+
1. **Static beats everything.** All sub-suffix lengths are checked for an exact static match
784+
first. A short static match (e.g. single-segment `country`) always beats a longer parametric
785+
match (e.g. `:reportID/country`).
786+
2. **Strict parametric beats optional parametric.** After statics, all sub-suffix lengths are
787+
checked for strict parametric patterns (no optional params, e.g. `flag/:reportID/:reportActionID`).
788+
Only after those are exhausted does the matcher try optional parametric patterns
789+
(e.g. `page/:id?`).
790+
3. **Longest match wins within each phase.** Within a single phase the algorithm iterates from
791+
the longest candidate to the shortest, so a 3-segment match beats a 2-segment one when both
792+
are registered.
793+
4. **Among patterns of the same kind: first registered wins.** If multiple patterns of the same
794+
type (strict or optional) could match the same candidate, the one declared first in
795+
`DYNAMIC_ROUTES` wins.
758796

759797
### Multi-segment dynamic routes
760798

cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@
191191
"Dishoom",
192192
"displaystatus",
193193
"DocuSign",
194+
"domelementtype",
194195
"domhandler",
195196
"domparser",
196197
"dont",

ios/NewExpensify/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<key>CFBundlePackageType</key>
2424
<string>APPL</string>
2525
<key>CFBundleShortVersionString</key>
26-
<string>9.3.65</string>
26+
<string>9.3.66</string>
2727
<key>CFBundleSignature</key>
2828
<string>????</string>
2929
<key>CFBundleURLTypes</key>
@@ -44,7 +44,7 @@
4444
</dict>
4545
</array>
4646
<key>CFBundleVersion</key>
47-
<string>9.3.65.6</string>
47+
<string>9.3.66.5</string>
4848
<key>FullStory</key>
4949
<dict>
5050
<key>OrgId</key>

ios/NotificationServiceExtension/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.3.65</string>
14+
<string>9.3.66</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.65.6</string>
16+
<string>9.3.66.5</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

ios/ShareViewController/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.3.65</string>
14+
<string>9.3.66</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.65.6</string>
16+
<string>9.3.66.5</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionAttributes</key>

0 commit comments

Comments
 (0)