Update Subscription settings from editable push row to a read-only row with an Edit subscription button#94363
Conversation
|
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 |
|
@gijoe0295 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] |
|
@neil-marcellini Could you please trigger the translation workflow? |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 13d5e2e951
ℹ️ 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".
|
Translation workflow triggered here |
🦜 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 be2c9a0a2ae..bd8052e26f8 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -9544,6 +9544,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
changesBasedOn: 'Dies ändert sich basierend auf Ihrer Nutzung der Expensify Karte und den untenstehenden Abooptionen.',
collectBillingDescription: 'Collect-Arbeitsbereiche werden monatlich pro Mitglied ohne jährliche Verpflichtung abgerechnet.',
pricing: 'Preise',
+ editSubscription: 'Abonnement bearbeiten',
},
cancelSubscription: {
title: 'Abonnement kündigen',
@@ -9805,7 +9806,6 @@ Hier ist ein *Testbeleg*, um dir zu zeigen, wie es funktioniert:`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 012c02f4bf4..28107f672b0 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -9702,6 +9702,7 @@ ${amount} para ${merchant} - ${date}`,
changesBasedOn: 'Esto varía según el uso de tu Tarjeta Expensify y las opciones de suscripción que elijas a continuación.',
collectBillingDescription: 'Los espacios de trabajo del plan Collect se facturan mensualmente por miembro, sin compromiso anual.',
pricing: 'Precios',
+ editSubscription: 'Editar suscripción',
},
cancelSubscription: {
title: 'Cancelar suscripción',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index cbdc9f55ca8..dbc99c90788 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -9576,6 +9576,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
changesBasedOn: 'Cela varie en fonction de votre utilisation de la Carte Expensify et des options d’abonnement ci-dessous.',
collectBillingDescription: 'Les espaces de travail Collect sont facturés mensuellement par membre, sans engagement annuel.',
pricing: 'Tarification',
+ editSubscription: 'Modifier l’abonnement',
},
cancelSubscription: {
title: "Annuler l'abonnement",
@@ -9837,7 +9838,6 @@ Voici un *reçu test* pour vous montrer comment ça fonctionne :`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index ebbd890a4b4..7b6da735196 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -9532,6 +9532,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
changesBasedOn: "Questo cambia in base all'utilizzo della tua Carta Expensify e alle opzioni di abbonamento qui sotto.",
collectBillingDescription: 'Gli spazi di lavoro Collect vengono fatturati mensilmente per membro, senza impegno annuale.',
pricing: 'Prezzi',
+ editSubscription: 'Modifica abbonamento',
},
cancelSubscription: {
title: 'Annulla abbonamento',
@@ -9793,7 +9794,6 @@ Ecco una *ricevuta di prova* per mostrarti come funziona:`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 3cba63502f2..03a5cadbe32 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -9408,6 +9408,7 @@ ${reportName}`,
changesBasedOn: 'これは、お客様の Expensify カードの利用状況と、以下のサブスクリプションオプションによって変わります。',
collectBillingDescription: 'Collect ワークスペースは、年間契約なしで、メンバーごとに毎月課金されます。',
pricing: '料金',
+ editSubscription: 'サブスクリプションを編集',
},
cancelSubscription: {
title: 'サブスクリプションをキャンセル',
@@ -9668,7 +9669,6 @@ ${reportName}`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 3e649c6539c..6e4805b513c 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -9497,6 +9497,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
changesBasedOn: 'Dit verandert op basis van je gebruik van de Expensify Kaart en de abonnementsopties hieronder.',
collectBillingDescription: 'Collect-werkruimtes worden maandelijks per lid gefactureerd, zonder jaarlijkse verplichting.',
pricing: 'Prijzen',
+ editSubscription: 'Abonnement bewerken',
},
cancelSubscription: {
title: 'Abonnement opzeggen',
@@ -9759,7 +9760,6 @@ Hier is een *proefbon* om je te laten zien hoe het werkt:`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 72ad3e4109b..9e33433a0ad 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -9484,6 +9484,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
changesBasedOn: 'To się zmienia w zależności od korzystania z Karty Expensify i poniższych opcji subskrypcji.',
collectBillingDescription: 'Przestrzenie robocze Collect są rozliczane miesięcznie za każdego członka, bez rocznego zobowiązania.',
pricing: 'Cennik',
+ editSubscription: 'Edytuj subskrypcję',
},
cancelSubscription: {
title: 'Anuluj subskrypcję',
@@ -9744,7 +9745,6 @@ Oto *paragon testowy*, żeby pokazać Ci, jak to działa:`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 009a634bbdc..fa2779722cd 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -9487,6 +9487,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
changesBasedOn: 'Isso muda de acordo com o uso do seu Cartão Expensify e as opções de assinatura abaixo.',
collectBillingDescription: 'Os espaços de trabalho Collect são cobrados mensalmente por membro, sem compromisso anual.',
pricing: 'Preços',
+ editSubscription: 'Editar assinatura',
},
cancelSubscription: {
title: 'Cancelar assinatura',
@@ -9748,7 +9749,6 @@ Aqui está um *comprovante de teste* para mostrar como funciona:`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 09b9c92e8a9..6c00b0801a2 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -9228,6 +9228,7 @@ ${reportName}`,
changesBasedOn: '这会根据你使用 Expensify 卡的情况以及下方的订阅选项而变化。',
collectBillingDescription: 'Collect 工作区按每位成员每月计费,无需年度承诺。',
pricing: '定价',
+ editSubscription: '编辑订阅',
},
cancelSubscription: {
title: '取消订阅',
@@ -9485,7 +9486,6 @@ ${reportName}`,
pdfFailedBody: 'Your file could not be generated. Try again, or reach out to Concierge for help.',
readyPartialBody: ({count, total}: {count: number; total: number}) =>
`${count} of ${total} reports exported. If it didn't automatically download, use the button below. See which reports failed in <concierge-link>Concierge</concierge-link>.`,
-
close: 'Close',
},
domain: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
@lorretheboy |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-06-26.at.00.25.13.movAndroid: mWeb ChromeScreen.Recording.2026-06-26.at.00.19.05.moviOS: HybridAppScreen.Recording.2026-06-26.at.00.27.05.moviOS: mWeb SafariScreen.Recording.2026-06-26.at.00.21.48.movMacOS: Chrome / SafariScreen.Recording.2026-06-26.at.00.16.58.mov |
|
@gijoe0295 I applied the translations & updated test steps |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@lorretheboy Can you merge main to fix the typescript check? |
neil-marcellini
left a comment
There was a problem hiding this comment.
Looks great but yes we need to fix TS
JmillsExpensify
left a comment
There was a problem hiding this comment.
LGTM. Let's get this merged.
|
@neil-marcellini we are all good to merge now |
|
@neil-marcellini let's merge into main. |
|
@neil-marcellini Friendly bump |
|
Based on Neil's previous comment, I'm going to merge and keep this moving. |
|
🚧 JmillsExpensify has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/JmillsExpensify in version: 9.4.29-0 🚀
|
Help site review — docs update required ✅This PR changed the Subscription settings entry on Account > Subscription from a single clickable/push row into a read-only summary row + an One help article had a navigation step that routed through clicking into "Subscription settings," which is no longer clickable:
Draft help site PR: #95526 What was updated
The tax exempt row label was also corrected to match the live UI ( I reviewed the other subscription help article ( Note: I applied the @lorretheboy, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to staging by https://github.com/JmillsExpensify in version: 9.4.31-0 🚀
|
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.31-0 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
Fixed Issues
$ #93168
PROPOSAL: #93168 (comment)
Tests
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)Avatar, 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.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
44.mov
Android: mWeb Chrome
Screen.Recording.2026-06-23.at.16.43.33.mov
iOS: Native
33.mov
iOS: mWeb Safari
22.mov
MacOS: Chrome / Safari
1.mov