Skip to content

Commit 6cb1f44

Browse files
authored
Merge pull request #44523 from dominictb/fix/43403-html-desc
fix: save IOU request description in html
2 parents 5e0c4ff + 26631ad commit 6cb1f44

18 files changed

+150
-47
lines changed

src/ROUTES.ts

Lines changed: 72 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -520,28 +520,48 @@ const ROUTES = {
520520
},
521521
MONEY_REQUEST_STEP_AMOUNT: {
522522
route: ':action/:iouType/amount/:transactionID/:reportID/:pageIndex?',
523-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, pageIndex: string, backTo = '') =>
524-
getUrlWithBackToParam(`${action as string}/${iouType as string}/amount/${transactionID}/${reportID}/${pageIndex}`, backTo),
523+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, pageIndex: string, backTo = '') => {
524+
if (!transactionID || !reportID) {
525+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_AMOUNT route');
526+
}
527+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/amount/${transactionID}/${reportID}/${pageIndex}`, backTo);
528+
},
525529
},
526530
MONEY_REQUEST_STEP_TAX_RATE: {
527531
route: ':action/:iouType/taxRate/:transactionID/:reportID?',
528-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
529-
getUrlWithBackToParam(`${action as string}/${iouType as string}/taxRate/${transactionID}/${reportID}`, backTo),
532+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
533+
if (!transactionID || !reportID) {
534+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_RATE route');
535+
}
536+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxRate/${transactionID}/${reportID}`, backTo);
537+
},
530538
},
531539
MONEY_REQUEST_STEP_TAX_AMOUNT: {
532540
route: ':action/:iouType/taxAmount/:transactionID/:reportID?',
533-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
534-
getUrlWithBackToParam(`${action as string}/${iouType as string}/taxAmount/${transactionID}/${reportID}`, backTo),
541+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
542+
if (!transactionID || !reportID) {
543+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_TAX_AMOUNT route');
544+
}
545+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/taxAmount/${transactionID}/${reportID}`, backTo);
546+
},
535547
},
536548
MONEY_REQUEST_STEP_CATEGORY: {
537549
route: ':action/:iouType/category/:transactionID/:reportID/:reportActionID?',
538-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string | undefined, backTo = '', reportActionID?: string) =>
539-
getUrlWithBackToParam(`${action as string}/${iouType as string}/category/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo),
550+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', reportActionID?: string) => {
551+
if (!transactionID || !reportID) {
552+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_CATEGORY route');
553+
}
554+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/category/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo);
555+
},
540556
},
541557
MONEY_REQUEST_ATTENDEE: {
542558
route: ':action/:iouType/attendees/:transactionID/:reportID',
543-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
544-
getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo),
559+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
560+
if (!transactionID || !reportID) {
561+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_ATTENDEE route');
562+
}
563+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo);
564+
},
545565
},
546566
MONEY_REQUEST_UPGRADE: {
547567
route: ':action/:iouType/upgrade/:transactionID/:reportID',
@@ -676,28 +696,48 @@ const ROUTES = {
676696
},
677697
MONEY_REQUEST_STEP_DATE: {
678698
route: ':action/:iouType/date/:transactionID/:reportID/:reportActionID?',
679-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '', reportActionID?: string) =>
680-
getUrlWithBackToParam(`${action as string}/${iouType as string}/date/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo),
699+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', reportActionID?: string) => {
700+
if (!transactionID || !reportID) {
701+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DATE route');
702+
}
703+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/date/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo);
704+
},
681705
},
682706
MONEY_REQUEST_STEP_DESCRIPTION: {
683707
route: ':action/:iouType/description/:transactionID/:reportID/:reportActionID?',
684-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '', reportActionID?: string) =>
685-
getUrlWithBackToParam(`${action as string}/${iouType as string}/description/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo),
708+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '', reportActionID?: string) => {
709+
if (!transactionID || !reportID) {
710+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DESCRIPTION route');
711+
}
712+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/description/${transactionID}/${reportID}${reportActionID ? `/${reportActionID}` : ''}`, backTo);
713+
},
686714
},
687715
MONEY_REQUEST_STEP_DISTANCE: {
688716
route: ':action/:iouType/distance/:transactionID/:reportID',
689-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
690-
getUrlWithBackToParam(`${action as string}/${iouType as string}/distance/${transactionID}/${reportID}`, backTo),
717+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
718+
if (!transactionID || !reportID) {
719+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DISTANCE route');
720+
}
721+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/distance/${transactionID}/${reportID}`, backTo);
722+
},
691723
},
692724
MONEY_REQUEST_STEP_DISTANCE_RATE: {
693725
route: ':action/:iouType/distanceRate/:transactionID/:reportID',
694-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
695-
getUrlWithBackToParam(`${action as string}/${iouType as string}/distanceRate/${transactionID}/${reportID}`, backTo),
726+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
727+
if (!transactionID || !reportID) {
728+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_DISTANCE_RATE route');
729+
}
730+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/distanceRate/${transactionID}/${reportID}`, backTo);
731+
},
696732
},
697733
MONEY_REQUEST_STEP_MERCHANT: {
698734
route: ':action/:iouType/merchant/:transactionID/:reportID',
699-
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
700-
getUrlWithBackToParam(`${action as string}/${iouType as string}/merchant/${transactionID}/${reportID}`, backTo),
735+
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string | undefined, reportID: string | undefined, backTo = '') => {
736+
if (!transactionID || !reportID) {
737+
Log.warn('Invalid transactionID or reportID is used to build the MONEY_REQUEST_STEP_MERCHANT route');
738+
}
739+
return getUrlWithBackToParam(`${action as string}/${iouType as string}/merchant/${transactionID}/${reportID}`, backTo);
740+
},
701741
},
702742
MONEY_REQUEST_STEP_PARTICIPANTS: {
703743
route: ':action/:iouType/participants/:transactionID/:reportID',
@@ -1653,12 +1693,21 @@ const ROUTES = {
16531693
TRACK_TRAINING_MODAL: 'track-training',
16541694
TRAVEL_TRIP_SUMMARY: {
16551695
route: 'r/:reportID/trip/:transactionID',
1656-
getRoute: (reportID: string, transactionID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}`, backTo),
1696+
getRoute: (reportID: string | undefined, transactionID: string | undefined, backTo?: string) => {
1697+
if (!reportID || !transactionID) {
1698+
Log.warn('Invalid reportID or transactionID is used to build the TRAVEL_TRIP_SUMMARY route');
1699+
}
1700+
return getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}`, backTo);
1701+
},
16571702
},
16581703
TRAVEL_TRIP_DETAILS: {
16591704
route: 'r/:reportID/trip/:transactionID/:reservationIndex',
1660-
getRoute: (reportID: string, transactionID: string, reservationIndex: number, backTo?: string) =>
1661-
getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}/${reservationIndex}`, backTo),
1705+
getRoute: (reportID: string | undefined, transactionID: string | undefined, reservationIndex: number, backTo?: string) => {
1706+
if (!reportID || !transactionID) {
1707+
Log.warn('Invalid reportID or transactionID is used to build the TRAVEL_TRIP_DETAILS route');
1708+
}
1709+
return getUrlWithBackToParam(`r/${reportID}/trip/${transactionID}/${reservationIndex}`, backTo);
1710+
},
16621711
},
16631712
TRAVEL_DOMAIN_SELECTOR: 'travel/domain-selector',
16641713
TRAVEL_DOMAIN_PERMISSION_INFO: {

src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import Navigation from '@libs/Navigation/Navigation';
3232
import type {PlatformStackRouteProp} from '@libs/Navigation/PlatformStackNavigation/types';
3333
import type {TransactionDuplicateNavigatorParamList} from '@libs/Navigation/types';
3434
import {getAvatarsForAccountIDs} from '@libs/OptionsListUtils';
35+
import Parser from '@libs/Parser';
3536
import {getCleanedTagName} from '@libs/PolicyUtils';
3637
import {getThumbnailAndImageURIs} from '@libs/ReceiptUtils';
3738
import {getOriginalMessage, getReportAction, isMessageDeleted, isMoneyRequestAction as isMoneyRequestActionReportActionsUtils} from '@libs/ReportActionsUtils';
@@ -138,7 +139,7 @@ function MoneyRequestPreviewContent({
138139
category,
139140
} = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
140141

141-
const description = truncate(StringUtils.lineBreaksToSpaces(requestComment), {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
142+
const description = truncate(StringUtils.lineBreaksToSpaces(Parser.htmlToMarkdown(requestComment ?? '')), {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
142143
const requestMerchant = truncate(merchant, {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
143144
const hasReceipt = hasReceiptTransactionUtils(transaction);
144145
const isScanning = hasReceipt && isReceiptBeingScanned(transaction);

src/components/ReportActionItem/MoneyRequestView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals
585585
<OfflineWithFeedback pendingAction={getPendingFieldAction('comment')}>
586586
<MenuItemWithTopDescription
587587
description={translate('common.description')}
588-
shouldParseTitle
588+
shouldRenderAsHTML
589589
title={updatedTransactionDescription ?? transactionDescription}
590590
interactive={canEdit}
591591
shouldShowRightIcon={canEdit}

src/components/ReportActionItem/ReportPreview.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import ControlSelection from '@libs/ControlSelection';
2929
import {convertToDisplayString} from '@libs/CurrencyUtils';
3030
import {canUseTouchScreen} from '@libs/DeviceCapabilities';
3131
import Navigation from '@libs/Navigation/Navigation';
32+
import Parser from '@libs/Parser';
3233
import Performance from '@libs/Performance';
3334
import {getConnectedIntegration} from '@libs/PolicyUtils';
3435
import {getThumbnailAndImageURIs} from '@libs/ReceiptUtils';
@@ -239,7 +240,7 @@ function ReportPreview({
239240
const showRTERViolationMessage = numberOfRequests === 1 && hasPendingUI(lastTransaction, lastTransactionViolations);
240241
const shouldShowBrokenConnectionViolation = numberOfRequests === 1 && shouldShowBrokenConnectionViolationForMultipleTransactions(transactionIDList, iouReport, policy, violations);
241242
let formattedMerchant = numberOfRequests === 1 ? getMerchant(lastTransaction) : null;
242-
const formattedDescription = numberOfRequests === 1 ? getDescription(lastTransaction) : null;
243+
const formattedDescription = numberOfRequests === 1 ? Parser.htmlToMarkdown(getDescription(lastTransaction)) : null;
243244

244245
if (isPartialMerchant(formattedMerchant ?? '')) {
245246
formattedMerchant = null;

src/libs/API/parameters/CategorizeTrackedExpenseParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type CategorizeTrackedExpenseParams = {
2828
adminsCreatedReportActionID?: string;
2929
guidedSetupData?: string;
3030
engagementChoice?: string;
31+
description?: string;
3132
};
3233

3334
export default CategorizeTrackedExpenseParams;

src/libs/API/parameters/CompleteSplitBillParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ type CompleteSplitBillParams = {
1111
taxCode?: string;
1212
taxAmount?: number;
1313
billable?: boolean;
14+
description?: string;
1415
};
1516

1617
export default CompleteSplitBillParams;

src/libs/API/parameters/CreateDistanceRequestParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type CreateDistanceRequestParams = {
2020
payerEmail?: string;
2121
splits?: string;
2222
chatType?: string;
23+
description?: string;
2324
};
2425

2526
export default CreateDistanceRequestParams;

src/libs/API/parameters/RequestMoneyParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type RequestMoneyParams = {
2828
transactionThreadReportID: string;
2929
createdReportActionIDForThread: string | undefined;
3030
reimbursible?: boolean;
31+
description?: string;
3132
};
3233

3334
export default RequestMoneyParams;

src/libs/API/parameters/SendInvoiceParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type SendInvoiceParams = RequireAtLeastOne<
2323
createdIOUReportActionID: string;
2424
createdReportActionIDForThread: string | undefined;
2525
reportActionID: string;
26+
description?: string;
2627
},
2728
'receiverEmail' | 'receiverInvoiceRoomID'
2829
>;

src/libs/API/parameters/ShareTrackedExpenseParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type ShareTrackedExpenseParams = {
2828
adminsCreatedReportActionID?: string;
2929
engagementChoice?: string;
3030
guidedSetupData?: string;
31+
description?: string;
3132
};
3233

3334
export default ShareTrackedExpenseParams;

src/libs/API/parameters/SplitBillParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type SplitBillParams = {
1717
splitPayerAccountIDs: number[];
1818
taxCode: string;
1919
taxAmount: number;
20+
description?: string;
2021
};
2122

2223
export default SplitBillParams;

src/libs/API/parameters/StartSplitBillParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type StartSplitBillParams = {
1616
chatType?: string;
1717
taxCode?: string;
1818
taxAmount?: number;
19+
description?: string;
1920
};
2021

2122
export default StartSplitBillParams;

src/libs/API/parameters/TrackExpenseParams.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type TrackExpenseParams = {
2828
waypoints?: string;
2929
actionableWhisperReportActionID?: string;
3030
customUnitRateID?: string;
31+
description?: string;
3132
};
3233

3334
export default TrackExpenseParams;

src/libs/ModifiedExpenseMessage.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {convertToDisplayString} from './CurrencyUtils';
99
import DateUtils from './DateUtils';
1010
import {translateLocal} from './Localize';
1111
import Log from './Log';
12+
import Parser from './Parser';
1213
import {getCleanedTagName, getSortedTagKeys} from './PolicyUtils';
1314
import {getOriginalMessage, isModifiedExpenseAction} from './ReportActionsUtils';
1415
// eslint-disable-next-line import/no-cycle
@@ -222,8 +223,8 @@ function getForReportAction({
222223
const hasModifiedComment = isReportActionOriginalMessageAnObject && 'oldComment' in reportActionOriginalMessage && 'newComment' in reportActionOriginalMessage;
223224
if (hasModifiedComment) {
224225
buildMessageFragmentForValue(
225-
reportActionOriginalMessage?.newComment ?? '',
226-
reportActionOriginalMessage?.oldComment ?? '',
226+
Parser.htmlToMarkdown(reportActionOriginalMessage?.newComment ?? ''),
227+
Parser.htmlToMarkdown(reportActionOriginalMessage?.oldComment ?? ''),
227228
translateLocal('common.description'),
228229
true,
229230
setFragments,

src/libs/ReportUtils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,7 @@ type TransactionDetails = {
553553
billable: boolean;
554554
tag: string;
555555
mccGroup?: ValueOf<typeof CONST.MCC_GROUPS>;
556+
description?: string;
556557
cardID: number;
557558
originalAmount: number;
558559
originalCurrency: string;
@@ -3507,6 +3508,7 @@ function getTransactionDetails(transaction: OnyxInputOrEntry<Transaction>, creat
35073508
function getTransactionCommentObject(transaction: OnyxEntry<Transaction>): Comment {
35083509
return {
35093510
...transaction?.comment,
3511+
comment: Parser.htmlToMarkdown(transaction?.comment?.comment ?? ''),
35103512
waypoints: getWaypoints(transaction),
35113513
};
35123514
}

0 commit comments

Comments
 (0)