Skip to content

Commit 1b3474c

Browse files
authored
Merge branch 'Expensify:main' into xero-travel-invoicing-payable-account
2 parents e8b322f + 1b89b63 commit 1b3474c

583 files changed

Lines changed: 9731 additions & 6412 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 1009037300
115-
versionName "9.3.73-0"
114+
versionCode 1009037401
115+
versionName "9.3.74-1"
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"

config/eslint/eslint.seatbelt.tsv

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@
109109
"../../src/components/MagicCodeInput.tsx" "react-hooks/refs" 1
110110
"../../src/components/MagicCodeInput.tsx" "react-hooks/set-state-in-effect" 3
111111
"../../src/components/MapView/MapView.tsx" "react-hooks/set-state-in-effect" 1
112-
"../../src/components/MapView/MapView.website.tsx" "react-hooks/set-state-in-effect" 1
113-
"../../src/components/MapView/MapViewImpl.website.tsx" "react-hooks/set-state-in-effect" 1
112+
"../../src/components/MapView/MapView.web.tsx" "react-hooks/set-state-in-effect" 1
113+
"../../src/components/MapView/MapViewImpl.web.tsx" "react-hooks/set-state-in-effect" 1
114114
"../../src/components/MapView/ToggleDistanceUnitButton/index.android.tsx" "no-restricted-syntax" 1
115115
"../../src/components/MessagesRow.tsx" "no-restricted-syntax" 1
116116
"../../src/components/Modal/BaseModal.tsx" "react-hooks/set-state-in-effect" 1
@@ -224,7 +224,6 @@
224224
"../../src/hooks/useNativeCamera.ts" "react-hooks/refs" 1
225225
"../../src/hooks/useNewTransactions.ts" "react-hooks/refs" 2
226226
"../../src/hooks/useOutstandingBalanceGuard.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
227-
"../../src/hooks/usePaginatedReportActions.ts" "react-hooks/refs" 1
228227
"../../src/hooks/usePaymentOptions.ts" "react-hooks/refs" 1
229228
"../../src/hooks/usePrevious.ts" "react-hooks/refs" 1
230229
"../../src/hooks/useProactiveAppReview.ts" "react-hooks/purity" 1
@@ -365,8 +364,8 @@
365364
"../../src/libs/actions/IOU/index.ts" "@typescript-eslint/no-deprecated/getPolicyTagsData" 2
366365
"../../src/libs/actions/IOU/index.ts" "rulesdir/no-onyx-connect" 10
367366
"../../src/libs/actions/ImportTransactions.ts" "no-restricted-syntax" 1
368-
"../../src/libs/actions/InputFocus/index.website.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
369-
"../../src/libs/actions/InputFocus/index.website.ts" "no-restricted-syntax" 1
367+
"../../src/libs/actions/InputFocus/index.web.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
368+
"../../src/libs/actions/InputFocus/index.web.ts" "no-restricted-syntax" 1
370369
"../../src/libs/actions/Link.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
371370
"../../src/libs/actions/Link.ts" "no-restricted-syntax" 3
372371
"../../src/libs/actions/MapboxToken.ts" "no-restricted-syntax" 2
@@ -492,11 +491,11 @@
492491
"../../src/pages/Share/ShareRootPage.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
493492
"../../src/pages/TransactionDuplicate/Confirmation.tsx" "react-hooks/refs" 12
494493
"../../src/pages/Travel/TravelUpgrade.tsx" "react-hooks/set-state-in-effect" 1
495-
"../../src/pages/ValidateLoginPage/index.website.tsx" "react-hooks/set-state-in-effect" 1
494+
"../../src/pages/ValidateLoginPage/index.web.tsx" "react-hooks/set-state-in-effect" 1
496495
"../../src/pages/domain/Groups/PreferredWorkspaceToggle.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
497496
"../../src/pages/domain/Saml/SamlLoginSectionContent.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
498497
"../../src/pages/inbox/DeleteTransactionNavigateBackHandler.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
499-
"../../src/pages/inbox/ReportFetchHandler.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
498+
"../../src/pages/inbox/ReportFetchHandler.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 3
500499
"../../src/pages/inbox/ReportNavigateAwayHandler.tsx" "react-hooks/exhaustive-deps" 1
501500
"../../src/pages/inbox/hooks/useReportWasDeleted.ts" "react-hooks/set-state-in-effect" 1
502501
"../../src/pages/inbox/report/ContextMenu/BaseReportActionContextMenu.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
@@ -505,27 +504,28 @@
505504
"../../src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx" "@typescript-eslint/no-deprecated/getReportNameDeprecated" 1
506505
"../../src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx" "@typescript-eslint/no-deprecated/ConfirmModal" 1
507506
"../../src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
508-
"../../src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx" "react-hooks/refs" 29
507+
"../../src/pages/inbox/report/ContextMenu/PopoverReportActionContextMenu.tsx" "react-hooks/refs" 30
509508
"../../src/pages/inbox/report/ListBoundaryLoader.tsx" "react-hooks/set-state-in-effect" 1
510509
"../../src/pages/inbox/report/PureReportActionItem.tsx" "react-hooks/refs" 2
511510
"../../src/pages/inbox/report/PureReportActionItem.tsx" "react-hooks/set-state-in-effect" 1
512511
"../../src/pages/inbox/report/ReactionList/HeaderReactionList.tsx" "no-restricted-syntax" 1
513-
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
514-
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions.tsx" "react-hooks/refs" 7
512+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
513+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "react-hooks/preserve-manual-memoization" 2
514+
"../../src/pages/inbox/report/ReportActionCompose/ComposerWithSuggestions/ComposerWithSuggestions.tsx" "react-hooks/refs" 8
515515
"../../src/pages/inbox/report/ReportActionCompose/SuggestionEmoji.tsx" "react-hooks/refs" 1
516516
"../../src/pages/inbox/report/ReportActionCompose/SuggestionMention.tsx" "react-hooks/refs" 3
517517
"../../src/pages/inbox/report/ReportActionItemMessage.tsx" "@typescript-eslint/no-deprecated/getReportName" 1
518-
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
518+
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
519519
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "no-restricted-syntax" 1
520520
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/preserve-manual-memoization" 1
521-
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/refs" 5
521+
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/refs" 6
522522
"../../src/pages/inbox/report/ReportActionItemMessageEdit.tsx" "react-hooks/set-state-in-effect" 1
523523
"../../src/pages/inbox/report/ReportActionsList.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 4
524524
"../../src/pages/inbox/report/ReportActionsList.tsx" "react-hooks/refs" 5
525525
"../../src/pages/inbox/report/ReportActionsList.tsx" "react-hooks/set-state-in-effect" 3
526526
"../../src/pages/inbox/report/TripSummary.tsx" "rulesdir/no-default-id-values" 1
527527
"../../src/pages/inbox/report/UserTypingEventListener.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 4
528-
"../../src/pages/inbox/report/shouldUseEmojiPickerSelection/index.website.ts" "no-restricted-syntax" 1
528+
"../../src/pages/inbox/report/shouldUseEmojiPickerSelection/index.web.ts" "no-restricted-syntax" 1
529529
"../../src/pages/inbox/report/useReportActionsNewActionLiveTail.ts" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 1
530530
"../../src/pages/inbox/report/withReportOrNotFound.tsx" "react-hooks/refs" 3
531531
"../../src/pages/inbox/sidebar/SidebarLinksData.tsx" "react-hooks/refs" 1
@@ -694,7 +694,7 @@
694694
"../../src/pages/workspace/workflows/approvals/WorkspaceWorkflowsApprovalsEditPage.tsx" "@typescript-eslint/no-deprecated/InteractionManager.runAfterInteractions" 2
695695
"../../src/stories/ReportActionItemImages.stories.tsx" "no-restricted-syntax" 1
696696
"../../src/stories/TextInput.stories.tsx" "react-hooks/set-state-in-effect" 1
697-
"../../src/styles/utils/autoCompleteSuggestion/index.website.ts" "no-restricted-syntax" 1
697+
"../../src/styles/utils/autoCompleteSuggestion/index.web.ts" "no-restricted-syntax" 1
698698
"../../src/types/onyx/Account.ts" "no-restricted-syntax" 1
699699
"../../src/types/onyx/AccountData.ts" "no-restricted-syntax" 1
700700
"../../src/types/onyx/BankAccount.ts" "no-restricted-syntax" 1

config/webpack/webpack.common.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -396,10 +396,9 @@ const getCommonConfiguration = ({file = '.env', platform = 'web'}: Environment):
396396
'@selectors': path.resolve(dirname, '../../src/selectors/'),
397397
},
398398

399-
// React Native libraries may have web-specific module implementations that appear with the extension `.web.js`
400-
// without this, web will try to use native implementations and break in not very obvious ways.
401-
// This is also why we have to use .website.js for our own web-specific files...
402-
extensions: ['.web.js', '.website.js', '.js', '.jsx', '.web.ts', '.website.ts', '.website.tsx', '.ts', '.web.tsx', '.tsx'],
399+
// Resolve web-specific implementations (`.web.*`) before bare files so React Native
400+
// libraries and our own app-level overrides both pick up their browser variants.
401+
extensions: ['.web.js', '.js', '.jsx', '.web.ts', '.web.tsx', '.ts', '.tsx'],
403402
fallback: {
404403
'process/browser': require.resolve('process/browser'),
405404
crypto: false,

contributingGuides/philosophies/CROSS-PLATFORM.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ Put all platform specific code in dedicated files and folders (see below) and re
2828
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:
2929
- Mobile => `index.native.js`
3030
- iOS Native App/Android Native App => `index.ios.js`/`index.android.js`
31-
- Web => `index.website.js`
31+
- Web => `index.web.js`
3232

3333
**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 web implementation can be contained in a shared `index.js`.
3434

35-
`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`.
35+
`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.web.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`.
3636

3737
### Supporting Mobile Web
3838
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).

cspell.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@
278278
"FLJZ",
279279
"fname",
280280
"fnames",
281+
"focusability",
281282
"focusvisible",
282283
"fontawesome",
283284
"foreignamount",
@@ -325,6 +326,7 @@
325326
"Highlightable",
326327
"HKBCCATT",
327328
"Hoverable",
329+
"hrefs",
328330
"HRMS",
329331
"HSBCSGS",
330332
"Humpty",
@@ -333,6 +335,7 @@
333335
"iaco",
334336
"IBTA",
335337
"IDEIN",
338+
"idempotently",
336339
"idfa",
337340
"Idology",
338341
"ifdef",

docs/articles/new-expensify/billing-and-subscriptions/Add-a-payment-card-and-view-your-subscription.md

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
---
22
title: Manage Expensify Subscription
3-
description: Learn how to manage your subscription, update billing details, cancel early, or delete a workspace in New Expensify.
3+
description: Learn how to manage your subscription, update billing details, request to cancel your subscription, or delete a workspace in New Expensify.
44
keywords: [New Expensify, billing owner, manage subscription, update payment card, cancel subscription, delete workspace, billing and subscriptions, subscription settings, can't delete workspace, can't cancel subscription]
55
internalScope: Audience is billing owners and Workspace Admins. Covers how to manage a paid subscription in New Expensify, including billing permissions and ownership transfer. Does not cover free workspaces or plan upgrades.
66
---
77

8-
You can manage your Expensify subscription anytime from your account settings—update your billing info, request early cancellation, or delete a workspace if you're the billing owner.
9-
10-
View and manage your subscription under **Account > Subscription**.
8+
You can manage your Expensify subscription in **Account > Subscription**. From there, you can update your billing information, request to cancel your subscription, or delete a workspace if you're the billing owner.
119

1210
---
1311

@@ -16,7 +14,7 @@ View and manage your subscription under **Account > Subscription**.
1614
Only the **billing owner** can:
1715

1816
- Add or change the payment card
19-
- Request early cancellation of an annual plan
17+
- Request to cancel an annual subscription
2018
- Delete a paid workspace
2119

2220
If you don’t see these options, you’re likely not the billing owner.
@@ -72,14 +70,12 @@ To access the **Subscription** section:
7270

7371
---
7472

75-
# How to request early cancellation of an annual subscription
76-
73+
# How to request to cancel an annual subscription
74+
## How to request to cancel an annual subscription
7775
1. Go to **Account > Subscription**.
78-
2. Click **Request early cancellation**.
76+
2. Click **Cancel subscription**.
7977
3. Follow the prompts. Your request may be processed automatically or reviewed by our team.
8078

81-
**Note:** This option is only available to the billing owner and early cancellation is not available to all members.
82-
8379
---
8480

8581
# How to stop billing for a paid workspace
@@ -89,7 +85,7 @@ To stop being charged for Expensify, you’ll need to either:
8985
- **Delete the paid workspace**, or
9086
- **Transfer billing ownership** to another member.
9187

92-
**Note:** If you're on an annual subscription, you can’t delete your last workspace unless you’ve first requested and received early cancellation.
88+
**Note:** If youre on an annual subscription, you can’t delete your last workspace unless you’ve first canceled your subscription.
9389

9490
---
9591

@@ -117,8 +113,8 @@ Only Workspace Admins can transfer billing ownership to themselves - it’s not
117113

118114
# What to do if you can’t update a subscription
119115

120-
If you're blocked from updating billing settings, canceling early, or deleting a workspace, it's likely because you’re not the billing owner.
121-
116+
If youre blocked from updating billing settings, requesting to canceling your subscription, or deleting a workspace, its likely because you’re not the billing owner.
117+
If you're blocked from updating billing settings, requesting to cancel your subscription, or deleting a workspace, it's likely because you're not the billing owner.
122118
If you are a Workspace Admin, you can transfer billing ownership to yourself by following the steps to [transfer billing ownership](LINK).
123119

124120
---
@@ -127,13 +123,13 @@ If you are a Workspace Admin, you can transfer billing ownership to yourself by
127123

128124
## Why don’t I see the option to cancel or delete my workspace?
129125

130-
Only the billing owner can cancel a subscription or delete a workspace. To confirm if you're the billing owner, go to the **Workspaces** tab and check the **Billing owner** column for the relevant workspace.
126+
Only the billing owner can request to cancel a subscription or delete a workspace. To confirm if you're the billing owner, go to the **Workspaces** tab and check the **Billing owner** column for the relevant workspace.
131127

132128
---
133129

134130
## Can I delete a workspace if I’m on an annual subscription?
135131

136-
Only if you’ve been granted early cancellation. Otherwise, you’ll need to either wait for the subscription to end or request early cancellation first.
132+
Only if your subscription has been canceled. Otherwise, you’ll need to either wait for the subscription to end or cancel your subscription first.
137133

138134
---
139135

docs/articles/new-expensify/billing-and-subscriptions/Changing-Your-Workspace-Plan.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ To switch to a different plan:
2323
If you're on an Annual Subscription (a 12-month commitment), you may be eligible for early cancellation and a switch to a free account:
2424

2525
1. Use the **navigation tabs** (on the left on web, and at the bottom on mobile) to go to **Account > Subscription**.
26-
2. Select **Request early cancellation**.
26+
2. Select **Cancel subscription**.
2727
3. Follow the prompts. Your request may be processed automatically or reviewed by our team.
2828

29-
**Note:** Early cancellations are subject to eligibility review.
29+
**Note:** Cancellation requests are subject to eligibility review.
3030

3131
---
3232

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.73</string>
26+
<string>9.3.74</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.73.0</string>
47+
<string>9.3.74.1</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.73</string>
14+
<string>9.3.74</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.73.0</string>
16+
<string>9.3.74.1</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

0 commit comments

Comments
 (0)