Skip to content

Commit a1d2d06

Browse files
authored
Merge branch 'Expensify:main' into fix/66381-part-3
2 parents 6e3ec48 + 30fd07a commit a1d2d06

67 files changed

Lines changed: 1908 additions & 275 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 1009036802
115-
versionName "9.3.68-2"
114+
versionCode 1009036803
115+
versionName "9.3.68-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"

contributingGuides/CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ You can create as many accounts as needed in order to test your changes directly
99

1010
**Notes**:
1111

12-
1. When creating test accounts, include a `+` (plus sign) in the email address (e.g., matt+1@gmail.com). This marks the account and their associated workspaces as test accounts in Expensify, ensuring Expensify Guides are not assigned to help with account setup.
12+
1. When creating test accounts:
13+
- Include a `+` (plus sign) in the email address (e.g., matt+1@gmail.com). This marks the account and their associated workspaces as test accounts in Expensify, ensuring Expensify Guides are not assigned to help with account setup.
14+
- When testing on live servers with a private domain, stick to a single, consistent test domain. Please avoid generating random or "fake" domains (e.g., asdfkef23@asfdasfwaf.com).
1315
2. When testing chat functionality in the app please do this between accounts you or your fellow contributors own - **do not test chatting with Concierge**, as this diverts to our customer support team. Thank you.
1416
3. A member of our customer onboarding team gets auto-assigned to every new policy created by a non-paying account to help them set up. Please **do not interact with these teams, ask for calls, or support on your issues.** If you do need to test functionality inside the defaultRooms (#admins & #announce) for any issues you’re working on, please let them know that you are a contributor and don’t need assistance. They will proceed to ignore the chat.
1517
4. Please **do not post in any Expensify owned public room for testing** (e.g #exfy-roadmap, #new-expensify-feedback). These rooms include real customers and investors. You can create your own public rooms, or [use this test public room](https://staging.new.expensify.com/r/2091104345528462) on either staging or production. Thanks!

ios/NewExpensify/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</dict>
4545
</array>
4646
<key>CFBundleVersion</key>
47-
<string>9.3.68.2</string>
47+
<string>9.3.68.3</string>
4848
<key>FullStory</key>
4949
<dict>
5050
<key>OrgId</key>

ios/NotificationServiceExtension/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<key>CFBundleShortVersionString</key>
1414
<string>9.3.68</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.68.2</string>
16+
<string>9.3.68.3</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

ios/ShareViewController/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<key>CFBundleShortVersionString</key>
1414
<string>9.3.68</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.3.68.2</string>
16+
<string>9.3.68.3</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionAttributes</key>

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "new.expensify",
3-
"version": "9.3.68-2",
3+
"version": "9.3.68-3",
44
"author": "Expensify, Inc.",
55
"homepage": "https://new.expensify.com",
66
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",

src/CONST/index.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,6 +1379,7 @@ const CONST = {
13791379
SECONDARY_ACTIONS: {
13801380
SUBMIT: 'submit',
13811381
APPROVE: 'approve',
1382+
RECEIVED_PAYMENT: 'receivedPayment',
13821383
REMOVE_HOLD: 'removeHold',
13831384
UNAPPROVE: 'unapprove',
13841385
CANCEL_PAYMENT: 'cancelPayment',
@@ -6360,6 +6361,7 @@ const CONST = {
63606361
RECEIPT_TAB_ID: 'ReceiptTab',
63616362
IOU_REQUEST_TYPE: 'iouRequestType',
63626363
DISTANCE_REQUEST_TYPE: 'distanceRequestType',
6364+
DISTANCE_EDIT_TYPE: 'distanceEditType',
63636365
SPLIT_EXPENSE_TAB_TYPE: 'splitExpenseTabType',
63646366
SPLIT: {
63656367
AMOUNT: 'amount',
@@ -9123,6 +9125,7 @@ const CONST = {
91239125
CLOSE_PDF_MODAL: 'MoreMenu-ClosePDFModal',
91249126
SUBMIT: 'MoreMenu-Submit',
91259127
APPROVE: 'MoreMenu-Approve',
9128+
RECEIVED_PAYMENT: 'MoreMenu-ReceivedPayment',
91269129
UNAPPROVE: 'MoreMenu-Unapprove',
91279130
CANCEL_PAYMENT: 'MoreMenu-CancelPayment',
91289131
HOLD: 'MoreMenu-Hold',
@@ -9721,12 +9724,6 @@ const CONST = {
97219724

97229725
HOME: {
97239726
ANNOUNCEMENTS: [
9724-
{
9725-
title: 'New global partnerships: banking, travel, accounting, & more',
9726-
subtitle: 'Newsletter',
9727-
url: 'https://use.expensify.com/blog/expensify-new-integrations-march-2026',
9728-
publishedDate: '2026-03-25',
9729-
},
97309727
{
97319728
title: 'Smarter cards, mileage, and approvals',
97329729
subtitle: 'Product update',
@@ -9739,6 +9736,12 @@ const CONST = {
97399736
url: 'https://www.businesswire.com/news/home/20260421550894/en/Expensify-Partners-With-IOCP-to-Expand-Access-to-Modern-Spend-Management',
97409737
publishedDate: '2026-04-21',
97419738
},
9739+
{
9740+
title: 'Expensify named Expense Platform of the Year',
9741+
subtitle: 'Press release',
9742+
url: 'https://www.businesswire.com/news/home/20260506556347/en/Expensify-Named-Expense-Management-Platform-of-the-Year',
9743+
publishedDate: '2026-05-06',
9744+
},
97429745
],
97439746
},
97449747

src/components/ChronosTimerHeaderButton.tsx

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'
66
import useDelegateAccountID from '@hooks/useDelegateAccountID';
77
import useIsInSidePanel from '@hooks/useIsInSidePanel';
88
import useLocalize from '@hooks/useLocalize';
9+
import useNetwork from '@hooks/useNetwork';
910
import useOnyx from '@hooks/useOnyx';
1011
import useReportIsArchived from '@hooks/useReportIsArchived';
1112
import useThemeStyles from '@hooks/useThemeStyles';
@@ -18,6 +19,7 @@ import {callFunctionIfActionIsAllowed} from '@userActions/Session';
1819
import CONST from '@src/CONST';
1920
import ONYXKEYS from '@src/ONYXKEYS';
2021
import ROUTES from '@src/ROUTES';
22+
import {isLoadingInitialReportActionsSelector} from '@src/selectors/ReportMetaData';
2123
import type * as OnyxTypes from '@src/types/onyx';
2224
import type {ReportActions} from '@src/types/onyx/ReportAction';
2325
import ButtonWithDropdownMenu from './ButtonWithDropdownMenu';
@@ -49,6 +51,16 @@ function ChronosTimerHeaderButton({report}: ChronosTimerHeaderButtonProps) {
4951
[canPerformWriteAction, visibleReportActionsData, report.reportID, currentUserAccountID],
5052
);
5153

54+
const [isLoadingInitialReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.RAM_ONLY_REPORT_LOADING_STATE}${report.reportID}`, {
55+
selector: isLoadingInitialReportActionsSelector,
56+
});
57+
const {isOffline} = useNetwork();
58+
59+
// Keep the button usable while offline so queued start/stop comments are sent on reconnect.
60+
// The button should be disabled if the OpenReport request is in progress, so that the state of the button (whether it says "start" or "stop") will reflect the most recent data coming from the server.
61+
// There is still a possible bug where if you are offline, the button could reflect the wrong state. However, there is really no way to fix this without breaking the offline experience.
62+
const shouldDisableButton = !!isLoadingInitialReportActions && !isOffline;
63+
5264
const ancestors = useAncestors(report);
5365
const isInSidePanel = useIsInSidePanel();
5466
const delegateAccountID = useDelegateAccountID();
@@ -71,12 +83,24 @@ function ChronosTimerHeaderButton({report}: ChronosTimerHeaderButtonProps) {
7183
{
7284
value: 'timer' as const,
7385
text: translate(isTimerRunning ? 'chronos.stopTimer' : 'chronos.startTimer'),
74-
onSelected: () => callFunctionIfActionIsAllowed(sendCommentToChronos)(),
86+
disabled: shouldDisableButton,
87+
onSelected: () => {
88+
if (shouldDisableButton) {
89+
return;
90+
}
91+
callFunctionIfActionIsAllowed(sendCommentToChronos)();
92+
},
7593
},
7694
{
7795
value: 'scheduleOOO' as const,
7896
text: translate('chronos.scheduleOOO'),
79-
onSelected: () => Navigation.navigate(ROUTES.CHRONOS_SCHEDULE_OOO.getRoute(report.reportID)),
97+
disabled: shouldDisableButton,
98+
onSelected: () => {
99+
if (shouldDisableButton) {
100+
return;
101+
}
102+
Navigation.navigate(ROUTES.CHRONOS_SCHEDULE_OOO.getRoute(report.reportID));
103+
},
80104
shouldUpdateSelectedIndex: false,
81105
},
82106
];
@@ -89,6 +113,7 @@ function ChronosTimerHeaderButton({report}: ChronosTimerHeaderButtonProps) {
89113
<View style={[styles.flexRow, styles.alignItemsCenter, styles.justifyContentEnd]}>
90114
<ButtonWithDropdownMenu<ChronosAction>
91115
success={!isTimerRunning}
116+
isDisabled={shouldDisableButton}
92117
onPress={() => {
93118
callFunctionIfActionIsAllowed(sendCommentToChronos)();
94119
}}

0 commit comments

Comments
 (0)