Skip to content

Commit 9d81ad8

Browse files
Merge branch 'main' into helpsite-search-operators-updates
2 parents 836860a + e194978 commit 9d81ad8

333 files changed

Lines changed: 7602 additions & 8125 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/test.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ jobs:
3131
- name: Setup Node
3232
uses: ./.github/actions/composite/setupNode
3333

34-
- name: Get number of CPU cores
35-
id: cpu-cores
36-
uses: SimenB/github-actions-cpu-cores@31e91de0f8654375a21e8e83078be625380e2b18
37-
3834
- name: Cache Jest cache
3935
id: cache-jest-cache
4036
# v5.0.1

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 1009036201
115-
versionName "9.3.62-1"
114+
versionCode 1009036203
115+
versionName "9.3.62-3"
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"

babel.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ const metro = {
130130
production: {
131131
plugins: [['transform-remove-console', {exclude: ['error', 'warn']}]],
132132
},
133+
test: {
134+
plugins: ['@babel/plugin-transform-dynamic-import'],
135+
},
133136
},
134137
};
135138

contributingGuides/PERFORMANCE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ Since our codebase is very complex, it results in a large DOM tree rendered for
282282

283283
One of the most common issues is related to modals, popovers, and tooltips — elements that may appear on the screen. The problem is that they are usually present in the DOM tree even when initially invisible. Because of this, the initial render time of a screen may increase, ultimately slowing down the app.
284284

285-
The solution is better control of invisible elements, making sure they are not included in the first render. This can be done, e.g., by a simple `return null`, smart usage of `lazy loading`, the `useTransition` hook, or the `<Deferred />` component.
285+
The solution is better control of invisible elements, making sure they are not included in the first render. This can be done, e.g., by a simple `return null`, smart usage of `lazy loading`, the `useTransition` hook, or the [`<NavigationDeferredMount />`](/src/components/NavigationDeferredMount.tsx) component. `<NavigationDeferredMount />` gates a heavy subtree behind navigation transition completion via `TransitionTracker`, rendering a cheap `placeholder` until the nav animation has finished, then mounting its `children` inside `startTransition` — ideal for heavy subtrees (e.g. report headers, page-level secondary actions) mounted during navigation transitions that pull many `useOnyx` subscriptions or heavy hooks but don't need to be interactive on first render.
286286

287287
Another issue worth mentioning is unnecessary code execution, especially for elements that are never shown on a specific platform. In theory, we separate the logic between platforms by using index.tsx/index.native.tsx files, but sometimes platform-specific logic may slip in, causing unnecessary execution. For example, this may happen when logic specific to a wide layout (applicable only for web) is included.
288288

@@ -294,6 +294,7 @@ Examples:
294294
- [PopoverWithMeasuredContent optimization for mobile](https://github.com/Expensify/App/pull/68223) - returns early to avoid unnecessary calculations
295295
- [Reduce confirm modal initial render count](https://github.com/Expensify/App/pull/67518) - returns early to reduce first load cost
296296
- [Do not render PopoverMenu until it gets opened](https://github.com/Expensify/App/pull/67877) - adds a wrapper to control if `PopoverMenu` should be rendered
297+
- [Defer mount of MoneyReportHeaderSecondaryActions](https://github.com/Expensify/App/pull/88522) - introduces `NavigationDeferredMount` and uses it to defer the "More" dropdown subtree (20+ `useOnyx` subscriptions) until the navigation transition completes
297298

298299
# Proposing Performance Improvements
299300

contributingGuides/STYLE.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -571,9 +571,7 @@ When you change the function id argument type to allow `undefined`, check if it
571571
572572
```diff
573573
function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = false, updatedTransaction, isFromReviewDuplicates = false}: MoneyRequestViewProps) {
574-
const [parentReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`, {
575-
canEvict: false,
576-
});
574+
const [parentReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`);
577575
- const parentReportAction = parentReportActions?.[report?.parentReportActionID ?? '-1'];
578576
+ const parentReportAction = parentReportActions?.[report?.parentReportActionID];
579577
```

contributingGuides/philosophies/ONYX-DATA-MANAGEMENT.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,7 @@ Different platforms come with varying storage capacities and Onyx has a way to g
3535

3636
**To flag a key as safe for removal:**
3737
- Add the key to the `evictableKeys` option in `Onyx.init(options)`
38-
- Implement `canEvict` in the Onyx config for each component subscribing to a key
39-
- The key will only be deleted when all subscribers return `true` for `canEvict`
40-
41-
Example:
42-
```js
43-
Onyx.init({
44-
evictableKeys: [ONYXKEYS.COLLECTION.REPORT_ACTIONS],
45-
});
46-
47-
const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${reportID}`, {canEvict: !isActiveReport});
48-
```
38+
- A least recently accessed key will only be deleted when an Onyx operation retries after failing.
4939

5040
## Onyx Derived Values
5141

cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,7 @@
912912
"Zürcher",
913913
"CARDFROZEN",
914914
"CARDUNFROZEN",
915+
"backgrounded",
915916
"Kolkata"
916917
],
917918
"ignorePaths": [
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
title: Accounting Search Shortcuts
3+
description: Use the Accounting search shortcuts on the Spend page to review expense status, prepare for export, and reconcile transactions with your accounting records.
4+
keywords: [New Expensify, accounting expensify, reconcile expenses, awaiting export, cash accruals, card accruals, card statements, bank reconciliation, month-end close, search shortcut, accounting shortcut]
5+
internalScope: Audience is Workspace Admins. Covers using the Accounting section to review expense states and support reconciliation workflows. Does not cover exporting or performing reconciliation in detail.
6+
---
7+
8+
# Accounting Search Shortcuts
9+
10+
The **Accounting** search shortcuts on the **Spend** page bring together the expense views you need to reconcile your records and close your books. It helps you identify what’s ready to export, what still needs attention, and what should be matched against statements or bank data.
11+
12+
Workspace Admins can use these shortcuts to validate totals, track liabilities, and ensure your expenses align with accounting records before and after export.
13+
14+
---
15+
16+
## Who can use Accounting search shortcuts
17+
18+
Workspace Admins with:
19+
- Approvals turned on
20+
- Either reimbursements enabled or at least one card feed connected
21+
22+
---
23+
24+
## How to use the Accounting search shortcuts
25+
26+
1. In the navigation tabs (on the left on web, on the bottom on mobile) select **Spend**.
27+
2. In the **Accounting** section, choose a search shortcut based on what you need to review.
28+
3. Use filters like **Date**, **Feed**, or **Posted** to refine your view.
29+
4. Review the **Total** in the footer to understand the amount for that view.
30+
31+
Once you’ve reviewed the expenses, you can export them to a CSV if you need to share or work with the data outside of Expensify. Learn how to [export expenses to a CSV](/articles/new-expensify/reports-and-expenses/How-to-Export-Expenses#how-to-export-multiple-expenses).
32+
33+
---
34+
35+
## What each Accounting search shortcut shows you
36+
37+
- **Awaiting export**: Reports that are approved and ready to be exported to your accounting system.
38+
- **Cash accruals**: Reimbursable expenses that are not yet approved and may need to be accrued.
39+
- **Card accruals**: Imported card expenses that are not yet approved and may need to be accrued.
40+
- **Card statements**: Credit card expenses grouped by statement periods to help you reconcile against your card statement.
41+
- **Bank reconciliation**: Reimbursed reports and Expensify Card settlement withdrawals to help you match transactions with your bank data.
42+
43+
---
44+
45+
## What happens after you review expenses with Accounting search shortcuts
46+
47+
- You can identify reports that are ready to export to your accounting system.
48+
- You can account for unapproved expenses as accruals before closing a period.
49+
- You can verify imported credit card expense totals against statements and bank data.
50+
- You can ensure your records are complete before and after reconciliation.
51+
52+
---
53+
54+
# FAQ
55+
56+
## Why don’t I see all Accounting search shortcuts?
57+
58+
Some search shortcuts only appear when the required features are enabled:
59+
60+
- **Cash accruals** requires reimbursements
61+
- **Card accruals** and **Card statements** require a card feed
62+
- **Bank reconciliation** requires a validated business bank account.
63+
64+
If a feature isn’t enabled, its shortcut won’t appear.
65+
66+
## Can I export expenses from the Accounting search shortcuts?
67+
68+
Yes. You can export expenses from any shortcut to a CSV file if you need to use the data outside of Expensify.
69+
70+
71+
## Why does the total change when I apply filters?
72+
73+
The **Total** reflects only the expenses shown in your current shortcut. Changing filters like **Date**, **Feed,** or **Posted** will update the total based on those results.
74+
75+
## Can I filter Card accruals by feed?
76+
77+
Yes. If you have more than one card feed, a **Feed** filter will appear so you can review one account at a time.
78+

docs/articles/new-expensify/reports-and-expenses/Approve-Expenses.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ On any expense submitted on a report, the approver can:
3232

3333
## How to review and approve a report
3434

35-
When a report is submitted to you for approval it will appear in the **For you** section on **Home**, and on **Reports** in the **Approve** section.
35+
When a report is submitted to you for approval it will appear in the **For you** section on **Home**, and under **Spend** in the **Expense reports** section, under **Needs approval**.
3636

3737
To review and approve a report submitted to you for approval:
3838

@@ -69,7 +69,7 @@ Workspace admins can bypass the approval workflow on a report to final approve i
6969

7070
## How to hold an expense
7171

72-
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Reports > Expenses**.
72+
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Spend > All expenses**.
7373
2. Locate the expense you want to hold.
7474
3. Click the expense to open it.
7575
4. Click **More** at the top of the expense.
@@ -81,7 +81,7 @@ To take an expense off hold, follow the same steps but select **Unhold**.
8181

8282
## How to unapprove a report
8383

84-
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Spend > Reports**.
84+
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Spend > All reports**.
8585
2. Locate the Approved report you want to unapprove.
8686
3. Click the report to open it.
8787
4. Click **More** at the top of the report.
@@ -93,9 +93,11 @@ Unapproving a report returns it to the Outstanding state. The last approver will
9393

9494
---
9595

96-
## How to reject a report
96+
## How to reject a report
9797

98-
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Spend > Approve**.
98+
As the assigned approver, you can reject an entire expense report to return it to the submitter or a previous approver while keeping the report's expense grouping intact.
99+
100+
1. In the navigation tabs (on the left on web, and at the bottom on mobile), go to **Spend > Needs approval**.
99101
2. Locate the Outstanding report you want to reject.
100102
3. Click the report to open it.
101103
4. Click **More** at the top of the report.
@@ -113,8 +115,8 @@ Unapproving a report returns it to the Outstanding state. The last approver will
113115

114116
## How to reject an expense
115117

116-
1. In the navigation tabs (on the left on web, and at the bottom on mobile), head to **Spend > Expenses**.
117-
2. Locate the expense using the search bar or filters.
118+
1. In the navigation tabs (on the left on web, and at the bottom on mobile), head to **Spend > All expenses**.
119+
2. Locate the expense you want to reject using the search bar or filters.
118120
3. Click **View**.
119121
4. Open the **More** dropdown at the top of the expense.
120122
5. Select **Reject** and enter a reason (this will be added to the report).

0 commit comments

Comments
 (0)