Skip to content

Commit 163a3ab

Browse files
committed
Merge branch 'main' into update-mobile-test-drive-for-better-scroll
2 parents 52d19cd + 2680290 commit 163a3ab

172 files changed

Lines changed: 3712 additions & 1192 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 1009018300
118-
versionName "9.1.83-0"
117+
versionCode 1009018401
118+
versionName "9.1.84-1"
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"
Lines changed: 1 addition & 1 deletion
Loading

contributingGuides/HYBRID_APP.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,22 @@ This error may appear after execution of `npm run pod-install`. In this case you
232232
1. cd to `Mobile-Expensify/ios`
233233
2. run `pod repo remove trunk`
234234

235+
### Error: `Build service could not create build operation`
236+
This might also appear when trying to clean build folder.
237+
1. Manually clean `rm -rf ~/Library/Developer/Xcode/DerivedData`
238+
2. Quit XCode and macOS build services:
239+
1. Close XCode
240+
2. `sudo pkill -9 -f xcodebuild`
241+
3. `sudo pkill -9 -f XCBBuildService`
242+
4. `sudo pkill -9 -f com.apple.dt.Xcode`
243+
5. Restart XCode
244+
3. Further cleaning:
245+
1. `rm -rf ~/Library/Developer/Xcode/ModuleCache.noindex`
246+
2. `rm -rf ~/Library/Caches/com.apple.dt.Xcode`
247+
3. `rm -rf NewExpensify.xcodeproj/project.xcworkspace/xcuserdata`
248+
4. `rm -rf NewExpensify.xcodeproj/project.xcworkspace/xcshareddata`
249+
4. Restart your Mac
250+
235251
### How to build a `release` iOS app?
236252
If you'd like to build HybridApp in `release` configuration, the best way to do it is to:
237253
1. open XCode

contributingGuides/PR_REVIEW_GUIDELINES.md

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ This document lists specific guidelines for all PR reviews and aims to clarify i
3838
## Good code patterns to require
3939

4040
1. Check that functions have comments when appropriate.
41-
- If the function has params or returns something, use [JSDocs syntax]((https://github.com/Expensify/App/blob/main/contributingGuides/STYLE.md#jsdocs)) to describe them.
41+
- If the function has params or returns something, use [JSDocs syntax](https://github.com/Expensify/App/blob/main/contributingGuides/STYLE.md#jsdocs) to describe them.
4242
- Indicate the param name(s), data type passed and / or returned, and purpose if not immediately obvious.
4343
- Obvious functions (with no params / return value) should not have comments.
4444
- **In short: _Add comments & docs, only when useful._**
@@ -66,8 +66,27 @@ Here are some guidelines we use in order to make the best decisions:
6666
1. Specialization
6767
- When one component is a special case of another, we should opt for the technique of composition. Here are the [React docs](https://reactjs.org/docs/composition-vs-inheritance.html#specialization) on Specialization. The idea is that it’s better to establish a pattern of creating increasingly specific components, instead of adding dozens of use cases to a single component.
6868
- You might consider this when a component is being reused because the new use case is “close enough” to the original. Rather than adding functionality to that component with subtle additions, it may be better to create a new, more specialized version of that component.
69-
1. Refactors
69+
2. Refactors
7070
- During a code review it often becomes apparent that a refactor is needed. In this case, we recommend following these steps:
7171
1. Identify the refactor and confirm with others that it’s needed.
7272
2. Do that refactor first (as a separate job, if it qualifies), merge it, test for regressions.
7373
3. Proceed with the original issue & job.
74+
75+
# C+ Best Practices
76+
77+
To reduce delays and improve PR turnaround, reviewers should follow these additional practices:
78+
79+
1. **Continue reviewing the full PR even after spotting a bug.**
80+
- Always complete a full review pass. Finding an issue early on shouldn’t stop you from checking the rest of the code. This helps the author address all feedback in one go, rather than dealing with staggered comments across days.
81+
82+
2. **Don’t let minor merge conflicts block your review.**
83+
- You can still review logic, structure, and tests while conflicts are being resolved.
84+
85+
3. **If you find a bug, test if it exists on `main`.**
86+
- If the issue also appears on `main`, **do not block the PR** — it likely wasn’t introduced by the current changes.
87+
- Report such bug in `#expensify-bugs` Slack channel following the bug template to make sure its addressed.
88+
89+
4. **Don’t block or delay review due to unrelated failing workflows or test flakes.**
90+
- If failures are clearly not introduced by the PR, don’t treat them as blockers. These can be resolved when syncing with `main` later.
91+
92+
These practices help minimize asynchronous lag and keep development moving smoothly across time zones.

cspell.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@
123123
"creditamount",
124124
"CREDS",
125125
"crios",
126+
"csvg",
126127
"customairshipextender",
127128
"customfield",
128129
"customise",
@@ -688,8 +689,11 @@
688689
"zxcv",
689690
"zxldvw",
690691
"مثال",
692+
"pkill",
691693
"pnrs",
692-
"POLICYCHANGELOG_ADD_EMPLOYEE"
694+
"POLICYCHANGELOG_ADD_EMPLOYEE",
695+
"xcshareddata",
696+
"xcuserdata"
693697
],
694698
"ignorePaths": [
695699
"src/languages/de.ts",
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
title: Arrange Travel for Another User
3+
description: Learn how to arrange travel in Expensify on behalf of another member, using either Classic or New Expensify.
4+
keywords: [arrange travel, book for others, travel arranger, expensify travel, classic, new expensify]
5+
---
6+
7+
<div id="new-expensify" markdown="1">
8+
9+
Once granted the Travel Arranger role, you can arrange travel for another member of your organization using Expensify Travel.
10+
11+
---
12+
13+
## How to access the travel tool
14+
15+
- **In New Expensify:** Click the green **+** button in the bottom-left corner of your screen, then select **Book travel**.
16+
- **In Classic Expensify:** Click **Travel** in the left-hand menu, then select **Book or manage travel**.
17+
18+
**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.
19+
20+
---
21+
22+
## How to get access
23+
24+
Before arranging travel for another traveler, a Travel Admin must assign you the **Travel Arranger** role.
25+
26+
**To set the Travel Arranger role for another travel member:**
27+
28+
1. Head to Expensify Travel.
29+
2. Click on **Program** > **Users** > search and select the name of the user who needs to arrange travel.
30+
3. Click the **Roles** tab and then select **Travel Arranger** from the dropdown.
31+
4. Click **Save**.
32+
33+
---
34+
35+
## How to book for another member
36+
37+
1. Head to the [Booking](https://travel.expensify.com/flights) page of your travel account.
38+
2. Click the **Pencil** icon to the right of your name in the booking tool.
39+
3. Search for the traveler by name or email and select them.
40+
4. Choose a travel type:
41+
- Flights
42+
- Hotels
43+
- Cars
44+
- Rail
45+
5. Enter the relevant trip details for the selected travel type.
46+
6. Browse and select the desired travel accommodations.
47+
7. Apply the booking to an existing trip or create a new one.
48+
8. Confirm the payment method and finalize the booking.
49+
50+
---
51+
52+
## What happens next
53+
54+
- The selected traveler will receive a confirmation email.
55+
- Receipts will automatically be sent to their Expensify account and added to a trip report.
56+
- As the arranger, you’ll see a history of bookings you’ve made for others.
57+
58+
---
59+
60+
# FAQ
61+
62+
## Who can book travel for other members?
63+
Only members with the **Travel Arranger** role assigned by a Travel Admin can arrange travel for others.
64+
65+
## Will I be charged or the traveler?
66+
The traveler's account is responsible for the charge. Receipts will route directly to them.
67+
68+
## Can I manage trips I’ve booked for someone else?
69+
Yes. If you booked the trip on behalf of someone else, you can view and manage it from the Trips > My trips page. Click the **Pencil** icon to the right of your name in the traveler selection button and search for the traveler to pull up their trips.
70+
71+
</div>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
title: Book Rail Travel
3+
description: Learn how to book train travel using Expensify's integrated travel tool, with instructions for both Classic and New Expensify.
4+
keywords: [book rail, train travel, travel booking, rail tickets, expensify travel, classic, new expensify]
5+
---
6+
7+
<div id="new-expensify" markdown="1">
8+
9+
Book rail tickets using Expensify's built-in travel portal, available in both Classic and New Expensify.
10+
11+
---
12+
13+
## How to access the travel tool
14+
15+
- **In New Expensify:** Click the green **+** button in the bottom-left corner of your screen, then select **Book travel**.
16+
- **In Classic Expensify:** Click **Travel** in the left-hand menu, then select **Book or manage travel**.
17+
18+
**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.
19+
20+
---
21+
22+
## How to book rail travel
23+
24+
1. Click the **Rail** tab.
25+
2. Enter the search parameters:
26+
- Travel type: round trip, one way, or open return
27+
- Departure and destination stations
28+
- Travel dates
29+
- Railcard (if applicable)
30+
3. Click **Search Rail** to view available train schedules.
31+
4. Browse train options by time, class, or duration.
32+
5. Click **Select** on your preferred ticket and then click **Continue**.
33+
6. On the first checkout screen, review:
34+
- Traveler information
35+
- Loyalty and railcard programs
36+
- Seat preferences
37+
- Optional extras
38+
7. Click **Next** to move to the second checkout screen.
39+
8. Choose an existing trip or create a new one, then confirm the trip details and payment method.
40+
9. Click **Confirm and pay**.
41+
42+
---
43+
44+
## What happens next
45+
46+
- Your booking may require approval depending on your company’s travel policy.
47+
- You’ll receive a confirmation email once the train ticket is booked.
48+
- The booking receipt syncs with your Expensify account automatically for easy expense tracking.
49+
- If the payment card used is importing into your Expensify account, the receipt will automatically merge with the imported expense.
50+
51+
**Note:** Not all regions currently support rail booking. Availability may vary.
52+
53+
---
54+
55+
# FAQ
56+
57+
## Will I receive a digital ticket?
58+
Yes. Most rail bookings include a digital ticket or QR code in the confirmation email.
59+
60+
## Can I choose a seat?
61+
Yes, seat selection is available on supported routes. This option will appear during checkout if eligible.
62+
63+
</div>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
title: Book Travel for a Guest
3+
description: Learn how to book travel for guests in Expensify, even if they don’t have an Expensify account, with instructions for Classic and New Expensify.
4+
keywords: [book guest travel, guest traveler, expensify travel, book for non-member, travel booking, classic, new expensify]
5+
---
6+
7+
<div id="new-expensify" markdown="1">
8+
9+
Any member with guest booking permission can book travel for a guest, aka someone who doesn’t have an Expensify account.
10+
11+
---
12+
13+
## How to access the travel tool
14+
15+
- **In New Expensify:** Click the green **+** button in the bottom-left corner of your screen, then select **Book travel**.
16+
- **In Classic Expensify:** Click **Travel** in the left-hand menu, then select **Book or manage travel**.
17+
18+
**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.
19+
20+
---
21+
22+
## How to get access
23+
24+
Before arranging travel for another traveler, a Travel Admin must assign you the **Travel Arranger** role.
25+
26+
**To set the Travel Arranger role for another travel member:**
27+
28+
1. Head to Expensify Travel.
29+
2. Click on **Program** > **Users** > search and select the name of the user who needs to arrange travel.
30+
3. Click the **Configuration** tab and then click the toggle for **Allow employee to book for guests**.
31+
32+
---
33+
34+
## How to book travel for a guest
35+
36+
1. Click **Book for Guest** at the bottom of the booking tool.
37+
2. Choose a travel type:
38+
- Flights
39+
- Hotels
40+
- Cars
41+
- Rail
42+
3. Enter the relevant trip details for the selected travel type.
43+
4. Browse and select the desired travel accommodations.
44+
5. On the checkout page, enter the guest's information in the **Traveler information** section.
45+
6. Apply the booking to an existing trip or create a new one.
46+
7. Confirm the payment method and finalize the booking.
47+
48+
---
49+
50+
## What happens next
51+
52+
- Bookings may require approval based on your company’s travel policy.
53+
- The guest will receive a confirmation email with their travel details.
54+
- Receipts will be added to your Expensify account and SmartScanned for reporting.
55+
- If the payment card is connected to your Expensify account, the receipt will auto-merge with the imported expense.
56+
57+
---
58+
59+
# FAQ
60+
61+
## Will the guest need an Expensify account?
62+
No. Guest travelers don’t need an account to receive or use their travel reservation.
63+
64+
## Will the travel show up in my reports?
65+
Yes. The booking appears in your Expensify account, and receipts are automatically added to an expense report.
66+
67+
</div>

docs/articles/travel/booking-travel/Book-A-Flight.md renamed to docs/articles/travel/booking-travel/Book-a-Flight.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: book-a-flight.md
2+
title: Book a Flight
33
description: Learn how to book flights in Expensify using the built-in travel portal, with platform-specific steps for Classic and New Expensify.
44
keywords: [book a flight, travel booking, flight reservations, expensify travel, classic, new expensify]
55
---
@@ -15,15 +15,15 @@ Book flights through Expensify's integrated travel portal—available in both Cl
1515
- **In New Expensify:** Click the green **+** button in the bottom-left corner of your screen, then select **Book travel**.
1616
- **In Classic Expensify:** Click **Travel** in the left-hand menu, then select **Book or manage travel**.
1717

18-
**Don’t see the travel feature?** Reach out to your Account Manager or Concierge to schedule a travel demo and get it enabled for your account.
18+
**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.
1919

2020
---
2121

2222
## How to book a flight
2323

2424
1. Click the **Flight** tab.
2525
2. Enter your trip details:
26-
- Trip type: one way, round trip, or multi city
26+
- Trip type: one way, round trip, or multi-city
2727
- Origin and destination
2828
- Travel dates
2929
3. Click **Search flights** to see available options.
@@ -46,7 +46,7 @@ Book flights through Expensify's integrated travel portal—available in both Cl
4646

4747
- Your company’s travel policy may require approval before confirmation.
4848
- You’ll receive a confirmation email after your flight is booked.
49-
- The booking syncs with your Expensify account for easy expense tracking.
49+
- The booking receipt will sync with your Expensify account automatically for easy expense tracking.
5050
- If the payment card is connected to Expensify, the receipt will automatically merge with the credit card expense.
5151

5252
---
@@ -70,4 +70,4 @@ Flight changes or cancellations depend on the airline’s policy and the flight
7070

7171
You can manage your bookings by going to **Trips** > **My Trips**.
7272

73-
</div>
73+
</div>

0 commit comments

Comments
 (0)