Skip to content

Commit f6e7572

Browse files
committed
Merge branch 'main' into remove-onyx-connect-in-TransactionUtils-p1
2 parents caa8e33 + 485a092 commit f6e7572

203 files changed

Lines changed: 4217 additions & 1678 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.

.github/workflows/authorChecklist.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
pull_request_target:
77
types: [opened, edited, reopened, synchronize]
88
branches: [main]
9+
paths-ignore: ['docs/articles/**/*.md', 'docs/redirects.csv', 'docs/assets/images/**']
910

1011
jobs:
1112
# Note: PHP specifically looks for the name of this job, "checklist", so if the name of the job is changed,

.github/workflows/generateTranslations.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name: Generate static translations
33
on:
44
pull_request:
55
types: [opened, synchronize]
6+
paths-ignore: ['docs/articles/**/*.md', 'docs/redirects.csv', 'docs/assets/images/**']
67

78
jobs:
89
# We always run dry-run the script to verify that it still works.

Mobile-Expensify

README.md

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -443,15 +443,7 @@ Files should be named after the component/function/constants they export, respec
443443
- All React components should be PascalCase (a.k.a. UpperCamelCase 🐫).
444444

445445
## Platform-Specific File Extensions
446-
In most cases, the code written for this repo should be platform-independent. In such cases, each module should have a single file, `index.js`, which defines the module's exports. There are, however, some cases in which a feature is intrinsically tied to the underlying platform. In such cases, the following file extensions can be used to export platform-specific code from a module:
447-
- Mobile => `index.native.js`
448-
- iOS Native App/Android Native App => `index.ios.js`/`index.android.js`
449-
- Web => `index.website.js`
450-
- Desktop => `index.desktop.js`
451-
452-
**Note:** `index.js` should be the default and only platform-specific implementations should be done in their respective files. i.e: If you have mobile-specific implementation in `index.native.js`, then the desktop/web implementation can be contained in a shared `index.js`.
453-
454-
`index.ios.js` and `index.android.js` are used when the app is running natively on respective platforms. These files are not used when users access the app through mobile browsers, but `index.website.js` is used instead. `index.native.js` are for both iOS and Android native apps. `index.native.js` should not be included in the same module as `index.ios.js` or `index.android.js`.
446+
This section has moved [here](contributingGuides/philosophies/CROSS-PLATFORM.md).
455447

456448
## API building
457449
When adding new API commands (and preferably when starting using a new one that was not yet used in this codebase) always
@@ -659,10 +651,7 @@ This application is built with the following principles.
659651
5. UI updates with data from the server
660652

661653
1. **Cross Platform 99.9999%**
662-
1. A feature isn't done until it works on all platforms. Accordingly, don't even bother writing a platform-specific code block because you're just going to need to undo it.
663-
1. If the reason you can't write cross-platform code is because there is a bug in ReactNative that is preventing it from working, the correct action is to fix RN and submit a PR upstream -- not to hack around RN bugs with platform-specific code paths.
664-
1. If there is a feature that simply doesn't exist on all platforms and thus doesn't exist in RN, rather than doing if (platform=iOS) { }, instead write a "shim" library that is implemented with NOOPs on the other platforms. For example, rather than injecting platform-specific multi-tab code (which can only work on browsers, because it's the only platform with multiple tabs), write a TabManager class that just is NOOP for non-browser platforms. This encapsulates the platform-specific code into a platform library, rather than sprinkling through the business logic.
665-
1. Put all platform specific code in dedicated files and folders, like /platform, and reject any PR that attempts to put platform-specific code anywhere else. This maintains a strict separation between business logic and platform code.
654+
See details [here](contributingGuides/philosophies/CROSS-PLATFORM.md).
666655

667656
----
668657

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009019701
118-
versionName "9.1.97-1"
117+
versionCode 1009019703
118+
versionName "9.1.97-3"
119119
// Supported language variants must be declared here to avoid from being removed during the compilation.
120120
// This also helps us to not include unnecessary language variants in the APK.
121121
resConfigs "en", "es"

contributingGuides/PERFORMANCE.md

Lines changed: 284 additions & 34 deletions
Large diffs are not rendered by default.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Cross Platform Philosophy
2+
Learn how the app supports features across all our different platforms.
3+
4+
Currently supported platforms:
5+
- Web
6+
- Mobile Web
7+
- Desktop
8+
- iOS
9+
- Android
10+
11+
The goal is: **Cross Platform 99.9999%**
12+
13+
## Rules
14+
### - Features MUST be implemented on all supported platforms
15+
A feature isn't done until it works on all platforms. Any platform-specific code blocks will be asked to be undone.
16+
17+
### - React Native bugs MUST be fixed upstream
18+
If the reason cross-platform code cannot be written is because there is a bug in ReactNative that is preventing it from working, the correct action is to fix RN and submit a PR upstream -- not to hack around RN bugs with platform-specific code paths.
19+
20+
While upstream PRs are waiting to be merged, a patch can be used which is managed by the NPM package `patch-package`. Read more about it [here](https://github.com/Expensify/App?tab=readme-ov-file#adding-hybridapp-related-patches).
21+
22+
### - Features that don't exist on all platforms MUST use NOOP shims
23+
If there is a feature that simply doesn't exist on all platforms and thus doesn't exist in RN, rather than doing `if (platform=iOS) { }`, instead write a "shim" library that is implemented with NOOPs on the other platforms. For example, rather than injecting platform-specific multi-tab code (which can only work on browsers, because it's the only platform with multiple tabs), write a TabManager class that just is NOOP for non-browser platforms. This encapsulates the platform-specific code into a platform library, rather than sprinkling through the business logic.
24+
25+
### - Platform specific code MUST be placed in dedicated files and folders
26+
Put all platform specific code in dedicated files and folders (see below) and reject any PR that attempts to put platform-specific code anywhere else. This maintains a strict separation between business logic and platform code.
27+
28+
## Platform-Specific File Extensions
29+
In most cases, the code written for this repo should be platform-independent. In such cases, each module should have a single file, `index.js`, which defines the module's exports. There are, however, some cases in which a feature is intrinsically tied to the underlying platform. In such cases, the following file extensions can be used to export platform-specific code from a module:
30+
- Mobile => `index.native.js`
31+
- iOS Native App/Android Native App => `index.ios.js`/`index.android.js`
32+
- Web => `index.website.js`
33+
- Desktop => `index.desktop.js`
34+
35+
**Note:** `index.js` should be the default and only platform-specific implementations should be done in their respective files. i.e: If you have mobile-specific implementation in `index.native.js`, then the desktop/web implementation can be contained in a shared `index.js`.
36+
37+
`index.ios.js` and `index.android.js` are used when the app is running natively on respective platforms. These files are not used when users access the app through mobile browsers, but `index.website.js` is used instead. `index.native.js` are for both iOS and Android native apps. `index.native.js` should not be included in the same module as `index.ios.js` or `index.android.js`.
38+
39+
### Supporting Mobile Web
40+
The above platform-specific files only work because they are compiled when the app is built for the different platforms. This means that a different mechanism needs to be used for Mobile Web (since "mobile web" and "web" are the same at build time).
41+
42+
It is also well known that different mobile browsers have different quirks and need to use different workarounds at times.
43+
44+
#### - Mobile browser detection SHOULD never be used
45+
If there is absolutely no other way to fix a bug, then the proper way of detecting the browser is using `@libs/Browser`. Use this as an absolute last resort and have the exception approved by several (ie. more than one) internal engineers.

contributingGuides/philosophies/INDEX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S
55
"OPTIONAL" are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
66

77
## Contents
8+
* [Cross-Platform Philosophy](/contributingGuides/philosophies/CROSS-PLATFORM.md)
89
* [Offline Philosophy](/contributingGuides/philosophies/OFFLINE.md)
910
* [Routing Philosophy](/contributingGuides/philosophies/ROUTING.md)

cspell.json

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@
3636
"ARGB",
3737
"armeabi",
3838
"armv7",
39+
"ARNK",
3940
"ARROWDOWN",
4041
"ARROWLEFT",
4142
"ARROWRIGHT",
4243
"ARROWUP",
43-
"ARNK",
4444
"artículo",
4545
"artículos",
4646
"as_siteseach",
4747
"asar",
48-
"assetlinks",
4948
"ASPAC",
49+
"assetlinks",
5050
"attributes.accountid",
5151
"attributes.reportid",
5252
"authorised",
@@ -109,17 +109,17 @@
109109
"citi",
110110
"clawback",
111111
"cleartext",
112-
"CLIENTID",
113112
"CLIA",
113+
"CLIENTID",
114114
"clippath",
115115
"Cliqbook",
116116
"cloudflarestream",
117117
"cmaps",
118118
"cmjs",
119119
"cocoapods",
120120
"Codat",
121-
"codeshare",
122121
"codegen",
122+
"codeshare",
123123
"Codice",
124124
"Combustors",
125125
"contenteditable",
@@ -146,8 +146,8 @@
146146
"deeplinking",
147147
"deeplinks",
148148
"delegators",
149-
"deployers",
150149
"delish",
150+
"deployers",
151151
"describedby",
152152
"Deutsch",
153153
"devportal",
@@ -168,8 +168,8 @@
168168
"durationMillis",
169169
"e2edelta",
170170
"ecash",
171-
"econn",
172171
"ecconnrefused",
172+
"econn",
173173
"EDIFACT",
174174
"Egencia",
175175
"Electromedical",
@@ -181,9 +181,9 @@
181181
"endcapture",
182182
"enddate",
183183
"endfor",
184+
"enroute",
184185
"entityid",
185186
"Entra",
186-
"enroute",
187187
"ENVFILE",
188188
"Ephermeral",
189189
"eraa",
@@ -290,6 +290,7 @@
290290
"inbetweenCompo",
291291
"Inclusivity",
292292
"initialises",
293+
"inputmethod",
293294
"instancetype",
294295
"Intacct",
295296
"intenthandler",
@@ -305,6 +306,7 @@
305306
"Italiano",
306307
"ITSM",
307308
"Jakub",
309+
"jank",
308310
"janky",
309311
"jarsigner",
310312
"johndoe",
@@ -475,12 +477,15 @@
475477
"Picklist",
476478
"picklists",
477479
"PINGPONG",
480+
"pkill",
478481
"Pluginfile",
479482
"pluralrules",
483+
"pnrs",
480484
"Podfile",
481485
"podspec",
482486
"podspecs",
483487
"Pokdumss",
488+
"POLICYCHANGELOG_ADD_EMPLOYEE",
484489
"Polski",
485490
"popen3",
486491
"Português",
@@ -587,6 +592,7 @@
587592
"Smartscan",
588593
"soloader",
589594
"SONIFICATION",
595+
"Speedscope",
590596
"Spotnana",
591597
"spreadsheetml",
592598
"SSAE",
@@ -618,7 +624,9 @@
618624
"Svmy",
619625
"Swipeable",
620626
"symbolicate",
627+
"symbolicated",
621628
"Symbolicates",
629+
"symbolication",
622630
"systempreferences",
623631
"tabindex",
624632
"Talkspace",
@@ -628,6 +636,7 @@
628636
"Teleproduction",
629637
"testflight",
630638
"TIMATIC",
639+
"Timothée",
631640
"tnode",
632641
"tobe",
633642
"togglefullscreen",
@@ -706,7 +715,9 @@
706715
"xcpretty",
707716
"xcprivacy",
708717
"xcrun",
718+
"xcshareddata",
709719
"xctrace",
720+
"xcuserdata",
710721
"xcworkspace",
711722
"xdescribe",
712723
"xero",
@@ -730,13 +741,9 @@
730741
"zoneinfo",
731742
"zxcv",
732743
"zxldvw",
733-
"مثال",
734-
"pkill",
735-
"pnrs",
736-
"POLICYCHANGELOG_ADD_EMPLOYEE",
737-
"xcshareddata",
738-
"xcuserdata",
739-
"inputmethod"
744+
"inputmethod",
745+
"copyable",
746+
"مثال"
740747
],
741748
"ignorePaths": [
742749
"src/languages/de.ts",

0 commit comments

Comments
 (0)