Skip to content

Commit 09e05c5

Browse files
committed
Merge remote-tracking branch 'upstream/main' into 68373-improve-prompting
2 parents cecd8d2 + 6517be6 commit 09e05c5

224 files changed

Lines changed: 5040 additions & 2331 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
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009020002
118-
versionName "9.2.0-2"
117+
versionCode 1009020100
118+
versionName "9.2.1-0"
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: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,29 @@ Once potential performance bottlenecks are identified, the next step is to optim
336336
* Components performing heavy calculations or processing large datasets.
337337
* Components subscribing directly to frequently changing data instead of receiving it as props from a parent.
338338
* Incorrect or inefficient use of memoization techniques (`React.memo`, `useMemo`, `useCallback`).
339-
* Rendering of unnecessary or duplicated child components.
339+
* [Rendering of unnecessary or duplicated child components](#rendering-of-unnecessary-or-duplicated-child-components).
340340
341341
After implementing optimizations, it's crucial to validate the changes. Manual comparison of performance metrics can be tedious and prone to bias. It's highly recommended to use tools that allow for objective comparison of traces or metrics before and after changes. This helps in confirming actual performance gains and avoiding regressions in other areas.
342342
343343
The optimization process is often iterative. Small, incremental improvements can accumulate to significant overall gains. When proposing changes, aim for self-contained and predictable modifications to facilitate review and discussion.
344344
345345
Finally, before concluding an investigation, always validate improvements against real-world scenarios. This includes testing on different platforms and with various build configurations (e.g., production builds) to ensure the optimizations hold up in diverse environments. Remember that performance maintenance is a continuous effort, encompassing not just profiling but also adherence to code conventions and real user monitoring.
346+
347+
## Common performance bottlenecks
348+
### Rendering of unnecessary or duplicated child components
349+
Since our codebase is very complex, it results in a large DOM tree rendered for the user. This may become a potential performance issue if not handled carefully.
350+
351+
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.
352+
353+
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.
354+
355+
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 desktop/web) is included.
356+
357+
The last common issue is related to the use of `return null`. Sometimes we already know in the parent component that a specific child should not be rendered. In such cases, we unnecessarily execute the child's internal logic (calling hooks, sending requests) only to find out that the whole process was redundant.
358+
359+
Examples:
360+
- [Add shouldRender check in EducationalTooltip to avoid unnecessary calls](https://github.com/Expensify/App/pull/66052) - avoids rendering invisible components
361+
- [Remove shouldAdjustScrollView to avoid heavy rerender](https://github.com/Expensify/App/pull/66849) - removes hooks that were called only for Safari logic slowing down the `ReportScreen.tsx`
362+
- [PopoverWithMeasuredContent optimization for mobile](https://github.com/Expensify/App/pull/68223) - returns early to avoid unnecessary calculations
363+
- [Reduce confirm modal initial render count](https://github.com/Expensify/App/pull/67518) - returns early to reduce first load cost
364+
- [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

desktop/package-lock.json

Lines changed: 21 additions & 21 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"dependencies": {
77
"electron-context-menu": "^4.1.0",
88
"electron-log": "^4.4.8",
9-
"electron-updater": "^6.6.6",
9+
"electron-updater": "^6.6.7",
1010
"mime-types": "^2.1.35",
1111
"node-machine-id": "^1.1.12"
1212
},

docs/_sass/_main.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,7 @@ button {
819819

820820
.article-card {
821821
@extend .card;
822+
align-items: center;
822823

823824
.right-icon {
824825
display: flex;
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
title: How to Get Expensify Travel Support from an Agent
3+
description: Learn how to contact travel agent support via chat, phone, or email — and how assisted trip fees work.
4+
keywords: travel agent support, Expensify Travel, assisted booking, trip fees, travel help, Book travel button
5+
---
6+
7+
Need help booking or changing travel plans? You can contact travel agent support via chat, phone, or email. It’s free to ask questions; fees only apply if a travel agent books or modifies travel on your behalf.
8+
9+
---
10+
11+
# Who can contact travel agent support?
12+
13+
Anyone with access to Expensify Travel can contact travel agent support.
14+
15+
- **Chat:** Click the green chat bubble in the bottom-right corner of your travel page.
16+
- **Phone:** Call +1-828-731-2962.
17+
- **Email:** Send a message to **expensifysupport@solutionstravel.com**.
18+
19+
**Note:** Concierge support cannot book or modify trips on your behalf.
20+
21+
---
22+
23+
## How to access the travel tool
24+
25+
- **In New Expensify:** Click the green **+** button in the bottom-left corner of your screen, then select **Book travel**.
26+
- **In Expensify Classic:** Click **Travel** in the left-hand menu, then select **Book or manage travel**.
27+
28+
**Need to enable travel still?** Reach out to your Account Manager or Concierge to schedule a travel demo and get it enabled for your account.
29+
30+
---
31+
32+
## How assisted trip fees work
33+
34+
You can always ask questions for free. You’ll only be charged a fee if a travel agent books or changes a trip for you.
35+
36+
Here’s a breakdown of the fees:
37+
38+
- **Self-serve trip** (booked or changed on your own): $15
39+
- **Assisted trip** (booked or changed by a travel agent): $25
40+
- **Already paid $15 but need agent help?** You’ll only be charged the additional $10 difference.
41+
42+
Once you’ve paid the $25 assisted trip fee, you can continue to get help with that trip as often as needed — no extra charges.
43+
44+
**Note:** The assisted trip fee only applies once per trip, no matter how many changes are made by the agent.
45+
46+
---
47+
48+
# FAQ
49+
50+
## Will I be charged for asking questions?
51+
52+
No. You can contact travel agent support anytime to ask about pricing, availability, your itinerary, or general travel questions — it’s completely free unless a travel agent books or changes your trip.
53+
54+
---
55+
56+
## What if I already paid $15 and then need help?
57+
58+
If you start with a self-serve trip ($15) and later ask travel agent support to modify it, you’ll only be charged the $10 difference — for a total of $25.
59+
60+
---
61+
62+
## Can I keep asking for help after I pay the $25 fee?
63+
64+
Yes. Once a trip becomes an assisted trip, you can contact travel agent support as many times as needed for that trip with no additional fees.
65+
66+
---
67+
68+
## What’s the difference between the $15 and $25 trip fees?
69+
70+
- **$15:** If you book or change travel yourself .
71+
- **$25:** If you ask a travel agent to do it for you, this includes unlimited support for that trip, including changes.

ios/NewExpensify.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,9 @@
624624
"${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxMobileEvents/MapboxMobileEvents.framework/MapboxMobileEvents",
625625
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Onfido/Onfido.framework/Onfido",
626626
"${PODS_XCFRAMEWORKS_BUILD_DIR}/Plaid/LinkKit.framework/LinkKit",
627+
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/GIBMobileSdk.framework/GIBMobileSdk",
628+
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/FPAppsCapability.framework/FPAppsCapability",
629+
"${PODS_XCFRAMEWORKS_BUILD_DIR}/group-ib-fp/FPCallCapability.framework/FPCallCapability",
627630
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
628631
);
629632
name = "[CP] Embed Pods Frameworks";
@@ -636,6 +639,9 @@
636639
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMobileEvents.framework",
637640
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Onfido.framework",
638641
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LinkKit.framework",
642+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GIBMobileSdk.framework",
643+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FPAppsCapability.framework",
644+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FPCallCapability.framework",
639645
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
640646
);
641647
runOnlyForDeploymentPostprocessing = 0;

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.2.0</string>
26+
<string>9.2.1</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.2.0.2</string>
47+
<string>9.2.1.0</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.2.0</string>
14+
<string>9.2.1</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.2.0.2</string>
16+
<string>9.2.1.0</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

0 commit comments

Comments
 (0)