diff --git a/src/CONST/index.ts b/src/CONST/index.ts
index f6229e99a33c..e63a7d6c6384 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',
@@ -6499,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/languages/de.ts b/src/languages/de.ts
index 4781201670f5..de7213c6db9f 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -4425,6 +4425,24 @@ ${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 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 ✈️',
+ hotelManual:
+ '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 🚗',
+ railManual:
+ '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 das nächste Mal einfach über Expensify Travel 🚂',
+ },
},
workspace: {
common: {
diff --git a/src/languages/en.ts b/src/languages/en.ts
index ad951130d053..b00588cb9933 100644
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -4508,6 +4508,24 @@ 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/languages/es.ts b/src/languages/es.ts
index 1004d7cf7646..0e8542784ce5 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -4286,6 +4286,24 @@ ${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 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 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 🚂',
+ railCard:
+ '¡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: {
title: '¿Te gusta New Expensify?',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 6bd23538e72a..d141ec45d540 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:
+ '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 ✈️',
+ hotelManual:
+ '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 🏨',
+ 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 des locations de voiture directement dans Expensify ? La prochaine fois, réservez simplement via Expensify Travel 🚗',
+ railManual:
+ '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:
+ '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: {
common: {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 0fca2183802a..8cde92b37c43 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -4410,6 +4410,24 @@ ${amount} per ${merchant} - ${date}`,
inputLabel: 'Partita IVA dell’entità legale',
error: {required: 'Inserisci il codice fiscale/partita IVA della tua entità legale.'},
},
+ nudge: {
+ airfareManual:
+ '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 tramite Expensify Travel ✈️',
+ hotelManual:
+ '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 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 il fastidio di creare la tua spesa manualmente e prenota semplicemente tramite Expensify Travel 🚂',
+ railCard:
+ '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: {
common: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index afbd7d7784ee..81167af73921 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -4374,6 +4374,24 @@ ${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..589cfa26b1b8 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -4405,6 +4405,24 @@ ${amount} voor ${merchant} - ${date}`,
inputLabel: 'Belastingnummer rechtspersoon',
error: {required: 'Vul het fiscale identificatienummer van je rechtspersoon in.'},
},
+ nudge: {
+ airfareManual:
+ '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 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 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 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 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 de 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..add7fe28d53f 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -4391,6 +4391,24 @@ ${amount} dla ${merchant} - ${date}`,
inputLabel: 'NIP podmiotu prawnego',
error: {required: 'Podaj swój identyfikator podatkowy podmiotu prawnego.'},
},
+ nudge: {
+ airfareManual:
+ '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 ✈️',
+ hotelManual:
+ '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:
+ '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 zachodu z ręcznym tworzeniem wydatku i po prostu zarezerwuj podróż przez Expensify Travel 🚂',
+ railCard:
+ '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: {
common: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 759100702277..3e05d91c3826 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -4395,6 +4395,24 @@ ${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 sua despesa manualmente e simplesmente reserve pelo Expensify Travel ✈️',
+ airfareCard:
+ '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 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 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:
+ '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! 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: {
common: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index b33368c50a5f..4c38c7bcbf8f 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -4283,6 +4283,20 @@ ${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: {
diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts
index 6ad46a887e6b..fbd9007dcad5 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;
}
@@ -4621,6 +4625,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 === CONST.TRAVEL_NUDGE.ORIGINATION.CARD;
+ switch (originalMessage.travelType) {
+ case CONST.RESERVATION_TYPE.FLIGHT:
+ return translate(isCardCreated ? 'travel.nudge.airfareCard' : 'travel.nudge.airfareManual');
+ case CONST.RESERVATION_TYPE.HOTEL:
+ return translate(isCardCreated ? 'travel.nudge.hotelCard' : 'travel.nudge.hotelManual');
+ case CONST.RESERVATION_TYPE.CAR:
+ return translate(isCardCreated ? 'travel.nudge.carCard' : 'travel.nudge.carManual');
+ case CONST.RESERVATION_TYPE.TRAIN:
+ return translate(isCardCreated ? 'travel.nudge.railCard' : 'travel.nudge.railManual');
+ default:
+ return '';
+ }
+}
+
/**
* @private
*/
@@ -4979,6 +5004,7 @@ export {
getWorkspaceCustomUnitUpdatedMessage,
getRoomChangeLogMessage,
getActionableCard3DSTransactionApprovalMessage,
+ getTravelNudgeMessage,
shouldShowActivateCard,
isRejectedAction,
isReopenedAction,
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 (
;
+
+ /** Whether the expense was created from a card import or manually */
+ origination: ValueOf;
+};
+
/** 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;