Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
42e0672
Feature: [Travel Invoicing] Release 2.1: Opening the Travel Invoicing…
ikevin127 Jan 7, 2026
7f42902
fix: failing workflows
ikevin127 Jan 7, 2026
63b6324
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 8, 2026
cc4455d
fix: updated UI and resolved failing workflows
ikevin127 Jan 9, 2026
2caea0a
fix: eslint - ready for review
ikevin127 Jan 9, 2026
3442294
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 9, 2026
e775554
fix: mobile UI padding and illustrations export order
ikevin127 Jan 9, 2026
db51b68
fix: removed unused translations
ikevin127 Jan 9, 2026
4268f79
fix: confirmed translation suggestion
ikevin127 Jan 12, 2026
ca83f0e
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 12, 2026
13ea366
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 13, 2026
808afdf
fix: updated translations, added Learn how link
ikevin127 Jan 14, 2026
bfd14b3
chore: submodule sync
ikevin127 Jan 14, 2026
540ae51
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 16, 2026
22deb05
feat: integrate 'OpenPolicyTravelPage' API
ikevin127 Jan 16, 2026
35fd25d
chore: submodule sync
ikevin127 Jan 16, 2026
543720c
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 20, 2026
74497fd
fix: addressed refactoring comments and native issue
ikevin127 Jan 20, 2026
ca5e2a3
fix: tests & typecheck - ready for review
ikevin127 Jan 21, 2026
c253e46
Merge branch 'main' of https://github.com/Expensify/App into ikevin12…
ikevin127 Jan 21, 2026
2b71c52
fix: addressed reusability comment
ikevin127 Jan 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Mobile-Expensify
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7758,6 +7758,11 @@ const CONST = {
REFUND: 'REFUND',
EXCHANGE: 'EXCHANGE',
},
/**
* The Travel Invoicing feed type constant.
* This feed is used for Travel Invoicing cards which are separate from regular Expensify Cards.
*/
PROGRAM_TRAVEL_US: 'TRAVEL_US',
},
LAST_PAYMENT_METHOD: {
LAST_USED: 'lastUsed',
Expand Down
66 changes: 35 additions & 31 deletions src/components/Icon/Illustrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import Approval from '@assets/images/simple-illustrations/simple-illustration__a
import Binoculars from '@assets/images/simple-illustrations/simple-illustration__binoculars.svg';
import BlueShield from '@assets/images/simple-illustrations/simple-illustration__blueshield.svg';
import Buildings from '@assets/images/simple-illustrations/simple-illustration__buildings.svg';
import CalendarMonthly from '@assets/images/simple-illustrations/simple-illustration__calendar-monthly.svg';
import CarIce from '@assets/images/simple-illustrations/simple-illustration__car-ice.svg';
import Car from '@assets/images/simple-illustrations/simple-illustration__car.svg';
import ChatBubbles from '@assets/images/simple-illustrations/simple-illustration__chatbubbles.svg';
Expand All @@ -27,6 +28,7 @@ import EmailAddress from '@assets/images/simple-illustrations/simple-illustratio
import EmptyShelves from '@assets/images/simple-illustrations/simple-illustration__empty-shelves.svg';
import Encryption from '@assets/images/simple-illustrations/simple-illustration__encryption.svg';
import EnvelopeReceipt from '@assets/images/simple-illustrations/simple-illustration__envelopereceipt.svg';
import FastMoney from '@assets/images/simple-illustrations/simple-illustration__fastmoney.svg';
import Filters from '@assets/images/simple-illustrations/simple-illustration__filters.svg';
import Flash from '@assets/images/simple-illustrations/simple-illustration__flash.svg';
import Gears from '@assets/images/simple-illustrations/simple-illustration__gears.svg';
Expand All @@ -45,49 +47,51 @@ import ExpensifyApprovedLogo from '@assets/images/subscription-details__approved
import TurtleInShell from '@assets/images/turtle-in-shell.svg';

export {
Encryption,
Abacus,
Alert,
Approval,
Binoculars,
BlueShield,
Buildings,
CalendarMonthly,
Car,
CarIce,
ChatBubbles,
Computer,
CheckmarkCircle,
Clock,
CommentBubbles,
Computer,
ConciergeBot,
ConciergeBubble,
CreditCardEyes,
CreditCardsNewGreen,
EmailAddress,
EmptyCardState,
EmptyShelves,
EmptyStateTravel,
Encryption,
EnvelopeReceipt,
ExpensifyApprovedLogo,
ExpensifyCardImage,
Mailbox,
CreditCardsNewGreen,
FastMoney,
Filters,
Flash,
Gears,
HeadSet,
Hourglass,
House,
LaptopWithSecondScreenAndHourglass,
LaptopWithSecondScreenSync,
LaptopWithSecondScreenX,
Lightbulb,
LockClosed,
LockClosedOrange,
LockOpen,
Luggage,
MagnifyingGlassReceipt,
ConciergeBot,
ConciergeBubble,
HeadSet,
Hourglass,
CommentBubbles,
Puzzle,
LockClosed,
Gears,
Approval,
House,
Buildings,
Alert,
Abacus,
Binoculars,
Car,
Mailbox,
Pencil,
CarIce,
Lightbulb,
ExpensifyApprovedLogo,
CheckmarkCircle,
CreditCardEyes,
LockClosedOrange,
Filters,
TurtleInShell,
Flash,
PendingTravel,
EmptyStateTravel,
EmptyShelves,
BlueShield,
Puzzle,
TurtleInShell,
};
4 changes: 4 additions & 0 deletions src/components/Icon/chunks/illustrations.chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ import Binoculars from '@assets/images/simple-illustrations/simple-illustration_
import BlueShield from '@assets/images/simple-illustrations/simple-illustration__blueshield.svg';
import Building from '@assets/images/simple-illustrations/simple-illustration__building.svg';
import Buildings from '@assets/images/simple-illustrations/simple-illustration__buildings.svg';
import CalendarMonthly from '@assets/images/simple-illustrations/simple-illustration__calendar-monthly.svg';
import CarIce from '@assets/images/simple-illustrations/simple-illustration__car-ice.svg';
import Car from '@assets/images/simple-illustrations/simple-illustration__car.svg';
import ChatBubbles from '@assets/images/simple-illustrations/simple-illustration__chatbubbles.svg';
Expand All @@ -110,6 +111,7 @@ import EmailAddress from '@assets/images/simple-illustrations/simple-illustratio
import EmptyShelves from '@assets/images/simple-illustrations/simple-illustration__empty-shelves.svg';
import Encryption from '@assets/images/simple-illustrations/simple-illustration__encryption.svg';
import EnvelopeReceipt from '@assets/images/simple-illustrations/simple-illustration__envelopereceipt.svg';
import FastMoney from '@assets/images/simple-illustrations/simple-illustration__fastmoney.svg';
import Filters from '@assets/images/simple-illustrations/simple-illustration__filters.svg';
import Flash from '@assets/images/simple-illustrations/simple-illustration__flash.svg';
import FolderOpen from '@assets/images/simple-illustrations/simple-illustration__folder-open.svg';
Expand Down Expand Up @@ -309,6 +311,7 @@ const Illustrations = {
Approval,
Binoculars,
Buildings,
CalendarMonthly,
Car,
ChatBubbles,
CheckmarkCircle,
Expand All @@ -320,6 +323,7 @@ const Illustrations = {
EmptyShelves,
Encryption,
EnvelopeReceipt,
FastMoney,
Filters,
Flash,
Gears,
Expand Down
9 changes: 8 additions & 1 deletion src/components/MenuItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,9 @@ type MenuItemBaseProps = ForwardedFSClassProps &
/** Whether the screen containing the item is focused */
isFocused?: boolean;

/** Additional styles for the root wrapper View */
rootWrapperStyle?: StyleProp<ViewStyle>;

/** The accessibility role to use for this menu item */
role?: Role;

Expand Down Expand Up @@ -546,6 +549,7 @@ function MenuItem({
ref,
isFocused,
sentryLabel,
rootWrapperStyle,
role = CONST.ROLE.MENUITEM,
shouldBeAccessible = true,
tabIndex = 0,
Expand Down Expand Up @@ -700,7 +704,10 @@ function MenuItem({
const isIDPassed = !!iconReportID || !!iconAccountID || iconAccountID === CONST.DEFAULT_NUMBER_ID;

return (
<View onBlur={onBlur}>
<View
style={rootWrapperStyle}
onBlur={onBlur}
>
{!!label && !isLabelHoverable && (
<View style={[styles.ph5, labelStyle]}>
<Text style={StyleUtils.combineStyles([styles.sidebarLinkText, styles.optionAlternateText, styles.textLabelSupporting, styles.pre])}>{label}</Text>
Expand Down
19 changes: 19 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5039,6 +5039,25 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU
subtitle: 'Nutzen Sie Expensify Travel für die besten Reiseangebote und verwalten Sie alle Ihre Geschäftsausgaben an einem Ort.',
ctaText: 'Buchen oder verwalten',
},
travelInvoicing: {
travelBookingSection: {
title: 'Reisebuchung',
subtitle: 'Glückwunsch! Du kannst jetzt in diesem Workspace Reisen buchen und verwalten.',
manageTravelLabel: 'Reisen verwalten',
},
centralInvoicingSection: {
title: 'Zentrale Rechnungsstellung',
subtitle: 'Zentralisieren Sie alle Reisekosten in einer monatlichen Rechnung, anstatt zum Zeitpunkt des Kaufs zu bezahlen.',
learnHow: "So funktioniert's.",
subsections: {
currentTravelSpendLabel: 'Aktuelle Reisekosten',
currentTravelSpendCta: 'Saldo bezahlen',
currentTravelLimitLabel: 'Aktuelles Reiselimit',
settlementAccountLabel: 'Ausgleichskonto',
settlementFrequencyLabel: 'Abrechnungshäufigkeit',
},
},
},
},
expensifyCard: {
title: 'Expensify Card',
Expand Down
19 changes: 19 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4945,6 +4945,25 @@ const translations = {
subtitle: 'Use Expensify Travel to get the best travel offers and manage all your business expenses in a single place.',
ctaText: 'Book or manage',
},
travelInvoicing: {
travelBookingSection: {
title: 'Travel booking',
subtitle: "Congrats! You're all set to book and manage travel on this workspace.",
manageTravelLabel: 'Manage travel',
},
centralInvoicingSection: {
title: 'Central invoicing',
subtitle: 'Centralize all travel spend in a monthly invoice instead of paying at time of purchase.',
learnHow: 'Learn how.',
subsections: {
currentTravelSpendLabel: 'Current travel spend',
currentTravelSpendCta: 'Pay balance',
currentTravelLimitLabel: 'Current travel limit',
settlementAccountLabel: 'Settlement account',
settlementFrequencyLabel: 'Settlement frequency',
},
},
},
},
expensifyCard: {
title: 'Expensify Card',
Expand Down
19 changes: 19 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4694,6 +4694,25 @@ ${amount} para ${merchant} - ${date}`,
subtitle: 'Usa Expensify Travel para obtener las mejores ofertas de viaje y gestionar todos tus gastos de empresa en un solo lugar.',
ctaText: 'Reservar o gestionar',
},
travelInvoicing: {
travelBookingSection: {
title: 'Reserva de viajes',
subtitle: '¡Felicidades! Todo está listo para reservar y gestionar viajes en este espacio de trabajo.',
manageTravelLabel: 'Gestionar viajes',
},
centralInvoicingSection: {
title: 'Facturación centralizada',
subtitle: 'Centraliza todos los gastos de viaje en una factura mensual en lugar de pagar en el momento de la compra.',
learnHow: 'Aprende cómo.',
subsections: {
currentTravelSpendLabel: 'Gasto actual en viajes',
currentTravelSpendCta: 'Pagar saldo',
currentTravelLimitLabel: 'Límite actual de viajes',
settlementAccountLabel: 'Cuenta de liquidación',
settlementFrequencyLabel: 'Frecuencia de liquidación',
},
},
},
},
expensifyCard: {
title: 'Tarjeta Expensify',
Expand Down
19 changes: 19 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5046,6 +5046,25 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST.
subtitle: 'Utilisez Expensify Travel pour obtenir les meilleures offres de voyage et gérez toutes vos dépenses professionnelles en un seul endroit.',
ctaText: 'Réserver ou gérer',
},
travelInvoicing: {
travelBookingSection: {
title: 'Réservation de voyage',
subtitle: 'Félicitations ! Vous êtes prêt à réserver et gérer les déplacements sur cet espace de travail.',
manageTravelLabel: 'Gérer les déplacements',
},
centralInvoicingSection: {
title: 'Facturation centralisée',
subtitle: 'Centralisez toutes les dépenses de voyage dans une facture mensuelle plutôt que de payer au moment de l’achat.',
learnHow: 'Découvrez comment.',
subsections: {
currentTravelSpendLabel: 'Dépenses de voyage actuelles',
currentTravelSpendCta: 'Payer le solde',
currentTravelLimitLabel: 'Limite de déplacement actuelle',
settlementAccountLabel: 'Compte de règlement',
settlementFrequencyLabel: 'Fréquence de règlement',
},
},
},
},
expensifyCard: {
title: 'Carte Expensify',
Expand Down
Loading
Loading