From 6e7d06cc2afe783905f362cdb9bf4397204558b8 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Mon, 13 Jul 2026 17:45:55 -0700 Subject: [PATCH 1/7] Add TRAVEL_NUDGE report action type and translatable renderer --- src/CONST/index.ts | 1 + src/languages/en.ts | 16 ++++++++++++++ src/libs/ReportActionsUtils.ts | 22 +++++++++++++++++++ .../actionContents/SimpleMessageContent.tsx | 5 +++++ src/types/onyx/OriginalMessage.ts | 12 ++++++++++ 5 files changed, 56 insertions(+) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index f6229e99a33c..f1448fa64fda 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -1651,6 +1651,7 @@ const CONST = { TASK_COMPLETED: 'TASKCOMPLETED', TASK_EDITED: 'TASKEDITED', TASK_REOPENED: 'TASKREOPENED', + TRAVEL_NUDGE: 'TRAVELNUDGE', TRAVEL_UPDATE: 'TRAVEL_TRIP_ROOM_UPDATE', TRIP_PREVIEW: 'TRIPPREVIEW', UNAPPROVED: 'UNAPPROVED', diff --git a/src/languages/en.ts b/src/languages/en.ts index ad951130d053..7fec4bc9ed55 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4508,6 +4508,22 @@ const translations = { railTicketUpdate: (origin: string, destination: string, startDate: string) => `Your rail ticket for ${origin} → ${destination} on ${startDate} has been updated.`, defaultUpdate: (type: string) => `Your ${type} reservation was updated.`, }, + nudge: { + airfareManual: + 'Hey there! Did you know you can book and manage flights right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel ✈️', + airfareCard: + 'Hey there! Did you know you can book and manage flights right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel ✈️', + hotelManual: + 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🏨', + hotelCard: 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time simply book via Expensify Travel 🏨', + carManual: + 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚗', + carCard: 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time simply book via Expensify Travel 🚗', + railManual: + 'Hey there! Did you know you can book and manage train rides right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚂', + railCard: + 'Hey there! Did you know you can book and manage train rides right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel 🚂', + }, flightTo: 'Flight to', trainTo: 'Train to', carRental: ' car rental', diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 6ad46a887e6b..214f4adc0d6c 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -4621,6 +4621,27 @@ function getActionableCard3DSTransactionApprovalMessage( return translate('report.actions.type.actionableCard3DSTransactionApproval', formattedAmount, merchant); } +// Renders content of TRAVEL_NUDGE reportActions +function getTravelNudgeMessage(translate: LocalizedTranslate, reportAction: ReportAction) { + const originalMessage = getOriginalMessage(reportAction); + if (!originalMessage) { + return ''; + } + const isCardCreated = originalMessage.origination === 'card'; + switch (originalMessage.travelType) { + case 'airfare': + return translate(isCardCreated ? 'travel.nudge.airfareCard' : 'travel.nudge.airfareManual'); + case 'hotel': + return translate(isCardCreated ? 'travel.nudge.hotelCard' : 'travel.nudge.hotelManual'); + case 'carRental': + return translate(isCardCreated ? 'travel.nudge.carCard' : 'travel.nudge.carManual'); + case 'rail': + return translate(isCardCreated ? 'travel.nudge.railCard' : 'travel.nudge.railManual'); + default: + return ''; + } +} + /** * @private */ @@ -4979,6 +5000,7 @@ export { getWorkspaceCustomUnitUpdatedMessage, getRoomChangeLogMessage, getActionableCard3DSTransactionApprovalMessage, + getTravelNudgeMessage, shouldShowActivateCard, isRejectedAction, isReopenedAction, diff --git a/src/pages/inbox/report/actionContents/SimpleMessageContent.tsx b/src/pages/inbox/report/actionContents/SimpleMessageContent.tsx index 49a17f3cb6d1..dfabe6b40651 100644 --- a/src/pages/inbox/report/actionContents/SimpleMessageContent.tsx +++ b/src/pages/inbox/report/actionContents/SimpleMessageContent.tsx @@ -8,6 +8,7 @@ import { getMessageOfOldDotReportAction, getOriginalMessage, getReportActionText, + getTravelNudgeMessage, isActionOfType, isRejectedAction, isUnapprovedAction, @@ -42,6 +43,7 @@ const SIMPLE_MESSAGE_ACTION_TYPES = new Set([ CONST.REPORT.ACTIONS.TYPE.DEMOTED_FROM_WORKSPACE, CONST.REPORT.ACTIONS.TYPE.ACTIONABLE_CARD_3DS_TRANSACTION_APPROVAL, CONST.REPORT.ACTIONS.TYPE.MARK_REIMBURSED_FROM_INTEGRATION, + CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE, ]); function isSimpleMessageAction(action: OnyxTypes.ReportAction): boolean { @@ -105,6 +107,9 @@ function SimpleMessageContent({action}: SimpleMessageContentProps) { if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.MARK_REIMBURSED_FROM_INTEGRATION)) { return ; } + if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE)) { + return ; + } return null; } diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index e666e9690f4f..4873038b4d4b 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -1646,6 +1646,17 @@ type OriginalMessageReimbursementDirectorInformationRequired = { completed: boolean; }; +/** + * Model of the travel nudge report action Concierge posts on an out-of-platform travel expense. + */ +type OriginalMessageTravelNudge = { + /** The kind of bookable travel the expense was classified as */ + travelType: 'airfare' | 'hotel' | 'carRental' | 'rail'; + + /** Whether the expense was created from a card import or manually */ + origination: 'manual' | 'card'; +}; + /** The map type of original message */ /* eslint-disable jsdoc/require-jsdoc */ type OriginalMessageMap = { @@ -1715,6 +1726,7 @@ type OriginalMessageMap = { [CONST.REPORT.ACTIONS.TYPE.TASK_EDITED]: never; [CONST.REPORT.ACTIONS.TYPE.TASK_REOPENED]: never; [CONST.REPORT.ACTIONS.TYPE.TAKE_CONTROL]: OriginalMessageTakeControl; + [CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE]: OriginalMessageTravelNudge; [CONST.REPORT.ACTIONS.TYPE.TRAVEL_UPDATE]: OriginalMessageTravelUpdate; [CONST.REPORT.ACTIONS.TYPE.UNAPPROVED]: OriginalMessageUnapproved; [CONST.REPORT.ACTIONS.TYPE.UNHOLD]: never; From 85d06097ac9fa97723992ed0d4c43dbdbfa17a04 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Tue, 14 Jul 2026 10:39:06 -0700 Subject: [PATCH 2/7] Add generated translations for travel nudge report action --- src/languages/de.ts | 16 ++++++++++++++++ src/languages/es.ts | 16 ++++++++++++++++ src/languages/fr.ts | 18 ++++++++++++++++++ src/languages/it.ts | 16 ++++++++++++++++ src/languages/ja.ts | 13 +++++++++++++ src/languages/nl.ts | 16 ++++++++++++++++ src/languages/pl.ts | 16 ++++++++++++++++ src/languages/pt-BR.ts | 16 ++++++++++++++++ src/languages/zh-hans.ts | 10 ++++++++++ 9 files changed, 137 insertions(+) diff --git a/src/languages/de.ts b/src/languages/de.ts index 4781201670f5..fb1bab0434de 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4425,6 +4425,22 @@ ${amount} für ${merchant} – ${date}`, inputLabel: 'Steuer-ID der juristischen Person', error: {required: 'Bitte geben Sie die Steuernummer Ihrer juristischen Person ein.'}, }, + nudge: { + airfareManual: + 'Wussten Sie, dass Sie Flüge direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel ✈️', + airfareCard: + 'Wussten Sie schon, dass Sie Flüge direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie das nächste Mal einfach über Expensify Travel ✈️', + hotelManual: + 'Wussten Sie schon, dass Sie Hotelaufenthalte direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🏨', + hotelCard: 'Wussten Sie schon, dass Sie Hotelaufenthalte direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🏨', + carManual: + 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚗', + carCard: 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🚗', + railManual: + 'Wussten Sie schon, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚂', + railCard: + 'Wussten Sie schon, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie Ihre nächste Fahrt einfach über Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/es.ts b/src/languages/es.ts index 1004d7cf7646..bb63e9161bbd 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4286,6 +4286,22 @@ ${amount} para ${merchant} - ${date}`, carRental: ' de alquiler de coche', nightIn: 'noche en', nightsIn: 'noches en', + nudge: { + airfareManual: + '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel ✈️', + airfareCard: + '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? ¿Y que además sube los recibos automáticamente por ti? La próxima vez simplemente reserva a través de Expensify Travel ✈️', + hotelManual: + '¡Hola! ¿Sabías que puedes reservar y gestionar estancias en hoteles directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🏨', + hotelCard: '¡Hola! ¿Sabías que puedes reservar y gestionar estancias en hoteles directamente en Expensify? La próxima vez simplemente reserva a través de Expensify Travel 🏨', + carManual: + '¡Hola! ¿Sabías que puedes reservar y gestionar coches de alquiler directamente en Expensify? La próxima vez, evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚗', + carCard: '¡Hola! ¿Sabías que puedes reservar y gestionar alquileres de coche directamente en Expensify? La próxima vez simplemente reserva a través de Expensify Travel 🚗', + railManual: + '¡Hola! ¿Sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚂', + railCard: + '¡Hola! ¿Sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? ¿Y que además sube los recibos automáticamente por ti? La próxima vez simplemente reserva a través de Expensify Travel 🚂', + }, }, proactiveAppReview: { title: '¿Te gusta New Expensify?', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 6bd23538e72a..d1980e94d74f 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4435,6 +4435,24 @@ ${amount} pour ${merchant} - ${date}`, inputLabel: 'Identifiant fiscal de l’entité juridique', error: {required: 'Veuillez saisir l’identifiant fiscal de votre entité légale.'}, }, + nudge: { + airfareManual: + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? La prochaine fois, évitez les tracas de création manuelle de votre dépense et réservez simplement via Expensify Travel ✈️', + airfareCard: + 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? Et que les reçus sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel ✈️', + hotelManual: + "Salut ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l'hôtel directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🏨", + hotelCard: + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l’hôtel directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🏨', + carManual: + 'Salut ! Saviez-vous que vous pouvez réserver et gérer des locations de voiture directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚗', + carCard: + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos locations de voiture directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🚗', + railManual: + 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚂', + railCard: + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? Et que les reçus y sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/it.ts b/src/languages/it.ts index 0fca2183802a..99dc06cb780d 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4410,6 +4410,22 @@ ${amount} per ${merchant} - ${date}`, inputLabel: 'Partita IVA dell’entità legale', error: {required: 'Inserisci il codice fiscale/partita IVA della tua entità legale.'}, }, + nudge: { + airfareManual: + 'Ehi! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel ✈️', + airfareCard: + 'Ehi! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente con Expensify Travel ✈️', + hotelManual: + 'Ciao! Lo sapevi che puoi prenotare e gestire i soggiorni in hotel direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel 🏨', + hotelCard: 'Ciao! Lo sapevi che puoi prenotare e gestire i soggiorni in hotel direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🏨', + carManual: + 'Ehi! Sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta evita il fastidio di creare la tua spesa manualmente e prenota semplicemente tramite Expensify Travel 🚗', + carCard: 'Ehi! Sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🚗', + railManual: + 'Ehi! Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel 🚂', + railCard: + 'Ehi! Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente tramite Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index afbd7d7784ee..7d7bb4c8017c 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4374,6 +4374,19 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' inputLabel: '法人納税者番号', error: {required: '法的事業体の納税者番号を入力してください。'}, }, + nudge: { + airfareManual: + 'こんにちは!Expensify では、アプリ内で直接フライトの予約や管理ができることをご存じでしたか?次回からは出費を手入力する手間を省いて、Expensify Travel で簡単に予約しましょう ✈️', + airfareCard: + 'ご存じでしたか?Expensify から直接、航空券の予約や管理ができるのです。そして、領収書も自動でアップロードされます。次回からは Expensify Travel で簡単に予約しましょう ✈️', + hotelManual: + 'こんにちは!Expensify でホテルの予約や滞在の管理ができることをご存じでしたか?次回からは経費を手入力する手間を省き、Expensify Travel からかんたんに予約しましょう 🏨', + hotelCard: 'ご存じでしたか?Expensify から直接ホテルの予約や管理ができるようになりました。次回からは Expensify Travel でかんたんに予約しましょう 🏨', + carManual: 'こんにちは!Expensify でレンタカーの予約と管理ができることをご存じでしたか?次回からは経費を手入力する手間を省き、Expensify Travel から簡単に予約しましょう。', + carCard: 'こんにちは!Expensify でレンタカーの予約や管理ができることをご存じでしたか?次回からは Expensify Travel 経由でかんたんに予約しましょう 🚗', + railManual: 'こんにちは!Expensify なら電車の予約や管理もできることをご存じでしたか?次回からは経費を手入力する手間を省いて、Expensify Travel でそのまま予約しましょう 🚂', + railCard: 'こんにちは!Expensify で電車の予約や管理ができることをご存じでしたか?しかも領収書も自動でアップロードされます。次回からは Expensify Travel で予約しましょう🚂', + }, }, workspace: { common: { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index a5e91ca082a7..7d280002b132 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4405,6 +4405,22 @@ ${amount} voor ${merchant} - ${date}`, inputLabel: 'Belastingnummer rechtspersoon', error: {required: 'Vul het fiscale identificatienummer van je rechtspersoon in.'}, }, + nudge: { + airfareManual: + 'Hoi! Wist je dat je rechtstreeks in Expensify vluchten kunt boeken en beheren? Vermijd de volgende keer het gedoe van het handmatig aanmaken van je uitgave en boek gewoon via Expensify Travel ✈️', + airfareCard: + 'Hoi! Wist je dat je direct in Expensify vluchten kunt boeken en beheren? En dat het automatisch bonnetjes voor je uploadt? Boek de volgende keer gewoon via Expensify Travel ✈️', + hotelManual: + 'Hoi! Wist je dat je hotelverblijven rechtstreeks in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van handmatig een uitgave aanmaken en boek gewoon via Expensify Travel 🏨', + hotelCard: 'Hoi! Wist je dat je hotelovernachtingen rechtstreeks in Expensify kunt boeken en beheren? Boek de volgende keer gewoon via Expensify Travel 🏨', + carManual: + 'Hoi! Wist je dat je autoverhuur direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van je uitgave handmatig aanmaken en boek gewoon via Expensify Travel 🚗', + carCard: 'Hoi! Wist je dat je autoverhuur direct in Expensify kunt boeken en beheren? Boek de volgende keer gewoon via Expensify Travel 🚗', + railManual: + 'Hoi! Wist je dat je treinreizen direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van handmatig een uitgave aanmaken en boek gewoon via Expensify Travel 🚂', + railCard: + 'Hoi! Wist je dat je treinreizen rechtstreeks in Expensify kunt boeken en beheren? En dat bonnetjes automatisch voor je worden geüpload? Boek de volgende keer gewoon via Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 7bad6ba9dcb6..00340fa9c546 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4391,6 +4391,22 @@ ${amount} dla ${merchant} - ${date}`, inputLabel: 'NIP podmiotu prawnego', error: {required: 'Podaj swój identyfikator podatkowy podmiotu prawnego.'}, }, + nudge: { + airfareManual: + 'Cześć! Wiesz, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? Następnym razem uniknij kłopotu ręcznego tworzenia wydatku i po prostu zarezerwuj podróż przez Expensify Travel ✈️', + airfareCard: + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? I że paragony są automatycznie przesyłane za Ciebie? Następnym razem po prostu zarezerwuj przez Expensify Travel ✈️', + hotelManual: + 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelach bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel 🏨', + hotelCard: 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelu bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🏨', + carManual: + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel 🚗', + carCard: 'Cześć! Czy wiesz, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🚗', + railManual: + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przejazd przez Expensify Travel 🚂', + railCard: + 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? I że aplikacja automatycznie przesyła za ciebie paragony? Następnym razem po prostu zarezerwuj przez Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 759100702277..04361429c875 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4395,6 +4395,22 @@ ${amount} para ${merchant} - ${date}`, inputLabel: 'CNPJ da pessoa jurídica', error: {required: 'Insira o CNPJ da sua entidade legal.'}, }, + nudge: { + airfareManual: + 'Ei! Sabia que você pode reservar e gerenciar voos direto no Expensify? Da próxima vez, evite o trabalho de criar a despesa manualmente e simplesmente reserve pelo Expensify Travel ✈️', + airfareCard: + 'Oi! Você sabia que dá para reservar e gerenciar voos direto no Expensify? E que os recibos são enviados automaticamente para você? Da próxima vez, simplesmente reserve pela Expensify Travel ✈️', + hotelManual: + 'Oi! Sabia que você pode reservar e gerenciar suas estadias em hotel direto pelo Expensify? Da próxima vez, evite o trabalho de criar a despesa manualmente e simplesmente reserve pelo Expensify Travel 🏨', + hotelCard: 'Olá! Você sabia que pode reservar e gerenciar hospedagens em hotel direto no Expensify? Da próxima vez, simplesmente reserve pelo Expensify Travel 🏨', + carManual: + 'Oi! Sabia que você pode reservar e gerenciar aluguel de carro direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pela Expensify Travel 🚗', + carCard: 'Olá! Sabia que você pode reservar e gerenciar aluguel de carros direto no Expensify? Da próxima vez, simplesmente reserve pelo Expensify Travel 🚗', + railManual: + 'Oi! Sabia que você pode reservar e gerenciar viagens de trem direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pelo Expensify Travel 🚂', + railCard: + 'Oi! Você sabia que pode reservar e gerenciar viagens de trem direto pelo Expensify? E que os recibos são enviados automaticamente para você? Da próxima vez, é só reservar pelo Expensify Travel 🚂', + }, }, workspace: { common: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index b33368c50a5f..384a9f5ed007 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4283,6 +4283,16 @@ ${amount},商户:${merchant} - 日期:${date}`, nightIn: '夜宿', nightsIn: '入住晚数', taxID: {title: '税号', subtitle: '请输入您法人的税号,以便我们以本地货币为您设置差旅结算。', inputLabel: '法人税号', error: {required: '请输入您的法人税号。'}}, + nudge: { + airfareManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理机票。下次就不用再费劲手动创建报销单了,直接通过 Expensify Travel 预订即可 ✈️', + airfareCard: '你好!你知道吗?你可以直接在 Expensify 中预订和管理机票,而且系统会自动为你上传收据。下次只需通过 Expensify Travel 预订即可 ✈️', + hotelManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理酒店住宿。下次只需通过 Expensify Travel 预订酒店 🏨,就能省去手动创建报销的麻烦。', + hotelCard: '你好!你知道吗?你可以直接在 Expensify 中预订和管理酒店住宿。下次只需通过 Expensify Travel 预订即可 🏨', + carManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理租车。下次就不用再手动创建报销了,只需通过 Expensify Travel 预订即可。', + carCard: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理租车。下次只需通过 Expensify Travel 预订即可 🚗', + railManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理火车行程。下次就不用再手动创建报销了,只需通过 Expensify Travel 预订即可🚂', + railCard: '嗨!你知道吗,现在你可以直接在 Expensify 预订和管理火车行程,而且还会自动为你上传票据?下次直接通过 Expensify Travel 预订吧 🚂', + }, }, workspace: { common: { From d948c336cf6ce0f0174b0ba04e6cc500af43fcc9 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Tue, 14 Jul 2026 11:21:40 -0700 Subject: [PATCH 3/7] Render travel nudge as a clickable Expensify Travel link --- src/languages/en.ts | 18 ++++++++++-------- .../actionContents/ActionContentRouter.tsx | 8 ++++++++ .../actionContents/SimpleMessageContent.tsx | 5 ----- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 7fec4bc9ed55..b00588cb9933 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4510,19 +4510,21 @@ const translations = { }, nudge: { airfareManual: - 'Hey there! Did you know you can book and manage flights right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel ✈️', + 'Hey there! Did you know you can book and manage flights right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel ✈️', airfareCard: - 'Hey there! Did you know you can book and manage flights right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel ✈️', + 'Hey there! Did you know you can book and manage flights right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel ✈️', hotelManual: - 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🏨', - hotelCard: 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time simply book via Expensify Travel 🏨', + 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🏨', + hotelCard: + 'Hey there! Did you know you can book and manage hotel stays right in Expensify? Next time simply book via Expensify Travel 🏨', carManual: - 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚗', - carCard: 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time simply book via Expensify Travel 🚗', + 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚗', + carCard: + 'Hey there! Did you know you can book and manage car rentals right in Expensify? Next time simply book via Expensify Travel 🚗', railManual: - 'Hey there! Did you know you can book and manage train rides right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚂', + 'Hey there! Did you know you can book and manage train rides right in Expensify? Next time avoid the hassle of creating your expense manually and simply book via Expensify Travel 🚂', railCard: - 'Hey there! Did you know you can book and manage train rides right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel 🚂', + 'Hey there! Did you know you can book and manage train rides right in Expensify? And it automatically uploads receipts for you? Next time simply book via Expensify Travel 🚂', }, flightTo: 'Flight to', trainTo: 'Train to', diff --git a/src/pages/inbox/report/actionContents/ActionContentRouter.tsx b/src/pages/inbox/report/actionContents/ActionContentRouter.tsx index ed2eb4ba9015..fe03b643f068 100644 --- a/src/pages/inbox/report/actionContents/ActionContentRouter.tsx +++ b/src/pages/inbox/report/actionContents/ActionContentRouter.tsx @@ -24,6 +24,7 @@ import { getRenamedAction, getReportActionHtml, getSettlementAccountLockedMessage, + getTravelNudgeMessage, getTravelUpdateMessage, isActionableCardFraudAlert, isActionableJoinRequest, @@ -355,6 +356,13 @@ function ActionContentRouter({ ); } + if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE)) { + return ( + + ${getTravelNudgeMessage(translate, action)}`} /> + + ); + } if (action.actionName === CONST.REPORT.ACTIONS.TYPE.UNREPORTED_TRANSACTION) { return ( ([ CONST.REPORT.ACTIONS.TYPE.DEMOTED_FROM_WORKSPACE, CONST.REPORT.ACTIONS.TYPE.ACTIONABLE_CARD_3DS_TRANSACTION_APPROVAL, CONST.REPORT.ACTIONS.TYPE.MARK_REIMBURSED_FROM_INTEGRATION, - CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE, ]); function isSimpleMessageAction(action: OnyxTypes.ReportAction): boolean { @@ -107,9 +105,6 @@ function SimpleMessageContent({action}: SimpleMessageContentProps) { if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.MARK_REIMBURSED_FROM_INTEGRATION)) { return ; } - if (isActionOfType(action, CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE)) { - return ; - } return null; } From b2370e5e6ee186d446851ad1df442dbb10de4589 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Tue, 14 Jul 2026 11:25:22 -0700 Subject: [PATCH 4/7] Add generated translations for linked travel nudge copy --- src/languages/de.ts | 18 ++++++++++-------- src/languages/es.ts | 18 ++++++++++-------- src/languages/fr.ts | 16 ++++++++-------- src/languages/it.ts | 18 ++++++++++-------- src/languages/ja.ts | 21 +++++++++++++-------- src/languages/nl.ts | 18 ++++++++++-------- src/languages/pl.ts | 18 ++++++++++-------- src/languages/pt-BR.ts | 18 ++++++++++-------- src/languages/zh-hans.ts | 20 ++++++++++++-------- 9 files changed, 93 insertions(+), 72 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index fb1bab0434de..de7213c6db9f 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4427,19 +4427,21 @@ ${amount} für ${merchant} – ${date}`, }, nudge: { airfareManual: - 'Wussten Sie, dass Sie Flüge direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel ✈️', + 'Wussten Sie schon, dass Sie Flüge direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel ✈️', airfareCard: - 'Wussten Sie schon, dass Sie Flüge direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie das nächste Mal einfach über Expensify Travel ✈️', + 'Wussten Sie schon, dass Sie Flüge direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie das nächste Mal einfach über Expensify Travel ✈️', hotelManual: - 'Wussten Sie schon, dass Sie Hotelaufenthalte direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🏨', - hotelCard: 'Wussten Sie schon, dass Sie Hotelaufenthalte direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🏨', + 'Hallo! Wussten Sie, dass Sie Hotelübernachtungen direkt in Expensify buchen und verwalten können? Vermeiden Sie beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🏨', + hotelCard: + 'Wussten Sie schon, dass Sie Hotelaufenthalte direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🏨', carManual: - 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚗', - carCard: 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🚗', + 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚗', + carCard: + 'Wussten Sie schon, dass Sie Mietwagen direkt in Expensify buchen und verwalten können? Buchen Sie das nächste Mal einfach über Expensify Travel 🚗', railManual: - 'Wussten Sie schon, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Sparen Sie sich beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚂', + 'Wussten Sie, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Vermeiden Sie beim nächsten Mal den Aufwand, Ihre Ausgabe manuell zu erstellen, und buchen Sie einfach über Expensify Travel 🚂', railCard: - 'Wussten Sie schon, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie Ihre nächste Fahrt einfach über Expensify Travel 🚂', + 'Wussten Sie schon, dass Sie Zugfahrten direkt in Expensify buchen und verwalten können? Und dass Belege dabei automatisch für Sie hochgeladen werden? Buchen Sie das nächste Mal einfach über Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/es.ts b/src/languages/es.ts index bb63e9161bbd..0e8542784ce5 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4288,19 +4288,21 @@ ${amount} para ${merchant} - ${date}`, nightsIn: 'noches en', nudge: { airfareManual: - '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel ✈️', + '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel ✈️', airfareCard: - '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? ¿Y que además sube los recibos automáticamente por ti? La próxima vez simplemente reserva a través de Expensify Travel ✈️', + '¡Hola! ¿Sabías que puedes reservar y gestionar vuelos directamente en Expensify? ¿Y que además sube los recibos automáticamente por ti? La próxima vez simplemente reserva a través de Expensify Travel ✈️', hotelManual: - '¡Hola! ¿Sabías que puedes reservar y gestionar estancias en hoteles directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🏨', - hotelCard: '¡Hola! ¿Sabías que puedes reservar y gestionar estancias en hoteles directamente en Expensify? La próxima vez simplemente reserva a través de Expensify Travel 🏨', + '¡Hola! ¿Sabías que puedes reservar y gestionar estancias de hotel directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🏨', + hotelCard: + '¡Hola! ¿Sabías que puedes reservar y gestionar estancias en hoteles directamente en Expensify? La próxima vez simplemente reserva a través de Expensify Travel 🏨', carManual: - '¡Hola! ¿Sabías que puedes reservar y gestionar coches de alquiler directamente en Expensify? La próxima vez, evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚗', - carCard: '¡Hola! ¿Sabías que puedes reservar y gestionar alquileres de coche directamente en Expensify? La próxima vez simplemente reserva a través de Expensify Travel 🚗', + '¡Hola! ¿Sabías que puedes reservar y gestionar alquileres de coche directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚗', + carCard: + 'Hola, ¿sabías que puedes reservar y gestionar coches de alquiler directamente en Expensify? La próxima vez, simplemente reserva a través de Expensify Travel 🚗', railManual: - '¡Hola! ¿Sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚂', + 'Hola, ¿sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? La próxima vez evita la molestia de crear tu gasto manualmente y simplemente reserva a través de Expensify Travel 🚂', railCard: - '¡Hola! ¿Sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? ¿Y que además sube los recibos automáticamente por ti? La próxima vez simplemente reserva a través de Expensify Travel 🚂', + '¡Hola! ¿Sabías que puedes reservar y gestionar viajes en tren directamente en Expensify? ¿Y que además sube automáticamente los recibos por ti? La próxima vez simplemente reserva a través de Expensify Travel 🚂', }, }, proactiveAppReview: { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index d1980e94d74f..d141ec45d540 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4437,21 +4437,21 @@ ${amount} pour ${merchant} - ${date}`, }, nudge: { airfareManual: - 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? La prochaine fois, évitez les tracas de création manuelle de votre dépense et réservez simplement via Expensify Travel ✈️', + 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel ✈️', airfareCard: - 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? Et que les reçus sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel ✈️', + 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos vols directement dans Expensify ? Et que les reçus sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel ✈️', hotelManual: - "Salut ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l'hôtel directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🏨", + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l’hôtel directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🏨', hotelCard: - 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l’hôtel directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🏨', + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos séjours à l’hôtel directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🏨', carManual: - 'Salut ! Saviez-vous que vous pouvez réserver et gérer des locations de voiture directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚗', + 'Salut ! Saviez-vous que vous pouvez réserver et gérer des locations de voiture directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚗', carCard: - 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos locations de voiture directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🚗', + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer des locations de voiture directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🚗', railManual: - 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? La prochaine fois, évitez la corvée de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚂', + 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? La prochaine fois, évitez les tracas de créer votre dépense manuellement et réservez simplement via Expensify Travel 🚂', railCard: - 'Bonjour ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? Et que les reçus y sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel 🚂', + 'Salut ! Saviez-vous que vous pouvez réserver et gérer vos trajets en train directement dans Expensify ? Et que les reçus sont automatiquement téléchargés pour vous ? La prochaine fois, réservez simplement via Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/it.ts b/src/languages/it.ts index 99dc06cb780d..8cde92b37c43 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4412,19 +4412,21 @@ ${amount} per ${merchant} - ${date}`, }, nudge: { airfareManual: - 'Ehi! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel ✈️', + 'Ciao! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel ✈️', airfareCard: - 'Ehi! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente con Expensify Travel ✈️', + 'Ehi! Sapevi che puoi prenotare e gestire i voli direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente tramite Expensify Travel ✈️', hotelManual: - 'Ciao! Lo sapevi che puoi prenotare e gestire i soggiorni in hotel direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel 🏨', - hotelCard: 'Ciao! Lo sapevi che puoi prenotare e gestire i soggiorni in hotel direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🏨', + 'Ciao! Sapevi che puoi prenotare e gestire i tuoi soggiorni in hotel direttamente in Expensify? La prossima volta evita la seccatura di creare la tua spesa manualmente e prenota semplicemente tramite Expensify Travel 🏨', + hotelCard: + 'Ehi! Sapevi che puoi prenotare e gestire i soggiorni in hotel direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🏨', carManual: - 'Ehi! Sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta evita il fastidio di creare la tua spesa manualmente e prenota semplicemente tramite Expensify Travel 🚗', - carCard: 'Ehi! Sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🚗', + 'Ehi! Sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta evita il fastidio di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel 🚗', + carCard: + 'Ehi! Lo sapevi che puoi prenotare e gestire il noleggio auto direttamente in Expensify? La prossima volta prenota semplicemente tramite Expensify Travel 🚗', railManual: - 'Ehi! Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? La prossima volta evita la seccatura di creare la spesa manualmente e prenota semplicemente tramite Expensify Travel 🚂', + 'Ehi! Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? La prossima volta evita il fastidio di creare la tua spesa manualmente e prenota semplicemente tramite Expensify Travel 🚂', railCard: - 'Ehi! Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente tramite Expensify Travel 🚂', + 'Ciao! Lo sai che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? E che carica automaticamente le ricevute per te? La prossima volta prenota semplicemente tramite Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 7d7bb4c8017c..81167af73921 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4376,16 +4376,21 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' }, nudge: { airfareManual: - 'こんにちは!Expensify では、アプリ内で直接フライトの予約や管理ができることをご存じでしたか?次回からは出費を手入力する手間を省いて、Expensify Travel で簡単に予約しましょう ✈️', + 'こんにちは!Expensify でフライトの予約や管理ができることをご存じでしたか?次回からは経費を手動で作成する手間を省き、Expensify Travel から予約するだけで大丈夫です ✈️', airfareCard: - 'ご存じでしたか?Expensify から直接、航空券の予約や管理ができるのです。そして、領収書も自動でアップロードされます。次回からは Expensify Travel で簡単に予約しましょう ✈️', + 'こんにちは!Expensify でフライトの予約と管理ができるのをご存じでしたか?しかも、領収書は自動でアップロードされます。次回からは、ぜひ Expensify Travel から予約してください ✈️', hotelManual: - 'こんにちは!Expensify でホテルの予約や滞在の管理ができることをご存じでしたか?次回からは経費を手入力する手間を省き、Expensify Travel からかんたんに予約しましょう 🏨', - hotelCard: 'ご存じでしたか?Expensify から直接ホテルの予約や管理ができるようになりました。次回からは Expensify Travel でかんたんに予約しましょう 🏨', - carManual: 'こんにちは!Expensify でレンタカーの予約と管理ができることをご存じでしたか?次回からは経費を手入力する手間を省き、Expensify Travel から簡単に予約しましょう。', - carCard: 'こんにちは!Expensify でレンタカーの予約や管理ができることをご存じでしたか?次回からは Expensify Travel 経由でかんたんに予約しましょう 🚗', - railManual: 'こんにちは!Expensify なら電車の予約や管理もできることをご存じでしたか?次回からは経費を手入力する手間を省いて、Expensify Travel でそのまま予約しましょう 🚂', - railCard: 'こんにちは!Expensify で電車の予約や管理ができることをご存じでしたか?しかも領収書も自動でアップロードされます。次回からは Expensify Travel で予約しましょう🚂', + 'こんにちは!Expensify でホテルの予約や宿泊の管理ができることをご存じでしたか?次回からは、経費を手動で作成する手間を省き、Expensify Travel から予約するだけで済みます。', + hotelCard: + 'こんにちは!Expensify でホテルの予約や宿泊管理ができることをご存じでしたか?次回からは Expensify Travel からかんたんに予約できます。', + carManual: + 'こんにちは!Expensify でレンタカーの予約と管理ができることをご存じでしたか?次回からは経費を手動で作成する手間を省き、ぜひ Expensify Travel から予約してください 🚗', + carCard: + 'こんにちは!Expensify でレンタカーの予約や管理ができることをご存じでしたか?次回からは Expensify Travel から簡単に予約できます。', + railManual: + 'Expensify で電車の予約や管理ができることをご存じでしたか?次回からは手動で経費を作成する手間を省き、ぜひ Expensify Travel から予約してください。', + railCard: + 'Expensify で電車の予約や管理ができることをご存じでしたか?しかも、領収書は自動でアップロードされます。次回からは Expensify Travel 経由で予約しましょう。', }, }, workspace: { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 7d280002b132..589cfa26b1b8 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4407,19 +4407,21 @@ ${amount} voor ${merchant} - ${date}`, }, nudge: { airfareManual: - 'Hoi! Wist je dat je rechtstreeks in Expensify vluchten kunt boeken en beheren? Vermijd de volgende keer het gedoe van het handmatig aanmaken van je uitgave en boek gewoon via Expensify Travel ✈️', + 'Hoi! Wist je dat je vluchten direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van handmatig een uitgave aanmaken en boek gewoon via Expensify Travel ✈️', airfareCard: - 'Hoi! Wist je dat je direct in Expensify vluchten kunt boeken en beheren? En dat het automatisch bonnetjes voor je uploadt? Boek de volgende keer gewoon via Expensify Travel ✈️', + 'Hoi! Wist je dat je vluchten rechtstreeks in Expensify kunt boeken en beheren? En dat bonnetjes automatisch voor je worden geüpload? Boek de volgende keer gewoon via Expensify Travel ✈️', hotelManual: - 'Hoi! Wist je dat je hotelverblijven rechtstreeks in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van handmatig een uitgave aanmaken en boek gewoon via Expensify Travel 🏨', - hotelCard: 'Hoi! Wist je dat je hotelovernachtingen rechtstreeks in Expensify kunt boeken en beheren? Boek de volgende keer gewoon via Expensify Travel 🏨', + 'Hoi! Wist je dat je hotelverblijven rechtstreeks in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van het handmatig aanmaken van je uitgave en boek gewoon via Expensify Travel 🏨', + hotelCard: + 'Hoi! Wist je dat je hotelverblijven rechtstreeks in Expensify kunt boeken en beheren? Boek de volgende keer gewoon via Expensify Travel 🏨', carManual: - 'Hoi! Wist je dat je autoverhuur direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van je uitgave handmatig aanmaken en boek gewoon via Expensify Travel 🚗', - carCard: 'Hoi! Wist je dat je autoverhuur direct in Expensify kunt boeken en beheren? Boek de volgende keer gewoon via Expensify Travel 🚗', + 'Hoi! Wist je dat je autoverhuur direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van het handmatig aanmaken van je uitgave en boek gewoon via Expensify Travel 🚗', + carCard: + 'Hoi! Wist je dat je rechtstreeks in Expensify auto\'s kunt huren en beheren? Boek de volgende keer gewoon via Expensify Travel 🚗', railManual: - 'Hoi! Wist je dat je treinreizen direct in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van handmatig een uitgave aanmaken en boek gewoon via Expensify Travel 🚂', + 'Hoi! Wist je dat je treinreizen gewoon in Expensify kunt boeken en beheren? Vermijd de volgende keer het gedoe van je uitgave handmatig aanmaken en boek simpelweg via Expensify Travel 🚂', railCard: - 'Hoi! Wist je dat je treinreizen rechtstreeks in Expensify kunt boeken en beheren? En dat bonnetjes automatisch voor je worden geüpload? Boek de volgende keer gewoon via Expensify Travel 🚂', + 'Hoi! Wist je dat je treinreizen rechtstreeks in Expensify kunt boeken en beheren? En dat de bonnetjes automatisch voor je worden geüpload? Boek de volgende keer gewoon via Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 00340fa9c546..add7fe28d53f 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4393,19 +4393,21 @@ ${amount} dla ${merchant} - ${date}`, }, nudge: { airfareManual: - 'Cześć! Wiesz, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? Następnym razem uniknij kłopotu ręcznego tworzenia wydatku i po prostu zarezerwuj podróż przez Expensify Travel ✈️', + 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? Następnym razem uniknij zachodu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel ✈️', airfareCard: - 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? I że paragony są automatycznie przesyłane za Ciebie? Następnym razem po prostu zarezerwuj przez Expensify Travel ✈️', + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać lotami bezpośrednio w Expensify? I że paragony są automatycznie przesyłane za Ciebie? Następnym razem po prostu zarezerwuj przez Expensify Travel ✈️', hotelManual: - 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelach bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel 🏨', - hotelCard: 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelu bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🏨', + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelu bezpośrednio w Expensify? Następnym razem uniknij kłopotu ręcznego tworzenia wydatku i po prostu zarezerwuj przez Expensify Travel 🏨', + hotelCard: + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać pobytami w hotelach bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🏨', carManual: - 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel 🚗', - carCard: 'Cześć! Czy wiesz, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🚗', + 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem uniknij zachodu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przez Expensify Travel 🚗', + carCard: + 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać wynajmem samochodów bezpośrednio w Expensify? Następnym razem po prostu zarezerwuj przez Expensify Travel 🚗', railManual: - 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? Następnym razem uniknij kłopotu z ręcznym tworzeniem wydatku i po prostu zarezerwuj przejazd przez Expensify Travel 🚂', + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? Następnym razem uniknij zachodu z ręcznym tworzeniem wydatku i po prostu zarezerwuj podróż przez Expensify Travel 🚂', railCard: - 'Hej! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? I że aplikacja automatycznie przesyła za ciebie paragony? Następnym razem po prostu zarezerwuj przez Expensify Travel 🚂', + 'Cześć! Wiedziałeś, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? I że aplikacja automatycznie przesyła za ciebie paragony? Następnym razem po prostu zarezerwuj podróż przez Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 04361429c875..3e05d91c3826 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4397,19 +4397,21 @@ ${amount} para ${merchant} - ${date}`, }, nudge: { airfareManual: - 'Ei! Sabia que você pode reservar e gerenciar voos direto no Expensify? Da próxima vez, evite o trabalho de criar a despesa manualmente e simplesmente reserve pelo Expensify Travel ✈️', + 'Ei! Sabia que você pode reservar e gerenciar voos direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pelo Expensify Travel ✈️', airfareCard: - 'Oi! Você sabia que dá para reservar e gerenciar voos direto no Expensify? E que os recibos são enviados automaticamente para você? Da próxima vez, simplesmente reserve pela Expensify Travel ✈️', + 'Oi! Você sabia que pode reservar e gerenciar voos direto no Expensify? E que ele envia os recibos automaticamente pra você? Na próxima vez, simplesmente reserve pelo Expensify Travel ✈️', hotelManual: - 'Oi! Sabia que você pode reservar e gerenciar suas estadias em hotel direto pelo Expensify? Da próxima vez, evite o trabalho de criar a despesa manualmente e simplesmente reserve pelo Expensify Travel 🏨', - hotelCard: 'Olá! Você sabia que pode reservar e gerenciar hospedagens em hotel direto no Expensify? Da próxima vez, simplesmente reserve pelo Expensify Travel 🏨', + 'Oi! Sabia que você pode reservar e gerenciar estadias em hotéis direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pelo Expensify Travel 🏨', + hotelCard: + 'Oi! Você sabia que pode reservar e gerenciar estadias em hotéis direto no Expensify? Da próxima vez, simplesmente reserve pela Expensify Travel 🏨', carManual: - 'Oi! Sabia que você pode reservar e gerenciar aluguel de carro direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pela Expensify Travel 🚗', - carCard: 'Olá! Sabia que você pode reservar e gerenciar aluguel de carros direto no Expensify? Da próxima vez, simplesmente reserve pelo Expensify Travel 🚗', + 'Oi! Sabia que você pode reservar e gerenciar aluguel de carros direto no Expensify? Da próxima vez, evite o trabalho de criar a despesa manualmente e simplesmente reserve pelo Expensify Travel 🚗', + carCard: + 'Oi! Você sabia que pode reservar e gerenciar aluguel de carros diretamente no Expensify? Da próxima vez, simplesmente reserve pelo Expensify Travel 🚗', railManual: - 'Oi! Sabia que você pode reservar e gerenciar viagens de trem direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pelo Expensify Travel 🚂', + 'Olá! Você sabia que pode reservar e gerenciar viagens de trem direto no Expensify? Da próxima vez, evite o trabalho de criar sua despesa manualmente e simplesmente reserve pela Expensify Travel 🚂', railCard: - 'Oi! Você sabia que pode reservar e gerenciar viagens de trem direto pelo Expensify? E que os recibos são enviados automaticamente para você? Da próxima vez, é só reservar pelo Expensify Travel 🚂', + 'Oi! Sabia que você pode reservar e gerenciar viagens de trem direto no Expensify? E que os recibos são carregados automaticamente pra você? Na próxima vez, simplesmente reserve pelo Expensify Travel 🚂', }, }, workspace: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 384a9f5ed007..4c38c7bcbf8f 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4284,14 +4284,18 @@ ${amount},商户:${merchant} - 日期:${date}`, nightsIn: '入住晚数', taxID: {title: '税号', subtitle: '请输入您法人的税号,以便我们以本地货币为您设置差旅结算。', inputLabel: '法人税号', error: {required: '请输入您的法人税号。'}}, nudge: { - airfareManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理机票。下次就不用再费劲手动创建报销单了,直接通过 Expensify Travel 预订即可 ✈️', - airfareCard: '你好!你知道吗?你可以直接在 Expensify 中预订和管理机票,而且系统会自动为你上传收据。下次只需通过 Expensify Travel 预订即可 ✈️', - hotelManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理酒店住宿。下次只需通过 Expensify Travel 预订酒店 🏨,就能省去手动创建报销的麻烦。', - hotelCard: '你好!你知道吗?你可以直接在 Expensify 中预订和管理酒店住宿。下次只需通过 Expensify Travel 预订即可 🏨', - carManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理租车。下次就不用再手动创建报销了,只需通过 Expensify Travel 预订即可。', - carCard: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理租车。下次只需通过 Expensify Travel 预订即可 🚗', - railManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理火车行程。下次就不用再手动创建报销了,只需通过 Expensify Travel 预订即可🚂', - railCard: '嗨!你知道吗,现在你可以直接在 Expensify 预订和管理火车行程,而且还会自动为你上传票据?下次直接通过 Expensify Travel 预订吧 🚂', + airfareManual: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理机票。下次无需再手动创建报销,只需通过 Expensify Travel 预订即可 ✈️', + airfareCard: + '嗨!你知道吗?你可以直接在 Expensify 里预订和管理航班,而且还能自动帮你上传收据。下次只需通过 Expensify Travel 预订即可 ✈️', + hotelManual: + '嗨!你知道吗,现在你可以直接在 Expensify 预订和管理酒店住宿?下次就不用再手动创建报销,直接通过 Expensify Travel 预订就行了 🏨', + hotelCard: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理酒店住宿。下次只需通过 Expensify Travel 进行预订即可 🏨', + carManual: '嗨!你知道吗?你可以直接在 Expensify 里预订和管理租车。下次就不用再手动创建报销,直接通过 Expensify Travel 预订即可 🚗', + carCard: '嗨!你知道吗?你可以直接在 Expensify 中预订和管理租车服务。下次只需通过 Expensify Travel 预订即可 🚗', + railManual: + '嗨!你知道吗?你可以直接在 Expensify 里预订和管理火车行程。下次就不用再手动创建报销了,只需通过 Expensify Travel 预订即可。', + railCard: + '嗨!你知道吗?你可以直接在 Expensify 里预订和管理火车行程,而且还会自动为你上传收据。下次只需通过 Expensify Travel 预订即可 🚂', }, }, workspace: { From 5ced2220c1e3245041d13b07556055bba83115e1 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 16 Jul 2026 10:30:09 -0700 Subject: [PATCH 5/7] Reuse CONST.RESERVATION_TYPE for travel nudge travelType --- src/libs/ReportActionsUtils.ts | 8 ++++---- src/types/onyx/OriginalMessage.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 214f4adc0d6c..a59a1d23d5ec 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -4629,13 +4629,13 @@ function getTravelNudgeMessage(translate: LocalizedTranslate, reportAction: Repo } const isCardCreated = originalMessage.origination === 'card'; switch (originalMessage.travelType) { - case 'airfare': + case CONST.RESERVATION_TYPE.FLIGHT: return translate(isCardCreated ? 'travel.nudge.airfareCard' : 'travel.nudge.airfareManual'); - case 'hotel': + case CONST.RESERVATION_TYPE.HOTEL: return translate(isCardCreated ? 'travel.nudge.hotelCard' : 'travel.nudge.hotelManual'); - case 'carRental': + case CONST.RESERVATION_TYPE.CAR: return translate(isCardCreated ? 'travel.nudge.carCard' : 'travel.nudge.carManual'); - case 'rail': + case CONST.RESERVATION_TYPE.TRAIN: return translate(isCardCreated ? 'travel.nudge.railCard' : 'travel.nudge.railManual'); default: return ''; diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 4873038b4d4b..d47e0495e25b 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -1651,7 +1651,7 @@ type OriginalMessageReimbursementDirectorInformationRequired = { */ type OriginalMessageTravelNudge = { /** The kind of bookable travel the expense was classified as */ - travelType: 'airfare' | 'hotel' | 'carRental' | 'rail'; + travelType: ValueOf; /** Whether the expense was created from a card import or manually */ origination: 'manual' | 'card'; From 6452a585905f2966e4106cfb0f91c0eeb561d166 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 16 Jul 2026 11:07:51 -0700 Subject: [PATCH 6/7] Show travel nudge messages instead of treating them as deleted --- src/libs/ReportActionsUtils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index a59a1d23d5ec..66836c890add 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -626,6 +626,10 @@ function isTravelUpdate(reportAction: OnyxInputOrEntry): reportAct return isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.TRAVEL_UPDATE); } +function isTravelNudge(reportAction: OnyxInputOrEntry): reportAction is ReportAction { + return isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.TRAVEL_NUDGE); +} + /** * We are in the process of deprecating reportAction.originalMessage and will be setting the db version of "message" to reportAction.message in the future see: https://github.com/Expensify/App/issues/39797 * In the interim, we must check to see if we have an object or array for the reportAction.message, if we have an array we will use the originalMessage as this means we have not yet migrated. @@ -1293,7 +1297,7 @@ function shouldReportActionBeVisible(reportAction: OnyxEntry, key: return false; } - if (isTripPreview(reportAction) || isTravelUpdate(reportAction)) { + if (isTripPreview(reportAction) || isTravelUpdate(reportAction) || isTravelNudge(reportAction)) { return true; } From b4749e06c7d8418085d874226844a2c5f7c30d9e Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 16 Jul 2026 11:08:07 -0700 Subject: [PATCH 7/7] Replace magic origination strings with CONST.TRAVEL_NUDGE.ORIGINATION --- src/CONST/index.ts | 7 +++++++ src/libs/ReportActionsUtils.ts | 2 +- src/types/onyx/OriginalMessage.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index f1448fa64fda..e63a7d6c6384 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -6500,6 +6500,13 @@ const CONST = { TRAIN: 'train', }, + TRAVEL_NUDGE: { + ORIGINATION: { + CARD: 'card', + MANUAL: 'manual', + }, + }, + PNR_STATUS: { CANCELLED: 'CANCELLED', CANCELLED_STATUS: 'CANCELLED_STATUS', diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 66836c890add..fbd9007dcad5 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -4631,7 +4631,7 @@ function getTravelNudgeMessage(translate: LocalizedTranslate, reportAction: Repo if (!originalMessage) { return ''; } - const isCardCreated = originalMessage.origination === 'card'; + const isCardCreated = originalMessage.origination === CONST.TRAVEL_NUDGE.ORIGINATION.CARD; switch (originalMessage.travelType) { case CONST.RESERVATION_TYPE.FLIGHT: return translate(isCardCreated ? 'travel.nudge.airfareCard' : 'travel.nudge.airfareManual'); diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index d47e0495e25b..f585b2d54719 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -1654,7 +1654,7 @@ type OriginalMessageTravelNudge = { travelType: ValueOf; /** Whether the expense was created from a card import or manually */ - origination: 'manual' | 'card'; + origination: ValueOf; }; /** The map type of original message */