Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
04b0984
Add API types and parameters for expensify code
samranahm Jan 18, 2026
7cb8d7c
Add Onyx keys and form types for subscription expensify code
samranahm Jan 18, 2026
244e7a7
Add navigation routes and screens
samranahm Jan 18, 2026
52b487c
Update navigation config
samranahm Jan 18, 2026
95f1ac4
Add applyExpensifyCode function
samranahm Jan 18, 2026
64522f1
Update subscription settings to include Expensify code option
samranahm Jan 18, 2026
29d804a
feat: add ExpensifyCodePage
samranahm Jan 18, 2026
6b9f1d1
Add translations in all locals
samranahm Jan 18, 2026
f71cfca
Merge remote-tracking branch 'upstream/main' into 79087/feat-discount…
samranahm Feb 4, 2026
241d95c
change API command to SET_PROMO_CODE
samranahm Feb 4, 2026
135ebb9
replace ApplyExpensifyCodeParams with SetPromoCodeParams and update r…
samranahm Feb 4, 2026
c424621
Improve access control and update Expensify code handling
samranahm Feb 4, 2026
3ce5a81
Add unit tests for ExpensifyCodePage functionality
samranahm Feb 4, 2026
5075bc4
fix failing checks
samranahm Feb 4, 2026
988ee88
Merge remote-tracking branch 'upstream/main' into 79087/feat-discount…
samranahm Feb 4, 2026
58f2826
lint
samranahm Feb 4, 2026
5a01d6e
Clear invalid code error on mount if it already exists
samranahm Feb 5, 2026
e2e1534
feat: display not found page on native devices
samranahm Feb 5, 2026
5ea835c
Use web implementation for ExpensifyCodePage test
samranahm Feb 5, 2026
a31fbd7
Merge remote-tracking branch 'upstream/main' into 79087/feat-discount…
samranahm Feb 5, 2026
2506457
fix failing checks
samranahm Feb 5, 2026
6e0cd25
Merge remote-tracking branch 'upstream/main' into 79087/feat-discount…
samranahm Feb 12, 2026
044deb4
Update expensify code route in SETTINGS_TO_RHP and adjust path in ROUTES
samranahm Feb 12, 2026
08c804e
Add isSecretPromoCode handling in frontend
samranahm Feb 12, 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
3 changes: 3 additions & 0 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -942,6 +942,8 @@ const ONYXKEYS = {
NEW_CHAT_NAME_FORM_DRAFT: 'newChatNameFormDraft',
SUBSCRIPTION_SIZE_FORM: 'subscriptionSizeForm',
SUBSCRIPTION_SIZE_FORM_DRAFT: 'subscriptionSizeFormDraft',
SUBSCRIPTION_EXPENSIFY_CODE_FORM: 'subscriptionExpensifyCodeForm',
SUBSCRIPTION_EXPENSIFY_CODE_FORM_DRAFT: 'subscriptionExpensifyCodeFormDraft',
ISSUE_NEW_EXPENSIFY_CARD_FORM: 'issueNewExpensifyCard',
ISSUE_NEW_EXPENSIFY_CARD_FORM_DRAFT: 'issueNewExpensifyCardDraft',
ADD_NEW_CARD_FEED_FORM: 'addNewCardFeed',
Expand Down Expand Up @@ -1106,6 +1108,7 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.WORKSPACE_TIME_TRACKING_DEFAULT_RATE_FORM]: FormTypes.WorkspaceTimeTrackingDefaultRateForm;
[ONYXKEYS.FORMS.NEW_CHAT_NAME_FORM]: FormTypes.NewChatNameForm;
[ONYXKEYS.FORMS.SUBSCRIPTION_SIZE_FORM]: FormTypes.SubscriptionSizeForm;
[ONYXKEYS.FORMS.SUBSCRIPTION_EXPENSIFY_CODE_FORM]: FormTypes.SubscriptionExpensifyCodeForm;
[ONYXKEYS.FORMS.ISSUE_NEW_EXPENSIFY_CARD_FORM]: FormTypes.IssueNewExpensifyCardForm;
[ONYXKEYS.FORMS.ADD_NEW_CARD_FEED_FORM]: FormTypes.AddNewCardFeedForm;
[ONYXKEYS.FORMS.ASSIGN_CARD_FORM]: FormTypes.AssignCardForm;
Expand Down
1 change: 1 addition & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ const ROUTES = {
getRoute: (canChangeSize: 0 | 1) => `settings/subscription/subscription-size?canChangeSize=${canChangeSize as number}` as const,
},
SETTINGS_SUBSCRIPTION_SETTINGS_DETAILS: 'settings/subscription/details',
SETTINGS_SUBSCRIPTION_EXPENSIFY_CODE: 'settings/subscription/details/expensify-code',
SETTINGS_SUBSCRIPTION_ADD_PAYMENT_CARD: 'settings/subscription/add-payment-card',
SETTINGS_SUBSCRIPTION_CHANGE_BILLING_CURRENCY: 'settings/subscription/change-billing-currency',
SETTINGS_SUBSCRIPTION_CHANGE_PAYMENT_CURRENCY: 'settings/subscription/add-payment-card/change-payment-currency',
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ const SCREENS = {
SUBSCRIPTION: {
ROOT: 'Settings_Subscription',
SIZE: 'Settings_Subscription_Size',
EXPENSIFY_CODE: 'Settings_Subscription_ExpensifyCode',
SETTINGS_DETAILS: 'Settings_Subscription_Details',
ADD_PAYMENT_CARD: 'Settings_Subscription_Add_Payment_Card',
DISABLE_AUTO_RENEW_SURVEY: 'Settings_Subscription_DisableAutoRenewSurvey',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8058,10 +8058,19 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
security: 'Expensify ist PCI-DSS-konform, verwendet eine Verschlüsselung auf Bankniveau und setzt redundante Infrastruktur ein, um Ihre Daten zu schützen.',
learnMoreAboutSecurity: 'Erfahren Sie mehr über unsere Sicherheit.',
},
expensifyCode: {
title: 'Expensify-Code',
discountCode: 'Rabattcode',
enterCode: 'Geben Sie einen Expensify-Code ein, um ihn auf Ihr Abonnement anzuwenden.',
apply: 'Anwenden',
error: {
invalid: 'Dieser Code ist ungültig',
},
},
subscriptionSettings: {
title: 'Abonnementeinstellungen',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Abonnementstyp: ${subscriptionType}, Abonnementgröße: ${subscriptionSize}, Automatische Verlängerung: ${autoRenew}, Automatische jährliche Sitzplatzerhöhung: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Abonnementstyp: ${subscriptionType}, Abonnementgröße: ${subscriptionSize}${expensifyCode ? `, Expensify-Code: ${expensifyCode}` : ''}, Automatische Verlängerung: ${autoRenew}, Automatische jährliche Sitzplatzerhöhung: ${autoIncrease}`,
none: 'keine',
on: 'an',
off: 'aus',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7999,10 +7999,19 @@ const translations = {
security: 'Expensify is PCI-DSS compliant, uses bank-level encryption, and utilizes redundant infrastructure to protect your data.',
learnMoreAboutSecurity: 'Learn more about our security.',
},
expensifyCode: {
title: 'Expensify code',
discountCode: 'Discount code',
enterCode: 'Enter an Expensify code to apply to your subscription.',
apply: 'Apply',
error: {
invalid: 'This code is invalid',
},
},
subscriptionSettings: {
title: 'Subscription settings',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Subscription type: ${subscriptionType}, Subscription size: ${subscriptionSize}, Auto renew: ${autoRenew}, Auto increase annual seats: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Subscription type: ${subscriptionType}, Subscription size: ${subscriptionSize}${expensifyCode ? `, Expensify code: ${expensifyCode}` : ''}, Auto renew: ${autoRenew}, Auto increase annual seats: ${autoIncrease}`,
none: 'none',
on: 'on',
off: 'off',
Expand Down
22 changes: 19 additions & 3 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,14 @@ import CONST from '@src/CONST';
import type {OriginalMessageSettlementAccountLocked, PolicyRulesModifiedFields} from '@src/types/onyx/OriginalMessage';
import ObjectUtils from '@src/types/utils/ObjectUtils';
import type en from './en';
import type {CreatedReportForUnapprovedTransactionsParams, PaidElsewhereParams, SplitDateRangeParams, UpdatedPolicyTagParams, ViolationsRterParams} from './params';
import type {
CreatedReportForUnapprovedTransactionsParams,
PaidElsewhereParams,
SplitDateRangeParams,
SubscriptionSettingsSummaryParams,
UpdatedPolicyTagParams,
ViolationsRterParams,
} from './params';
import type {TranslationDeepObject} from './types';

/* eslint-disable max-len */
Expand Down Expand Up @@ -8200,10 +8207,19 @@ ${amount} para ${merchant} - ${date}`,
security: 'Expensify es PCI-DSS obediente, utiliza cifrado a nivel bancario, y emplea infraestructura redundante para proteger tus datos.',
learnMoreAboutSecurity: 'Obtén más información sobre nuestra seguridad.',
},
expensifyCode: {
title: 'Código Expensify',
discountCode: 'Código de descuento',
enterCode: 'Introduce un código Expensify para aplicarlo a tu suscripción.',
apply: 'Aplicar',
error: {
invalid: 'Este código no es válido',
},
},
subscriptionSettings: {
title: 'Configuración de suscripción',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}) =>
`Tipo de suscripción: ${subscriptionType}, Tamaño de suscripción: ${subscriptionSize}, Renovación automática: ${autoRenew}, Aumento automático de asientos anuales: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Tipo de suscripción: ${subscriptionType}, Tamaño de suscripción: ${subscriptionSize}${expensifyCode ? `, Código Expensify: ${expensifyCode}` : ''}, Renovación automática: ${autoRenew}, Aumento automático de asientos anuales: ${autoIncrease}`,
none: 'ninguno',
on: 'activado',
off: 'desactivado',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8077,10 +8077,19 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
security: 'Expensify est conforme à la norme PCI-DSS, utilise un chiffrement de niveau bancaire et une infrastructure redondante pour protéger vos données.',
learnMoreAboutSecurity: 'En savoir plus sur notre sécurité.',
},
expensifyCode: {
title: 'Code Expensify',
discountCode: 'Code de réduction',
enterCode: 'Saisissez un code Expensify à appliquer à votre abonnement.',
apply: 'Appliquer',
error: {
invalid: "Ce code n'est pas valide",
},
},
subscriptionSettings: {
title: 'Paramètres d’abonnement',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Type d’abonnement : ${subscriptionType}, Taille de l’abonnement : ${subscriptionSize}, Renouvellement automatique : ${autoRenew}, Augmentation automatique des licences annuelles : ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Type d’abonnement : ${subscriptionType}, Taille de l’abonnement : ${subscriptionSize}${expensifyCode ? `, Code Expensify : ${expensifyCode}` : ''}, Renouvellement automatique : ${autoRenew}, Augmentation automatique des licences annuelles : ${autoIncrease}`,
none: 'aucun',
on: 'activé',
off: 'désactivé',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8043,10 +8043,19 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
security: 'Expensify è conforme allo standard PCI-DSS, utilizza la crittografia a livello bancario e si avvale di un’infrastruttura ridondante per proteggere i tuoi dati.',
learnMoreAboutSecurity: 'Scopri di più sulla nostra sicurezza.',
},
expensifyCode: {
title: 'Codice Expensify',
discountCode: 'Codice sconto',
enterCode: 'Inserisci un codice Expensify da applicare al tuo abbonamento.',
apply: 'Applica',
error: {
invalid: 'Questo codice non è valido',
},
},
subscriptionSettings: {
title: 'Impostazioni abbonamento',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Tipo di abbonamento: ${subscriptionType}, Dimensione abbonamento: ${subscriptionSize}, Rinnovo automatico: ${autoRenew}, Aumento automatico dei posti annuali: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Tipo di abbonamento: ${subscriptionType}, Dimensione abbonamento: ${subscriptionSize}${expensifyCode ? `, Codice Expensify: ${expensifyCode}` : ''}, Rinnovo automatico: ${autoRenew}, Aumento automatico dei posti annuali: ${autoIncrease}`,
none: 'nessuno',
on: 'attivo',
off: 'disattivato',
Expand Down
17 changes: 13 additions & 4 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7963,13 +7963,22 @@ ${reportName}
paymentCard: {
addPaymentCard: '支払カードを追加',
enterPaymentCardDetails: '支払いカードの詳細を入力してください',
security: 'Expensify は PCI-DSS に準拠し、銀行レベルの暗号化を使用し、冗長化されたインフラストラクチャでお客様のデータを保護しています。',
learnMoreAboutSecurity: 'セキュリティの詳細をご覧ください。',
security: 'Expensify は PCI-DSS に準拠し、銀行レベルの暗号化を使用し、お客様のデータを保護するために冗長化されたインフラストラクチャを活用しています。',
learnMoreAboutSecurity: '当社のセキュリティについて詳しく見る',
},
expensifyCode: {
title: 'Expensifyコード',
discountCode: '割引コード',
enterCode: 'サブスクリプションに適用するExpensifyコードを入力してください。',
apply: '適用',
error: {
invalid: 'このコードは無効です',
},
},
subscriptionSettings: {
title: 'サブスクリプション設定',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`サブスクリプションタイプ: ${subscriptionType}、サブスクリプション規模: ${subscriptionSize}、自動更新: ${autoRenew}、年間席数の自動増加: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`サブスクリプションタイプ: ${subscriptionType}、サブスクリプション規模: ${subscriptionSize}${expensifyCode ? `、Expensifyコード: ${expensifyCode}` : ''}、自動更新: ${autoRenew}、年間席数の自動増加: ${autoIncrease}`,
none: 'なし',
on: 'オン',
off: 'オフ',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8026,10 +8026,19 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
security: 'Expensify is PCI-DSS-conform, gebruikt encryptie op bankniveau en maakt gebruik van redundante infrastructuur om je gegevens te beschermen.',
learnMoreAboutSecurity: 'Meer informatie over onze beveiliging.',
},
expensifyCode: {
title: 'Expensify-code',
discountCode: 'Kortingscode',
enterCode: 'Voer een Expensify-code in om toe te passen op je abonnement.',
apply: 'Toepassen',
error: {
invalid: 'Deze code is ongeldig',
},
},
subscriptionSettings: {
title: 'Abonnementsinstellingen',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Abonnementstype: ${subscriptionType}, Abonnementsomvang: ${subscriptionSize}, Automatisch verlengen: ${autoRenew}, Automatisch jaarlijkse seats verhogen: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Abonnementstype: ${subscriptionType}, Abonnementsomvang: ${subscriptionSize}${expensifyCode ? `, Expensify-code: ${expensifyCode}` : ''}, Automatisch verlengen: ${autoRenew}, Automatisch jaarlijkse seats verhogen: ${autoIncrease}`,
none: 'geen',
on: 'aan',
off: 'uit',
Expand Down
2 changes: 1 addition & 1 deletion src/languages/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ type SubscriptionCommitmentParams = {size: number; date: string};

type SubscriptionSettingsSaveUpToParams = {amountWithCurrency: string};

type SubscriptionSettingsSummaryParams = {subscriptionType: string; subscriptionSize: string; autoRenew: string; autoIncrease: string};
type SubscriptionSettingsSummaryParams = {subscriptionType: string; subscriptionSize: string; expensifyCode: string; autoRenew: string; autoIncrease: string};

type SubscriptionSettingsRenewsOnParams = {date: string};

Expand Down
17 changes: 13 additions & 4 deletions src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8005,13 +8005,22 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i
paymentCard: {
addPaymentCard: 'Dodaj kartę płatniczą',
enterPaymentCardDetails: 'Wprowadź dane swojej karty płatniczej',
security: 'Expensify jest zgodny ze standardem PCI-DSS, używa szyfrowania na poziomie bankowym i wykorzystuje redundantną infrastrukturę, aby chronić Twoje dane.',
learnMoreAboutSecurity: 'Dowiedz się więcej o naszym zabezpieczeniu.',
security: 'Expensify jest zgodny z PCI-DSS, używa szyfrowania na poziomie bankowym i wykorzystuje redundantną infrastrukturę, aby chronić Twoje dane.',
learnMoreAboutSecurity: 'Dowiedz się więcej o naszych zabezpieczeniach.',
},
expensifyCode: {
title: 'Kod Expensify',
discountCode: 'Kod rabatowy',
enterCode: 'Wprowadź kod Expensify, aby zastosować go do swojej subskrypcji.',
apply: 'Zastosuj',
error: {
invalid: 'Ten kod jest nieprawidłowy',
},
},
subscriptionSettings: {
title: 'Ustawienia subskrypcji',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Typ subskrypcji: ${subscriptionType}, Rozmiar subskrypcji: ${subscriptionSize}, Automatyczne odnawianie: ${autoRenew}, Automatyczne zwiększanie rocznych miejsc: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Typ subskrypcji: ${subscriptionType}, Rozmiar subskrypcji: ${subscriptionSize}${expensifyCode ? `, Kod Expensify: ${expensifyCode}` : ''}, Automatyczne odnawianie: ${autoRenew}, Automatyczne zwiększanie rocznych miejsc: ${autoIncrease}`,
none: 'brak',
on: 'włączony',
off: 'wyłączone',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8011,10 +8011,19 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e
security: 'O Expensify é compatível com PCI-DSS, usa criptografia em nível bancário e utiliza infraestrutura redundante para proteger seus dados.',
learnMoreAboutSecurity: 'Saiba mais sobre nossa segurança.',
},
expensifyCode: {
title: 'Código Expensify',
discountCode: 'Código de desconto',
enterCode: 'Insira um código Expensify para aplicar à sua assinatura.',
apply: 'Aplicar',
error: {
invalid: 'Este código é inválido',
},
},
subscriptionSettings: {
title: 'Configurações de assinatura',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Tipo de assinatura: ${subscriptionType}, Tamanho da assinatura: ${subscriptionSize}, Renovação automática: ${autoRenew}, Aumento automático de assentos anuais: ${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`Tipo de assinatura: ${subscriptionType}, Tamanho da assinatura: ${subscriptionSize}${expensifyCode ? `, Código Expensify: ${expensifyCode}` : ''}, Renovação automática: ${autoRenew}, Aumento automático de assentos anuais: ${autoIncrease}`,
none: 'nenhum',
on: 'ativado',
off: 'desligado',
Expand Down
13 changes: 11 additions & 2 deletions src/languages/zh-hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7848,10 +7848,19 @@ ${reportName}
security: 'Expensify 符合 PCI-DSS 标准,使用银行级加密,并采用冗余基础设施来保护您的数据。',
learnMoreAboutSecurity: '详细了解我们的安全措施。',
},
expensifyCode: {
title: 'Expensify代码',
discountCode: '折扣代码',
enterCode: '输入Expensify代码以应用于您的订阅。',
apply: '应用',
error: {
invalid: '此代码无效',
},
},
subscriptionSettings: {
title: '订阅设置',
summary: ({subscriptionType, subscriptionSize, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`订阅类型:${subscriptionType},订阅规模:${subscriptionSize},自动续订:${autoRenew},年度席位自动增加:${autoIncrease}`,
summary: ({subscriptionType, subscriptionSize, expensifyCode, autoRenew, autoIncrease}: SubscriptionSettingsSummaryParams) =>
`订阅类型:${subscriptionType},订阅规模:${subscriptionSize}${expensifyCode ? `,Expensify代码:${expensifyCode}` : ''},自动续订:${autoRenew},年度席位自动增加:${autoIncrease}`,
none: '无',
on: '开在',
off: '关关闭',
Expand Down
4 changes: 4 additions & 0 deletions src/libs/API/parameters/SetPromoCodeParams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type SetPromoCodeParams = {
expensifyCode: string;
};
export default SetPromoCodeParams;
Loading
Loading