Skip to content

Commit

Permalink
Merge pull request Expensify#31061 from koko57/fix/30042-fix-lhn-prev…
Browse files Browse the repository at this point in the history
…iews-and-report-actions

fix: fix lhn previews
  • Loading branch information
mountiny authored Nov 23, 2023
2 parents 4952c39 + 4e398e8 commit 9f16cce
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 20 deletions.
10 changes: 5 additions & 5 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -561,19 +561,19 @@ export default {
splitAmount: ({amount}: SplitAmountParams) => `split ${amount}`,
didSplitAmount: ({formattedAmount, comment}: DidSplitAmountMessageParams) => `split ${formattedAmount}${comment ? ` for ${comment}` : ''}`,
amountEach: ({amount}: AmountEachParams) => `${amount} each`,
payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer} owes ${amount}`,
payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer ? `${payer} ` : ''}owes ${amount}`,
payerOwes: ({payer}: PayerOwesParams) => `${payer} owes: `,
payerPaidAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} paid ${amount}`,
payerPaidAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer ? `${payer} ` : ''}paid ${amount}`,
payerPaid: ({payer}: PayerPaidParams) => `${payer} paid: `,
payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} spent ${amount}`,
payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer ? `${payer} ` : ''}spent ${amount}`,
payerSpent: ({payer}: PayerPaidParams) => `${payer} spent: `,
managerApproved: ({manager}: ManagerApprovedParams) => `${manager} approved:`,
payerSettled: ({amount}: PayerSettledParams) => `paid ${amount}`,
waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `started settling up, payment is held until ${submitterDisplayName} adds a bank account`,
settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) =>
`${submitterDisplayName} added a bank account. The ${amount} payment has been made.`,
paidElsewhereWithAmount: ({payer, amount}: PaidElsewhereWithAmountParams) => `${payer} paid ${amount} elsewhere`,
paidWithExpensifyWithAmount: ({payer, amount}: PaidWithExpensifyWithAmountParams) => `${payer} paid ${amount} using Expensify`,
paidElsewhereWithAmount: ({payer, amount}: PaidElsewhereWithAmountParams) => `${payer ? `${payer} ` : ''}paid ${amount} elsewhere`,
paidWithExpensifyWithAmount: ({payer, amount}: PaidWithExpensifyWithAmountParams) => `${payer ? `${payer} ` : ''}paid ${amount} using Expensify`,
noReimbursableExpenses: 'This report has an invalid amount',
pendingConversionMessage: "Total will update when you're back online",
changedTheRequest: 'changed the request',
Expand Down
10 changes: 5 additions & 5 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -553,19 +553,19 @@ export default {
splitAmount: ({amount}: SplitAmountParams) => `dividir ${amount}`,
didSplitAmount: ({formattedAmount, comment}: DidSplitAmountMessageParams) => `dividió ${formattedAmount}${comment ? ` para ${comment}` : ''}`,
amountEach: ({amount}: AmountEachParams) => `${amount} cada uno`,
payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer} debe ${amount}`,
payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer ? `${payer} ` : ''}debe ${amount}`,
payerOwes: ({payer}: PayerOwesParams) => `${payer} debe: `,
payerPaidAmount: ({payer, amount}: PayerPaidAmountParams) => `${payer} pagó ${amount}`,
payerPaidAmount: ({payer, amount}: PayerPaidAmountParams) => `${payer ? `${payer} ` : ''}pagó ${amount}`,
payerPaid: ({payer}: PayerPaidParams) => `${payer} pagó: `,
payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} gastó ${amount}`,
payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer ? `${payer} ` : ''}gastó ${amount}`,
payerSpent: ({payer}: PayerPaidParams) => `${payer} gastó: `,
managerApproved: ({manager}: ManagerApprovedParams) => `${manager} aprobó:`,
payerSettled: ({amount}: PayerSettledParams) => `pagó ${amount}`,
waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inicio el pago, pero no se procesará hasta que ${submitterDisplayName} añada una cuenta bancaria`,
settledAfterAddedBankAccount: ({submitterDisplayName, amount}: SettledAfterAddedBankAccountParams) =>
`${submitterDisplayName} añadió una cuenta bancaria. El pago de ${amount} se ha realizado.`,
paidElsewhereWithAmount: ({payer, amount}: PaidElsewhereWithAmountParams) => `${payer} pagó ${amount} de otra forma`,
paidWithExpensifyWithAmount: ({payer, amount}: PaidWithExpensifyWithAmountParams) => `${payer} pagó ${amount} con Expensify`,
paidElsewhereWithAmount: ({payer, amount}: PaidElsewhereWithAmountParams) => `${payer ? `${payer} ` : ''}pagó ${amount} de otra forma`,
paidWithExpensifyWithAmount: ({payer, amount}: PaidWithExpensifyWithAmountParams) => `${payer ? `${payer} ` : ''}pagó ${amount} con Expensify`,
noReimbursableExpenses: 'El importe de este informe no es válido',
pendingConversionMessage: 'El total se actualizará cuando estés online',
changedTheRequest: 'cambió la solicitud',
Expand Down
44 changes: 41 additions & 3 deletions src/libs/OptionsListUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import _ from 'underscore';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import * as CollectionUtils from './CollectionUtils';
import * as CurrencyUtils from './CurrencyUtils';
import * as ErrorUtils from './ErrorUtils';
import * as LocalePhoneNumber from './LocalePhoneNumber';
import * as Localize from './Localize';
Expand Down Expand Up @@ -372,6 +373,40 @@ function getAllReportErrors(report, reportActions) {
return allReportErrors;
}

/**
* Get the preview message to be displayed in the option list.
*
* @param {Object} report
* @param {Object} reportAction
* @param {Boolean} [isPreviewMessageForParentChatReport]
* @returns {String}
*/
function getReportPreviewMessageForOptionList(report, reportAction, isPreviewMessageForParentChatReport = false) {
// For the request action preview we want to show the requestor instead of the user who owes the money
if (!isPreviewMessageForParentChatReport && reportAction.originalMessage && reportAction.originalMessage.type === CONST.IOU.REPORT_ACTION_TYPE.CREATE) {
const amount = Math.abs(reportAction.originalMessage.amount);
const formattedAmount = CurrencyUtils.convertToDisplayString(amount, report.currency);
const shouldShowActorName = currentUserAccountID !== reportAction.actorAccountID;
const actorDisplayName = shouldShowActorName ? `${ReportUtils.getDisplayNameForParticipant(reportAction.actorAccountID, true)}: ` : '';

return `${actorDisplayName}${Localize.translateLocal('iou.requestedAmount', {formattedAmount})}`;
}

const shouldShowWorkspaceName = ReportUtils.isExpenseReport(report) && isPreviewMessageForParentChatReport;
const actorID = report.managerID || reportAction.actorAccountID;
const actor = ReportUtils.getActorNameForPreviewMessage({
report,
shouldShowWorkspaceName,
actorID,
shouldUseShortForm: !isPreviewMessageForParentChatReport,
});
const shouldShowActorName = shouldShowWorkspaceName || isPreviewMessageForParentChatReport || currentUserAccountID !== actorID;
const actorDisplayName = shouldShowActorName && actor ? `${actor}${isPreviewMessageForParentChatReport ? ' ' : ': '}` : '';
const message = ReportUtils.getReportPreviewMessage(report, reportAction, true, isPreviewMessageForParentChatReport, true);

return `${actorDisplayName}${message}`;
}

/**
* Get the last message text from the report directly or from other sources for special cases.
* @param {Object} report
Expand All @@ -383,7 +418,7 @@ function getLastMessageTextForReport(report) {
const lastActionName = lodashGet(lastReportAction, 'actionName', '');

if (ReportActionUtils.isMoneyRequestAction(lastReportAction)) {
const properSchemaForMoneyRequestMessage = ReportUtils.getReportPreviewMessage(report, lastReportAction, true);
const properSchemaForMoneyRequestMessage = getReportPreviewMessageForOptionList(report, lastReportAction, false);
lastMessageTextFromReport = ReportUtils.formatReportLastMessageText(properSchemaForMoneyRequestMessage);
} else if (ReportActionUtils.isReportPreviewAction(lastReportAction)) {
const iouReport = ReportUtils.getReport(ReportActionUtils.getIOUReportIDFromReportActionPreview(lastReportAction));
Expand All @@ -394,7 +429,7 @@ function getLastMessageTextForReport(report) {
reportAction.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE &&
ReportActionUtils.isMoneyRequestAction(reportAction),
);
lastMessageTextFromReport = ReportUtils.getReportPreviewMessage(iouReport, lastIOUMoneyReport, true, ReportUtils.isChatReport(report));
lastMessageTextFromReport = getReportPreviewMessageForOptionList(iouReport, lastIOUMoneyReport, ReportUtils.isChatReport(report));
} else if (ReportActionUtils.isReimbursementQueuedAction(lastReportAction)) {
lastMessageTextFromReport = ReportUtils.getReimbursementQueuedActionMessage(lastReportAction, report);
} else if (ReportActionUtils.isDeletedParentAction(lastReportAction) && ReportUtils.isChatReport(report)) {
Expand All @@ -411,7 +446,10 @@ function getLastMessageTextForReport(report) {
) {
lastMessageTextFromReport = lodashGet(lastReportAction, 'message[0].text', '');
} else {
lastMessageTextFromReport = report ? report.lastMessageText || '' : '';
const shouldShowLastActor =
ReportUtils.isThread(report) && (ReportUtils.isExpenseReport(report) || ReportUtils.isIOUReport(report)) && currentUserAccountID !== report.lastActorAccountID;
const lastActorDisplayName = shouldShowLastActor ? `${ReportUtils.getDisplayNameForParticipant(report.lastActorAccountID, true)}: ` : '';
lastMessageTextFromReport = report ? `${lastActorDisplayName}${report.lastMessageText}` : '';
}
return lastMessageTextFromReport;
}
Expand Down
48 changes: 43 additions & 5 deletions src/libs/ReportUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -1831,17 +1831,39 @@ function getTransactionReportName(reportAction) {
});
}

/**
* Get actor name to display in the message preview
*
* @param {Object} report
* @param {Number} actorID
* @param {Boolean} [shouldShowWorkspaceName]
* @param {Boolean} [shouldUseShortForm]
* @param {Object|undefined} [policy]
* @returns {String}
*/
function getActorNameForPreviewMessage({report, actorID, shouldShowWorkspaceName = false, shouldUseShortForm = false, policy = undefined}) {
return shouldShowWorkspaceName ? getPolicyName(report, false, policy) : getDisplayNameForParticipant(actorID, shouldUseShortForm);
}

/**
* Get money request message for an IOU report
*
* @param {Object} report
* @param {Object} [reportAction={}] This can be either a report preview action or the IOU action
* @param {Boolean} [shouldConsiderReceiptBeingScanned=false]
* @param {Boolean} isPreviewMessageForParentChatReport
* @param {Boolean} [isPreviewMessageForParentChatReport]
* @param {Boolean} [shouldHideParticipantName]
* @param {Object} [policy]
* @returns {String}
*/
function getReportPreviewMessage(report, reportAction = {}, shouldConsiderReceiptBeingScanned = false, isPreviewMessageForParentChatReport = false, policy = undefined) {
function getReportPreviewMessage(
report,
reportAction = {},
shouldConsiderReceiptBeingScanned = false,
isPreviewMessageForParentChatReport = false,
shouldHideParticipantName = false,
policy = undefined,
) {
const reportActionMessage = lodashGet(reportAction, 'message[0].html', '');

if (_.isEmpty(report) || !report.reportID) {
Expand All @@ -1865,7 +1887,14 @@ function getReportPreviewMessage(report, reportAction = {}, shouldConsiderReceip
}

const totalAmount = getMoneyRequestReimbursableTotal(report);
const payerName = isExpenseReport(report) ? getPolicyName(report, false, policy) : getDisplayNameForParticipant(report.managerID, true);
const payerDisplayName = getActorNameForPreviewMessage({
report,
actorID: report.managerID,
shouldUseShortForm: true,
shouldShowWorkspaceName: isExpenseReport(report),
policy,
});
const payerName = shouldHideParticipantName ? '' : payerDisplayName;
const formattedAmount = CurrencyUtils.convertToDisplayString(totalAmount, report.currency);

if (isReportApproved(report) && getPolicyType(report, allPolicies) === CONST.POLICY.TYPE.CORPORATE) {
Expand Down Expand Up @@ -1925,7 +1954,11 @@ function getProperSchemaForModifiedExpenseMessage(newValue, oldValue, valueName,
if (!newValue) {
return Localize.translateLocal('iou.removedTheRequest', {valueName: displayValueName, oldValueToDisplay});
}
return Localize.translateLocal('iou.updatedTheRequest', {valueName: displayValueName, newValueToDisplay, oldValueToDisplay});
return Localize.translateLocal('iou.updatedTheRequest', {
valueName: displayValueName,
newValueToDisplay,
oldValueToDisplay,
});
}

/**
Expand All @@ -1940,7 +1973,10 @@ function getProperSchemaForModifiedExpenseMessage(newValue, oldValue, valueName,

function getProperSchemaForModifiedDistanceMessage(newDistance, oldDistance, newAmount, oldAmount) {
if (!oldDistance) {
return Localize.translateLocal('iou.setTheDistance', {newDistanceToDisplay: newDistance, newAmountToDisplay: newAmount});
return Localize.translateLocal('iou.setTheDistance', {
newDistanceToDisplay: newDistance,
newAmountToDisplay: newAmount,
});
}
return Localize.translateLocal('iou.updatedTheDistance', {
newDistanceToDisplay: newDistance,
Expand Down Expand Up @@ -3391,6 +3427,7 @@ function canAccessReport(report, policies, betas, allReportActions) {

return true;
}

/**
* Check if the report is the parent report of the currently viewed report or at least one child report has report action
* @param {Object} report
Expand Down Expand Up @@ -4531,6 +4568,7 @@ export {
getPersonalDetailsForAccountID,
getChannelLogMemberMessage,
getRoom,
getActorNameForPreviewMessage,
shouldDisableWelcomeMessage,
canEditWriteCapability,
};
3 changes: 2 additions & 1 deletion src/libs/SidebarUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,8 @@ function getOptionData(
}
: null;
}
const lastActorDisplayName = hasMultipleParticipants && lastActorDetails?.accountID && Number(lastActorDetails.accountID) !== currentUserAccountID ? lastActorDetails.displayName : '';
const lastActorDisplayName =
hasMultipleParticipants && lastActorDetails?.accountID && Number(lastActorDetails.accountID) !== currentUserAccountID ? lastActorDetails.displayName?.split(' ')[0] : '';
let lastMessageText = lastMessageTextFromReport;

const reportAction = lastReportActions?.[report.reportID];
Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Policy.js
Original file line number Diff line number Diff line change
Expand Up @@ -1800,7 +1800,7 @@ function createWorkspaceFromIOUPayment(iouReport) {
value: {
[reportPreview.reportActionID]: {
...reportPreview,
message: ReportUtils.getReportPreviewMessage(expenseReport, {}, false, false, newWorkspace),
message: ReportUtils.getReportPreviewMessage(expenseReport, {}, false, false, false, newWorkspace),
created: DateUtils.getDBTime(),
},
},
Expand Down

0 comments on commit 9f16cce

Please sign in to comment.