[HomePage] Foundation: Add Home Navigation (1/2) - Core#80504
[HomePage] Foundation: Add Home Navigation (1/2) - Core#80504mountiny merged 24 commits intoExpensify:mainfrom
Conversation
ab2a763 to
6865ffb
Compare
fab6169 to
2ad123d
Compare
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
7a6c44a to
73e2290
Compare
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
This comment has been minimized.
This comment has been minimized.
|
Above will fix the TS error |
|
🚧 @grgia has triggered a test Expensify/App build. You can view the workflow run here. |
grgia
left a comment
There was a problem hiding this comment.
Is the plan to delete the duplicated logic? /Do we need a clean up issue
| @@ -0,0 +1,616 @@ | |||
| import {findFocusedRoute, StackActions, useNavigationState} from '@react-navigation/native'; | |||
There was a problem hiding this comment.
@WojtekBoman why do we have a both InboxNavigationTabBar.tsx and HomeNavigationTabBar.tsx with duplicate logic?
There was a problem hiding this comment.
Thanks to the new component we can check the beta only once in the parent component instead of checking it several times in NavigationTabBar/index.tsx
There was a problem hiding this comment.
We'll remove the additional component while deleting the beta
This comment has been minimized.
This comment has been minimized.
| <View style={styles.flex1}> | ||
| <PressableWithFeedback | ||
| accessibilityRole={CONST.ROLE.BUTTON} | ||
| accessibilityLabel="Home" | ||
| accessible | ||
| testID="ExpensifyLogoButton" | ||
| onPress={navigateToChats} | ||
| wrapperStyle={styles.leftNavigationTabBarItem} | ||
| sentryLabel={CONST.SENTRY_LABEL.NAVIGATION_TAB_BAR.EXPENSIFY_LOGO} | ||
| > | ||
| <ImageSVG | ||
| style={StyleUtils.getAvatarStyle(CONST.AVATAR_SIZE.DEFAULT)} | ||
| src={expensifyIcons.ExpensifyAppIcon} | ||
| /> | ||
| </PressableWithFeedback> | ||
| <PressableWithFeedback | ||
| onPress={navigateToNewDotHome} | ||
| role={CONST.ROLE.BUTTON} | ||
| accessibilityLabel="Home" | ||
| style={({hovered}) => [styles.leftNavigationTabBarItem, hovered && styles.navigationTabBarItemHovered]} | ||
| sentryLabel="NavigationTabBar.Home" | ||
| > | ||
| {({hovered}) => ( | ||
| <> | ||
| <View> | ||
| <Icon | ||
| src={expensifyIcons.Home} | ||
| fill={getIconFill(selectedTab === NAVIGATION_TABS.HOME, hovered)} |
There was a problem hiding this comment.
Why did we leave these as home?
| import FloatingCameraButton from '@components/FloatingCameraButton'; | ||
| import FloatingGPSButton from '@components/FloatingGPSButton'; | ||
| import Icon from '@components/Icon'; | ||
| // import * as Expensicons from '@components/Icon/Expensicons'; |
There was a problem hiding this comment.
Do we need this comment?
| const lastSearchRoute = lastSearchNavigatorState?.routes.findLast((route) => route.name === SCREENS.SEARCH.ROOT); | ||
|
|
||
| if (lastSearchRoute) { | ||
| const {q, ...rest} = lastSearchRoute.params as SearchFullscreenNavigatorParamList[typeof SCREENS.SEARCH.ROOT]; |
There was a problem hiding this comment.
I think it's better to use more meaningful names for constants
| const inboxAccessibilityState = useMemo(() => ({selected: selectedTab === NAVIGATION_TABS.INBOX}), [selectedTab]); | ||
| const searchAccessibilityState = useMemo(() => ({selected: selectedTab === NAVIGATION_TABS.SEARCH}), [selectedTab]); | ||
| const workspacesAccessibilityState = useMemo(() => ({selected: selectedTab === NAVIGATION_TABS.WORKSPACES}), [selectedTab]); |
There was a problem hiding this comment.
I don't think there's any point in using useMemo here
src/pages/HomePage.tsx
Outdated
| > | ||
| <View style={[styles.flex1, styles.alignItemsCenter, styles.justifyContentCenter]}> | ||
| <Button | ||
| text="Go to submitted expense reports" |
There was a problem hiding this comment.
I suppose it's better to use translations here
|
Minor comment 2026-01-27.12.57.42.mov |
|
When I open 2026-01-27.13.15.11.mov |
🦜 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 58d167ab..d7c8a42b 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -637,6 +637,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Einblicke',
duplicateExpense: 'Doppelte Ausgabe',
newFeature: 'Neue Funktion',
+ home: 'Startseite',
},
supportalNoAccess: {
title: 'Nicht so schnell',
@@ -2390,11 +2391,11 @@ ${amount} für ${merchant} – ${date}`,
billable: (value: boolean) => `Ausgabe ${value ? 'verrechenbar' : 'nicht abrechenbar'} aktualisieren`,
category: (value: string) => `Kategorie auf „${value}“ aktualisieren`,
comment: (value: string) => `Beschreibung in „${value}“ ändern`,
- merchant: (value: string) => `Händler aktualisieren auf „${value}“`,
+ merchant: (value: string) => `Händler auf „${value}“ aktualisieren`,
reimbursable: (value: boolean) => `Ausgabe ${value ? 'erstattungsfähig' : 'nicht erstattungsfähig'} aktualisieren`,
report: (value: string) => `Zu einem Bericht mit dem Namen „${value}“ hinzufügen`,
- tag: (value: string) => `Tag auf „${value}“ aktualisieren`,
- tax: (value: string) => `Steuersatz auf ${value} aktualisieren`,
+ tag: (value: string) => `Tag aktualisieren zu „${value}“`,
+ tax: (value: string) => `Steuersatz auf „${value}“ aktualisieren`,
},
newRule: 'Neue Regel',
addRule: {
@@ -2611,19 +2612,19 @@ ${amount} für ${merchant} – ${date}`,
title: 'Spesengenehmigungen hinzufügen',
description: ({workspaceMoreFeaturesLink}) =>
dedent(`
- *Fügen Sie Ausgabengenehmigungen hinzu*, um die Ausgaben Ihres Teams zu prüfen und unter Kontrolle zu halten.
+ *Spesengenehmigungen hinzufügen*, um die Ausgaben deines Teams zu prüfen und unter Kontrolle zu halten.
- So geht's:
+ So funktioniert's:
- 1. Gehen Sie zu *Workspaces*.
- 2. Wählen Sie Ihren Workspace aus.
- 3. Klicken Sie auf *More features*.
- 4. Aktivieren Sie *Workflows*.
- 5. Navigieren Sie im Workspace-Editor zu *Workflows*.
- 6. Aktivieren Sie *Add approvals*.
- 7. Sie werden als Genehmiger für Ausgaben festgelegt. Sie können dies auf jeden Administrator ändern, sobald Sie Ihr Team eingeladen haben.
+ 1. Gehe zu *Workspaces*.
+ 2. Wähle deinen Workspace aus.
+ 3. Klicke auf *Weitere Funktionen*.
+ 4. Aktiviere *Workflows*.
+ 5. Navigiere im Workspace-Editor zu *Workflows*.
+ 6. Aktiviere *Genehmigungen hinzufügen*.
+ 7. Du wirst als Spesengenehmiger festgelegt. Du kannst dies auf jeden Admin ändern, sobald du dein Team einlädst.
- [Zu More features wechseln](${workspaceMoreFeaturesLink}).`),
+ [Zu weiteren Funktionen](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Arbeitsbereich erstellen](${workspaceConfirmationLink})`,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index f5dbf26d..b87ee7a5 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -639,6 +639,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Analyses',
duplicateExpense: 'Note de frais en double',
newFeature: 'Nouvelle fonctionnalité',
+ home: 'Accueil',
},
supportalNoAccess: {
title: 'Pas si vite',
@@ -2392,13 +2393,13 @@ ${amount} pour ${merchant} - ${date}`,
emptyRules: {title: 'Vous n’avez créé aucune règle', subtitle: 'Ajouter une règle pour automatiser la préparation des notes de frais.'},
changes: {
billable: (value: boolean) => `Mettre à jour la dépense ${value ? 'facturable' : 'non facturable'}`,
- category: (value: string) => `Mettre à jour la catégorie en « ${value} »`,
- comment: (value: string) => `Modifier la description en « ${value} »`,
- merchant: (value: string) => `Mettre à jour le marchand en « ${value} »`,
- reimbursable: (value: boolean) => `Mettre à jour la dépense ${value ? 'remboursable' : 'non remboursable'}`,
- report: (value: string) => `Ajouter à un rapport nommé « ${value} »`,
- tag: (value: string) => `Mettre à jour le tag sur « ${value} »`,
- tax: (value: string) => `Mettre à jour le taux de taxe à ${value}`,
+ category: (value: string) => `Mettre à jour la catégorie en « ${value} »`,
+ comment: (value: string) => `Modifier la description en « ${value} »`,
+ merchant: (value: string) => `Mettre à jour le commerçant en « ${value} »`,
+ reimbursable: (value: boolean) => `Mettre à jour la dépense ${value ? 'Remboursable' : 'non remboursable'}`,
+ report: (value: string) => `Ajouter à un rapport nommé « ${value} »`,
+ tag: (value: string) => `Mettre à jour le tag sur « ${value} »`,
+ tax: (value: string) => `Mettre à jour le taux de taxe sur « ${value} »`,
},
newRule: 'Nouvelle règle',
addRule: {
@@ -2620,15 +2621,15 @@ ${amount} pour ${merchant} - ${date}`,
Voici comment faire :
- 1. Allez dans *Espaces de travail*.
+ 1. Accédez à *Workspaces*.
2. Sélectionnez votre espace de travail.
- 3. Cliquez sur *Plus de fonctionnalités*.
+ 3. Cliquez sur *More features*.
4. Activez *Workflows*.
5. Accédez à *Workflows* dans l’éditeur de l’espace de travail.
- 6. Activez *Ajouter des validations*.
- 7. Vous serez défini comme valideur des dépenses. Vous pourrez changer cela pour n’importe quel administrateur une fois que vous aurez invité votre équipe.
+ 6. Activez *Add approvals*.
+ 7. Vous serez défini comme valideur des dépenses. Vous pourrez modifier ce paramètre pour désigner n’importe quel administrateur une fois que vous aurez invité votre équipe.
- [Accéder aux fonctionnalités supplémentaires](${workspaceMoreFeaturesLink}).`),
+ [Accéder à more features](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Créer](${workspaceConfirmationLink}) un espace de travail`,
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 25dd875b..936e6684 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -638,6 +638,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Analisi',
duplicateExpense: 'Spesa duplicata',
newFeature: 'Nuova funzionalità',
+ home: 'Home',
},
supportalNoAccess: {
title: 'Non così in fretta',
@@ -2386,12 +2387,12 @@ ${amount} per ${merchant} - ${date}`,
changes: {
billable: (value: boolean) => `Aggiorna spesa ${value ? 'fatturabile' : 'non fatturabile'}`,
category: (value: string) => `Aggiorna categoria in "${value}"`,
- comment: (value: string) => `Modifica la descrizione in "${value}"`,
+ comment: (value: string) => `Modifica descrizione in "${value}"`,
merchant: (value: string) => `Aggiorna esercente in "${value}"`,
- reimbursable: (value: boolean) => `Aggiorna la spesa ${value ? 'rimborsabile' : 'non rimborsabile'}`,
- report: (value: string) => `Aggiungi a un report chiamato «${value}»`,
- tag: (value: string) => `Aggiorna etichetta in "${value}"`,
- tax: (value: string) => `Aggiorna l’aliquota fiscale a ${value}`,
+ reimbursable: (value: boolean) => `Aggiorna spesa ${value ? 'rimborsabile' : 'non rimborsabile'}`,
+ report: (value: string) => `Aggiungi a un report chiamato "${value}"`,
+ tag: (value: string) => `Aggiorna etichetta a "${value}"`,
+ tax: (value: string) => `Aggiorna aliquota fiscale a "${value}"`,
},
newRule: 'Nuova regola',
addRule: {
@@ -2608,7 +2609,7 @@ ${amount} per ${merchant} - ${date}`,
dedent(`
*Aggiungi approvazioni delle spese* per rivedere le spese del tuo team e tenerle sotto controllo.
- Procedi così:
+ Ecco come fare:
1. Vai su *Spazi di lavoro*.
2. Seleziona il tuo spazio di lavoro.
@@ -2616,9 +2617,9 @@ ${amount} per ${merchant} - ${date}`,
4. Abilita *Flussi di lavoro*.
5. Vai a *Flussi di lavoro* nell’editor dello spazio di lavoro.
6. Abilita *Aggiungi approvazioni*.
- 7. Verrai impostato come approvatore delle spese. Puoi modificarlo in qualsiasi amministratore dopo aver invitato il tuo team.
+ 7. Verrai impostato come approvatore delle spese. Potrai cambiarlo in qualsiasi amministratore dopo aver invitato il tuo team.
- [Portami alle altre funzionalità](${workspaceMoreFeaturesLink}).`),
+ [Portami a altre funzionalità](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Crea](${workspaceConfirmationLink}) un workspace`,
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 99290978..9419c6f3 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -637,6 +637,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'インサイト',
duplicateExpense: '重複した経費',
newFeature: '新機能',
+ home: 'ホーム',
},
supportalNoAccess: {
title: 'ちょっと待ってください',
@@ -2373,14 +2374,14 @@ ${merchant} への ${amount}(${date})`,
subtitle: 'これらのルールはあなたの経費に適用されます。ワークスペースに提出する場合、そのワークスペースのルールがこれらより優先されることがあります。',
emptyRules: {title: 'ルールがまだ作成されていません', subtitle: '経費報告を自動化するルールを追加する。'},
changes: {
- billable: (value: boolean) => `経費 ${value ? '請求対象' : '請求不可'} を更新`,
- category: (value: string) => `カテゴリを「${value}」に更新`,
+ billable: (value: boolean) => `経費 ${value ? '請求可能' : '請求不可'} を更新`,
+ category: (value: string) => `カテゴリーを「${value}」に更新`,
comment: (value: string) => `説明を「${value}」に変更`,
- merchant: (value: string) => `支払先を「${value}」に更新`,
- reimbursable: (value: boolean) => `経費 ${value ? '精算対象' : '非精算'} を更新`,
+ merchant: (value: string) => `取引先を「${value}」に更新`,
+ reimbursable: (value: boolean) => `経費 ${value ? '精算対象' : '非立替精算'} を更新`,
report: (value: string) => `"${value}" という名前のレポートに追加`,
tag: (value: string) => `タグを「${value}」に更新`,
- tax: (value: string) => `税率を${value}に更新`,
+ tax: (value: string) => `税率を「${value}」に更新`,
},
newRule: '新しいルール',
addRule: {
@@ -2597,19 +2598,19 @@ ${merchant} への ${amount}(${date})`,
title: '経費承認を追加',
description: ({workspaceMoreFeaturesLink}) =>
dedent(`
- チームの支出を確認して管理するには、*経費承認を追加* してください。
+ チームの支出を確認して管理するために、*経費承認を追加* しましょう。
手順は次のとおりです:
1. *Workspaces* に移動します。
- 2. ワークスペースを選択します。
+ 2. 対象のワークスペースを選択します。
3. *More features* をクリックします。
4. *Workflows* を有効にします。
- 5. ワークスペースエディタで *Workflows* に移動します。
+ 5. ワークスペースエディタ内の *Workflows* に移動します。
6. *Add approvals* を有効にします。
- 7. チームを招待すると、あなたが経費承認者として設定されます。これは、任意の管理者に変更できます。
+ 7. あなたが経費承認者として設定されます。チームを招待した後、任意の管理者に変更できます。
- [More features へ移動する](${workspaceMoreFeaturesLink})。`),
+ [More features へ移動](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `ワークスペースを[作成](${workspaceConfirmationLink})`,
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index e53c09ca..98df6c5e 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -638,6 +638,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Inzichten',
duplicateExpense: 'Dubbele uitgave',
newFeature: 'Nieuwe functie',
+ home: 'Start',
},
supportalNoAccess: {
title: 'Niet zo snel',
@@ -2382,14 +2383,14 @@ ${amount} voor ${merchant} - ${date}`,
subtitle: 'Deze regels zijn van toepassing op je uitgaven. Als je ze indient bij een werkruimte, kunnen de regels van de werkruimte deze overschrijven.', //_/\__/_/ \_,_/\__/\__/\_,_/
emptyRules: {title: 'Je hebt nog geen regels aangemaakt', subtitle: 'Voeg een regel toe om onkostendeclaraties te automatiseren.'},
changes: {
- billable: (value: boolean) => `Uitgave ${value ? 'factureerbaar' : 'niet-declarabel'} bijwerken`,
+ billable: (value: boolean) => `Declaratie ${value ? 'factureerbaar' : 'niet-factureerbaar'} bijwerken`,
category: (value: string) => `Categorie bijwerken naar "${value}"`,
comment: (value: string) => `Beschrijving wijzigen in "${value}"`,
- merchant: (value: string) => `Handelaar bijwerken naar "${value}"`,
- reimbursable: (value: boolean) => `Uitgave ${value ? 'terugbetaalbaar' : 'niet-vergoedbaar'} bijwerken`,
+ merchant: (value: string) => `Winkel bijwerken naar "${value}"`,
+ reimbursable: (value: boolean) => `Declaratie ${value ? 'terugbetaalbaar' : 'niet-vergoedbaar'} bijwerken`,
report: (value: string) => `Toevoegen aan een rapport met de naam "${value}"`,
- tag: (value: string) => `Tag bijwerken naar "${value}"`,
- tax: (value: string) => `Belastingtarief bijwerken naar ${value}`,
+ tag: (value: string) => `Label bijwerken naar "${value}"`,
+ tax: (value: string) => `Belastingtarief bijwerken naar "${value}"`,
},
newRule: 'Nieuwe regel',
addRule: {
@@ -2604,19 +2605,19 @@ ${amount} voor ${merchant} - ${date}`,
title: 'Uitgaven goedkeuringen toevoegen',
description: ({workspaceMoreFeaturesLink}) =>
dedent(`
- *Uitgavegoedkeuringen toevoegen* om de uitgaven van je team te beoordelen en onder controle te houden.
+ *Uitgaven goedkeuringen toevoegen* om de uitgaven van je team te bekijken en onder controle te houden.
Dit doe je zo:
1. Ga naar *Workspaces*.
2. Selecteer je workspace.
- 3. Klik op *More features*.
+ 3. Klik op *Meer functies*.
4. Schakel *Workflows* in.
5. Ga naar *Workflows* in de workspace-editor.
- 6. Schakel *Add approvals* in.
- 7. Jij wordt ingesteld als de goedkeurder van uitgaven. Je kunt dit wijzigen naar elke beheerder zodra je je team hebt uitgenodigd.
+ 6. Schakel *Goedkeuringen toevoegen* in.
+ 7. Jij wordt ingesteld als de uitgavengoedkeurder. Je kunt dit wijzigen naar elke beheerder zodra je je team uitnodigt.
- [Breng me naar more features](${workspaceMoreFeaturesLink}).`),
+ [Breng me naar meer functies](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Maak](${workspaceConfirmationLink}) een workspace`,
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 93f0bc39..932ed2ab 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -638,6 +638,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Analizy',
duplicateExpense: 'Zduplikowany wydatek',
newFeature: 'Nowa funkcja',
+ home: 'Strona główna',
},
supportalNoAccess: {
title: 'Nie tak szybko',
@@ -2375,14 +2376,14 @@ ${amount} dla ${merchant} - ${date}`,
subtitle: 'Te zasady będą miały zastosowanie do Twoich wydatków. Jeśli wysyłasz je do przestrzeni roboczej, zasady tej przestrzeni roboczej mogą je zastąpić.',
emptyRules: {title: 'Nie utworzyłeś żadnych reguł', subtitle: 'Dodaj regułę, aby zautomatyzować raportowanie wydatków.'},
changes: {
- billable: (value: boolean) => `Zaktualizuj wydatek ${value ? 'Fakturowalne' : 'niefakturowalne'}`,
+ billable: (value: boolean) => `Zaktualizuj wydatek ${value ? 'Fakturowalne' : 'niepodlegające rozliczeniu'}`,
category: (value: string) => `Zaktualizuj kategorię na „${value}”`,
comment: (value: string) => `Zmień opis na „${value}”`,
merchant: (value: string) => `Zaktualizuj sprzedawcę na „${value}”`,
reimbursable: (value: boolean) => `Zaktualizuj wydatek ${value ? 'podlegający zwrotowi' : 'niepodlegający zwrotowi'}`,
report: (value: string) => `Dodaj do raportu o nazwie „${value}”`,
tag: (value: string) => `Zaktualizuj znacznik na „${value}”`,
- tax: (value: string) => `Zaktualizuj stawkę podatku na ${value}`,
+ tax: (value: string) => `Zaktualizuj stawkę podatku na „${value}”`,
},
newRule: 'Nowa zasada',
addRule: {
@@ -2597,9 +2598,9 @@ ${amount} dla ${merchant} - ${date}`,
title: 'Dodaj zatwierdzanie wydatków',
description: ({workspaceMoreFeaturesLink}) =>
dedent(`
- *Dodaj zatwierdzanie wydatków*, aby przeglądać wydatki swojego zespołu i mieć je pod kontrolą.
+ *Dodaj zatwierdzanie wydatków*, aby przeglądać wydatki swojego zespołu i utrzymać je pod kontrolą.
- Oto jak:
+ Oto jak to zrobić:
1. Przejdź do *Workspaces*.
2. Wybierz swoją przestrzeń roboczą.
@@ -2607,9 +2608,9 @@ ${amount} dla ${merchant} - ${date}`,
4. Włącz *Workflows*.
5. Przejdź do *Workflows* w edytorze przestrzeni roboczej.
6. Włącz *Add approvals*.
- 7. Zostaniesz ustawiony jako osoba zatwierdzająca wydatki. Po zaproszeniu zespołu możesz zmienić to na dowolnego administratora.
+ 7. Zostaniesz ustawiony jako osoba zatwierdzająca wydatki. Możesz zmienić tę osobę na dowolnego administratora po zaproszeniu swojego zespołu.
- [Przejdź do more features](${workspaceMoreFeaturesLink}).`),
+ [Przejdź do więcej funkcji](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Utwórz](${workspaceConfirmationLink}) przestrzeń roboczą`,
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 1d513499..50a3c5b8 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -637,6 +637,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: 'Insights',
duplicateExpense: 'Despesa duplicada',
newFeature: 'Novo recurso',
+ home: 'Início',
},
supportalNoAccess: {
title: 'Não tão rápido',
@@ -2375,14 +2376,14 @@ ${amount} para ${merchant} - ${date}`,
subtitle: 'Essas regras serão aplicadas às suas despesas. Se você enviar para um workspace, as regras do workspace poderão substituí-las.',
emptyRules: {title: 'Você não criou nenhuma regra', subtitle: 'Adicione uma regra para automatizar o relatório de despesas.'},
changes: {
- billable: (value: boolean) => `Atualizar despesa ${value ? 'cobrável' : 'não faturável'}`,
+ billable: (value: boolean) => `Atualizar despesa ${value ? 'faturável' : 'não faturável'}`,
category: (value: string) => `Atualizar categoria para "${value}"`,
comment: (value: string) => `Alterar descrição para "${value}"`,
merchant: (value: string) => `Atualizar comerciante para "${value}"`,
reimbursable: (value: boolean) => `Atualizar despesa ${value ? 'reembolsável' : 'não reembolsável'}`,
report: (value: string) => `Adicionar a um relatório chamado "${value}"`,
tag: (value: string) => `Atualizar etiqueta para "${value}"`,
- tax: (value: string) => `Atualizar taxa de imposto para ${value}`,
+ tax: (value: string) => `Atualizar taxa de imposto para "${value}"`,
},
newRule: 'Nova regra',
addRule: {
@@ -2601,15 +2602,15 @@ ${amount} para ${merchant} - ${date}`,
Veja como:
- 1. Vá para *Workspaces*.
- 2. Selecione seu workspace.
- 3. Clique em *More features*.
- 4. Ative *Workflows*.
- 5. Acesse *Workflows* no editor do workspace.
- 6. Ative *Add approvals*.
- 7. Você será definido como aprovador de despesas. Você pode alterar isso para qualquer administrador depois de convidar sua equipe.
+ 1. Vá para *Espaços de trabalho*.
+ 2. Selecione seu espaço de trabalho.
+ 3. Clique em *Mais recursos*.
+ 4. Ative *Fluxos de trabalho*.
+ 5. Acesse *Fluxos de trabalho* no editor do espaço de trabalho.
+ 6. Ative *Adicionar aprovações*.
+ 7. Você será definido como o aprovador de despesas. Você pode alterar isso para qualquer administrador depois de convidar sua equipe.
- [Levar-me para mais recursos](${workspaceMoreFeaturesLink}).`),
+ [Leve-me para mais recursos](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[Crie](${workspaceConfirmationLink}) um workspace`,
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 15aa07c6..0426e78f 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -634,6 +634,7 @@ const translations: TranslationDeepObject<typeof en> = {
insights: '洞察',
duplicateExpense: '重复报销',
newFeature: '新功能',
+ home: '首页',
},
supportalNoAccess: {
title: '先别急',
@@ -2343,12 +2344,12 @@ ${amount},商户:${merchant} - ${date}`,
changes: {
billable: (value: boolean) => `更新报销 ${value ? '可计费' : '不可计费'}`,
category: (value: string) => `将类别更新为“${value}”`,
- comment: (value: string) => `将描述更改为 “${value}”`,
+ comment: (value: string) => `将描述更改为“${value}”`,
merchant: (value: string) => `将商户更新为“${value}”`,
- reimbursable: (value: boolean) => `更新报销 ${value ? '可报销' : '不予报销'}`,
+ reimbursable: (value: boolean) => `更新报销 ${value ? '可报销' : '不可报销'}`,
report: (value: string) => `添加到名为“${value}”的报表`,
tag: (value: string) => `将标签更新为“${value}”`,
- tax: (value: string) => `将税率更新为 ${value}`,
+ tax: (value: string) => `将税率更新为“${value}”`,
},
newRule: '新规则',
addRule: {
@@ -2557,19 +2558,19 @@ ${amount},商户:${merchant} - ${date}`,
title: '添加报销审批',
description: ({workspaceMoreFeaturesLink}) =>
dedent(`
- *添加报销审批*,以便审核团队支出并保持支出可控。
+ *添加报销审批*,以便审查团队支出并将其控制在合理范围内。
操作步骤如下:
- 1. 进入 *工作区*。
+ 1. 前往 *Workspaces*。
2. 选择你的工作区。
- 3. 点击 *更多功能*。
- 4. 启用 *工作流*。
- 5. 在工作区编辑器中前往 *工作流*。
- 6. 启用 *添加审批*。
- 7. 你将被设为报销审批人。邀请团队成员后,你可以将其更改为任何管理员。
+ 3. 点击 *More features*。
+ 4. 启用 *Workflows*。
+ 5. 在工作区编辑器中进入 *Workflows*。
+ 6. 启用 *Add approvals*。
+ 7. 你将被设为报销审批人。邀请团队成员后,你可以将此更改为任意管理员。
- [带我前往更多功能](${workspaceMoreFeaturesLink})。`),
+ [带我前往更多功能](${workspaceMoreFeaturesLink}).`),
},
createTestDriveAdminWorkspaceTask: {
title: ({workspaceConfirmationLink}) => `[创建](${workspaceConfirmationLink})一个工作区`,
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
26eb3f9 to
30cbaed
Compare
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp2026-01-28.00.00.24.movAndroid: mWeb Chrome2026-01-27.23.45.40.moviOS: HybridApp2026-01-28.00.00.24.moviOS: mWeb Safari2026-01-27.23.45.40.movMacOS: Chrome / Safari2026-01-27.23.44.43.mov |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d97036a43d
ℹ️ 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".
|
🚧 @mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
LGTM! |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
Tested on ios and the redirects work fine |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.3.11-0 🚀
|
|
🚀 Deployed to production by https://github.com/Julesssss in version: 9.3.12-1 🚀
|
| accessibilityLabel={translate('common.home')} | ||
| accessible | ||
| testID="ExpensifyLogoButton" | ||
| onPress={navigateToChats} |
There was a problem hiding this comment.
We should navigate to the Home screen instead of the chat inbox when the user taps on the logo. This issue has been addressed in the following fix: #82830.






Explanation of Change
This PR introduces a new empty Home page and reorganizes the navigation structure.
/homeroute unchanged to avoid disrupting non-beta usersnewDotHomebeta)Fixed Issues
$ #79978
PROPOSAL:
Tests
If you are on the homepage beta (applausemail should be), then you can see the Home tab
Offline tests
N/A
QA Steps
Same as tests
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
Screen.Recording.2026-01-27.at.11.09.37.mov
iOS: mWeb Safari
Screen.Recording.2026-01-27.at.11.19.52.mov
MacOS: Chrome / Safari
Screen.Recording.2026-01-27.at.12.31.39.mov