Skip to content

Commit 8fed789

Browse files
committed
Merge branch 'main' into kidroca/feature/react-native-web-image-headers
2 parents 1182c7d + ea6aac1 commit 8fed789

File tree

396 files changed

+5890
-3804
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

396 files changed

+5890
-3804
lines changed

.eslintrc.js

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ const restrictedImportPaths = [
1414
importNames: ['TouchableOpacity', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'TouchableHighlight'],
1515
message: "Please use 'PressableWithFeedback' and/or 'PressableWithoutFeedback' from 'src/components/Pressable' instead.",
1616
},
17+
{
18+
name: 'react-native-safe-area-context',
19+
importNames: ['useSafeAreaInsets', 'SafeAreaConsumer', 'SafeAreaInsetsContext'],
20+
message: "Please use 'useSafeAreaInsets' from 'src/hooks/useSafeAreaInset' and/or 'SafeAreaConsumer' from 'src/components/SafeAreaConsumer' instead.",
21+
},
1722
];
1823

1924
const restrictedImportPatterns = [

.github/PULL_REQUEST_TEMPLATE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ This is a checklist for PR authors. Please make sure to complete all tasks and c
9898
- [ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
9999
- [ ] If a new CSS style is added I verified that:
100100
- [ ] A similar style doesn't already exist
101-
- [ ] The style can't be created with an existing [StyleUtils](https://github.com/Expensify/App/blob/main/src/styles/StyleUtils.js) function (i.e. `StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)`)
101+
- [ ] The style can't be created with an existing [StyleUtils](https://github.com/Expensify/App/blob/main/src/styles/StyleUtils.js) function (i.e. `StyleUtils.getBackgroundAndBorderStyle(theme.componentBG)`)
102102
- [ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
103103
- [ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like `Avatar` is modified, I verified that `Avatar` is working as expected in all cases)
104104
- [ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.

.github/workflows/platformDeploy.yml

+3
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,9 @@ jobs:
347347
if: ${{ failure() }}
348348
needs: [android, desktop, iOS, web]
349349
steps:
350+
- name: Checkout
351+
uses: actions/checkout@v4
352+
350353
- name: Post Slack message on failure
351354
uses: ./.github/actions/composite/announceFailedWorkflowInSlack
352355
with:

.imgbotconfig

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"ignoredFiles": [
3-
"assets/images/empty-state_background-fade.png" // Caused an issue with colour gradients, https://github.com/Expensify/App/issues/30499
3+
"assets/images/empty-state_background-fade-dark.png", // Caused an issue with colour gradients, https://github.com/Expensify/App/issues/30499
4+
"assets/images/empty-state_background-fade-light.png"
45
],
56
"aggressiveCompression": "false"
67
}

android/app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ android {
9191
minSdkVersion rootProject.ext.minSdkVersion
9292
targetSdkVersion rootProject.ext.targetSdkVersion
9393
multiDexEnabled rootProject.ext.multiDexEnabled
94-
versionCode 1001040503
95-
versionName "1.4.5-3"
94+
versionCode 1001040800
95+
versionName "1.4.8-0"
9696
}
9797

9898
flavorDimensions "default"

android/app/src/main/res/values/styles.xml

-13
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
1212
<item name="popupTheme">@style/AppTheme.Popup</item>
1313
<item name="android:spinnerDropDownItemStyle">@style/TextViewSpinnerDropDownItem</item>
14-
<item name="android:datePickerDialogTheme">@style/DatePickerDialogTheme</item>
1514
<item name="android:alertDialogTheme">@style/AlertDialogTheme</item>
1615
</style>
1716

@@ -28,18 +27,6 @@
2827
<item name="android:fontFamily">@font/expneuebold</item>
2928
</style>
3029

31-
<!-- Theme used by the DatePicker dialog -->
32-
<style name="DatePickerDialogTheme" parent="Theme.AppCompat.Dialog">
33-
<item name="android:windowBackground">@drawable/datepicker_background</item>
34-
<item name="android:datePickerStyle">@style/DatePickerStyle</item>
35-
<item name="android:fontFamily">@font/expneuebold</item>
36-
<item name="colorAccent">@color/accent</item>
37-
</style>
38-
39-
<style name="DatePickerStyle" parent="android:Widget.Material.DatePicker">
40-
<item name="android:headerBackground">@color/card_highlight_bg</item> <!-- header background color -->
41-
</style>
42-
4330
<!-- Theme used by the Alert dialog -->
4431
<style name="AlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert">
4532
<item name="android:windowBackground">@drawable/alert_background</item>

config/webpack/webpack.common.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({
6666
template: 'web/index.html',
6767
filename: 'index.html',
6868
splashLogo: fs.readFileSync(path.resolve(__dirname, `../../assets/images/new-expensify${mapEnvToLogoSuffix(envFile)}.svg`), 'utf-8'),
69-
usePolyfillIO: platform === 'web',
69+
isWeb: platform === 'web',
70+
isProduction: envFile === '.env.production',
7071
isStaging: envFile === '.env.staging',
7172
}),
7273
new FontPreloadPlugin({

contributingGuides/REVIEWER_CHECKLIST.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
- [ ] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory
4747
- [ ] If a new CSS style is added I verified that:
4848
- [ ] A similar style doesn't already exist
49-
- [ ] The style can't be created with an existing [StyleUtils](https://github.com/Expensify/App/blob/main/src/styles/StyleUtils.js) function (i.e. `StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG`)
49+
- [ ] The style can't be created with an existing [StyleUtils](https://github.com/Expensify/App/blob/main/src/styles/StyleUtils.js) function (i.e. `StyleUtils.getBackgroundAndBorderStyle(theme.componentBG`)
5050
- [ ] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
5151
- [ ] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like `Avatar` is modified, I verified that `Avatar` is working as expected in all cases)
5252
- [ ] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.

docs/_data/_routes.yml

-10
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,11 @@ platforms:
112112
title: Expensify Card
113113
icon: /assets/images/hand-card.svg
114114
description: Explore how the Expensify Card combines convenience and security to enhance everyday business transactions. Discover how to apply for, oversee, and maximize your card perks here.
115-
116-
- href: expensify-partner-program
117-
title: Expensify Partner Program
118-
icon: /assets/images/handshake.svg
119-
description: Discover how to get the most out of Expensify as an ExpensifyApproved! accountant partner. Learn how to set up your clients, receive CPE credits, and take advantage of your partner discount.
120115

121116
- href: get-paid-back
122117
title: Get Paid Back
123118
icon: /assets/images/money-into-wallet.svg
124119
description: Whether you submit an expense report or an invoice, find out here how to ensure a smooth and timely payback process every time.
125-
126-
- href: send-payments
127-
title: Send Payments
128-
icon: /assets/images/money-wings.svg
129-
description: Uncover step-by-step guidance on sending direct reimbursements to employees, paying an invoice to a vendor, and utilizing third-party payment options.
130120

131121
- href: workspace-and-domain-settings
132122
title: Workspace & Domain Settings

docs/articles/expensify-classic/account-settings/Merge-Accounts.md

+12-9
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,32 @@ description: How to merge two Expensify accounts and why this is useful.
55

66
# Overview
77

8-
Merging accounts allows you to combine two accounts. When you combine two accounts, all receipts, expenses, expense reports, invoices, bills, imported cards, secondary logins, co-pilots, and group policy settings will be combined into one account.
8+
Merging accounts allows you to combine two accounts. When you combine two accounts, all receipts, expenses, expense reports, invoices, bills, imported cards, secondary logins, co-pilots, and group workspace settings will be combined into one account.
99
This can be useful if you start off with an account of your own but your organization creates a separate account for you. You can then track both personal and business expenses via one account.
1010

1111
# How to merge accounts
1212
Merging two accounts together is fairly straightforward. Let’s go over how to do that below:
1313
1. Navigate to [expensify.com](https://www.expensify.com)
1414
2. Log into the account you want to set as the Primary account
15-
3. Navigate to Settings > Account > Account Details
16-
4. Scroll down to the Merge Accounts section and fill in the fields. Once you click Merge, a magic code link will be sent to you via email and you'll be prompted to enter the magic code
17-
5. Copy the magic code, switch back to the expensify.com page, and paste the code into the required field
15+
3. Navigate to **Settings > Account > Account Details**
16+
4. Scroll down to Merge Accounts and fill in the fields
1817
6. Click Merge Accounts
18+
7. Once you click Merge, a magic code is sent to you via email
19+
8. Paste the code into the required field
1920
If you have any questions about this process, feel free to reach out to Concierge for some assistance!
2021

2122
# FAQ
2223
## Can you merge accounts from the mobile app?
2324
No, accounts can only be merged from the full website at expensify.com.
2425
## Can I administratively merge two accounts together?
25-
No, only the account holder (user) can perform account merging.
26+
No, only the account holder (member) can perform account merging.
2627
## Is merging accounts reversible?
2728
No, merging accounts is not reversible. It is a permanent action that cannot be undone.
29+
## I have open expenses in the account I'm merging from. Will those expenses merge into the new account?
30+
All expenses must be reported and submitted for them to merge into the new account. Any open expenses will not merge.
2831
## Are there any restrictions on account merging?
2932
Yes! Please see below:
30-
* If your email address belongs to a verified domain (verified in Expensify), you must start the process from the email account under the verified domain. You cannot merge a verified company email account into a personal account.
31-
* If you have two accounts with two different verified domains, you cannot merge them together.
32-
## What happens to my “personal” Individual policy when merging accounts?
33-
The old “personal” Individual policy will be deleted. If you plan to submit reports under a different policy in the future, ensure that any reports on the Individual policy in the old account are marked as Open before merging the accounts. You can typically do this by selecting “Undo Submit” on any submitted reports.
33+
- If your email address belongs to a verified domain (verified in Expensify), you must start the process from the email account under the verified domain. You cannot merge a verified company email account into a personal account.
34+
- If you have two accounts with two different verified domains, you cannot merge them together.
35+
## What happens to my “personal” Individual workspace when merging accounts?
36+
The old “personal” Individual workspace is deleted. If you plan to submit reports under a different workspace in the future, ensure that any reports on the Individual workspace in the old account are marked as Open before merging the accounts. You can typically do this by selecting “Undo Submit” on any submitted reports.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
---
2+
title: Notification Troubleshooting
3+
description: This article is about how to troubleshoot notifications from Expensify.
4+
---
5+
6+
# Overview
7+
Sometimes, members may have trouble receiving important email notifications from Expensify, such as Expensify Magic Code emails, account validation emails, secondary login validations, integration emails, or report action notifications (rejections, approvals, etc.).
8+
9+
# Here's how to troubleshoot missing Expensify notifications:
10+
11+
1. **No error message, but the email is never received**
12+
The email might be delayed; give it 30-60 minutes to arrive in your inbox.
13+
Check **Email Preferences** on the web via **Settings > Your Account > Preferences**In the **Contact Preferences** section. Ensure that the relevant boxes are checked for the email type you're missing. Check your email spam and trash folders, as Expensify messages might end up there inadvertently.
14+
Check to make sure you haven't unintentionally blocked Expensify emails and whitelist [expensify.com](https://community.expensify.com/home/leaving?allowTrusted=1&target=http%3A%2F%2Fexpensify.com%2F), mg.expensify.com, and [amazonSES.com](https://community.expensify.com/home/leaving?allowTrusted=1&target=http%3A%2F%2Famazonses.com%2F) with your email provider.
15+
16+
2. **A "We're having trouble emailing you" banner at the top of your screen**
17+
Verify that your email address in your account settings is correct and is a real deliverable email address.
18+
Re-send Verification Email: Look for an option to re-send a verification email, usually provided when this banner appears.
19+
20+
![ExpensifyHelp_EmailError]({{site.url}}/assets/images/ExpensifyHelp_EmailError.png){:width="100%"}
21+
22+
# Deep Dive
23+
24+
**For Private Domains**:
25+
26+
If your organization uses a private domain, consult your IT department or IT person to ensure that the following domains are whitelisted to receive our emails: expensify.com, mg.expensify.com, and amazonSES.com. These domains are the sources of various notification emails, so make sure they aren't being blocked.
27+
28+
**For Public Domains (e.g., Gmail, Yahoo, Hotmail)**:
29+
30+
To whitelist our emails on public email services:
31+
32+
1. Check your Spam Folder: Search for messages from expensify.com in your Spam folder, open them, and click "Not Spam" at the top of the message.
33+
2. Create a Filter: Set up a filter that identifies the entire expensify.com domain and directs all incoming messages to your inbox, preventing them from going to Spam.
34+
3. Add Specific Contacts: While optional, adding specific email addresses from Expensify as contacts can further prevent emails from going to Spam.
35+
36+
Please note that even if you receive emails from our Concierge support communication, ensure that both expensify.com and mg.expensify.com are whitelisted as they use different servers.
37+
38+
**Email Server Blocking**:
39+
Your email server may be blocking our emails due to spam filters or other services. Check with your IT department to investigate and resolve any server-level email blocking issues.
40+
41+
**Mimecast**:
42+
If your company uses Mimecast, a service that can affect email deliverability, check with your IT department. If Mimecast is in use, reach out to us at [email protected] through a new email, as this should ensure delivery to your inbox. Mimecast should eventually recognize the Expensify domain, preventing future filtering.
43+
44+
**For Outlook Users**:
45+
For Outlook users specifically:
46+
47+
1. Click the gear icon in Outlook and select "View all Outlook settings."
48+
2. Choose "Mail" from the settings menu.
49+
3. Under the "Junk email" submenu, click "Add" under "Safe senders and domains."
50+
4. Enter the email address you want to whitelist.
51+
5. Click "Save."
52+
53+
When you click the "Settings" link in the banner in Expensify, you'll be directed to your account settings page, where you may encounter a few different scenarios:
54+
55+
- "Temporarily Suspended Emails": If the message mentions "temporarily suspended emails to," follow the steps provided in the yellow box. This situation typically occurs when we can't find a valid inbox to send our emails to. Possible reasons include:
56+
- A misspelled email address during account creation.
57+
- Use of a distribution list email (acting as an "alias" email) without a linked inbox.
58+
- An auto-responder that has been responding to our emails for an extended period.
59+
- To resolve this issue, confirm that the email address is indeed associated with an active inbox. Then, click the link that says "here," and your email should be unblocked shortly.
60+
- SMTP Error (Gray Box): In some cases, you might encounter a gray box with an SMTP error message. This error can vary, but it typically looks something like this:
61+
62+
![ExpensifyHelp_SMTPError]({{site.url}}/assets/images/ExpensifyHelp_SMTPError.png){:width="100%"}
63+
64+
**These look a bit cryptic, yes, but hang in there!**
65+
66+
The error messages you see are the raw message text received from your email provider's server to Amazon. These messages can vary in text, but the best course of action is to follow the link provided (by copying and pasting) in the text for the next steps.
67+
68+
**Scenario 1**: If the message in the gray box includes "mimecast.com": It means that our emails are being blocked by the server. In this case, you should contact your IT person or team to address the issue.
69+
70+
**Scenario 2**: If the message in the gray box mentions "blacklist at org/.com/.net," or resembles the screenshot provided, it indicates that your IT team has configured your email to use a third-party email reputation or blacklisting service. Here's what you need to know:
71+
- All our emails are SPF and DKIM-signed, meaning they are cryptographically signed as coming from us and are not spam.
72+
- The problem arises because we send mail from a cloud-based service. This means that the sender's IP serves multiple vendors, including Expensify. If one of those vendors is marked as spam, it can block all messages from that IP, even if they're from different vendors (including us).
73+
- The better approach is for the server to flag spam via DKIM and SPF (rather than solely relying on the sender's IP address), as our messages are correctly signed and encrypted to prevent spoofing.
74+
75+
To resolve these issues, consider discussing them with your IT team, as they can help implement the necessary changes to ensure you receive our emails without interruption.
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Company-Card-Settings.md
3-
description: Company card settings
3+
description: Once you connect your cards, customize the configuration using company card settings.
44
---
55
# Overview
66
Once you’ve imported your company cards via commercial card feed, direct bank feed, or CSV import, the next step is to configure the cards’ settings.

docs/articles/expensify-classic/billing-and-subscriptions/Payment-Card.md

-5
This file was deleted.

0 commit comments

Comments
 (0)