From 9a9f8e2a8bf2dcff03cb169f8ef791e8d1b81f58 Mon Sep 17 00:00:00 2001 From: tienifr Date: Thu, 28 Dec 2023 16:31:14 +0700 Subject: [PATCH 01/28] show personal bank account option in wallet page --- src/pages/settings/Wallet/WalletPage/WalletPage.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/settings/Wallet/WalletPage/WalletPage.js b/src/pages/settings/Wallet/WalletPage/WalletPage.js index e0577930b73d..87c802ba98ea 100644 --- a/src/pages/settings/Wallet/WalletPage/WalletPage.js +++ b/src/pages/settings/Wallet/WalletPage/WalletPage.js @@ -542,6 +542,7 @@ function WalletPage({bankAccountList, cardList, fundList, isLoadingPaymentMethod }} onItemSelected={(method) => addPaymentMethodTypePressed(method)} anchorRef={addPaymentMethodAnchorRef} + shouldShowPersonalBankAccountOption /> ); From cd8c36caa0a48cde013436e83552295e632f0474 Mon Sep 17 00:00:00 2001 From: Alberto Date: Thu, 28 Dec 2023 11:23:24 +0100 Subject: [PATCH 02/28] unrevert --- src/CONST.ts | 3 + src/components/MoneyReportHeader.js | 28 +++++++- src/languages/en.ts | 5 ++ src/languages/es.ts | 5 ++ src/languages/types.ts | 3 + src/libs/OptionsListUtils.js | 2 +- src/libs/ReportUtils.ts | 48 ++++++++++++- src/libs/actions/IOU.js | 103 ++++++++++++++++++++++++++++ 8 files changed, 192 insertions(+), 5 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 34720adf8a21..9ed1b91a5903 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -595,6 +595,9 @@ const CONST = { }, }, }, + CANCEL_PAYMENT_REASONS: { + ADMIN: 'CANCEL_REASON_ADMIN', + }, ARCHIVE_REASON: { DEFAULT: 'default', ACCOUNT_CLOSED: 'accountClosed', diff --git a/src/components/MoneyReportHeader.js b/src/components/MoneyReportHeader.js index a559e876af18..535c1194229e 100644 --- a/src/components/MoneyReportHeader.js +++ b/src/components/MoneyReportHeader.js @@ -1,6 +1,6 @@ import lodashGet from 'lodash/get'; import PropTypes from 'prop-types'; -import React, {useMemo} from 'react'; +import React, {useCallback, useMemo, useState} from 'react'; import {View} from 'react-native'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; @@ -24,7 +24,9 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import Button from './Button'; +import ConfirmModal from './ConfirmModal'; import HeaderWithBackButton from './HeaderWithBackButton'; +import * as Expensicons from './Icon/Expensicons'; import MoneyReportHeaderStatusBar from './MoneyReportHeaderStatusBar'; import participantPropTypes from './participantPropTypes'; import SettlementButton from './SettlementButton'; @@ -89,6 +91,13 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, nextSt isPolicyAdmin && (isApproved || isManager) : isPolicyAdmin || (ReportUtils.isMoneyRequestReport(moneyRequestReport) && isManager); const isDraft = ReportUtils.isDraftExpenseReport(moneyRequestReport); + const [isConfirmModalVisible, setIsConfirmModalVisible] = useState(false); + + const cancelPayment = useCallback(() => { + IOU.cancelPayment(moneyRequestReport, chatReport); + setIsConfirmModalVisible(false); + }, [moneyRequestReport, chatReport]); + const shouldShowPayButton = useMemo( () => isPayer && !isDraft && !isSettled && !moneyRequestReport.isWaitingOnBankAccount && reimbursableTotal !== 0 && !ReportUtils.isArchivedRoom(chatReport), [isPayer, isDraft, isSettled, moneyRequestReport, reimbursableTotal, chatReport], @@ -109,6 +118,13 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, nextSt const isMoreContentShown = shouldShowNextStep || (shouldShowAnyButton && isSmallScreenWidth); const threeDotsMenuItems = [HeaderUtils.getPinMenuItem(moneyRequestReport)]; + if (isPayer && isSettled) { + threeDotsMenuItems.push({ + icon: Expensicons.Trashcan, + text: 'Cancel payment', + onSelected: () => setIsConfirmModalVisible(true), + }); + } if (!ReportUtils.isArchivedRoom(chatReport)) { threeDotsMenuItems.push({ icon: ZoomIcon, @@ -206,6 +222,16 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, nextSt )} + setIsConfirmModalVisible(false)} + prompt={translate('iou.cancelPaymentConfirmation')} + confirmText={translate('iou.cancelPayment')} + cancelText={translate('common.dismiss')} + danger + /> ); } diff --git a/src/languages/en.ts b/src/languages/en.ts index 3cdb7cf2bf98..2fd453e4ba48 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2,6 +2,7 @@ import {CONST as COMMON_CONST} from 'expensify-common/lib/CONST'; import CONST from '@src/CONST'; import type { AddressLineParams, + AdminCanceledRequestParams, AlreadySignedInParams, AmountEachParams, ApprovedAmountParams, @@ -96,6 +97,7 @@ type AllCountries = Record; export default { common: { cancel: 'Cancel', + dismiss: 'Dismiss', yes: 'Yes', no: 'No', ok: 'OK', @@ -549,6 +551,8 @@ export default { requestMoney: 'Request money', sendMoney: 'Send money', pay: 'Pay', + cancelPayment: 'Cancel payment', + cancelPaymentConfirmation: 'Are you sure that you want to cancel this payment?', viewDetails: 'View details', pending: 'Pending', canceled: 'Canceled', @@ -585,6 +589,7 @@ export default { payerSettled: ({amount}: PayerSettledParams) => `paid ${amount}`, approvedAmount: ({amount}: ApprovedAmountParams) => `approved ${amount}`, waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `started settling up, payment is held until ${submitterDisplayName} adds a bank account`, + adminCanceledRequest: ({amount}: AdminCanceledRequestParams) => `The ${amount} payment has been cancelled by the admin.`, canceledRequest: ({amount, submitterDisplayName}: CanceledRequestParams) => `Canceled the ${amount} payment, because ${submitterDisplayName} did not enable their Expensify Wallet within 30 days`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => diff --git a/src/languages/es.ts b/src/languages/es.ts index d11211ca9325..8c21e9ccf6f5 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1,6 +1,7 @@ import CONST from '@src/CONST'; import type { AddressLineParams, + AdminCanceledRequestParams, AlreadySignedInParams, AmountEachParams, ApprovedAmountParams, @@ -86,6 +87,7 @@ import type { export default { common: { cancel: 'Cancelar', + dismiss: 'Descartar', yes: 'Sí', no: 'No', ok: 'OK', @@ -542,6 +544,8 @@ export default { requestMoney: 'Pedir dinero', sendMoney: 'Enviar dinero', pay: 'Pagar', + cancelPayment: 'Cancelar el pago', + cancelPaymentConfirmation: '¿Estás seguro de que quieres cancelar este pago?', viewDetails: 'Ver detalles', pending: 'Pendiente', canceled: 'Canceló', @@ -578,6 +582,7 @@ export default { payerSettled: ({amount}: PayerSettledParams) => `pagó ${amount}`, approvedAmount: ({amount}: ApprovedAmountParams) => `aprobó ${amount}`, waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inicio el pago, pero no se procesará hasta que ${submitterDisplayName} añada una cuenta bancaria`, + adminCanceledRequest: ({amount}: AdminCanceledRequestParams) => `El pago de ${amount} ha sido cancelado por el administrador.`, canceledRequest: ({amount, submitterDisplayName}: CanceledRequestParams) => `Canceló el pago ${amount}, porque ${submitterDisplayName} no habilitó su billetera Expensify en un plazo de 30 días.`, settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) => diff --git a/src/languages/types.ts b/src/languages/types.ts index 8e72c700a9cc..1a4b833b4122 100644 --- a/src/languages/types.ts +++ b/src/languages/types.ts @@ -131,6 +131,8 @@ type WaitingOnBankAccountParams = {submitterDisplayName: string}; type CanceledRequestParams = {amount: string; submitterDisplayName: string}; +type AdminCanceledRequestParams = {amount: string}; + type SettledAfterAddedBankAccountParams = {submitterDisplayName: string; amount: string}; type PaidElsewhereWithAmountParams = {payer: string; amount: string}; @@ -293,6 +295,7 @@ export type { PayerSettledParams, WaitingOnBankAccountParams, CanceledRequestParams, + AdminCanceledRequestParams, SettledAfterAddedBankAccountParams, PaidElsewhereWithAmountParams, PaidWithExpensifyWithAmountParams, diff --git a/src/libs/OptionsListUtils.js b/src/libs/OptionsListUtils.js index 6e84ef4dca27..1c2899f14c94 100644 --- a/src/libs/OptionsListUtils.js +++ b/src/libs/OptionsListUtils.js @@ -402,7 +402,7 @@ function getLastMessageTextForReport(report) { } else if (ReportActionUtils.isReimbursementQueuedAction(lastReportAction)) { lastMessageTextFromReport = ReportUtils.getReimbursementQueuedActionMessage(lastReportAction, report); } else if (ReportActionUtils.isReimbursementDeQueuedAction(lastReportAction)) { - lastMessageTextFromReport = ReportUtils.getReimbursementDeQueuedActionMessage(report); + lastMessageTextFromReport = ReportUtils.getReimbursementDeQueuedActionMessage(lastReportAction, report); } else if (ReportActionUtils.isDeletedParentAction(lastReportAction) && ReportUtils.isChatReport(report)) { lastMessageTextFromReport = ReportUtils.getDeletedParentActionMessageForChatReport(lastReportAction); } else if (ReportUtils.isReportMessageAttachment({text: report.lastMessageText, html: report.lastMessageHtml, translationKey: report.lastMessageTranslationKey})) { diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 81bbf1df6273..331fc03990bb 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -15,7 +15,7 @@ import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import {Beta, Login, PersonalDetails, PersonalDetailsList, Policy, Report, ReportAction, Session, Transaction} from '@src/types/onyx'; import {Errors, Icon, PendingAction} from '@src/types/onyx/OnyxCommon'; -import {IOUMessage, OriginalMessageActionName, OriginalMessageCreated} from '@src/types/onyx/OriginalMessage'; +import {IOUMessage, OriginalMessageActionName, OriginalMessageCreated, ReimbursementDeQueuedMessage} from '@src/types/onyx/OriginalMessage'; import {NotificationPreference} from '@src/types/onyx/Report'; import {Message, ReportActionBase, ReportActions} from '@src/types/onyx/ReportAction'; import {Receipt, WaypointCollection} from '@src/types/onyx/Transaction'; @@ -176,6 +176,11 @@ type OptimisticSubmittedReportAction = Pick< 'actionName' | 'actorAccountID' | 'automatic' | 'avatar' | 'isAttachment' | 'originalMessage' | 'message' | 'person' | 'reportActionID' | 'shouldShow' | 'created' | 'pendingAction' >; +type OptimisticCancelPaymentReportAction = Pick< + ReportAction, + 'actionName' | 'actorAccountID' | 'message' | 'originalMessage' | 'person' | 'reportActionID' | 'shouldShow' | 'created' | 'pendingAction' + >; + type OptimisticEditedTaskReportAction = Pick< ReportAction, 'reportActionID' | 'actionName' | 'pendingAction' | 'actorAccountID' | 'automatic' | 'avatar' | 'created' | 'shouldShow' | 'message' | 'person' @@ -1535,9 +1540,13 @@ function getReimbursementQueuedActionMessage(reportAction: OnyxEntry): string { +function getReimbursementDeQueuedActionMessage(reportAction: OnyxEntry, report: OnyxEntry): string { + const amount = CurrencyUtils.convertToDisplayString(Math.abs(report?.total ?? 0), report?.currency); + const originalMessage = reportAction?.originalMessage as ReimbursementDeQueuedMessage | undefined; + if (originalMessage?.cancellationReason === CONST.REPORT.CANCEL_PAYMENT_REASONS.ADMIN) { + return Localize.translateLocal('iou.adminCanceledRequest', {amount}); + } const submitterDisplayName = getDisplayNameForParticipant(report?.ownerAccountID, true) ?? ''; - const amount = CurrencyUtils.convertToDisplayString(report?.total ?? 0, report?.currency); return Localize.translateLocal('iou.canceledRequest', {submitterDisplayName, amount}); } @@ -2787,6 +2796,38 @@ function buildOptimisticSubmittedReportAction(amount: number, currency: string, }; } +/** + * Builds an optimistic REIMBURSEMENTDEQUEUED report action with a randomly generated reportActionID. + * + */ +function buildOptimisticCancelPaymentReportAction(): OptimisticCancelPaymentReportAction { + return { + actionName: CONST.REPORT.ACTIONS.TYPE.REIMBURSEMENTDEQUEUED, + actorAccountID: currentUserAccountID, + message: [ + { + cancellationReason: CONST.REPORT.CANCEL_PAYMENT_REASONS.ADMIN, + type: CONST.REPORT.MESSAGE.TYPE.COMMENT, + text: '', + }, + ], + originalMessage: { + cancellationReason: CONST.REPORT.CANCEL_PAYMENT_REASONS.ADMIN, + }, + person: [ + { + style: 'strong', + text: currentUserPersonalDetails?.displayName ?? currentUserEmail, + type: 'TEXT', + }, + ], + reportActionID: NumberUtils.rand64(), + shouldShow: true, + created: DateUtils.getDBTime(), + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + }; +} + /** * Builds an optimistic report preview action with a randomly generated reportActionID. * @@ -4271,6 +4312,7 @@ export { buildOptimisticIOUReportAction, buildOptimisticReportPreview, buildOptimisticModifiedExpenseReportAction, + buildOptimisticCancelPaymentReportAction, updateReportPreview, buildOptimisticTaskReportAction, buildOptimisticAddCommentReportAction, diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index d43fefca20bc..add8bded5e25 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -3114,6 +3114,108 @@ function submitReport(expenseReport) { ); } +/** + * @param {Object} expenseReport + * @param {Object} chatReport + */ +function cancelPayment(expenseReport, chatReport) { + const optimisticReportAction = ReportUtils.buildOptimisticCancelPaymentReportAction(); + const policy = ReportUtils.getPolicy(chatReport.policyID); + const isFree = policy && policy.type === CONST.POLICY.TYPE.FREE; + const optimisticData = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport.reportID}`, + value: { + [optimisticReportAction.reportActionID]: { + ...optimisticReportAction, + pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${expenseReport.reportID}`, + value: { + ...expenseReport, + lastMessageText: lodashGet(optimisticReportAction, 'message.0.text', ''), + lastMessageHtml: lodashGet(optimisticReportAction, 'message.0.html', ''), + state: isFree ? CONST.REPORT.STATE.SUBMITTED : CONST.REPORT.STATE.OPEN, + stateNum: isFree ? CONST.REPORT.STATE_NUM.PROCESSING : CONST.REPORT.STATE.OPEN, + statusNum: isFree ? CONST.REPORT.STATUS.SUBMITTED : CONST.REPORT.STATE.OPEN, + }, + }, + ...(chatReport.reportID + ? [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, + value: { + ...chatReport, + hasOutstandingIOU: true, + hasOutstandingChildRequest: true, + iouReportID: expenseReport.reportID, + }, + }, + ] + : []), + ]; + + const successData = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport.reportID}`, + value: { + [optimisticReportAction.reportActionID]: { + pendingAction: null, + }, + }, + }, + ]; + + const failureData = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${expenseReport.reportID}`, + value: { + [expenseReport.reportActionID]: { + errors: ErrorUtils.getMicroSecondOnyxError('iou.error.other'), + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${expenseReport.reportID}`, + value: { + statusNum: CONST.REPORT.STATUS.REIMBURSED, + }, + }, + ...(chatReport.reportID + ? [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, + value: { + hasOutstandingIOU: false, + hasOutstandingChildRequest: false, + iouReportID: 0, + }, + }, + ] + : []), + ]; + + API.write( + 'CancelPayment', + { + reportID: expenseReport.reportID, + managerAccountID: expenseReport.managerID, + reportActionID: optimisticReportAction.reportActionID, + }, + {optimisticData, successData, failureData}, + ); +} + /** * @param {String} paymentType * @param {Object} chatReport @@ -3431,4 +3533,5 @@ export { detachReceipt, getIOUReportID, editMoneyRequest, + cancelPayment, }; From 05f0e3db60f3a7851eefbbd6131d27f8dc9a5f2b Mon Sep 17 00:00:00 2001 From: Alberto Date: Thu, 28 Dec 2023 11:28:42 +0100 Subject: [PATCH 03/28] a couple extra files --- src/pages/home/report/ReportActionItem.js | 5 +---- src/types/onyx/OriginalMessage.ts | 6 ++++++ src/types/onyx/ReportAction.ts | 6 +++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/pages/home/report/ReportActionItem.js b/src/pages/home/report/ReportActionItem.js index 57627d819197..763c6610fb14 100644 --- a/src/pages/home/report/ReportActionItem.js +++ b/src/pages/home/report/ReportActionItem.js @@ -422,10 +422,7 @@ function ReportActionItem(props) { ); } else if (props.action.actionName === CONST.REPORT.ACTIONS.TYPE.REIMBURSEMENTDEQUEUED) { - const submitterDisplayName = PersonalDetailsUtils.getDisplayNameOrDefault(lodashGet(personalDetails, [props.report.ownerAccountID, 'displayName'])); - const amount = CurrencyUtils.convertToDisplayString(props.report.total, props.report.currency); - - children = ; + children = ; } else if (props.action.actionName === CONST.REPORT.ACTIONS.TYPE.MODIFIEDEXPENSE) { children = ; } else { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 767f724dd571..5ed696a9019b 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -43,10 +43,15 @@ type IOUMessage = { participantAccountIDs?: number[]; type: ValueOf; paymentType?: DeepValueOf; + cancellationReason?: string; /** Only exists when we are sending money */ IOUDetails?: IOUDetails; }; +type ReimbursementDeQueuedMessage = { + cancellationReason: string; +}; + type OriginalMessageIOU = { actionName: typeof CONST.REPORT.ACTIONS.TYPE.IOU; originalMessage: IOUMessage; @@ -260,6 +265,7 @@ export type { Reaction, ActionName, IOUMessage, + ReimbursementDeQueuedMessage, Closed, OriginalMessageActionName, ChangeLog, diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index a881b63fbb95..02adc8ae0b95 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -51,9 +51,13 @@ type Message = { translationKey?: string; /** ID of a task report */ - taskReportID?: string; + taskReportID?: string + + /** Reason pf payment cancellation */ + cancellationReason?: string; }; + type ImageMetadata = { /** The height of the image. */ height?: number; From 47426208214aff0536fc61aa49824a8b188fbc50 Mon Sep 17 00:00:00 2001 From: Alberto Date: Thu, 28 Dec 2023 11:58:40 +0100 Subject: [PATCH 04/28] only allow in expense reports --- src/components/MoneyReportHeader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyReportHeader.js b/src/components/MoneyReportHeader.js index 535c1194229e..ce749a027704 100644 --- a/src/components/MoneyReportHeader.js +++ b/src/components/MoneyReportHeader.js @@ -118,7 +118,7 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, nextSt const isMoreContentShown = shouldShowNextStep || (shouldShowAnyButton && isSmallScreenWidth); const threeDotsMenuItems = [HeaderUtils.getPinMenuItem(moneyRequestReport)]; - if (isPayer && isSettled) { + if (isPayer && isSettled && ReportUtils.isExpenseReport(moneyRequestReport)) { threeDotsMenuItems.push({ icon: Expensicons.Trashcan, text: 'Cancel payment', From b7932d686605b53d460fe96ffc4527659db70adb Mon Sep 17 00:00:00 2001 From: Alberto Date: Tue, 2 Jan 2024 11:26:38 +0100 Subject: [PATCH 05/28] add reportID to original message --- src/libs/ReportUtils.ts | 3 ++- src/libs/actions/IOU.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 331fc03990bb..3f735e130c2d 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -2800,13 +2800,14 @@ function buildOptimisticSubmittedReportAction(amount: number, currency: string, * Builds an optimistic REIMBURSEMENTDEQUEUED report action with a randomly generated reportActionID. * */ -function buildOptimisticCancelPaymentReportAction(): OptimisticCancelPaymentReportAction { +function buildOptimisticCancelPaymentReportAction(expenseReportID: string): OptimisticCancelPaymentReportAction { return { actionName: CONST.REPORT.ACTIONS.TYPE.REIMBURSEMENTDEQUEUED, actorAccountID: currentUserAccountID, message: [ { cancellationReason: CONST.REPORT.CANCEL_PAYMENT_REASONS.ADMIN, + expenseReportID, type: CONST.REPORT.MESSAGE.TYPE.COMMENT, text: '', }, diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index add8bded5e25..337c69764ecf 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -3119,7 +3119,7 @@ function submitReport(expenseReport) { * @param {Object} chatReport */ function cancelPayment(expenseReport, chatReport) { - const optimisticReportAction = ReportUtils.buildOptimisticCancelPaymentReportAction(); + const optimisticReportAction = ReportUtils.buildOptimisticCancelPaymentReportAction(expenseReport.reportID); const policy = ReportUtils.getPolicy(chatReport.policyID); const isFree = policy && policy.type === CONST.POLICY.TYPE.FREE; const optimisticData = [ From c7518ab4c8f6942c6b8cc88fa0214745dc3191b2 Mon Sep 17 00:00:00 2001 From: Alberto Date: Tue, 2 Jan 2024 11:40:42 +0100 Subject: [PATCH 06/28] copy correct message --- src/libs/ReportUtils.ts | 1 + src/pages/home/report/ContextMenu/ContextMenuActions.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 3f735e130c2d..d3c4a7d0a01d 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -2814,6 +2814,7 @@ function buildOptimisticCancelPaymentReportAction(expenseReportID: string): Opti ], originalMessage: { cancellationReason: CONST.REPORT.CANCEL_PAYMENT_REASONS.ADMIN, + expenseReportID, }, person: [ { diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.js b/src/pages/home/report/ContextMenu/ContextMenuActions.js index f1a46785a59a..dec687e06688 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.js +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.js @@ -291,7 +291,13 @@ export default [ } else if (ReportActionsUtils.isModifiedExpenseAction(reportAction)) { const modifyExpenseMessage = ModifiedExpenseMessage.getForReportAction(reportAction); Clipboard.setString(modifyExpenseMessage); - } else if (ReportActionsUtils.isMoneyRequestAction(reportAction)) { + }else if (ReportActionUtils.isReimbursementDeQueuedAction(reportAction)) { + const {expenseReportID} = reportAction.originalMessage; + const expenseReport = ReportUtils.getReport(expenseReportID); + console.log(reportAction); + const displayMessage = ReportUtils.getReimbursementDeQueuedActionMessage(reportAction, expenseReport); + Clipboard.setString(displayMessage); + }else if (ReportActionsUtils.isMoneyRequestAction(reportAction)) { const displayMessage = ReportUtils.getIOUReportActionDisplayMessage(reportAction); Clipboard.setString(displayMessage); } else if (ReportActionsUtils.isCreatedTaskReportAction(reportAction)) { From 7a119c9155eca1d83ab5e4b1844f1e9b7a9eb910 Mon Sep 17 00:00:00 2001 From: Alberto Date: Tue, 2 Jan 2024 11:42:58 +0100 Subject: [PATCH 07/28] typo --- src/pages/home/report/ContextMenu/ContextMenuActions.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.js b/src/pages/home/report/ContextMenu/ContextMenuActions.js index dec687e06688..c465035b2a25 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.js +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.js @@ -291,10 +291,9 @@ export default [ } else if (ReportActionsUtils.isModifiedExpenseAction(reportAction)) { const modifyExpenseMessage = ModifiedExpenseMessage.getForReportAction(reportAction); Clipboard.setString(modifyExpenseMessage); - }else if (ReportActionUtils.isReimbursementDeQueuedAction(reportAction)) { + }else if (ReportActionsUtils.isReimbursementDeQueuedAction(reportAction)) { const {expenseReportID} = reportAction.originalMessage; const expenseReport = ReportUtils.getReport(expenseReportID); - console.log(reportAction); const displayMessage = ReportUtils.getReimbursementDeQueuedActionMessage(reportAction, expenseReport); Clipboard.setString(displayMessage); }else if (ReportActionsUtils.isMoneyRequestAction(reportAction)) { From 8aa11a4f95ba71c69b134c8e6529f75fd7eab294 Mon Sep 17 00:00:00 2001 From: Alberto Date: Tue, 2 Jan 2024 12:13:55 +0100 Subject: [PATCH 08/28] Correctly copy owes message --- src/libs/ReportUtils.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index d3c4a7d0a01d..c956928c5ac7 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -4112,17 +4112,22 @@ function getIOUReportActionDisplayMessage(reportAction: OnyxEntry) const formattedAmount = CurrencyUtils.convertToDisplayString(amount, currency) ?? ''; const payerName = isExpenseReport(iouReport) ? getPolicyName(iouReport) : getDisplayNameForParticipant(iouReport?.managerID, true); - switch (originalMessage.paymentType) { - case CONST.IOU.PAYMENT_TYPE.ELSEWHERE: - translationKey = 'iou.paidElsewhereWithAmount'; - break; - case CONST.IOU.PAYMENT_TYPE.EXPENSIFY: - case CONST.IOU.PAYMENT_TYPE.VBBA: - translationKey = 'iou.paidWithExpensifyWithAmount'; - break; - default: - translationKey = 'iou.payerPaidAmount'; - break; + // If the payment was cancelled, show the "Owes" message + if (!isSettled(IOUReportID)) { + translationKey = 'iou.payerOwesAmount'; + } else { + switch (originalMessage.paymentType) { + case CONST.IOU.PAYMENT_TYPE.ELSEWHERE: + translationKey = 'iou.paidElsewhereWithAmount'; + break; + case CONST.IOU.PAYMENT_TYPE.EXPENSIFY: + case CONST.IOU.PAYMENT_TYPE.VBBA: + translationKey = 'iou.paidWithExpensifyWithAmount'; + break; + default: + translationKey = 'iou.payerPaidAmount'; + break; + } } return Localize.translateLocal(translationKey, {amount: formattedAmount, payer: payerName ?? ''}); } From 274a58acde359ba362385d785ad358d6f2231d78 Mon Sep 17 00:00:00 2001 From: Alberto Date: Tue, 2 Jan 2024 12:49:52 +0100 Subject: [PATCH 09/28] pass chat report --- src/libs/actions/IOU.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 337c69764ecf..9188fe56920f 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -3208,7 +3208,8 @@ function cancelPayment(expenseReport, chatReport) { API.write( 'CancelPayment', { - reportID: expenseReport.reportID, + iouReportID: expenseReport.reportID, + chatReportID: chatReport.reportID, managerAccountID: expenseReport.managerID, reportActionID: optimisticReportAction.reportActionID, }, From 134f074ae8d23d32fa5bc342e017a9e7fee87787 Mon Sep 17 00:00:00 2001 From: Alberto Date: Wed, 3 Jan 2024 13:22:45 +0100 Subject: [PATCH 10/28] lint --- src/pages/home/report/ReportActionItem.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/home/report/ReportActionItem.js b/src/pages/home/report/ReportActionItem.js index e177d309adb2..fe84cc812f48 100644 --- a/src/pages/home/report/ReportActionItem.js +++ b/src/pages/home/report/ReportActionItem.js @@ -37,7 +37,6 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import compose from '@libs/compose'; import ControlSelection from '@libs/ControlSelection'; -import * as CurrencyUtils from '@libs/CurrencyUtils'; import * as DeviceCapabilities from '@libs/DeviceCapabilities'; import focusTextInputAfterAnimation from '@libs/focusTextInputAfterAnimation'; import ModifiedExpenseMessage from '@libs/ModifiedExpenseMessage'; From 09e7e8ad24a84c361f6966bafa9d69e388b908c7 Mon Sep 17 00:00:00 2001 From: Alberto Date: Wed, 3 Jan 2024 13:24:25 +0100 Subject: [PATCH 11/28] typescript --- src/types/onyx/OriginalMessage.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 5ed696a9019b..e5803774632e 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -36,6 +36,7 @@ type IOUMessage = { /** The ID of the iou transaction */ IOUTransactionID?: string; IOUReportID?: string; + expenseReportID?: string; amount: number; comment?: string; currency: string; From de3678b3814a8475f4b860eafac02a7d06dae27d Mon Sep 17 00:00:00 2001 From: Alberto Date: Wed, 3 Jan 2024 13:30:25 +0100 Subject: [PATCH 12/28] prettier --- src/libs/ReportUtils.ts | 2 +- src/libs/actions/IOU.js | 42 +++++++++---------- .../report/ContextMenu/ContextMenuActions.js | 4 +- src/types/onyx/ReportAction.ts | 3 +- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index feb68c5169a2..30f64cd8d134 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -181,7 +181,7 @@ type OptimisticSubmittedReportAction = Pick< type OptimisticCancelPaymentReportAction = Pick< ReportAction, 'actionName' | 'actorAccountID' | 'message' | 'originalMessage' | 'person' | 'reportActionID' | 'shouldShow' | 'created' | 'pendingAction' - >; +>; type OptimisticEditedTaskReportAction = Pick< ReportAction, diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 43eef2b4e46c..549719a6906d 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -3191,17 +3191,17 @@ function cancelPayment(expenseReport, chatReport) { }, ...(chatReport.reportID ? [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, - value: { - ...chatReport, - hasOutstandingIOU: true, - hasOutstandingChildRequest: true, - iouReportID: expenseReport.reportID, - }, - }, - ] + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, + value: { + ...chatReport, + hasOutstandingIOU: true, + hasOutstandingChildRequest: true, + iouReportID: expenseReport.reportID, + }, + }, + ] : []), ]; @@ -3236,16 +3236,16 @@ function cancelPayment(expenseReport, chatReport) { }, ...(chatReport.reportID ? [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, - value: { - hasOutstandingIOU: false, - hasOutstandingChildRequest: false, - iouReportID: 0, - }, - }, - ] + { + onyxMethod: Onyx.METHOD.MERGE, + key: `${ONYXKEYS.COLLECTION.REPORT}${chatReport.reportID}`, + value: { + hasOutstandingIOU: false, + hasOutstandingChildRequest: false, + iouReportID: 0, + }, + }, + ] : []), ]; diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.js b/src/pages/home/report/ContextMenu/ContextMenuActions.js index f6fe30817d35..66502ad1d4ab 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.js +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.js @@ -281,12 +281,12 @@ export default [ } else if (ReportActionsUtils.isModifiedExpenseAction(reportAction)) { const modifyExpenseMessage = ModifiedExpenseMessage.getForReportAction(reportAction); Clipboard.setString(modifyExpenseMessage); - }else if (ReportActionsUtils.isReimbursementDeQueuedAction(reportAction)) { + } else if (ReportActionsUtils.isReimbursementDeQueuedAction(reportAction)) { const {expenseReportID} = reportAction.originalMessage; const expenseReport = ReportUtils.getReport(expenseReportID); const displayMessage = ReportUtils.getReimbursementDeQueuedActionMessage(reportAction, expenseReport); Clipboard.setString(displayMessage); - }else if (ReportActionsUtils.isMoneyRequestAction(reportAction)) { + } else if (ReportActionsUtils.isMoneyRequestAction(reportAction)) { const displayMessage = ReportUtils.getIOUReportActionDisplayMessage(reportAction); Clipboard.setString(displayMessage); } else if (ReportActionsUtils.isCreatedTaskReportAction(reportAction)) { diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index 02adc8ae0b95..cea5a5a570b5 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -51,13 +51,12 @@ type Message = { translationKey?: string; /** ID of a task report */ - taskReportID?: string + taskReportID?: string; /** Reason pf payment cancellation */ cancellationReason?: string; }; - type ImageMetadata = { /** The height of the image. */ height?: number; From cb2daae3cc629a84c1783985a7b916547efa8466 Mon Sep 17 00:00:00 2001 From: Alberto Date: Wed, 3 Jan 2024 13:34:09 +0100 Subject: [PATCH 13/28] more typescript --- src/types/onyx/ReportAction.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index cea5a5a570b5..95f0a97bdbeb 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -53,8 +53,11 @@ type Message = { /** ID of a task report */ taskReportID?: string; - /** Reason pf payment cancellation */ + /** Reason of payment cancellation */ cancellationReason?: string; + + /** ID of an expense report */ + expenseReportID?: string; }; type ImageMetadata = { From cd9e8ee5295417223ffe3b92c0910095e2a6e345 Mon Sep 17 00:00:00 2001 From: Alberto Date: Fri, 5 Jan 2024 14:25:53 +0100 Subject: [PATCH 14/28] lint --- src/components/HoldMenuSectionList.tsx | 7 ++++--- src/components/ProcessMoneyRequestHoldMenu.tsx | 4 ++-- src/components/TextPill.tsx | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/HoldMenuSectionList.tsx b/src/components/HoldMenuSectionList.tsx index 9a9857f037f2..24c5bb663cf9 100644 --- a/src/components/HoldMenuSectionList.tsx +++ b/src/components/HoldMenuSectionList.tsx @@ -1,10 +1,11 @@ import React from 'react'; -import {ImageSourcePropType, View} from 'react-native'; -import {SvgProps} from 'react-native-svg'; +import type {ImageSourcePropType} from 'react-native'; +import { View} from 'react-native'; +import type {SvgProps} from 'react-native-svg'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import variables from '@styles/variables'; -import {TranslationPaths} from '@src/languages/types'; +import type {TranslationPaths} from '@src/languages/types'; import Icon from './Icon'; import * as Illustrations from './Icon/Illustrations'; import Text from './Text'; diff --git a/src/components/ProcessMoneyRequestHoldMenu.tsx b/src/components/ProcessMoneyRequestHoldMenu.tsx index be72fdb98a8b..1b711633ed3b 100644 --- a/src/components/ProcessMoneyRequestHoldMenu.tsx +++ b/src/components/ProcessMoneyRequestHoldMenu.tsx @@ -4,9 +4,9 @@ import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import Button from './Button'; import HoldMenuSectionList from './HoldMenuSectionList'; -import {PopoverAnchorPosition} from './Modal/types'; +import type {PopoverAnchorPosition} from './Modal/types'; import Popover from './Popover'; -import {AnchorAlignment} from './Popover/types'; +import type {AnchorAlignment} from './Popover/types'; import Text from './Text'; import TextPill from './TextPill'; diff --git a/src/components/TextPill.tsx b/src/components/TextPill.tsx index 035ae1dd42d8..6d473b189534 100644 --- a/src/components/TextPill.tsx +++ b/src/components/TextPill.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import {StyleProp, TextStyle} from 'react-native'; +import type {StyleProp, TextStyle} from 'react-native'; // eslint-disable-next-line no-restricted-imports import useThemeStyles from '@hooks/useThemeStyles'; import colors from '@styles/theme/colors'; From 39ecbe26f62c980a2a92290acf696885d0fded69 Mon Sep 17 00:00:00 2001 From: Alberto Date: Fri, 5 Jan 2024 14:30:23 +0100 Subject: [PATCH 15/28] prettier --- src/components/HoldMenuSectionList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/HoldMenuSectionList.tsx b/src/components/HoldMenuSectionList.tsx index 24c5bb663cf9..cbaad537647b 100644 --- a/src/components/HoldMenuSectionList.tsx +++ b/src/components/HoldMenuSectionList.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type {ImageSourcePropType} from 'react-native'; -import { View} from 'react-native'; +import {View} from 'react-native'; import type {SvgProps} from 'react-native-svg'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; From 92f51e2c735c18d79890718799e3ec7d178fede5 Mon Sep 17 00:00:00 2001 From: BhuvaneshPatil Date: Fri, 5 Jan 2024 19:56:06 +0530 Subject: [PATCH 16/28] Select members from ONYS on page open, remove them on unmounting --- src/pages/workspace/WorkspaceInvitePage.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/WorkspaceInvitePage.js b/src/pages/workspace/WorkspaceInvitePage.js index 589c4971506b..a8aaefeeb812 100644 --- a/src/pages/workspace/WorkspaceInvitePage.js +++ b/src/pages/workspace/WorkspaceInvitePage.js @@ -54,6 +54,7 @@ const propTypes = { }).isRequired, isLoadingReportData: PropTypes.bool, + invitedEmailsToAccountIDsDraft: PropTypes.objectOf(PropTypes.number), ...policyPropTypes, }; @@ -61,6 +62,7 @@ const defaultProps = { personalDetails: {}, betas: [], isLoadingReportData: true, + invitedEmailsToAccountIDsDraft: {}, ...policyDefaultProps, }; @@ -78,7 +80,10 @@ function WorkspaceInvitePage(props) { useEffect(() => { setSearchTerm(SearchInputManager.searchInput); - }, []); + return () => { + Policy.setWorkspaceInviteMembersDraft(props.route.params.policyID, {}); + }; + }, [props.route.params.policyID]); useEffect(() => { Policy.clearErrors(props.route.params.policyID); @@ -102,6 +107,12 @@ function WorkspaceInvitePage(props) { _.each(inviteOptions.personalDetails, (detail) => (detailsMap[detail.login] = OptionsListUtils.formatMemberForList(detail))); const newSelectedOptions = []; + _.each(_.keys(props.invitedEmailsToAccountIDsDraft), (login) => { + if (!_.has(detailsMap, login)) { + return; + } + newSelectedOptions.push({...detailsMap[login], isSelected: true}); + }); _.each(selectedOptions, (option) => { newSelectedOptions.push(_.has(detailsMap, option.login) ? {...detailsMap[option.login], isSelected: true} : option); }); @@ -318,5 +329,8 @@ export default compose( isLoadingReportData: { key: ONYXKEYS.IS_LOADING_REPORT_DATA, }, + invitedEmailsToAccountIDsDraft: { + key: ({route}) => `${ONYXKEYS.COLLECTION.WORKSPACE_INVITE_MEMBERS_DRAFT}${route.params.policyID.toString()}`, + }, }), )(WorkspaceInvitePage); From 7425c00e075e127a058d36da78e1baaab418c793 Mon Sep 17 00:00:00 2001 From: Alberto Date: Thu, 11 Jan 2024 13:02:18 +0100 Subject: [PATCH 17/28] translate menu --- src/components/MoneyReportHeader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MoneyReportHeader.js b/src/components/MoneyReportHeader.js index 3d6e4bde830c..ce1c9611c733 100644 --- a/src/components/MoneyReportHeader.js +++ b/src/components/MoneyReportHeader.js @@ -132,7 +132,7 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, nextSt if (isPayer && isSettled && ReportUtils.isExpenseReport(moneyRequestReport)) { threeDotsMenuItems.push({ icon: Expensicons.Trashcan, - text: 'Cancel payment', + text: translate('iou.cancelPayment'), onSelected: () => setIsConfirmModalVisible(true), }); } From 37cb64da198d4ea4d2a1886985c5e08e449725b2 Mon Sep 17 00:00:00 2001 From: tienifr Date: Fri, 12 Jan 2024 14:55:26 +0700 Subject: [PATCH 18/28] treat storybook link as external path --- src/CONST.ts | 2 +- src/libs/actions/Link.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index b1a6b6895de7..8beb137980f7 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -2725,7 +2725,7 @@ const CONST = { EXPECTED_OUTPUT: 'FCFA 123,457', }, - PATHS_TO_TREAT_AS_EXTERNAL: ['NewExpensify.dmg'], + PATHS_TO_TREAT_AS_EXTERNAL: ['NewExpensify.dmg', 'docs/index.html'], // Test tool menu parameters TEST_TOOL: { diff --git a/src/libs/actions/Link.ts b/src/libs/actions/Link.ts index 2fb863467e32..186c9beed970 100644 --- a/src/libs/actions/Link.ts +++ b/src/libs/actions/Link.ts @@ -65,7 +65,7 @@ function openOldDotLink(url: string) { function getInternalNewExpensifyPath(href: string) { const attrPath = Url.getPathFromURL(href); return (Url.hasSameExpensifyOrigin(href, CONST.NEW_EXPENSIFY_URL) || Url.hasSameExpensifyOrigin(href, CONST.STAGING_NEW_EXPENSIFY_URL) || href.startsWith(CONST.DEV_NEW_EXPENSIFY_URL)) && - !CONST.PATHS_TO_TREAT_AS_EXTERNAL.find((path) => path === attrPath) + !CONST.PATHS_TO_TREAT_AS_EXTERNAL.find((path) => attrPath.startsWith(path)) ? attrPath : ''; } From 429f277778456dcac42cba65f33cf09c076e6b58 Mon Sep 17 00:00:00 2001 From: Alberto Date: Fri, 12 Jan 2024 15:42:46 +0100 Subject: [PATCH 19/28] Display correct message --- src/pages/home/report/ReportActionItemMessage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/report/ReportActionItemMessage.tsx b/src/pages/home/report/ReportActionItemMessage.tsx index 3a71ee8356b3..025b0cbb8b0a 100644 --- a/src/pages/home/report/ReportActionItemMessage.tsx +++ b/src/pages/home/report/ReportActionItemMessage.tsx @@ -57,7 +57,7 @@ function ReportActionItemMessage({action, displayAsGroup, reportID, style, isHid const originalMessage = action.actionName === CONST.REPORT.ACTIONS.TYPE.IOU ? action.originalMessage : null; const iouReportID = originalMessage?.IOUReportID; if (iouReportID) { - iouMessage = ReportUtils.getReportPreviewMessage(ReportUtils.getReport(iouReportID), action); + iouMessage = ReportUtils.getIOUReportActionDisplayMessage(action); } } From 6ab6be8b03a92fa9672a082337c05ddaaa8a22ff Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Fri, 12 Jan 2024 22:54:23 +0700 Subject: [PATCH 20/28] only apply interaction for desktop --- src/libs/DoInteractionTask/index.desktop.ts | 9 +++++++++ src/libs/DoInteractionTask/index.ts | 6 ++++++ src/pages/NewChatPage.js | 12 +++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/libs/DoInteractionTask/index.desktop.ts create mode 100644 src/libs/DoInteractionTask/index.ts diff --git a/src/libs/DoInteractionTask/index.desktop.ts b/src/libs/DoInteractionTask/index.desktop.ts new file mode 100644 index 000000000000..ba2e9c4f7081 --- /dev/null +++ b/src/libs/DoInteractionTask/index.desktop.ts @@ -0,0 +1,9 @@ +import {InteractionManager} from 'react-native'; + +function doInteractionTask(callback: () => void) { + return InteractionManager.runAfterInteractions(() => { + callback(); + }); +} + +export default doInteractionTask; diff --git a/src/libs/DoInteractionTask/index.ts b/src/libs/DoInteractionTask/index.ts new file mode 100644 index 000000000000..dffbb0562b98 --- /dev/null +++ b/src/libs/DoInteractionTask/index.ts @@ -0,0 +1,6 @@ +function doInteractionTask(callback: () => void) { + callback(); + return null; +} + +export default doInteractionTask; diff --git a/src/pages/NewChatPage.js b/src/pages/NewChatPage.js index 3a58727eddb7..b90ce6bbc247 100755 --- a/src/pages/NewChatPage.js +++ b/src/pages/NewChatPage.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React, {useCallback, useEffect, useMemo, useState} from 'react'; -import {InteractionManager, View} from 'react-native'; +import {View} from 'react-native'; import {withOnyx} from 'react-native-onyx'; import _ from 'underscore'; import KeyboardAvoidingView from '@components/KeyboardAvoidingView'; @@ -15,6 +15,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import useWindowDimensions from '@hooks/useWindowDimensions'; import compose from '@libs/compose'; import * as DeviceCapabilities from '@libs/DeviceCapabilities'; +import doInteractionTask from '@libs/DoInteractionTask'; import * as OptionsListUtils from '@libs/OptionsListUtils'; import * as ReportUtils from '@libs/ReportUtils'; import variables from '@styles/variables'; @@ -209,11 +210,16 @@ function NewChatPage({betas, isGroupChat, personalDetails, reports, translate, i }, [reports, personalDetails, searchTerm]); useEffect(() => { - const interactionTask = InteractionManager.runAfterInteractions(() => { + const interactionTask = doInteractionTask(() => { setDidScreenTransitionEnd(true); }); - return interactionTask.cancel; + return () => { + if (!interactionTask) { + return; + } + interactionTask.cancel(); + }; }, []); useEffect(() => { From 31724643760b609d708384986f147784c64046fb Mon Sep 17 00:00:00 2001 From: dukenv0307 Date: Fri, 12 Jan 2024 23:07:07 +0700 Subject: [PATCH 21/28] add comment --- src/libs/DoInteractionTask/index.desktop.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/DoInteractionTask/index.desktop.ts b/src/libs/DoInteractionTask/index.desktop.ts index ba2e9c4f7081..73b3cb19ec32 100644 --- a/src/libs/DoInteractionTask/index.desktop.ts +++ b/src/libs/DoInteractionTask/index.desktop.ts @@ -1,5 +1,6 @@ import {InteractionManager} from 'react-native'; +// For desktop, we should call the callback after all interactions to prevent freezing. See more detail in https://github.com/Expensify/App/issues/28916 function doInteractionTask(callback: () => void) { return InteractionManager.runAfterInteractions(() => { callback(); From 963d957f5f8c0fd2ef6acbf6c43a58684e383be3 Mon Sep 17 00:00:00 2001 From: Youssef Lourayad Date: Sat, 13 Jan 2024 21:26:13 +0100 Subject: [PATCH 22/28] Fix a typo preventing us from using violations loaded from Onyx --- src/components/ReportActionItem/MoneyRequestView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ReportActionItem/MoneyRequestView.js b/src/components/ReportActionItem/MoneyRequestView.js index 036b64af1e4b..7c7998c24c95 100644 --- a/src/components/ReportActionItem/MoneyRequestView.js +++ b/src/components/ReportActionItem/MoneyRequestView.js @@ -432,7 +432,7 @@ export default compose( return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`; }, }, - transactionViolation: { + transactionViolations: { key: ({report}) => { const parentReportAction = ReportActionsUtils.getParentReportAction(report); const transactionID = lodashGet(parentReportAction, ['originalMessage', 'IOUTransactionID'], 0); From d3da565ce9846d0ddb4b8c59b9ce6084a0360e46 Mon Sep 17 00:00:00 2001 From: bartektomczyk Date: Wed, 3 Jan 2024 08:42:32 +0100 Subject: [PATCH 23/28] fix: fixed color style in icon, changed way of redirecting to the olddot --- assets/images/new-expensify.svg | 2 +- src/CONST.ts | 1 - src/pages/settings/InitialSettingsPage.js | 6 ++++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/assets/images/new-expensify.svg b/assets/images/new-expensify.svg index 38276ecd9385..89102ecbc5e4 100644 --- a/assets/images/new-expensify.svg +++ b/assets/images/new-expensify.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/src/CONST.ts b/src/CONST.ts index 8b5c0f5a88ca..5d3969fffd9c 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -479,7 +479,6 @@ const CONST = { ONFIDO_TERMS_OF_SERVICE_URL: 'https://onfido.com/terms-of-service/', // Use Environment.getEnvironmentURL to get the complete URL with port number DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:', - EXPENSIFY_INBOX_URL: 'https://www.expensify.com/inbox', SIGN_IN_FORM_WIDTH: 300, diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index d2b91ed6b76b..5c498128c308 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -128,6 +128,8 @@ const defaultProps = { ...withCurrentUserPersonalDetailsDefaultProps, }; +const INBOX_URL = 'inbox'; + function InitialSettingsPage(props) { const theme = useTheme(); const styles = useThemeStyles(); @@ -267,11 +269,11 @@ function InitialSettingsPage(props) { translationKey: 'initialSettingsPage.goToExpensifyClassic', icon: Expensicons.NewExpensify, action: () => { - Link.openExternalLink(CONST.EXPENSIFY_INBOX_URL); + Link.openOldDotLink(INBOX_URL); }, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - link: CONST.EXPENSIFY_INBOX_URL, + link: Link.buildOldDotURL(INBOX_URL), }, { translationKey: 'initialSettingsPage.signOut', From cc026429b0c739cef3142a43620991f712a97ba0 Mon Sep 17 00:00:00 2001 From: bartektomczyk Date: Thu, 11 Jan 2024 20:21:24 +0100 Subject: [PATCH 24/28] refactor: move inbox url to the const --- src/CONST.ts | 3 +++ src/pages/settings/InitialSettingsPage.js | 6 ++---- src/pages/settings/Wallet/ExpensifyCardPage.js | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/CONST.ts b/src/CONST.ts index 5d3969fffd9c..e7c8291f4308 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -479,6 +479,9 @@ const CONST = { ONFIDO_TERMS_OF_SERVICE_URL: 'https://onfido.com/terms-of-service/', // Use Environment.getEnvironmentURL to get the complete URL with port number DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:', + OLDDOT_URLS: { + INBOX: 'inbox', + }, SIGN_IN_FORM_WIDTH: 300, diff --git a/src/pages/settings/InitialSettingsPage.js b/src/pages/settings/InitialSettingsPage.js index 5c498128c308..6e310b9a62bd 100755 --- a/src/pages/settings/InitialSettingsPage.js +++ b/src/pages/settings/InitialSettingsPage.js @@ -128,8 +128,6 @@ const defaultProps = { ...withCurrentUserPersonalDetailsDefaultProps, }; -const INBOX_URL = 'inbox'; - function InitialSettingsPage(props) { const theme = useTheme(); const styles = useThemeStyles(); @@ -269,11 +267,11 @@ function InitialSettingsPage(props) { translationKey: 'initialSettingsPage.goToExpensifyClassic', icon: Expensicons.NewExpensify, action: () => { - Link.openOldDotLink(INBOX_URL); + Link.openOldDotLink(CONST.OLDDOT_URLS.INBOX); }, shouldShowRightIcon: true, iconRight: Expensicons.NewWindow, - link: Link.buildOldDotURL(INBOX_URL), + link: Link.buildOldDotURL(CONST.OLDDOT_URLS.INBOX), }, { translationKey: 'initialSettingsPage.signOut', diff --git a/src/pages/settings/Wallet/ExpensifyCardPage.js b/src/pages/settings/Wallet/ExpensifyCardPage.js index 3c44f806fdb8..856c0613cec7 100644 --- a/src/pages/settings/Wallet/ExpensifyCardPage.js +++ b/src/pages/settings/Wallet/ExpensifyCardPage.js @@ -208,7 +208,7 @@ function ExpensifyCardPage({ medium style={[styles.mh5, styles.mb5]} text={translate('cardPage.reviewTransaction')} - onPress={() => Link.openOldDotLink('inbox')} + onPress={() => Link.openOldDotLink(CONST.OLDDOT_URLS.INBOX)} /> ) : null} From 72ee3469aaac2be43e35366c1c33e8f4ba629878 Mon Sep 17 00:00:00 2001 From: Wojciech Lewicki Date: Mon, 15 Jan 2024 11:30:16 +0100 Subject: [PATCH 25/28] chore: bump netinfo to newest version --- ios/Podfile.lock | 10 +++++----- package-lock.json | 14 +++++++------- package.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index acc8720dafce..64c49d0e7282 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -282,7 +282,7 @@ PODS: - Onfido (~> 28.3.0) - React - OpenSSL-Universal (1.1.1100) - - Plaid (4.7.0) + - Plaid (4.7.1) - PromisesObjC (2.3.1) - RCT-Folly (2022.05.16.00): - boost @@ -1176,7 +1176,7 @@ PODS: - React-Core - react-native-key-command (1.0.6): - React-Core - - react-native-netinfo (11.1.0): + - react-native-netinfo (11.2.1): - React-Core - react-native-pager-view (6.2.2): - React-Core @@ -1877,7 +1877,7 @@ SPEC CHECKSUMS: Onfido: 564f60c39819635ec5b549285a1eec278cc9ba67 onfido-react-native-sdk: b346a620af5669f9fecb6dc3052314a35a94ad9f OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - Plaid: 431ef9be5314a1345efb451bc5e6b067bfb3b4c6 + Plaid: 4f7d68d53f9f8e4c74031ce8ba0f72dd88893d39 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 RCTRequired: 9b1e7e262745fb671e33c51c1078d093bd30e322 @@ -1909,7 +1909,7 @@ SPEC CHECKSUMS: react-native-image-manipulator: c48f64221cfcd46e9eec53619c4c0374f3328a56 react-native-image-picker: c33d4e79f0a14a2b66e5065e14946ae63749660b react-native-key-command: 5af6ee30ff4932f78da6a2109017549042932aa5 - react-native-netinfo: 3aa5637c18834966e0c932de8ae1ae56fea20a97 + react-native-netinfo: 8a7fd3f7130ef4ad2fb4276d5c9f8d3f28d2df3d react-native-pager-view: 02a5c4962530f7efc10dd51ee9cdabeff5e6c631 react-native-pdf: 79aa75e39a80c1d45ffe58aa500f3cf08f267a2e react-native-performance: cef2b618d47b277fb5c3280b81a3aad1e72f2886 @@ -1967,7 +1967,7 @@ SPEC CHECKSUMS: SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 Turf: 13d1a92d969ca0311bbc26e8356cca178ce95da2 VisionCamera: 7d13aae043ffb38b224a0f725d1e23ca9c190fe7 - Yoga: e64aa65de36c0832d04e8c7bd614396c77a80047 + Yoga: 13c8ef87792450193e117976337b8527b49e8c03 PODFILE CHECKSUM: 0ccbb4f2406893c6e9f266dc1e7470dcd72885d2 diff --git a/package-lock.json b/package-lock.json index ac012bea728f..e1a37b85bddc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "@react-native-camera-roll/camera-roll": "5.4.0", "@react-native-clipboard/clipboard": "^1.12.1", "@react-native-community/geolocation": "^3.0.6", - "@react-native-community/netinfo": "11.1.0", + "@react-native-community/netinfo": "11.2.1", "@react-native-firebase/analytics": "^12.3.0", "@react-native-firebase/app": "^12.3.0", "@react-native-firebase/crashlytics": "^12.3.0", @@ -9608,9 +9608,9 @@ } }, "node_modules/@react-native-community/netinfo": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.1.0.tgz", - "integrity": "sha512-pIbCuqgrY7SkngAcjUs9fMzNh1h4soQMVw1IeGp1HN5//wox3fUVOuvyIubTscUbdLFKiltJAiuQek7Nhx1bqA==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.2.1.tgz", + "integrity": "sha512-n9kgmH7vLaU7Cdo8vGfJGGwhrlgppaOSq5zKj9I7H4k5iRM3aNtwURw83mgrc22Ip7nSye2afZV2xDiIyvHttQ==", "peerDependencies": { "react-native": ">=0.59" } @@ -62630,9 +62630,9 @@ "requires": {} }, "@react-native-community/netinfo": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.1.0.tgz", - "integrity": "sha512-pIbCuqgrY7SkngAcjUs9fMzNh1h4soQMVw1IeGp1HN5//wox3fUVOuvyIubTscUbdLFKiltJAiuQek7Nhx1bqA==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-11.2.1.tgz", + "integrity": "sha512-n9kgmH7vLaU7Cdo8vGfJGGwhrlgppaOSq5zKj9I7H4k5iRM3aNtwURw83mgrc22Ip7nSye2afZV2xDiIyvHttQ==", "requires": {} }, "@react-native-firebase/analytics": { diff --git a/package.json b/package.json index 4a28617f649d..05610821cecb 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@react-native-camera-roll/camera-roll": "5.4.0", "@react-native-clipboard/clipboard": "^1.12.1", "@react-native-community/geolocation": "^3.0.6", - "@react-native-community/netinfo": "11.1.0", + "@react-native-community/netinfo": "11.2.1", "@react-native-firebase/analytics": "^12.3.0", "@react-native-firebase/app": "^12.3.0", "@react-native-firebase/crashlytics": "^12.3.0", From 5b82342c54a106a287cf74e6490ab5466cee6eda Mon Sep 17 00:00:00 2001 From: OSBotify Date: Mon, 15 Jan 2024 10:44:24 +0000 Subject: [PATCH 26/28] Update version to 1.4.24-8 --- android/app/build.gradle | 4 ++-- ios/NewExpensify/Info.plist | 2 +- ios/NewExpensifyTests/Info.plist | 2 +- ios/NotificationServiceExtension/Info.plist | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 162147aeff0c..74e9de4e2d1e 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 1001042407 - versionName "1.4.24-7" + versionCode 1001042408 + versionName "1.4.24-8" } flavorDimensions "default" diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist index 7081805db569..0b0791a91a5d 100644 --- a/ios/NewExpensify/Info.plist +++ b/ios/NewExpensify/Info.plist @@ -40,7 +40,7 @@ CFBundleVersion - 1.4.24.7 + 1.4.24.8 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist index 20d4ea1a4820..2004f3e4a0bd 100644 --- a/ios/NewExpensifyTests/Info.plist +++ b/ios/NewExpensifyTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 1.4.24.7 + 1.4.24.8 diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist index f941edc1100e..39e2818a040e 100644 --- a/ios/NotificationServiceExtension/Info.plist +++ b/ios/NotificationServiceExtension/Info.plist @@ -5,7 +5,7 @@ CFBundleShortVersionString 1.4.24 CFBundleVersion - 1.4.24.7 + 1.4.24.8 NSExtension NSExtensionPointIdentifier diff --git a/package-lock.json b/package-lock.json index ac012bea728f..251eafa96a6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "new.expensify", - "version": "1.4.24-7", + "version": "1.4.24-8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "new.expensify", - "version": "1.4.24-7", + "version": "1.4.24-8", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 4a28617f649d..e21530bf036c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "new.expensify", - "version": "1.4.24-7", + "version": "1.4.24-8", "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.", From 305c30549e72ed6d4021824c08cbbc74a05a3d1f Mon Sep 17 00:00:00 2001 From: Wojciech Lewicki Date: Mon, 15 Jan 2024 12:10:18 +0100 Subject: [PATCH 27/28] fix: remove unnecessary Podfile.lock update --- ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 64c49d0e7282..379194a70fd9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -282,7 +282,7 @@ PODS: - Onfido (~> 28.3.0) - React - OpenSSL-Universal (1.1.1100) - - Plaid (4.7.1) + - Plaid (4.7.0) - PromisesObjC (2.3.1) - RCT-Folly (2022.05.16.00): - boost @@ -1877,7 +1877,7 @@ SPEC CHECKSUMS: Onfido: 564f60c39819635ec5b549285a1eec278cc9ba67 onfido-react-native-sdk: b346a620af5669f9fecb6dc3052314a35a94ad9f OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c - Plaid: 4f7d68d53f9f8e4c74031ce8ba0f72dd88893d39 + Plaid: 431ef9be5314a1345efb451bc5e6b067bfb3b4c6 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0 RCTRequired: 9b1e7e262745fb671e33c51c1078d093bd30e322 From 60de4ac91f27ecb9ac1c0eeadb43ba88493a2bb3 Mon Sep 17 00:00:00 2001 From: OSBotify Date: Mon, 15 Jan 2024 11:30:48 +0000 Subject: [PATCH 28/28] Update version to 1.4.25-0 --- android/app/build.gradle | 4 ++-- ios/NewExpensify/Info.plist | 4 ++-- ios/NewExpensifyTests/Info.plist | 4 ++-- ios/NotificationServiceExtension/Info.plist | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 74e9de4e2d1e..18ef2984f67a 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 1001042408 - versionName "1.4.24-8" + versionCode 1001042500 + versionName "1.4.25-0" } flavorDimensions "default" diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist index 0b0791a91a5d..b4056989a1c4 100644 --- a/ios/NewExpensify/Info.plist +++ b/ios/NewExpensify/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.24 + 1.4.25 CFBundleSignature ???? CFBundleURLTypes @@ -40,7 +40,7 @@ CFBundleVersion - 1.4.24.8 + 1.4.25.0 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist index 2004f3e4a0bd..4f75315fb1ec 100644 --- a/ios/NewExpensifyTests/Info.plist +++ b/ios/NewExpensifyTests/Info.plist @@ -15,10 +15,10 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 1.4.24 + 1.4.25 CFBundleSignature ???? CFBundleVersion - 1.4.24.8 + 1.4.25.0 diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist index 39e2818a040e..a0328855047b 100644 --- a/ios/NotificationServiceExtension/Info.plist +++ b/ios/NotificationServiceExtension/Info.plist @@ -3,9 +3,9 @@ CFBundleShortVersionString - 1.4.24 + 1.4.25 CFBundleVersion - 1.4.24.8 + 1.4.25.0 NSExtension NSExtensionPointIdentifier diff --git a/package-lock.json b/package-lock.json index 251eafa96a6d..0c78d39d667d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "new.expensify", - "version": "1.4.24-8", + "version": "1.4.25-0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "new.expensify", - "version": "1.4.24-8", + "version": "1.4.25-0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index e21530bf036c..eef9610765c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "new.expensify", - "version": "1.4.24-8", + "version": "1.4.25-0", "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.",