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 |
|
@ChavdaSachin 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] |
|
@ChavdaSachin Please ignore this PR |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e6bc0f58ff
ℹ️ 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".
e6bc0f5 to
4ad284c
Compare
|
@chuckdries @JakubKorytko @dariusz-biela Please only review one last commit because I checked out from the reveal-pin branch |
JakubKorytko
left a comment
There was a problem hiding this comment.
Some comments, otherwise LGTM
|
@codex review |
|
@MelvinBot Please review the PR |
|
🚧 @joekaufmanexpensify has triggered a test Expensify/App build. You can view the workflow run here. |
🔍 PR ReviewOverall the architecture is solid — using 1. Bug: Swapped title labels in
|
| # | Severity | Issue |
|---|---|---|
| 1 | High | Title labels swapped in ChangePinPage.tsx |
| 2 | Medium | Stale JSDoc + redundant callback branches in ChangePin.tsx |
| 3 | Low | Export ordering in Expensicons.ts |
| 4 | Low | Trailing space in translation string |
| 5 | Info | Non-English translations need generation |
Items 1 and 2 should be fixed before merge. The rest are minor/informational.
This comment has been minimized.
This comment has been minimized.
🦜 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 fdb745a7..03b3bca8 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -750,10 +750,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Überprüfung fehlgeschlagen',
setPin: {didNotShipCard: 'Wir haben Ihre Karte nicht versendet. Bitte versuchen Sie es erneut.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'Wir konnten Ihre PIN nicht anzeigen. Bitte versuchen Sie es erneut.'},
+ changePin: {authenticationCanceled: 'Wir haben Ihre PIN nicht geändert. Bitte versuchen Sie es erneut.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2372,22 +2370,22 @@ ${amount} für ${merchant} – ${date}`,
},
setYourPin: 'Legen Sie Ihre PIN fest.',
confirmYourPin: 'Bestätigen Sie Ihre PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Geben Sie eine neue PIN für Ihre Karte ein.',
+ confirmYourChangedPin: 'Bestätigen Sie Ihre neue PIN.',
pinMustBeFourDigits: 'Die PIN muss genau 4 Ziffern lang sein.',
invalidPin: 'Bitte wählen Sie eine sicherere PIN.',
pinMismatch: 'PINs stimmen nicht überein. Bitte versuchen Sie es erneut.',
revealPin: 'PIN anzeigen',
hidePin: 'PIN ausblenden',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'PIN ändern',
+ pinChanged: 'PIN geändert!',
+ pinChangedHeader: 'PIN geändert',
+ pinChangedDescription: 'Sie können Ihre PIN jetzt verwenden.',
+ changePinAtATM: 'Ändern Sie Ihre PIN an jedem Geldautomaten',
+ changePinAtATMDescription: 'Dies ist in Ihrer Region erforderlich.',
+ changePinAtATMConciergeLink: 'Kontaktieren Sie Concierge',
+ changePinAtATMSuffix: 'falls Sie Fragen haben.',
freezeCard: 'Karte sperren',
unfreeze: 'Entsperren',
unfreezeCard: 'Karte entsperren',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index c70342d8..1eae5b2a 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -753,10 +753,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Échec de la vérification',
setPin: {didNotShipCard: 'Nous n’avons pas envoyé votre carte. Veuillez réessayer.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'Nous n’avons pas pu afficher votre code PIN. Veuillez réessayer.'},
+ changePin: {authenticationCanceled: 'Nous n’avons pas modifié votre code PIN. Veuillez réessayer.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2377,22 +2375,22 @@ ${amount} pour ${merchant} - ${date}`,
},
setYourPin: 'Définir votre code PIN.',
confirmYourPin: 'Confirmez votre code PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Saisissez un nouveau code PIN pour votre carte.',
+ confirmYourChangedPin: 'Confirmez votre nouveau code PIN.',
pinMustBeFourDigits: 'Le code PIN doit comporter exactement 4 chiffres.',
invalidPin: 'Veuillez choisir un code PIN plus sécurisé.',
pinMismatch: 'Les codes PIN ne correspondent pas. Veuillez réessayer.',
revealPin: 'Afficher le code PIN',
hidePin: 'Masquer le code PIN',
pin: 'Code PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'Modifier le code PIN',
+ pinChanged: 'Code PIN modifié !',
+ pinChangedHeader: 'Code PIN modifié',
+ pinChangedDescription: 'Vous êtes maintenant prêt à utiliser votre code PIN.',
+ changePinAtATM: 'Modifiez votre code PIN à n’importe quel distributeur automatique de billets',
+ changePinAtATMDescription: 'Ceci est obligatoire dans votre région.',
+ changePinAtATMConciergeLink: 'Contacter Concierge',
+ changePinAtATMSuffix: 'si vous avez des questions.',
freezeCard: 'Geler la carte',
unfreeze: 'Dégeler',
unfreezeCard: 'Dégeler la carte',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 9eef130d..2820b662 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -751,10 +751,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Verifica non riuscita',
setPin: {didNotShipCard: 'Non abbiamo spedito la tua carta. Riprova.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'Non siamo riusciti a mostrare il tuo PIN. Riprova.'},
+ changePin: {authenticationCanceled: 'Non abbiamo modificato il tuo PIN. Riprova.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2367,22 +2365,22 @@ ${amount} per ${merchant} - ${date}`,
},
setYourPin: 'Imposta il tuo PIN.',
confirmYourPin: 'Conferma il tuo PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Inserisci un nuovo PIN per la tua carta.',
+ confirmYourChangedPin: 'Conferma il tuo nuovo PIN.',
pinMustBeFourDigits: 'Il PIN deve essere composto da esattamente 4 cifre.',
invalidPin: 'Scegli un PIN più sicuro.',
pinMismatch: 'I PIN non corrispondono. Riprova.',
revealPin: 'Mostra PIN',
hidePin: 'Nascondi PIN',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'Cambia PIN',
+ pinChanged: 'PIN cambiato!',
+ pinChangedHeader: 'PIN modificato',
+ pinChangedDescription: 'Ora sei pronto a usare il tuo PIN.',
+ changePinAtATM: 'Cambia il tuo PIN a qualsiasi bancomat',
+ changePinAtATMDescription: 'Questo è obbligatorio nella tua regione.',
+ changePinAtATMConciergeLink: 'Contatta Concierge',
+ changePinAtATMSuffix: 'se hai domande.',
freezeCard: 'Blocca carta',
unfreeze: 'Sblocca',
unfreezeCard: 'Sblocca carta',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index c0e4fd73..fd42cec3 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -748,10 +748,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: '認証に失敗しました',
setPin: {didNotShipCard: 'カードを発送できませんでした。もう一度お試しください。'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'PIN を表示できませんでした。もう一度お試しください。'},
+ changePin: {authenticationCanceled: 'お客様の暗証番号は変更されていません。もう一度お試しください。'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2349,22 +2347,22 @@ ${date} の ${merchant} への ${amount}`,
},
setYourPin: 'PIN を設定.',
confirmYourPin: 'PIN を確認してください.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'カードの新しい暗証番号を入力してください。',
+ confirmYourChangedPin: '新しい暗証番号を確認してください。',
pinMustBeFourDigits: 'PIN は 4 桁で入力してください。',
invalidPin: 'より安全な暗証番号を選択してください。',
pinMismatch: 'PIN が一致しません。もう一度お試しください。',
revealPin: 'PIN を表示',
hidePin: 'PIN を非表示',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'PIN を変更',
+ pinChanged: 'PIN を変更しました!',
+ pinChangedHeader: 'PIN を変更しました',
+ pinChangedDescription: 'これで暗証番号をすぐにご利用いただけます。',
+ changePinAtATM: 'PIN は任意の ATM で変更できます',
+ changePinAtATMDescription: 'これはお住まいの地域では必須です。',
+ changePinAtATMConciergeLink: 'Concierge に連絡する',
+ changePinAtATMSuffix: 'ご不明な点がある場合。',
freezeCard: 'カードを一時停止',
unfreeze: '再開',
unfreezeCard: 'カードの一時停止を解除',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 47c40fa4..5466867a 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -749,10 +749,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Verificatie mislukt',
setPin: {didNotShipCard: 'We hebben je kaart niet verzonden. Probeer het opnieuw.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'We konden je pincode niet tonen. Probeer het opnieuw.'},
+ changePin: {authenticationCanceled: 'We hebben je pincode niet gewijzigd. Probeer het opnieuw.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2366,22 +2364,22 @@ ${amount} voor ${merchant} - ${date}`,
},
setYourPin: 'Stel je pincode in.',
confirmYourPin: 'Bevestig je pincode.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Voer een nieuwe pincode in voor je kaart.',
+ confirmYourChangedPin: 'Bevestig je nieuwe pincode.',
pinMustBeFourDigits: 'Pincode moet precies 4 cijfers bevatten.',
invalidPin: 'Kies alsjeblieft een veiligere pincode.',
pinMismatch: 'Pincodes komen niet overeen. Probeer het opnieuw.',
revealPin: 'Pincode weergeven',
hidePin: 'Pincode verbergen',
pin: 'Pincode',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'Pincode wijzigen',
+ pinChanged: 'Pincode gewijzigd!',
+ pinChangedHeader: 'Pincode gewijzigd',
+ pinChangedDescription: 'Je bent helemaal klaar om je pincode te gebruiken.',
+ changePinAtATM: 'Wijzig je pincode bij elke geldautomaat',
+ changePinAtATMDescription: 'Dit is vereist in jouw regio.',
+ changePinAtATMConciergeLink: 'Neem contact op met Concierge',
+ changePinAtATMSuffix: 'als je vragen hebt.',
freezeCard: 'Kaart blokkeren',
unfreeze: 'Deblokkeren',
unfreezeCard: 'Kaart deblokkeren',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 533aadd0..53dc49c1 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -750,10 +750,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Weryfikacja nie powiodła się',
setPin: {didNotShipCard: 'Nie wysłaliśmy twojej karty. Spróbuj ponownie.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'Nie udało się wyświetlić twojego PIN-u. Spróbuj ponownie.'},
+ changePin: {authenticationCanceled: 'Nie zmieniliśmy twojego PIN-u. Spróbuj ponownie.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2361,22 +2359,22 @@ ${amount} dla ${merchant} - ${date}`,
},
setYourPin: 'Ustaw swój PIN.',
confirmYourPin: 'Potwierdź swój PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Wprowadź nowy PIN do swojej karty.',
+ confirmYourChangedPin: 'Potwierdź swój nowy PIN.',
pinMustBeFourDigits: 'PIN musi mieć dokładnie 4 cyfry.',
invalidPin: 'Wybierz proszę bardziej bezpieczny PIN.',
pinMismatch: 'Kody PIN nie są takie same. Spróbuj ponownie.',
revealPin: 'Pokaż PIN',
hidePin: 'Ukryj PIN',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'Zmień PIN',
+ pinChanged: 'PIN zmieniony!',
+ pinChangedHeader: 'PIN został zmieniony',
+ pinChangedDescription: 'Możesz już teraz używać swojego PIN-u.',
+ changePinAtATM: 'Zmień swój PIN w dowolnym bankomacie',
+ changePinAtATMDescription: 'To jest wymagane w twoim regionie.',
+ changePinAtATMConciergeLink: 'Skontaktuj się z Concierge',
+ changePinAtATMSuffix: 'jeśli masz jakieś pytania.',
freezeCard: 'Zamroź kartę',
unfreeze: 'Odmroź',
unfreezeCard: 'Odmroź kartę',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index b3d19320..0ad92ab8 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -748,10 +748,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: 'Falha na verificação',
setPin: {didNotShipCard: 'Não enviamos seu cartão. Tente novamente.'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: 'Não foi possível revelar seu PIN. Tente novamente.'},
+ changePin: {authenticationCanceled: 'Nós não alteramos seu PIN. Tente novamente.'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2359,22 +2357,22 @@ ${amount} para ${merchant} - ${date}`,
},
setYourPin: 'Defina seu PIN.',
confirmYourPin: 'Confirme seu PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: 'Digite um novo PIN para o seu cartão.',
+ confirmYourChangedPin: 'Confirme seu novo PIN.',
pinMustBeFourDigits: 'O PIN deve ter exatamente 4 dígitos.',
invalidPin: 'Escolha um PIN mais seguro.',
pinMismatch: 'Os PINs não coincidem. Tente novamente.',
revealPin: 'Revelar PIN',
hidePin: 'Ocultar PIN',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: 'Alterar PIN',
+ pinChanged: 'PIN alterado!',
+ pinChangedHeader: 'PIN alterado',
+ pinChangedDescription: 'Tudo pronto para você usar seu PIN agora.',
+ changePinAtATM: 'Altere seu PIN em qualquer caixa eletrônico',
+ changePinAtATMDescription: 'Isso é obrigatório na sua região.',
+ changePinAtATMConciergeLink: 'Falar com a Concierge',
+ changePinAtATMSuffix: 'se você tiver alguma dúvida.',
freezeCard: 'Bloquear cartão',
unfreeze: 'Desbloquear',
unfreezeCard: 'Desbloquear cartão',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 1c528409..4b0c0344 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -741,10 +741,8 @@ const translations: TranslationDeepObject<typeof en> = {
},
verificationFailed: '验证失败',
setPin: {didNotShipCard: '我们未能寄出您的卡。请重试。'},
- revealPin: {authenticationCanceled: "We couldn't reveal your PIN. Please try again."},
- changePin: {
- authenticationCanceled: 'We couldn’t change your PIN. Please try again.',
- },
+ revealPin: {authenticationCanceled: '我们无法显示您的 PIN。请重试。'},
+ changePin: {authenticationCanceled: '我们未更改您的 PIN。请重试。'},
},
validateCodeModal: {
successfulSignInTitle: dedent(`
@@ -2313,22 +2311,22 @@ ${amount},商户:${merchant} - 日期:${date}`,
},
setYourPin: '设置您的 PIN.',
confirmYourPin: '确认您的 PIN.',
- changeYourPin: 'Enter a new PIN for your card.',
- confirmYourChangedPin: 'Confirm your new PIN.',
+ changeYourPin: '为您的银行卡输入新 PIN 码。',
+ confirmYourChangedPin: '确认您的新 PIN。',
pinMustBeFourDigits: 'PIN 必须正好为 4 位数字。',
invalidPin: '请选择一个更安全的 PIN。',
pinMismatch: 'PIN 不匹配。请重试。',
revealPin: '显示 PIN',
hidePin: '隐藏 PIN',
pin: 'PIN',
- changePin: 'Change PIN',
- pinChanged: 'PIN changed',
- pinChangedHeader: 'PIN changed',
- pinChangedDescription: 'Your card PIN has been changed successfully.',
- changePinAtATM: 'Change your PIN at any ATM',
- changePinAtATMDescription: 'This is required in your region. ',
- changePinAtATMConciergeLink: 'Reach out to Concierge',
- changePinAtATMSuffix: ' if you have any questions.',
+ changePin: '更改 PIN',
+ pinChanged: 'PIN 已更改!',
+ pinChangedHeader: 'PIN 已更改',
+ pinChangedDescription: '现在您可以开始使用您的 PIN 了。',
+ changePinAtATM: '在任意 ATM 更改您的 PIN',
+ changePinAtATMDescription: '这是您所在地区的必填项。',
+ changePinAtATMConciergeLink: '联系 Concierge',
+ changePinAtATMSuffix: '如果你有任何问题。',
freezeCard: '冻结卡片',
unfreeze: '解冻',
unfreezeCard: '解冻卡片',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3e15e43301
ℹ️ 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".
chuckdries
left a comment
There was a problem hiding this comment.
High level question about CardPinStore, and a note about translations, but overall looking pretty solid to me! I notice the pin input is the wide version, will we get the narrower version for free by merging main?
|
@shawnborton Could you test on this adhoc build? |
|
Otherwise, I’ll update the screenshots/videos in the OP later today. |
|
I can't get adhoc builds to work on my phone right now, so I will await new recordings. |
Sure, we can do this. Sounds like Shawn may be having some issues accessing the build, but if/when anyone from the design team is able to queue up the adhoc build on mobile, let me know and I will issue you a card to test. Once you order the card, I can help you activate it remotely so you can test both these features, and then we can cancel the card before it actually ships. |
Is it just an issue with this build Shawn? If you can't access adhoc iOS builds generally, could be an issue with your device not being added. I know Vit just recently updated the list of iOS devices that can test adhoc builds. |
|
(We're all good now, I fixed it on my phone and now I can access the builds.) That being said, I don't see the Reveal PIN button - is there a beta I need or a certain card type? Again, happy to wait for updated recordings if that is easier. |
What type of card are you looking at it for and on what account? There is a beta for this, but all expensifail.com and cardtest.expensify.com accounts are on it. The button will only show up for physical UK/EU Expensify Cards that are activated. |
|
I was just looking at my own Expensify Card in my own account. |
Got it. If you want to test this on an adhoc, let me know your test account email and I can get you setup with a physical UK/EU card @shawnborton. Also totally fine if you just want to view the recordings too. Just LMK! |
|
Happy to wait for recordings, no worries! |
|
@shawnborton I updated the videos in the PR description |
|
@DylanDylann can you review my comments about the illustration being cut off, as well as making sure the bottom buttons/spacing are good? |
This looks good now |
I am checking again |
|
@DylanDylann can you merge main please? |
rafecolton
left a comment
There was a problem hiding this comment.
Tested locally and it worked well overall - including with passkey 😄 I'm a little concern that errors are not handled correctly so I tagged Dariusz for a second opinion.
src/components/MultifactorAuthentication/config/scenarios/RevealPIN.tsx
Outdated
Show resolved
Hide resolved
| /** Server failure screen generally represents "unknown error" so also show when status is unknown (e.g. network/parse error). */ | ||
| function isServerError(error: ErrorState): boolean { | ||
| return error.httpStatusCode === undefined || error.httpStatusCode >= 500; | ||
| return !!error.httpStatusCode && error.httpStatusCode >= 500; |
There was a problem hiding this comment.
👎 this is not correct. This changes the logic so that undefined local errors are treated as client client failures, when they should be treated as server errors (i.e. show humpty dumpty). Similarly, the lines you added below should not be needed either. I wonder if I was wrong above and you do need to define certain default errors as client errors. @dariusz-biela can you please advise on this one?
There was a problem hiding this comment.
@rafecolton httpStatusCode is not set if the user cancels the flow themselves, and I think we should show the client error screen in this case.
There was a problem hiding this comment.
I’ve reverted the changes in this file, but I’d like to get more thoughts on the concern above
Explanation of Change
This PR implements the "Reveal PIN" feature and "Change PIN" feature for UK/EU Expensify Card holders
Document: Release 2 of UK/EU PIN Management
Fixed Issues
$ #80553
PROPOSAL:
Tests
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand 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
Reveal PIN
Screen.Recording.2026-03-17.at.01.34.40.mov
Screen.Recording.2026-03-17.at.01.34.54.mov
Change PIN
Screen.Recording.2026-03-17.at.01.51.51.mov
Screen.Recording.2026-03-17.at.01.51.24.mov