diff --git a/src/languages/de.ts b/src/languages/de.ts index 34306beb7861..8d55fadd1c37 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -1935,14 +1935,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `${requiredDepositCurrency}-Bankkonto` : 'Bankkonto'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Warten darauf, dass Sie ein Bankkonto hinzufügen.`; + return `Warten darauf, dass Sie ein ${account} hinzufügen.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Warten darauf, dass ${actor} ein Bankkonto hinzufügt.`; + return `Warten darauf, dass ${actor} ein ${account} hinzufügt.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Warten Sie darauf, dass ein Admin ein Bankkonto hinzufügt.`; + return `Warten Sie darauf, dass ein Admin ein ${account} hinzufügt.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/el.ts b/src/languages/el.ts index e134e25db620..f4b1b1ce3c74 100644 --- a/src/languages/el.ts +++ b/src/languages/el.ts @@ -1986,14 +1986,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `τραπεζικό λογαριασμό σε ${requiredDepositCurrency}` : 'τραπεζικό λογαριασμό'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Αναμένουμε από εσάς να προσθέσετε έναν τραπεζικό λογαριασμό.`; + return `Αναμένουμε από εσάς να προσθέσετε έναν ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Αναμονή για να προσθέσει ο/η ${actor} έναν τραπεζικό λογαριασμό.`; + return `Αναμονή για να προσθέσει ο/η ${actor} έναν ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Αναμονή για να προσθέσει ένας διαχειριστής έναν τραπεζικό λογαριασμό.`; + return `Αναμονή για να προσθέσει ένας διαχειριστής έναν ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/en.ts b/src/languages/en.ts index 121fc986e4df..4b30bd18b7b4 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -2005,16 +2005,18 @@ const translations = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `${requiredDepositCurrency} bank account` : 'bank account'; // Disabling the default-case lint rule here is actually safer as this forces us to make the switch cases exhaustive // eslint-disable-next-line default-case switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Waiting for you to add a bank account.`; + return `Waiting for you to add a ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Waiting for ${actor} to add a bank account.`; + return `Waiting for ${actor} to add a ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Waiting for an admin to add a bank account.`; + return `Waiting for an admin to add a ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/es.ts b/src/languages/es.ts index 371c6b46fbb4..3a697fb5bdd5 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1865,14 +1865,15 @@ const translations: TranslationDeepObject = { } }, [CONST.NEXT_STEP.MESSAGE_KEY.NO_FURTHER_ACTION]: (_actor, _actorType, _eta, _etaType) => `¡No se requiere ninguna acción adicional!`, - [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (actor, actorType, _eta, _etaType) => { + [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT]: (actor, actorType, _eta, _etaType, requiredDepositCurrency) => { + const account = requiredDepositCurrency ? `cuenta bancaria en ${requiredDepositCurrency}` : 'cuenta bancaria'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Esperando a que añadas una cuenta bancaria.`; + return `Esperando a que añadas una ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Esperando a que ${actor} añada una cuenta bancaria.`; + return `Esperando a que ${actor} añada una ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Esperando a que un administrador añada una cuenta bancaria.`; + return `Esperando a que un administrador añada una ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: (actor, actorType, eta, etaType) => { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 5a0fffe8ae51..aeb357acf426 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -1940,14 +1940,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `compte bancaire en ${requiredDepositCurrency}` : 'compte bancaire'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `En attente que vous ajoutiez un compte bancaire.`; + return `En attente que vous ajoutiez un ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `En attente que ${actor} ajoute un compte bancaire.`; + return `En attente que ${actor} ajoute un ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `En attente qu’un administrateur ajoute un compte bancaire.`; + return `En attente qu’un administrateur ajoute un ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/it.ts b/src/languages/it.ts index f076c6de4aca..45d2107ec192 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -1931,14 +1931,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `conto bancario in ${requiredDepositCurrency}` : 'conto bancario'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `In attesa che tu aggiunga un conto bancario.`; + return `In attesa che tu aggiunga un ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `In attesa che ${actor} aggiunga un conto bancario.`; + return `In attesa che ${actor} aggiunga un ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `In attesa che un amministratore aggiunga un conto bancario.`; + return `In attesa che un amministratore aggiunga un ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 55780501a9a5..49efb6d30a35 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -1911,14 +1911,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `${requiredDepositCurrency} 銀行口座` : '銀行口座'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `銀行口座の追加をお待ちしています。`; + return `${account}の追加をお待ちしています。`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `${actor} が銀行口座を追加するのを待っています。`; + return `${actor} が${account}を追加するのを待っています。`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `管理者が銀行口座を追加するのを待っています。`; + return `管理者が${account}を追加するのを待っています。`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/nl.ts b/src/languages/nl.ts index e7e2d31525a2..a5664e401d8d 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -1927,14 +1927,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `${requiredDepositCurrency} bankrekening` : 'bankrekening'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Er wordt gewacht tot jij een bankrekening toevoegt.`; + return `Er wordt gewacht tot jij een ${account} toevoegt.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Wachten tot ${actor} een bankrekening toevoegt.`; + return `Wachten tot ${actor} een ${account} toevoegt.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Wachten tot een beheerder een bankrekening toevoegt.`; + return `Wachten tot een beheerder een ${account} toevoegt.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 788e4181ba42..e9209d316ca5 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -1924,14 +1924,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `konto bankowe w ${requiredDepositCurrency}` : 'konto bankowe'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Czekamy, aż dodasz konto bankowe.`; + return `Czekamy, aż dodasz ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Oczekiwanie, aż ${actor} doda konto bankowe.`; + return `Oczekiwanie, aż ${actor} doda ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Oczekiwanie na dodanie konta bankowego przez administratora.`; + return `Oczekiwanie na dodanie ${account} przez administratora.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index e73d30e85de0..d975295c8ca8 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -1921,14 +1921,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `conta bancária em ${requiredDepositCurrency}` : 'conta bancária'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `Esperando você adicionar uma conta bancária.`; + return `Esperando você adicionar uma ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `Aguardando ${actor} adicionar uma conta bancária.`; + return `Aguardando ${actor} adicionar uma ${account}.`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `Aguardando um administrador adicionar uma conta bancária.`; + return `Aguardando um administrador adicionar uma ${account}.`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 465271bac353..610cc23c01c9 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -1858,14 +1858,16 @@ const translations: TranslationDeepObject = { actorType: ValueOf, _eta?: string, _etaType?: ValueOf, + requiredDepositCurrency?: string, ) => { + const account = requiredDepositCurrency ? `${requiredDepositCurrency} 银行账户` : '银行账户'; switch (actorType) { case CONST.NEXT_STEP.ACTOR_TYPE.CURRENT_USER: - return `正在等待添加银行账户。`; + return `正在等待添加${account}。`; case CONST.NEXT_STEP.ACTOR_TYPE.OTHER_USER: - return `正在等待 ${actor} 添加银行账户。`; + return `正在等待 ${actor} 添加${account}。`; case CONST.NEXT_STEP.ACTOR_TYPE.UNSPECIFIED_ADMIN: - return `正在等待管理员添加银行账户。`; + return `正在等待管理员添加${account}。`; } }, [CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_AUTOMATIC_SUBMIT]: ( diff --git a/src/libs/DebugUtils.ts b/src/libs/DebugUtils.ts index 5d715ffccfec..003c1faa889b 100644 --- a/src/libs/DebugUtils.ts +++ b/src/libs/DebugUtils.ts @@ -565,6 +565,7 @@ function validateReportDraftProperty(key: keyof Report | keyof ReportNameValuePa actorAccountID: 'number', eta: 'object', iconFill: 'string', + requiredDepositCurrency: 'string', }); case 'tripData': return validateObject>(value, { diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index 3970d11b2fee..0d182f1fc403 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -84,7 +84,12 @@ function buildNextStepMessage( etaType = CONST.NEXT_STEP.ETA_TYPE.DATE_TIME; } - return `${translate(`nextStep.message.${nextStep.messageKey}`, actor, actorType, eta, etaType)}`; + const requiredDepositCurrency = nextStep.requiredDepositCurrency ? Str.htmlEncode(nextStep.requiredDepositCurrency) : undefined; + const message = + nextStep.messageKey === CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT + ? translate('nextStep.message.waitingForSubmitterAccount', actor, actorType, eta, etaType, requiredDepositCurrency) + : translate(`nextStep.message.${nextStep.messageKey}`, actor, actorType, eta, etaType); + return `${message}`; } function doesReportContainTransactions(report: OnyxEntry): boolean { diff --git a/src/types/onyx/Report.ts b/src/types/onyx/Report.ts index 65949a422984..a7ae5e202968 100644 --- a/src/types/onyx/Report.ts +++ b/src/types/onyx/Report.ts @@ -83,6 +83,9 @@ type ReportNextStep = { /** The fill color of the icon */ iconFill?: string; + + /** Currency the submitter's deposit account must use for direct reimbursement, named in the waitingForSubmitterAccount copy */ + requiredDepositCurrency?: string; }; /** Model of report data */ diff --git a/tests/unit/NextStepUtilsTest.ts b/tests/unit/NextStepUtilsTest.ts index 50f121ad024b..472abbb7ce8c 100644 --- a/tests/unit/NextStepUtilsTest.ts +++ b/tests/unit/NextStepUtilsTest.ts @@ -1079,6 +1079,31 @@ describe('libs/NextStepUtils', () => { expect(message).toBe('Waiting for HiddenMarker to submit expenses.'); }); + it.each([ + {requiredDepositCurrency: CONST.CURRENCY.USD, expectedAccount: 'USD bank account'}, + {requiredDepositCurrency: 'USD', expectedAccount: '<strong>USD</strong> bank account'}, + {requiredDepositCurrency: undefined, expectedAccount: 'bank account'}, + ])('renders the required deposit currency when it is available', ({requiredDepositCurrency, expectedAccount}) => { + const currentUserAccountID = 780071; + const nextStep: ReportNextStep = { + messageKey: CONST.NEXT_STEP.MESSAGE_KEY.WAITING_FOR_SUBMITTER_ACCOUNT, + icon: CONST.NEXT_STEP.ICONS.HOURGLASS, + actorAccountID: currentUserAccountID, + requiredDepositCurrency, + }; + const translateWithDepositCurrency: LocalizedTranslate = (path, ...parameters) => { + if (path === 'nextStep.message.waitingForSubmitterAccount') { + const currency = parameters.at(4); + const account = typeof currency === 'string' ? `${currency} bank account` : 'bank account'; + return `Waiting for you to add a ${account}.`; + } + return translateLocal(path, ...parameters); + }; + + const message = buildNextStepMessage(nextStep, translateWithDepositCurrency, currentUserAccountID, formatPhoneNumber); + expect(message).toBe(`Waiting for you to add a ${expectedAccount}.`); + }); + it('uses the provided phone number formatter when resolving an SMS actor login', async () => { const phoneActorAccountID = 780071; const phoneActorLogin = '18332403628@expensify.sms';