Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8a63c4b
Update version to 9.1.90-1
OSBotify Aug 6, 2025
1c84152
Update Mobile-Expensify submodule version to 9.1.90-1
OSBotify Aug 6, 2025
2335e3c
Merge pull request #68061 from Expensify/francois-revert-63054
francoisl Aug 6, 2025
57ac472
Update version to 9.1.90-2
OSBotify Aug 7, 2025
04bce4b
Update Mobile-Expensify submodule version to 9.1.90-2
OSBotify Aug 7, 2025
82b5803
Merge pull request #68090 from mkzie2/mkzie2-issue/68072
techievivek Aug 7, 2025
0e7e76f
Update version to 9.1.90-3
OSBotify Aug 7, 2025
7b2552f
Update Mobile-Expensify submodule version to 9.1.90-3
OSBotify Aug 7, 2025
8e0c707
Merge pull request #68100 from Expensify/vit-66924
techievivek Aug 7, 2025
f22d045
Update version to 9.1.90-4
OSBotify Aug 7, 2025
5a0faf9
Update Mobile-Expensify submodule version to 9.1.90-4
OSBotify Aug 7, 2025
37e4a31
Merge pull request #68095 from DylanDylann/revert-67132-fix/67091
mountiny Aug 7, 2025
27bd39e
Update version to 9.1.90-5
OSBotify Aug 7, 2025
6934bdd
Update Mobile-Expensify submodule version to 9.1.90-5
OSBotify Aug 7, 2025
0212d30
Merge pull request #68125 from samranahm/68089/fix-back-navigation-on…
inimaga Aug 7, 2025
5285bd8
Update version to 9.1.90-6
OSBotify Aug 7, 2025
a98412a
Update Mobile-Expensify submodule version to 9.1.90-6
OSBotify Aug 7, 2025
db9322e
Merge pull request #68144 from Expensify/revert-67209-gijoe/63628
roryabraham Aug 7, 2025
f4e81d4
Update version to 9.1.90-7
OSBotify Aug 7, 2025
8bee623
Update Mobile-Expensify submodule version to 9.1.90-7
OSBotify Aug 7, 2025
c0ab212
Merge pull request #68149 from Expensify/revert-65902-60178/global-cr…
roryabraham Aug 7, 2025
e5f4cfe
Update version to 9.1.90-8
OSBotify Aug 7, 2025
a7288c7
Update Mobile-Expensify submodule version to 9.1.90-8
OSBotify Aug 7, 2025
a1712f6
Merge pull request #68147 from Expensify/revert-67477-fix/65697
jasperhuangg Aug 7, 2025
e8bac68
Update version to 9.1.90-9
OSBotify Aug 7, 2025
4b062ce
Update Mobile-Expensify submodule version to 9.1.90-9
OSBotify Aug 7, 2025
fb8be5e
Merge pull request #68157 from Expensify/revert-67496-revert-67361-ch…
puneetlath Aug 7, 2025
fb10312
Update version to 9.1.90-10
OSBotify Aug 8, 2025
e21b4be
Update Mobile-Expensify submodule version to 9.1.90-10
OSBotify Aug 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Mobile-Expensify
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009019000
versionName "9.1.90-0"
versionCode 1009019010
versionName "9.1.90-10"
// Supported language variants must be declared here to avoid from being removed during the compilation.
// This also helps us to not include unnecessary language variants in the APK.
resConfigs "en", "es"
Expand Down
2 changes: 1 addition & 1 deletion ios/NewExpensify/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>9.1.90.0</string>
<string>9.1.90.10</string>
<key>FullStory</key>
<dict>
<key>OrgId</key>
Expand Down
2 changes: 1 addition & 1 deletion ios/NotificationServiceExtension/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<key>CFBundleShortVersionString</key>
<string>9.1.90</string>
<key>CFBundleVersion</key>
<string>9.1.90.0</string>
<string>9.1.90.10</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
Expand Down
2 changes: 1 addition & 1 deletion ios/ShareViewController/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<key>CFBundleShortVersionString</key>
<string>9.1.90</string>
<key>CFBundleVersion</key>
<string>9.1.90.0</string>
<string>9.1.90.10</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
"version": "9.1.90-0",
"version": "9.1.90-10",
"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.",
Expand Down
12 changes: 0 additions & 12 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1127,7 +1127,6 @@ const CONST = {
ACTIONABLE_ADD_PAYMENT_CARD: 'ACTIONABLEADDPAYMENTCARD',
ACTIONABLE_JOIN_REQUEST: 'ACTIONABLEJOINREQUEST',
ACTIONABLE_MENTION_WHISPER: 'ACTIONABLEMENTIONWHISPER',
ACTIONABLE_MENTION_INVITE_TO_SUBMIT_EXPENSE_CONFIRM_WHISPER: 'ACTIONABLEMENTIONINVITETOSUBMITEXPENSECONFIRMWHISPER',
ACTIONABLE_REPORT_MENTION_WHISPER: 'ACTIONABLEREPORTMENTIONWHISPER',
ACTIONABLE_TRACK_EXPENSE_WHISPER: 'ACTIONABLETRACKEXPENSEWHISPER',
POLICY_EXPENSE_CHAT_WELCOME_WHISPER: 'POLICYEXPENSECHATWELCOMEWHISPER',
Expand Down Expand Up @@ -1311,12 +1310,8 @@ const CONST = {
},
ACTIONABLE_MENTION_WHISPER_RESOLUTION: {
INVITE: 'invited',
INVITE_TO_SUBMIT_EXPENSE: 'inviteToSubmitExpense',
NOTHING: 'nothing',
},
ACTIONABLE_MENTION_INVITE_TO_SUBMIT_EXPENSE_CONFIRM_WHISPER: {
DONE: 'done',
},
ACTIONABLE_TRACK_EXPENSE_WHISPER_RESOLUTION: {
NOTHING: 'nothing',
},
Expand Down Expand Up @@ -2877,12 +2872,6 @@ const CONST = {
REIMBURSEMENT_NO: 'reimburseNo', // None
REIMBURSEMENT_MANUAL: 'reimburseManual', // Indirect
},
CASH_EXPENSE_REIMBURSEMENT_CHOICES: {
REIMBURSABLE_DEFAULT: 'reimbursableDefault', // Reimbursable by default
NON_REIMBURSABLE_DEFAULT: 'nonReimbursableDefault', // Non-reimbursable by default
ALWAYS_REIMBURSABLE: 'alwaysReimbursable', // Always Reimbursable
ALWAYS_NON_REIMBURSABLE: 'alwaysNonReimbursable', // Always Non Reimbursable
},
ID_FAKE: '_FAKE_',
EMPTY: 'EMPTY',
SECONDARY_ACTIONS: {
Expand Down Expand Up @@ -3742,7 +3731,6 @@ const CONST = {
TAG: 'tag',
TAX_RATE: 'taxRate',
TAX_AMOUNT: 'taxAmount',
REIMBURSABLE: 'reimbursable',
REPORT: 'report',
},
FOOTER: {
Expand Down
4 changes: 0 additions & 4 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1916,10 +1916,6 @@ const ROUTES = {
route: 'workspaces/:policyID/rules/billable',
getRoute: (policyID: string) => `workspaces/${policyID}/rules/billable` as const,
},
RULES_REIMBURSABLE_DEFAULT: {
route: 'workspaces/:policyID/rules/reimbursable',
getRoute: (policyID: string) => `workspaces/${policyID}/rules/reimbursable` as const,
},
RULES_PROHIBITED_DEFAULT: {
route: 'workspaces/:policyID/rules/prohibited',
getRoute: (policyID: string) => `workspaces/${policyID}/rules/prohibited` as const,
Expand Down
1 change: 0 additions & 1 deletion src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,6 @@ const SCREENS = {
RULES_MAX_EXPENSE_AMOUNT: 'Rules_Max_Expense_Amount',
RULES_MAX_EXPENSE_AGE: 'Rules_Max_Expense_Age',
RULES_BILLABLE_DEFAULT: 'Rules_Billable_Default',
RULES_REIMBURSABLE_DEFAULT: 'Rules_Reimbursable_Default',
RULES_CUSTOM: 'Rules_Custom',
RULES_PROHIBITED_DEFAULT: 'Rules_Prohibited_Default',
PER_DIEM: 'Per_Diem',
Expand Down
13 changes: 1 addition & 12 deletions src/components/EmptyStateComponent/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import Text from '@components/Text';
import VideoPlayer from '@components/VideoPlayer';
import useResponsiveLayout from '@hooks/useResponsiveLayout';
import useThemeStyles from '@hooks/useThemeStyles';
import {containsCustomEmoji, containsOnlyCustomEmoji} from '@libs/EmojiUtils';
import TextWithEmojiFragment from '@pages/home/report/comment/TextWithEmojiFragment';
import CONST from '@src/CONST';
import type {EmptyStateComponentProps, VideoLoadedEventType} from './types';

Expand All @@ -37,7 +35,6 @@ function EmptyStateComponent({
const styles = useThemeStyles();
const [videoAspectRatio, setVideoAspectRatio] = useState(VIDEO_ASPECT_RATIO);
const {shouldUseNarrowLayout} = useResponsiveLayout();
const doesSubtitleContainCustomEmoji = containsCustomEmoji(subtitle ?? '') && !containsOnlyCustomEmoji(subtitle ?? '');

const setAspectRatio = (event: VideoReadyForDisplayEvent | VideoLoadedEventType | undefined) => {
if (!event) {
Expand Down Expand Up @@ -103,15 +100,7 @@ function EmptyStateComponent({
<View style={[styles.emptyStateHeader(headerMediaType === CONST.EMPTY_STATE_MEDIA.ILLUSTRATION), headerStyles]}>{HeaderComponent}</View>
<View style={[shouldUseNarrowLayout ? styles.p5 : styles.p8, cardContentStyles]}>
<Text style={[styles.textAlignCenter, styles.textHeadlineH1, styles.mb2, titleStyles]}>{title}</Text>
{subtitleText ??
(doesSubtitleContainCustomEmoji ? (
<TextWithEmojiFragment
style={[styles.textAlignCenter, styles.textSupporting, styles.textNormal]}
message={subtitle}
/>
) : (
<Text style={[styles.textAlignCenter, styles.textSupporting, styles.textNormal]}>{subtitle}</Text>
))}
{subtitleText ?? <Text style={[styles.textAlignCenter, styles.textSupporting, styles.textNormal]}>{subtitle}</Text>}
{children}
{!isEmpty(buttons) && (
<View style={[styles.gap2, styles.mt5, !shouldUseNarrowLayout ? styles.flexRow : styles.flexColumn]}>
Expand Down
10 changes: 0 additions & 10 deletions src/components/MoneyRequestConfirmationList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,6 @@ type MoneyRequestConfirmationListProps = {
/** The PDF password callback */
onPDFPassword?: () => void;

/** Function to toggle reimbursable */
onToggleReimbursable?: (isOn: boolean) => void;

/** Flag indicating if the IOU is reimbursable */
iouIsReimbursable?: boolean;

/** Show remove expense confirmation modal */
showRemoveExpenseConfirmModal?: () => void;
};
Expand Down Expand Up @@ -231,8 +225,6 @@ function MoneyRequestConfirmationList({
isConfirming,
onPDFLoadError,
onPDFPassword,
iouIsReimbursable = true,
onToggleReimbursable,
showRemoveExpenseConfirmModal,
}: MoneyRequestConfirmationListProps) {
const [policyCategoriesReal] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`, {canBeMissing: true});
Expand Down Expand Up @@ -1162,8 +1154,6 @@ function MoneyRequestConfirmationList({
unit={unit}
onPDFLoadError={onPDFLoadError}
onPDFPassword={onPDFPassword}
iouIsReimbursable={iouIsReimbursable}
onToggleReimbursable={onToggleReimbursable}
isReceiptEditable={isReceiptEditable}
/>
);
Expand Down
29 changes: 0 additions & 29 deletions src/components/MoneyRequestConfirmationListFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import {
getTaxAmount,
getTaxName,
isAmountMissing,
isCardTransaction,
isCreatedMissing,
isFetchingWaypointsFromServer,
shouldShowAttendees as shouldShowAttendeesTransactionUtils,
Expand Down Expand Up @@ -199,12 +198,6 @@ type MoneyRequestConfirmationListFooterProps = {

/** The PDF password callback */
onPDFPassword?: () => void;

/** Function to toggle reimbursable */
onToggleReimbursable?: (isOn: boolean) => void;

/** Flag indicating if the IOU is reimbursable */
iouIsReimbursable: boolean;
};

function MoneyRequestConfirmationListFooter({
Expand Down Expand Up @@ -254,8 +247,6 @@ function MoneyRequestConfirmationListFooter({
unit,
onPDFLoadError,
onPDFPassword,
iouIsReimbursable,
onToggleReimbursable,
isReceiptEditable = false,
}: MoneyRequestConfirmationListFooterProps) {
const styles = useThemeStyles();
Expand Down Expand Up @@ -322,7 +313,6 @@ function MoneyRequestConfirmationListFooter({
const canModifyTaxFields = !isReadOnly && !isDistanceRequest && !isPerDiemRequest;
// A flag for showing the billable field
const shouldShowBillable = policy?.disabledFields?.defaultBillable === false;
const shouldShowReimbursable = isPaidGroupPolicy(policy) && policy?.disabledFields?.reimbursable === false && !isCardTransaction(transaction) && !isTypeInvoice;
// Calculate the formatted tax amount based on the transaction's tax amount and the IOU currency code
const taxAmount = getTaxAmount(transaction, false);
const formattedTaxAmount = convertToDisplayString(taxAmount, iouCurrencyCode);
Expand Down Expand Up @@ -651,25 +641,6 @@ function MoneyRequestConfirmationListFooter({
),
shouldShow: shouldShowAttendees,
},
{
item: (
<View
key={Str.UCFirst(translate('iou.reimbursable'))}
style={[styles.flexRow, styles.justifyContentBetween, styles.alignItemsCenter, styles.ml5, styles.mr8, styles.optionRow]}
>
<ToggleSettingOptionRow
switchAccessibilityLabel={Str.UCFirst(translate('iou.reimbursable'))}
title={Str.UCFirst(translate('iou.reimbursable'))}
onToggle={(isOn) => onToggleReimbursable?.(isOn)}
isActive={iouIsReimbursable}
disabled={isReadOnly}
wrapperStyle={styles.flex1}
/>
</View>
),
shouldShow: shouldShowReimbursable,
isSupplementary: true,
},
{
item: (
<View
Expand Down
46 changes: 5 additions & 41 deletions src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import {Str} from 'expensify-common';
import mapValues from 'lodash/mapValues';
import React, {useCallback, useEffect, useMemo, useState} from 'react';
import {View} from 'react-native';
Expand Down Expand Up @@ -58,7 +57,6 @@ import {
getDescription,
getDistanceInMeters,
getOriginalTransactionWithSplitInfo,
getReimbursable,
getTagForDisplay,
getTaxName,
hasMissingSmartscanFields,
Expand All @@ -74,7 +72,7 @@ import {
import ViolationsUtils from '@libs/Violations/ViolationsUtils';
import Navigation from '@navigation/Navigation';
import AnimatedEmptyStateBackground from '@pages/home/report/AnimatedEmptyStateBackground';
import {cleanUpMoneyRequest, updateMoneyRequestBillable, updateMoneyRequestReimbursable} from '@userActions/IOU';
import {cleanUpMoneyRequest, updateMoneyRequestBillable} from '@userActions/IOU';
import {navigateToConciergeChatAndDeleteReport} from '@userActions/Report';
import {clearAllRelatedReportActionErrors} from '@userActions/ReportActions';
import {clearError, getLastModifiedExpense, revert} from '@userActions/Transaction';
Expand Down Expand Up @@ -166,7 +164,6 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
currency: transactionCurrency,
comment: transactionDescription,
merchant: transactionMerchant,
reimbursable: transactionReimbursable,
billable: transactionBillable,
category: transactionCategory,
tag: transactionTag,
Expand Down Expand Up @@ -202,7 +199,6 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
const isSettled = isSettledReportUtils(moneyRequestReport?.reportID);
const isCancelled = moneyRequestReport && moneyRequestReport?.isCancelledIOU;
const isChatReportArchived = useReportIsArchived(moneyRequestReport?.chatReportID);
const shouldShowPaid = isSettled && transactionReimbursable;

// Flags for allowing or disallowing editing an expense
// Used for non-restricted fields such as: description, category, tag, billable, etc...
Expand Down Expand Up @@ -246,8 +242,6 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
const shouldShowTag = isPolicyExpenseChat && (transactionTag || hasEnabledTags(policyTagLists));
const shouldShowBillable = isPolicyExpenseChat && (!!transactionBillable || !(policy?.disabledFields?.defaultBillable ?? true) || !!updatedTransaction?.billable);
const shouldShowReimbursable = isPolicyExpenseChat && !isCardTransaction && !isInvoice;
const canEditReimbursable = canUserPerformWriteAction && canEditFieldOfMoneyRequest(parentReportAction, CONST.EDIT_REQUEST_FIELD.REIMBURSABLE);
const shouldShowAttendees = useMemo(() => shouldShowAttendeesTransactionUtils(iouType, policy), [iouType, policy]);

const shouldShowTax = isTaxTrackingEnabled(isPolicyExpenseChat, policy, isDistanceRequest, isPerDiemRequest);
Expand Down Expand Up @@ -297,17 +291,6 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
[transaction, report, policy, policyTagList, policyCategories],
);

const saveReimbursable = useCallback(
(newReimbursable: boolean) => {
// If the value hasn't changed, don't request to save changes on the server and just close the modal
if (newReimbursable === getReimbursable(transaction) || !transaction?.transactionID || !report?.reportID) {
return;
}
updateMoneyRequestReimbursable(transaction.transactionID, report?.reportID, newReimbursable, policy, policyTagList, policyCategories);
},
[transaction, report, policy, policyTagList, policyCategories],
);

if (isCardTransaction) {
if (transactionPostedDate) {
dateDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.posted')} ${transactionPostedDate}`;
Expand All @@ -329,7 +312,7 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.canceled')}`;
} else if (isApproved) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.approved')}`;
} else if (shouldShowPaid) {
} else if (isSettled) {
amountDescription += ` ${CONST.DOT_SEPARATOR} ${translate('iou.settledExpensify')}`;
}
}
Expand Down Expand Up @@ -671,7 +654,7 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
<OfflineWithFeedback pendingAction={getPendingFieldAction('amount') ?? (amountTitle ? getPendingFieldAction('customUnitRateID') : undefined)}>
<MenuItemWithTopDescription
title={amountTitle}
shouldShowTitleIcon={shouldShowPaid}
shouldShowTitleIcon={isSettled}
titleIcon={Expensicons.Checkmark}
description={amountDescription}
titleStyle={styles.textHeadlineH2}
Expand Down Expand Up @@ -854,27 +837,8 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
/>
</OfflineWithFeedback>
)}
{shouldShowReimbursable && (
<OfflineWithFeedback
pendingAction={getPendingFieldAction('reimbursable')}
contentContainerStyle={[styles.flexRow, styles.optionRow, styles.justifyContentBetween, styles.alignItemsCenter, styles.ml5, styles.mr8]}
>
<View>
<Text>{Str.UCFirst(translate('iou.reimbursable'))}</Text>
</View>
<Switch
accessibilityLabel={Str.UCFirst(translate('iou.reimbursable'))}
isOn={updatedTransaction?.reimbursable ?? !!transactionReimbursable}
onToggle={saveReimbursable}
disabled={!canEditReimbursable}
/>
</OfflineWithFeedback>
)}
{shouldShowBillable && (
<OfflineWithFeedback
pendingAction={getPendingFieldAction('billable')}
contentContainerStyle={[styles.flexRow, styles.optionRow, styles.justifyContentBetween, styles.alignItemsCenter, styles.ml5, styles.mr8]}
>
<View style={[styles.flexRow, styles.optionRow, styles.justifyContentBetween, styles.alignItemsCenter, styles.ml5, styles.mr8]}>
<View>
<Text>{translate('common.billable')}</Text>
{!!getErrorForField('billable') && (
Expand All @@ -893,7 +857,7 @@ function MoneyRequestView({allReports, report, policy, shouldShowAnimatedBackgro
onToggle={saveBillable}
disabled={!canEdit}
/>
</OfflineWithFeedback>
</View>
)}
{!!parentReportID && (
<OfflineWithFeedback pendingAction={getPendingFieldAction('reportID')}>
Expand Down
Loading
Loading