diff --git a/android/app/build.gradle b/android/app/build.gradle
index cff6f004967e..741b5fa4aa10 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -98,8 +98,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
- versionCode 1001044400
- versionName "1.4.44-0"
+ versionCode 1001044401
+ versionName "1.4.44-1"
}
flavorDimensions "default"
diff --git a/docs/articles/expensify-classic/expensify-card/Admin-Card-Settings-and-Features.md b/docs/articles/expensify-classic/expensify-card/Admin-Card-Settings-and-Features.md
index 16e628acbeee..043cc4be1e26 100644
--- a/docs/articles/expensify-classic/expensify-card/Admin-Card-Settings-and-Features.md
+++ b/docs/articles/expensify-classic/expensify-card/Admin-Card-Settings-and-Features.md
@@ -81,7 +81,7 @@ Follow the below steps to run reconciliation on the Expensify Card settlements:
- Entry ID: a unique number grouping card payments and transactions settled by those payments
- Amount: the amount debited from the Business Bank Account for payments
- Merchant: the business where a purchase was made
- - Card: refers to the Expensify credit card number and cardholder's email address
+ - Card: refers to the Expensify Card number and cardholder's email address
- Business Account: the business bank account connected to Expensify that the settlement is paid from
- Transaction ID: a special ID that helps Expensify support locate transactions if there's an issue
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index e4e898423238..00a1c5fbadc8 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -40,7 +40,7 @@
CFBundleVersion
- 1.4.44.0
+ 1.4.44.1
ITSAppUsesNonExemptEncryption
LSApplicationQueriesSchemes
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index 661432acfd4c..f6291a612748 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -19,6 +19,6 @@
CFBundleSignature
????
CFBundleVersion
- 1.4.44.0
+ 1.4.44.1
diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist
index cdd031218474..8a43cd09c370 100644
--- a/ios/NotificationServiceExtension/Info.plist
+++ b/ios/NotificationServiceExtension/Info.plist
@@ -13,7 +13,7 @@
CFBundleShortVersionString
1.4.44
CFBundleVersion
- 1.4.44.0
+ 1.4.44.1
NSExtension
NSExtensionPointIdentifier
diff --git a/package-lock.json b/package-lock.json
index 3f7bb61b64e0..5fe54d0f27a7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "new.expensify",
- "version": "1.4.44-0",
+ "version": "1.4.44-1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "new.expensify",
- "version": "1.4.44-0",
+ "version": "1.4.44-1",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index d79437b1e65b..66ebe720a448 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
- "version": "1.4.44-0",
+ "version": "1.4.44-1",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
diff --git a/src/components/FlatList/MVCPFlatList.js b/src/components/FlatList/MVCPFlatList.js
index 0abb1dc4a873..7fa8b364fb0f 100644
--- a/src/components/FlatList/MVCPFlatList.js
+++ b/src/components/FlatList/MVCPFlatList.js
@@ -38,6 +38,7 @@ const MVCPFlatList = React.forwardRef(({maintainVisibleContentPosition, horizont
const firstVisibleViewRef = React.useRef(null);
const mutationObserverRef = React.useRef(null);
const lastScrollOffsetRef = React.useRef(0);
+ const isListRenderedRef = React.useRef(false);
const getScrollOffset = React.useCallback(() => {
if (scrollRef.current == null) {
@@ -137,6 +138,9 @@ const MVCPFlatList = React.forwardRef(({maintainVisibleContentPosition, horizont
}, [adjustForMaintainVisibleContentPosition, getContentView, getScrollOffset, scrollToOffset]);
React.useEffect(() => {
+ if (!isListRenderedRef.current) {
+ return;
+ }
requestAnimationFrame(() => {
prepareForMaintainVisibleContentPosition();
setupMutationObserver();
@@ -186,6 +190,10 @@ const MVCPFlatList = React.forwardRef(({maintainVisibleContentPosition, horizont
onScroll={onScrollInternal}
scrollEventThrottle={1}
ref={onRef}
+ onLayout={(e) => {
+ isListRenderedRef.current = true;
+ props.onLayout?.(e);
+ }}
/>
);
});
diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx
index a75aef3bc981..0af7140e1523 100644
--- a/src/components/ReportActionItem/MoneyRequestView.tsx
+++ b/src/components/ReportActionItem/MoneyRequestView.tsx
@@ -189,10 +189,9 @@ function MoneyRequestView({
const hasReceipt = TransactionUtils.hasReceipt(transaction);
let receiptURIs;
- let hasErrors = false;
+ const hasErrors = canEdit && TransactionUtils.hasMissingSmartscanFields(transaction);
if (hasReceipt) {
receiptURIs = ReceiptUtils.getThumbnailAndImageURIs(transaction);
- hasErrors = canEdit && TransactionUtils.hasMissingSmartscanFields(transaction);
}
const pendingAction = transaction?.pendingAction;
diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx
index 591767234b8b..cbc728ffd1ce 100644
--- a/src/components/ReportActionItem/ReportPreview.tsx
+++ b/src/components/ReportActionItem/ReportPreview.tsx
@@ -138,7 +138,7 @@ function ReportPreview({
const hasReceipts = transactionsWithReceipts.length > 0;
const isScanning = hasReceipts && areAllRequestsBeingSmartScanned;
- const hasErrors = (hasReceipts && hasMissingSmartscanFields) || (canUseViolations && ReportUtils.hasViolations(iouReportID, transactionViolations));
+ const hasErrors = hasMissingSmartscanFields || (canUseViolations && ReportUtils.hasViolations(iouReportID, transactionViolations));
const lastThreeTransactionsWithReceipts = transactionsWithReceipts.slice(-3);
const lastThreeReceipts = lastThreeTransactionsWithReceipts.map((transaction) => ReceiptUtils.getThumbnailAndImageURIs(transaction));
diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts
index 558225202a35..747ba27780a3 100644
--- a/src/libs/ReportUtils.ts
+++ b/src/libs/ReportUtils.ts
@@ -2235,8 +2235,7 @@ function areAllRequestsBeingSmartScanned(iouReportID: string, reportPreviewActio
*
*/
function hasMissingSmartscanFields(iouReportID: string): boolean {
- const transactionsWithReceipts = getTransactionsWithReceipts(iouReportID);
- return transactionsWithReceipts.some((transaction) => TransactionUtils.hasMissingSmartscanFields(transaction));
+ return TransactionUtils.getAllReportTransactions(iouReportID).some((transaction) => TransactionUtils.hasMissingSmartscanFields(transaction));
}
/**
diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts
index d3b0bc24c947..9ad3ec77b408 100644
--- a/src/libs/TransactionUtils.ts
+++ b/src/libs/TransactionUtils.ts
@@ -480,7 +480,7 @@ function isReceiptBeingScanned(transaction: OnyxEntry): boolean {
* Check if the transaction has a non-smartscanning receipt and is missing required fields
*/
function hasMissingSmartscanFields(transaction: OnyxEntry): boolean {
- return Boolean(transaction && hasReceipt(transaction) && !isDistanceRequest(transaction) && !isReceiptBeingScanned(transaction) && areRequiredFieldsEmpty(transaction));
+ return Boolean(transaction && !isDistanceRequest(transaction) && !isReceiptBeingScanned(transaction) && areRequiredFieldsEmpty(transaction));
}
/**
diff --git a/src/pages/home/report/ReportActionItemFragment.tsx b/src/pages/home/report/ReportActionItemFragment.tsx
index e762f07cf20f..4250c874a471 100644
--- a/src/pages/home/report/ReportActionItemFragment.tsx
+++ b/src/pages/home/report/ReportActionItemFragment.tsx
@@ -105,6 +105,7 @@ function ReportActionItemFragment({
source={source}
html={fragment.html ?? ''}
addExtraMargin={!displayAsGroup}
+ styleAsDeleted={!!(isOffline && isPendingDelete)}
/>
);
}
diff --git a/src/pages/home/report/comment/AttachmentCommentFragment.tsx b/src/pages/home/report/comment/AttachmentCommentFragment.tsx
index 3c49cb90a106..fec5ebe92e54 100644
--- a/src/pages/home/report/comment/AttachmentCommentFragment.tsx
+++ b/src/pages/home/report/comment/AttachmentCommentFragment.tsx
@@ -1,6 +1,7 @@
import React from 'react';
import {View} from 'react-native';
import useThemeStyles from '@hooks/useThemeStyles';
+import CONST from '@src/CONST';
import type {OriginalMessageSource} from '@src/types/onyx/OriginalMessage';
import RenderCommentHTML from './RenderCommentHTML';
@@ -8,15 +9,19 @@ type AttachmentCommentFragmentProps = {
source: OriginalMessageSource;
html: string;
addExtraMargin: boolean;
+ styleAsDeleted: boolean;
};
-function AttachmentCommentFragment({addExtraMargin, html, source}: AttachmentCommentFragmentProps) {
+function AttachmentCommentFragment({addExtraMargin, html, source, styleAsDeleted}: AttachmentCommentFragmentProps) {
const styles = useThemeStyles();
+ const isUploading = html === CONST.ATTACHMENT_UPLOADING_MESSAGE_HTML;
+ const htmlContent = styleAsDeleted && isUploading ? `${html}` : html;
+
return (
);