Show an error when the default workspace does not have travel enabled - #98484
Show an error when the default workspace does not have travel enabled#98484blimpich wants to merge 7 commits into
Conversation
This comment has been minimized.
This comment has been minimized.
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index b82889e2..77b778e1 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -4495,8 +4495,7 @@ ${amount} für ${merchant} – ${date}`,
},
defaultWorkspaceTravelDisabled: {
title: 'Reisen ist nicht aktiviert',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Ihr aktueller Standard-Arbeitsbereich ist ${workspaceName}, in dem Reisen nicht aktiviert ist. Bitte ändern Sie Ihren Standard-Arbeitsbereich, um buchen zu können!`,
+ message: 'Um zu buchen, aktivieren Sie bitte Reisen in Ihrem Standard-Arbeitsbereich oder wechseln Sie Ihren Standard-Arbeitsbereich zu einem, in dem Reisen aktiviert ist.',
},
},
workspace: {
diff --git a/src/languages/el.ts b/src/languages/el.ts
index 8b177058..2afc34c9 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -4565,9 +4565,9 @@ ${amount} για ${merchant} - ${date}`,
'Γνωρίζατε ότι μπορείτε να κλείνετε και να διαχειρίζεστε ταξίδια με τρένο απευθείας στο Expensify; Και ότι ανεβάζει αυτόματα τις αποδείξεις για εσάς; Την επόμενη φορά απλώς κάντε κράτηση μέσω του <a href="https://travel.expensify.com">Expensify Travel</a> 🚂',
},
defaultWorkspaceTravelDisabled: {
- title: 'Το ταξίδι δεν είναι ενεργοποιημένο',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Ο τρέχων προεπιλεγμένος χώρος εργασίας σας είναι ο ${workspaceName}, στον οποίο δεν είναι ενεργοποιημένα τα ταξίδια. Παρακαλούμε αλλάξτε τον προεπιλεγμένο χώρο εργασίας σας για να κάνετε κράτηση!`,
+ title: 'Η ταξιδιωτική λειτουργία δεν είναι ενεργοποιημένη',
+ message:
+ 'Για να κάνετε κράτηση, ενεργοποιήστε τα ταξίδια στον προεπιλεγμένο χώρο εργασίας σας ή αλλάξτε τον προεπιλεγμένο χώρο εργασίας σε κάποιον όπου τα ταξίδια είναι ενεργοποιημένα.',
},
},
proactiveAppReview: {
diff --git a/src/languages/es.ts b/src/languages/es.ts
index fafcc4b8..be76f46e 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -4399,9 +4399,8 @@ ${amount} para ${merchant} - ${date}`,
'¿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 <a href="https://travel.expensify.com">Expensify Travel</a> 🚂',
},
defaultWorkspaceTravelDisabled: {
- title: 'Viajes no está habilitado',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Tu espacio de trabajo predeterminado actual es ${workspaceName}, que no tiene los viajes habilitados. ¡Cambia tu espacio de trabajo predeterminado para poder reservar!`,
+ title: 'Los viajes no están habilitados',
+ message: 'Para reservar, habilita los viajes en tu espacio de trabajo predeterminado o cambia tu espacio de trabajo predeterminado a uno que tenga los viajes habilitados.',
},
},
proactiveAppReview: {
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index c2a37904..db93ece4 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -4504,8 +4504,7 @@ ${amount} pour ${merchant} - ${date}`,
},
defaultWorkspaceTravelDisabled: {
title: 'Voyage n’est pas activé',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Votre espace de travail par défaut actuel est ${workspaceName}, qui n’a pas le voyage activé. Veuillez changer d’espace de travail par défaut pour pouvoir réserver !`,
+ message: 'Pour réserver, veuillez activer les voyages sur votre espace de travail par défaut ou définir par défaut un espace de travail sur lequel les voyages sont activés.',
},
},
workspace: {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index da2d9929..76f6fd70 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -4470,9 +4470,8 @@ ${amount} per ${merchant} - ${date}`,
'Sapevi che puoi prenotare e gestire i viaggi in treno direttamente in Expensify? E che le ricevute vengono caricate automaticamente per te? La prossima volta prenota semplicemente tramite <a href="https://travel.expensify.com">Expensify Travel</a> 🚂',
},
defaultWorkspaceTravelDisabled: {
- title: 'Viaggi non è abilitato',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Il tuo spazio di lavoro predefinito attuale è ${workspaceName}, che non ha i viaggi abilitati. Cambia il tuo spazio di lavoro predefinito per poter prenotare!`,
+ title: 'Viaggi non abilitato',
+ message: 'Per prenotare, abilita i viaggi sul tuo spazio di lavoro predefinito oppure imposta come predefinito uno spazio di lavoro con viaggi abilitati.',
},
},
workspace: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 81af3c1e..80281d8b 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -4435,8 +4435,7 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの'
},
defaultWorkspaceTravelDisabled: {
title: '出張機能は有効になっていません',
- message: ({workspaceName}: {workspaceName: string}) =>
- `現在のデフォルトワークスペースは ${workspaceName} で、出張手配機能が有効になっていません。予約するには、デフォルトワークスペースを変更してください。`,
+ message: '予約するには、デフォルトのワークスペースで出張機能を有効にするか、出張機能が有効になっているワークスペースをデフォルトとして設定してください。',
},
},
workspace: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2aeee23f..c06b53ff 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -4469,8 +4469,7 @@ ${amount} voor ${merchant} - ${date}`,
},
defaultWorkspaceTravelDisabled: {
title: 'Reizen is niet ingeschakeld',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Je huidige standaardwerkruimte is ${workspaceName} en heeft reizen niet ingeschakeld. Wijzig je standaardwerkruimte om te kunnen boeken!`,
+ message: 'Om te boeken, schakel reizen in op je standaardwerkruimte of stel een standaardwerkruimte in die reizen ondersteunt.',
},
},
workspace: {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 1f5a1d3a..ddfd3097 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -4453,9 +4453,8 @@ ${amount} dla ${merchant} - ${date}`,
'Wiesz, że możesz rezerwować i zarządzać przejazdami pociągiem bezpośrednio w Expensify? I że paragony są automatycznie przesyłane za Ciebie? Następnym razem po prostu zarezerwuj przez <a href="https://travel.expensify.com">Expensify Travel</a>',
},
defaultWorkspaceTravelDisabled: {
- title: 'Podróże nie są włączone',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Twoje domyślne miejsce pracy to ${workspaceName}, w którym podróże nie są włączone. Zmień domyślne miejsce pracy, żeby móc rezerwować!`,
+ title: 'Podróże są wyłączone',
+ message: 'Aby dokonać rezerwacji, włącz podróże w swojej domyślnej przestrzeni roboczej lub ustaw jako domyślną inną przestrzeń roboczą, w której podróże są włączone.',
},
},
workspace: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 14b7dfa6..f1b87d45 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -4462,9 +4462,8 @@ ${amount} para ${merchant} - ${date}`,
'Você sabia que dá para reservar e gerenciar viagens de trem direto no Expensify? E que os recibos são enviados automaticamente para você? Da próxima vez, é só reservar pelo <a href="https://travel.expensify.com">Expensify Travel</a> 🚂',
},
defaultWorkspaceTravelDisabled: {
- title: 'Viagens não estão ativadas',
- message: ({workspaceName}: {workspaceName: string}) =>
- `Seu espaço de trabalho padrão atual é ${workspaceName}, que não tem viagens ativadas. Altere seu espaço de trabalho padrão para poder reservar!`,
+ title: 'Viagem não está ativada',
+ message: 'Para fazer uma reserva, ative viagens no seu espaço de trabalho padrão ou altere seu espaço de trabalho padrão para um que tenha viagens ativadas.',
},
},
workspace: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 5d261980..46c3dcbf 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -4329,10 +4329,7 @@ ${amount},商户:${merchant} - 日期:${date}`,
railManual: '你知道吗?你可以直接在 Expensify 中预订和管理火车行程!下次无需再手动创建报销,只需通过 <a href="https://travel.expensify.com">Expensify Travel</a> 预订即可 🚂',
railCard: '你知道吗?你可以直接在 Expensify 中预订和管理火车行程,而且还会自动为你上传收据。下次只需通过 <a href="https://travel.expensify.com">Expensify Travel</a> 预订即可 🚂',
},
- defaultWorkspaceTravelDisabled: {
- title: '差旅功能未启用',
- message: ({workspaceName}: {workspaceName: string}) => `您当前的默认工作区是 ${workspaceName},尚未启用差旅功能。请更改默认工作区以预订差旅!`,
- },
+ defaultWorkspaceTravelDisabled: {title: '差旅功能未启用', message: '如需预订,请在您的默认工作区中启用差旅功能,或将默认工作区切换为已启用差旅功能的工作区。'},
},
workspace: {
common: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
Hmm not sure why two C+ got assigned to review. Going to unassign @truph01 |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c931a41077
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
|
||
| /** Whether travel is enabled on a workspace, meaning it can be used to book a trip. */ | ||
| function hasAcceptedTravelTerms(policy: OnyxEntry<Policy>, accountTravelSettings: TravelSettings | undefined): boolean { | ||
| return !!(policy?.travelSettings?.hasAcceptedTerms ?? (accountTravelSettings?.hasAcceptedTerms && isWorkspaceProvisionedForTravel(policy?.travelSettings))); |
There was a problem hiding this comment.
Require isTravelEnabled before treating travel as enabled
When an admin toggles Travel off, enablePolicyTravel() only flips policy.isTravelEnabled and does not clear travelSettings.hasAcceptedTerms. This helper still returns true for that default workspace, so the new default-workspace guard in BookTravelButton allows openTravelDotLink() even though the default workspace has Travel disabled. Please include the policy feature flag in this enabled check, or check it separately at the guard.
Useful? React with 👍 / 👎.
|
|
||
| return travelEnabledPolicy?.travelSettings?.hasAcceptedTerms ?? (travelSettings?.hasAcceptedTerms && isPolicyProvisioned); | ||
| }, [travelEnabledPolicy, isBlockedFromSpotnanaTravel, primaryContactMethod, travelSettings?.hasAcceptedTerms]); | ||
| return hasAcceptedTravelTerms(travelEnabledPolicy, travelSettings); |
There was a problem hiding this comment.
Include the default-workspace guard in the quick action
On wide Home pages, this quick-creation Travel button still computes readiness only from the first travel-enabled workspace. If the user's default workspace (NVP_ACTIVE_POLICY_ID) has Travel disabled but another workspace has accepted terms, this returns true, so pressing Travel goes straight to openTravelDotLink(travelEnabledPolicy?.id) and bypasses the new default-workspace error shown by BookTravelButton. Please apply the same default-policy check here before opening TravelDot.
Useful? React with 👍 / 👎.
Explanation of Change
Today a member whose default workspace does not have travel enabled can still book travel from a different, travel-enabled workspace. They get sent into Expensify Travel without a travel profile, so they never show up in that company's traveler list and their booking does not behave as expected. This change stops the booking at the point of the click and shows a modal naming their current default workspace, telling them to change it before they book. Setting up travel on a workspace is unaffected — only the booking hand-off is blocked, and the wording of the message comes from the issue.
Fixed Issues
$ #92551
PROPOSAL: #92551 (comment)
Tests
Offline tests
QA Steps
Copy pasted from GH issue:
Precondition: expensifail account with enabled Travel feature. Has at least 1 booked trip (e.g. flight) in the past.
Screenshots/Videos