From df83f043d2879ed5a144fc37f08176fae1d41800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Ferreira?= Date: Fri, 10 Jan 2025 18:24:13 +0100 Subject: [PATCH 01/20] Partial Feature: PayID into PayTo component branch (#3069) * adds PayTo component shell * payto segmented controller * add support to second description * adds email and refactor identifier to enum * adds pay input fields, starts validation * fix validator * splits PhoneInput and passes state to PayTo * tests and PR comments * fix tests --- .../Ach/components/AchInput/AchInput.tsx | 2 + .../components/MBWayInput/MBWayInput.tsx | 4 +- .../lib/src/components/PayTo/PayTo.test.ts | 72 +++++++ packages/lib/src/components/PayTo/PayTo.tsx | 135 +++++++++++++ .../components/PayTo/components/BSBInput.tsx | 17 ++ .../PayTo/components/IdentifierSelector.tsx | 81 ++++++++ .../PayTo/components/PayIDInput.scss | 10 + .../PayTo/components/PayIDInput.tsx | 190 ++++++++++++++++++ .../PayTo/components/PayToInput.tsx | 62 ++++++ .../PayTo/components/PayToPhone.tsx | 41 ++++ .../PayTo/components/validate.test.ts | 64 ++++++ .../components/PayTo/components/validate.ts | 76 +++++++ packages/lib/src/components/PayTo/index.ts | 1 + packages/lib/src/components/components-map.ts | 2 + .../lib/src/components/components-name-map.ts | 1 + .../CompanyDetails/CompanyDetails.tsx | 5 +- .../FormFields/Fieldset/Fieldset.scss | 15 +- .../internal/FormFields/Fieldset/Fieldset.tsx | 13 +- .../internal/FormFields/FormFields.scss | 29 ++- .../PersonalDetails/PersonalDetails.tsx | 3 +- .../{PhoneInput.tsx => PhoneInputFields.tsx} | 81 +++----- ...Input.test.tsx => PhoneInputForm.test.tsx} | 10 +- .../internal/PhoneInput/PhoneInputForm.tsx | 71 +++++++ .../components/internal/PhoneInput/index.ts | 2 +- .../components/internal/PhoneInput/types.ts | 2 +- .../SegmentedControl/SegmentedControl.tsx | 31 ++- packages/lib/src/components/tx-variants.ts | 1 + packages/lib/src/core/utils.ts | 11 + .../utils/Validator/ValidationRuleResult.ts | 4 +- packages/lib/src/utils/Validator/Validator.ts | 4 + packages/lib/src/utils/Validator/types.ts | 6 +- packages/lib/src/utils/useForm/types.ts | 4 +- .../stories/components/PayTo.stories.tsx | 24 +++ .../stories/internals/PhoneInput.stories.tsx | 6 +- packages/server/translations/en-US.json | 11 +- 35 files changed, 1015 insertions(+), 76 deletions(-) create mode 100644 packages/lib/src/components/PayTo/PayTo.test.ts create mode 100644 packages/lib/src/components/PayTo/PayTo.tsx create mode 100644 packages/lib/src/components/PayTo/components/BSBInput.tsx create mode 100644 packages/lib/src/components/PayTo/components/IdentifierSelector.tsx create mode 100644 packages/lib/src/components/PayTo/components/PayIDInput.scss create mode 100644 packages/lib/src/components/PayTo/components/PayIDInput.tsx create mode 100644 packages/lib/src/components/PayTo/components/PayToInput.tsx create mode 100644 packages/lib/src/components/PayTo/components/PayToPhone.tsx create mode 100644 packages/lib/src/components/PayTo/components/validate.test.ts create mode 100644 packages/lib/src/components/PayTo/components/validate.ts create mode 100644 packages/lib/src/components/PayTo/index.ts rename packages/lib/src/components/internal/PhoneInput/{PhoneInput.tsx => PhoneInputFields.tsx} (58%) rename packages/lib/src/components/internal/PhoneInput/{PhoneInput.test.tsx => PhoneInputForm.test.tsx} (90%) create mode 100644 packages/lib/src/components/internal/PhoneInput/PhoneInputForm.tsx create mode 100644 packages/lib/storybook/stories/components/PayTo.stories.tsx diff --git a/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx b/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx index 8454915d85..cdf6cfaeb3 100644 --- a/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx +++ b/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx @@ -128,6 +128,8 @@ function AchInput(props: ACHInputProps) { props.onChange({ data, isValid, storePaymentMethod }); }, [data, valid, errors, storePaymentMethod]); + console.log('ach props 2', props); + return (
diff --git a/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx b/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx index a609ec195a..7df30783fa 100644 --- a/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx +++ b/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx @@ -3,7 +3,7 @@ import { useState, useRef } from 'preact/hooks'; import { useCoreContext } from '../../../../core/Context/CoreProvider'; import { MBWayInputProps } from './types'; import './MBWayInput.scss'; -import PhoneInput from '../../../internal/PhoneInput'; +import PhoneInputForm from '../../../internal/PhoneInput'; import LoadingWrapper from '../../../internal/LoadingWrapper'; import usePhonePrefixes from '../../../internal/PhoneInput/usePhonePrefixes'; @@ -28,7 +28,7 @@ function MBWayInput(props: MBWayInputProps) { return (
- + {props.showPayButton && props.payButton({ status, label: i18n.get('confirmPurchase') })}
diff --git a/packages/lib/src/components/PayTo/PayTo.test.ts b/packages/lib/src/components/PayTo/PayTo.test.ts new file mode 100644 index 0000000000..4ab8abdc16 --- /dev/null +++ b/packages/lib/src/components/PayTo/PayTo.test.ts @@ -0,0 +1,72 @@ +import { render, screen } from '@testing-library/preact'; +import PayTo from './PayTo'; +import userEvent from '@testing-library/user-event'; +import getDataset from '../../core/Services/get-dataset'; + +jest.mock('../../core/Services/get-dataset'); +(getDataset as jest.Mock).mockImplementation( + jest.fn(() => { + return Promise.resolve([{ id: 'AUS', prefix: '+61' }]); + }) +); + +describe('PayTo', () => { + let onSubmitMock; + let user; + + beforeEach(() => { + onSubmitMock = jest.fn(); + user = userEvent.setup(); + }); + + test('should render payment and show PayID page', async () => { + const payTo = new PayTo(global.core, { + i18n: global.i18n, + loadingContext: 'test', + modules: { resources: global.resources } + }); + + render(payTo.render()); + expect(await screen.findByText(/Enter the PayID and account details that are connected to your Payto account./i)).toBeTruthy(); + expect(await screen.findByLabelText(/Prefix/i)).toBeTruthy(); + expect(await screen.findByLabelText(/Mobile number/i)).toBeTruthy(); + expect(await screen.findByLabelText(/First name/i)).toBeTruthy(); + expect(await screen.findByLabelText(/Last name/i)).toBeTruthy(); + }); + + test('should render continue button', async () => { + const payTo = new PayTo(global.core, { + onSubmit: onSubmitMock, + i18n: global.i18n, + loadingContext: 'test', + modules: { resources: global.resources } + }); + + render(payTo.render()); + const button = await screen.findByRole('button', { name: 'Confirm purchase' }); + + // check if button actually triggers submit + await user.click(button); + expect(onSubmitMock).toHaveBeenCalledTimes(0); + + //TODO check validation fails + }); + + test('should change to different identifier when selected', async () => { + const payTo = new PayTo(global.core, { + onSubmit: onSubmitMock, + i18n: global.i18n, + loadingContext: 'test', + modules: { resources: global.resources }, + showPayButton: false + }); + + render(payTo.render()); + + await user.click(screen.queryByRole('button', { name: 'Mobile' })); + await user.click(screen.queryByRole('option', { name: /Email/i })); + + expect(screen.queryByLabelText(/Prefix/i)).toBeFalsy(); + expect(screen.getByLabelText(/Email/i)).toBeTruthy(); + }); +}); diff --git a/packages/lib/src/components/PayTo/PayTo.tsx b/packages/lib/src/components/PayTo/PayTo.tsx new file mode 100644 index 0000000000..abcb11e237 --- /dev/null +++ b/packages/lib/src/components/PayTo/PayTo.tsx @@ -0,0 +1,135 @@ +import { h } from 'preact'; +import UIElement from '../internal/UIElement/UIElement'; +import { CoreProvider } from '../../core/Context/CoreProvider'; +import Await from '../../components/internal/Await'; +import SRPanelProvider from '../../core/Errors/SRPanelProvider'; + +/* +Types (previously in their own file) + */ +import { UIElementProps } from '../internal/UIElement/types'; +import { TxVariants } from '../tx-variants'; +import PayToInput from './components/PayToInput'; +import { PayIdFormData } from './components/PayIDInput'; +import { PayToIdentifierEnum } from './components/IdentifierSelector'; + +export interface PayToConfiguration extends UIElementProps { + paymentData?: any; + data?: PayToData; + placeholders?: any; //TODO +} + +export interface PayToData extends PayIdFormData { + shopperAccountIdentifier: string; +} + +/* +Await Config (previously in its own file) + */ +const COUNTDOWN_MINUTES = 15; // min +const THROTTLE_TIME = 60000; // ms +const THROTTLE_INTERVAL = 10000; // ms + +const config = { + COUNTDOWN_MINUTES, + THROTTLE_TIME, + THROTTLE_INTERVAL, + showCountdownTimer: false +}; + +const getAccountIdentifier = (state: PayToData) => { + switch (state.selectedIdentifier) { + case PayToIdentifierEnum.email: + return state.email; + case PayToIdentifierEnum.abn: + return state.abn; + case PayToIdentifierEnum.orgid: + return state.orgid; + case PayToIdentifierEnum.phone: + return `${state.phonePrefix}-${state.phoneNumber}`; + } +}; +/** + * + */ +export class PayToElement extends UIElement { + public static type = TxVariants.payto; + + protected static defaultProps = { + placeholders: {} + }; + + formatProps(props) { + return { + ...props, + data: { + ...props.data, + phonePrefix: props.data?.phonePrefix || '+61' // use AUS as default value + } + }; + } + + /** + * Formats the component data output + */ + formatData() { + return { + paymentMethod: { + type: PayToElement.type, + shopperAccountIdentifier: getAccountIdentifier(this.state.data) + } + }; + } + + get isValid(): boolean { + return !!this.state.isValid; + } + + get displayName(): string { + return this.props.name; + } + + render() { + if (this.props.paymentData) { + return ( + + + { + this.componentRef = ref; + }} + clientKey={this.props.clientKey} + paymentData={this.props.paymentData} + onError={this.props.onError} + onComplete={this.onComplete} + brandLogo={this.icon} + type={this.constructor['type']} + messageText={this.props.i18n.get('ancv.confirmPayment')} + awaitText={this.props.i18n.get('await.waitForConfirmation')} + showCountdownTimer={config.showCountdownTimer} + throttleTime={config.THROTTLE_TIME} + throttleInterval={config.THROTTLE_INTERVAL} + onActionHandled={this.onActionHandled} + /> + + + ); + } + + return ( + + + + ); + } +} + +export default PayToElement; diff --git a/packages/lib/src/components/PayTo/components/BSBInput.tsx b/packages/lib/src/components/PayTo/components/BSBInput.tsx new file mode 100644 index 0000000000..e8257a09b8 --- /dev/null +++ b/packages/lib/src/components/PayTo/components/BSBInput.tsx @@ -0,0 +1,17 @@ +import { h } from 'preact'; + +export default function BSBInput() { + // const { i18n } = useCoreContext(); + + // TODO type this + // const { handleChangeFor, triggerValidation, data, valid, errors } = useForm({ + // schema: ['beneficiaryId'] + // }); + // + // const [status, setStatus] = useState('ready'); + + // this.setStatus = setStatus; + // this.showValidation = triggerValidation; + + return

BSBInput.tsx

; +} diff --git a/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx new file mode 100644 index 0000000000..5f6e5dbde2 --- /dev/null +++ b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx @@ -0,0 +1,81 @@ +import { h } from 'preact'; +import Select from '../../internal/FormFields/Select'; +import { SelectTargetObject } from '../../internal/FormFields/Select/types'; +import Field from '../../internal/FormFields/Field'; +import { useCoreContext } from '../../../core/Context/CoreProvider'; +import Language from '../../../language'; +import { createEnumChecker } from '../../../core/utils'; + +export enum PayToIdentifierEnum { + phone = 'phone', + email = 'email', + abn = 'abn', + orgid = 'orgid' +} + +const payToIdentifierEnumCheck = createEnumChecker(PayToIdentifierEnum); + +export type PayToPayIDInputIdentifierValues = keyof typeof PayToIdentifierEnum; + +type PayIdOptionsType = { id: PayToPayIDInputIdentifierValues; nameKey: string }[]; + +export const PAYID_IDENTIFIER_OPTIONS: PayIdOptionsType = [ + { + id: PayToIdentifierEnum.phone, + nameKey: 'payto.payid.option.phone' + }, + { + id: PayToIdentifierEnum.email, + nameKey: 'payto.payid.option.email' + }, + { + id: PayToIdentifierEnum.abn, + nameKey: 'payto.payid.option.abn' + }, + { + id: PayToIdentifierEnum.orgid, + nameKey: 'payto.payid.option.orgid' + } +]; + +interface IdentifierSelectorProps { + classNameModifiers?: string[]; + selectedIdentifier: PayToPayIDInputIdentifierValues; + onSelectedIdentifier: (value: PayToPayIDInputIdentifierValues) => void; +} + +const loadI18nForOptions = (i18n: Language, options: PayIdOptionsType) => + options.map(option => ({ + id: option.id, + name: i18n.get(option.nameKey) + })); + +export default function IdentifierSelector({ selectedIdentifier, onSelectedIdentifier, classNameModifiers }: IdentifierSelectorProps) { + const { i18n } = useCoreContext(); + + const hydratedOptions = loadI18nForOptions(i18n, PAYID_IDENTIFIER_OPTIONS); + + // TODO this probably can by a bit tidier, clean up some of these types + // maybe make Select type generic + const onChange = (e: { target: SelectTargetObject }) => { + // TODO clean this + const valueStr = e.target.value + ''; + + if (payToIdentifierEnumCheck(valueStr)) { + onSelectedIdentifier(valueStr); + } + }; + + return ( + + Date: Wed, 5 Feb 2025 18:40:40 +0100 Subject: [PATCH 07/20] fix payee and fields order --- .../lib/src/components/PayTo/PayTo.test.ts | 19 +++++++++++++++++++ packages/lib/src/components/PayTo/PayTo.tsx | 4 +++- .../PayTo/components/MandateSummary.tsx | 19 +++++++++++++++++-- packages/lib/src/components/PayTo/types.ts | 1 + .../stories/components/PayTo.stories.tsx | 9 ++++++--- packages/server/translations/en-US.json | 2 ++ 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/packages/lib/src/components/PayTo/PayTo.test.ts b/packages/lib/src/components/PayTo/PayTo.test.ts index d5ad2ad50b..1d9d8c2e20 100644 --- a/packages/lib/src/components/PayTo/PayTo.test.ts +++ b/packages/lib/src/components/PayTo/PayTo.test.ts @@ -244,5 +244,24 @@ describe('PayTo', () => { // eslint-disable-next-line testing-library/no-node-access expect(mandateFrequency.nextSibling).toHaveTextContent('Ad Hoc'); }); + + test('should render await screen and show the correct payee', async () => { + const payTo = new PayTo(global.core, { + ...global.commonCoreProps, + amount: { + value: '2000', + currency: 'AUD' + }, + mandate: { ...MOCK_MANDATE, count: null, frequency: 'daily' }, + paymentData: 'mockblob', + payee: 'Mock Payee' + }); + + render(payTo.render()); + + const mandateFrequency = await screen.findByText('Frequency'); + // eslint-disable-next-line testing-library/no-node-access + expect(mandateFrequency.nextSibling).toHaveTextContent('Ad Hoc'); + }); }); }); diff --git a/packages/lib/src/components/PayTo/PayTo.tsx b/packages/lib/src/components/PayTo/PayTo.tsx index cb4b0e5591..a3f1d4c8e8 100644 --- a/packages/lib/src/components/PayTo/PayTo.tsx +++ b/packages/lib/src/components/PayTo/PayTo.tsx @@ -116,7 +116,9 @@ export class PayToElement extends UIElement { throttleTime={config.THROTTLE_TIME} throttleInterval={config.THROTTLE_INTERVAL} onActionHandled={this.onActionHandled} - endSlot={() => } + endSlot={() => ( + + )} /> diff --git a/packages/lib/src/components/PayTo/components/MandateSummary.tsx b/packages/lib/src/components/PayTo/components/MandateSummary.tsx index 9c50b4190c..b7278dc3e3 100644 --- a/packages/lib/src/components/PayTo/components/MandateSummary.tsx +++ b/packages/lib/src/components/PayTo/components/MandateSummary.tsx @@ -5,9 +5,18 @@ import { useCoreContext } from '../../../core/Context/CoreProvider'; import { DetailsTableData } from '../../internal/DetailsTable/DetailsTable'; import './MandateSummary.scss'; -export default function MandateSummary({ mandate, currencyCode }: { mandate: MandateType; currencyCode: string }) { +export interface MandateSummaryProps { + mandate: MandateType; + currencyCode: string; + payee?: string; +} + +// this is the order the fields are going to be displayed in the UI +const orderedMandateTableFields = ['payee', 'remarks', 'amount', 'frequency', 'startsAt', 'endsAt']; + +export default function MandateSummary({ mandate, currencyCode, payee }: MandateSummaryProps) { const { i18n } = useCoreContext(); - const tableFields: DetailsTableData = Object.keys(mandate).map((key: keyof MandateType) => { + const tableFields: DetailsTableData = orderedMandateTableFields.map((key: keyof MandateType | 'payee') => { // get the label for the key, like payto.mandate.amount.label, payto.mandate.frequency.label const labelText = i18n.get(`payto.mandate.${key}.label`); const amountValue = Number(mandate.amount); @@ -59,6 +68,12 @@ export default function MandateSummary({ mandate, currencyCode }: { mandate: Man label: labelText, value: i18n.date(mandate.endsAt) }; + + case 'payee': + return { + label: labelText, + value: payee + }; } }); diff --git a/packages/lib/src/components/PayTo/types.ts b/packages/lib/src/components/PayTo/types.ts index 7cd77633bf..2454067957 100644 --- a/packages/lib/src/components/PayTo/types.ts +++ b/packages/lib/src/components/PayTo/types.ts @@ -20,6 +20,7 @@ export interface PayToConfiguration extends UIElementProps { data?: PayToData; placeholders?: any; //TODO mandate: MandateType; + payee?: string; } export interface PayToData extends PayIdFormData, BSBFormData, PayToComponentData { diff --git a/packages/lib/storybook/stories/components/PayTo.stories.tsx b/packages/lib/storybook/stories/components/PayTo.stories.tsx index 3155b2aa5c..4320769c39 100644 --- a/packages/lib/storybook/stories/components/PayTo.stories.tsx +++ b/packages/lib/storybook/stories/components/PayTo.stories.tsx @@ -9,11 +9,12 @@ import { MandateType, PayToConfiguration } from '../../../src/components/PayTo/t // extend the default story args so we can change mandate top level interface ExtendedStoryArgs extends PaymentMethodStoryProps { mandate: MandateType; + payee: string; } type PayToStory = StoryObj; const MANDATE_EXAMPLE: MandateType = { - amount: '25900', // [Mandatory] for PayTo - Mandate Amount field + amount: '100000', // [Mandatory] for PayTo - Mandate Amount field amountRule: 'exact', // [Mandatory] for PayTo - Needs to be Localised endsAt: '2025-12-31', // [Mandatory] for PayTo - Date format frequency: 'monthly', // [Mandatory] for PayTo - Needs to be Localised @@ -104,7 +105,8 @@ export const PayToAwaitScreen: PayToStory = { args: { countryCode: 'AU', shopperLocale: 'en-US', - mandate: MANDATE_EXAMPLE + mandate: MANDATE_EXAMPLE, + payee: 'Cool Merchant Ltd' }, parameters: { msw: { @@ -119,7 +121,7 @@ export const PayToAwaitScreen: PayToStory = { ] } }, - render: ({ componentConfiguration, mandate, ...checkoutConfig }) => ( + render: ({ componentConfiguration, mandate, payee, ...checkoutConfig }) => ( {checkout => ( +
diff --git a/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx index 5f6e5dbde2..fcddffda3b 100644 --- a/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx +++ b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx @@ -30,7 +30,7 @@ export const PAYID_IDENTIFIER_OPTIONS: PayIdOptionsType = [ }, { id: PayToIdentifierEnum.abn, - nameKey: 'payto.payid.option.abn' + nameKey: 'ABN' }, { id: PayToIdentifierEnum.orgid, diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.scss b/packages/lib/src/components/PayTo/components/PayIDInput.scss index 4fc2bd9c00..e3c6f32857 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.scss +++ b/packages/lib/src/components/PayTo/components/PayIDInput.scss @@ -9,4 +9,8 @@ gap: 0 token(spacer-060); } } + + .adyen-checkout-field--phone-prefix { + width: 98px; + } } diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.tsx b/packages/lib/src/components/PayTo/components/PayIDInput.tsx index 61fb7898cc..951246f423 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.tsx +++ b/packages/lib/src/components/PayTo/components/PayIDInput.tsx @@ -79,9 +79,9 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, }, [setComponentRef]); return ( -
+
@@ -93,7 +93,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, {data.selectedIdentifier === PayToIdentifierEnum.email && ( )} - {props.showPayButton && props.payButton({ status, label: i18n.get('confirmPurchase') })} + {props.showPayButton && props.payButton({ status, label: i18n.get('continue') })}
); diff --git a/packages/server/translations/en-US.json b/packages/server/translations/en-US.json index 8a41069f37..a0dd10e089 100644 --- a/packages/server/translations/en-US.json +++ b/packages/server/translations/en-US.json @@ -325,26 +325,22 @@ "paynow.mobileViewInstruction.step3": "Select the option to scan a QR code.", "paynow.mobileViewInstruction.step4": "Choose the option to upload a QR and select the screenshot.", "paynow.mobileViewInstruction.step5": "Complete the transaction.", - "payto.payid.header": "PayID", "payto.payid.description": "Enter the PayID and account details that are connected to your Payto account.", "payto.payid.label.identifier": "Identifier", - "payto.payid.label.abn": "ABN", "payto.payid.label.orgid": "Organization ID", "payto.payid.option.phone": "Mobile", "payto.payid.option.email": "Email", - "payto.payid.option.abn": "ABN", "payto.payid.option.orgid": "Organization ID", "payto.bsb.header": "BSB", "payto.bsb.description" : "Enter the bank account number and the Bank State Branch that is connected to your account to continue", "payto.bsb.label.bankAccountNumber": "Bank account number", - "payto.bsb.label.bsb": "Bank State Branch", "payto.instructions.steps": "Log into your PayTo banking app@Authorize the PayTo agreement@Approve the payment terms@Complete the transaction", "payto.confirmPayment": "Thank you for your purchase, complete your payment by following the instructions below.", "payto.mandate.amount.label": "Amount", "payto.mandate.frequency.label": "Frequency", "payto.mandate.remarks.label": "Description", - "payto.mandate.startsAt.label": "Start Date", - "payto.mandate.endsAt.label": "Ends Date", + "payto.mandate.startsAt.label": "First payment date", + "payto.mandate.endsAt.label": "End date", "payto.mandate.payee.label": "Payee", "payto.mandate.amount.max": "Up to %{amount} per transaction", "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", @@ -355,6 +351,8 @@ "payto.mandate.frequency.monthly": "%{count} payment(s) Monthly", "payto.mandate.frequency.quarterly": "%{count} payment(s) Quarterly", "payto.mandate.frequency.halfYearly": "%{count} payment(s) Bi-Annual", - "payto.mandate.frequency.yearly": "%{count} payment(s) Yearly" - + "payto.mandate.frequency.yearly": "%{count} payment(s) Yearly", + "payto.label.firstName": "Account holder first name", + "payto.label.lastName": "Account holder last name", + "payto.await.waitForConfirmation": "Awaiting your approval" } \ No newline at end of file From 4b57426f47fefa79a2d44d380c0e448c997b63ad Mon Sep 17 00:00:00 2001 From: antoniof Date: Wed, 12 Feb 2025 23:54:45 +0100 Subject: [PATCH 09/20] fix mbway and remove dupe code --- packages/lib/src/components/MBWay/MBWay.tsx | 1 + .../components/MBWayInput/MBWayInput.tsx | 10 ++- .../MBWay/components/MBWayInput/types.ts | 3 +- .../components/PayTo/components/BSBInput.tsx | 39 +---------- .../PayTo/components/PayIDInput.tsx | 44 +------------ .../PayTo/components/PayToNameFields.tsx | 65 +++++++++++++++++++ .../internal/PhoneInput/PhoneInputForm.tsx | 11 +++- .../components/internal/PhoneInput/types.ts | 2 + 8 files changed, 92 insertions(+), 83 deletions(-) create mode 100644 packages/lib/src/components/PayTo/components/PayToNameFields.tsx diff --git a/packages/lib/src/components/MBWay/MBWay.tsx b/packages/lib/src/components/MBWay/MBWay.tsx index 3575aeea5a..cad60dcb21 100644 --- a/packages/lib/src/components/MBWay/MBWay.tsx +++ b/packages/lib/src/components/MBWay/MBWay.tsx @@ -83,6 +83,7 @@ export class MBWayElement extends UIElement { this.componentRef = ref; }} {...this.props} + setComponentRef={this.setComponentRef} onChange={this.setState} onSubmit={this.submit} payButton={this.payButton} diff --git a/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx b/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx index 7df30783fa..3b96ff97e2 100644 --- a/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx +++ b/packages/lib/src/components/MBWay/components/MBWayInput/MBWayInput.tsx @@ -17,7 +17,6 @@ function MBWayInput(props: MBWayInputProps) { const [status, setStatus] = useState('ready'); this.setStatus = setStatus; - this.showValidation = phoneInputRef?.current?.triggerValidation; const { loadingStatus: prefixLoadingStatus, phonePrefixes } = usePhonePrefixes({ allowedCountries, loadingContext, handleError: props.onError }); @@ -28,7 +27,14 @@ function MBWayInput(props: MBWayInputProps) { return (
- + {props.showPayButton && props.payButton({ status, label: i18n.get('confirmPurchase') })}
diff --git a/packages/lib/src/components/MBWay/components/MBWayInput/types.ts b/packages/lib/src/components/MBWay/components/MBWayInput/types.ts index 704ea04f85..7ccbbbbf9e 100644 --- a/packages/lib/src/components/MBWay/components/MBWayInput/types.ts +++ b/packages/lib/src/components/MBWay/components/MBWayInput/types.ts @@ -1,4 +1,4 @@ -import { UIElementProps } from '../../../internal/UIElement/types'; +import { ComponentMethodsRef, UIElementProps } from '../../../internal/UIElement/types'; export interface MBWayInputData { telephoneNumber?: string; @@ -13,6 +13,7 @@ export interface MBWayInputProps extends UIElementProps { allowedCountries?: string[]; requiredFields?: string[]; phoneNumberKey?: string; + setComponentRef: (ref: ComponentMethodsRef) => void; } export interface MBWayDataState { diff --git a/packages/lib/src/components/PayTo/components/BSBInput.tsx b/packages/lib/src/components/PayTo/components/BSBInput.tsx index d239c1d175..0070bec8ec 100644 --- a/packages/lib/src/components/PayTo/components/BSBInput.tsx +++ b/packages/lib/src/components/PayTo/components/BSBInput.tsx @@ -10,6 +10,7 @@ import { bsbValidationRules } from './validate'; import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; import { ComponentMethodsRef } from '../../internal/UIElement/types'; +import PayToNameFields from './PayToNameFields'; export interface BSBFormData { bsb: string; @@ -87,43 +88,7 @@ export default function BSBInput({ setComponentRef, defaultData, placeholders, o /> - - - - - - - + ); } diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.tsx b/packages/lib/src/components/PayTo/components/PayIDInput.tsx index 951246f423..3e785bea10 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.tsx +++ b/packages/lib/src/components/PayTo/components/PayIDInput.tsx @@ -13,6 +13,7 @@ import { payIdValidationRules } from './validate'; import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; import { ComponentMethodsRef } from '../../internal/UIElement/types'; +import PayToNameFields from './PayToNameFields'; export interface PayIdFormData { email: string; @@ -56,9 +57,6 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, }); const { handleChangeFor, triggerValidation, data, errors, valid, isValid, setSchema } = form; - //this.setStatus = setStatus; - this.triggerValidation = triggerValidation; - // handle the changes of identifier, each identifier gets its own schema useEffect(() => { // get the correct schema for each identifier and merge it with the base @@ -114,7 +112,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, @@ -148,43 +146,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, )} - - - - - - - + ); } diff --git a/packages/lib/src/components/PayTo/components/PayToNameFields.tsx b/packages/lib/src/components/PayTo/components/PayToNameFields.tsx new file mode 100644 index 0000000000..130af18bf7 --- /dev/null +++ b/packages/lib/src/components/PayTo/components/PayToNameFields.tsx @@ -0,0 +1,65 @@ +import { h, Fragment } from 'preact'; +import Field from '../../internal/FormFields/Field'; +import { getErrorMessage } from '../../../utils/getErrorMessage'; +import InputText from '../../internal/FormFields/InputText'; +import Language from '../../../language'; +import { HandleChangeForModeType } from '../../../utils/useForm/types'; + +export interface PayToNameFieldsProps { + i18n: Language; + errors: { + [key: string]: any; + }; + data: { + firstName: string; + lastName: string; + }; + handleChangeFor: (key: string, mode?: HandleChangeForModeType) => (e: any) => void; + placeholders: { + firstName: string; + lastName: string; + }; +} + +export default function PayToNameFields({ i18n, errors, data, handleChangeFor, placeholders }: PayToNameFieldsProps) { + return ( + + + + + + + + + ); +} diff --git a/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.tsx b/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.tsx index 9e95dda7cc..abbe4ecfbe 100644 --- a/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.tsx +++ b/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.tsx @@ -1,5 +1,5 @@ import { h } from 'preact'; -import { useEffect, useCallback } from 'preact/hooks'; +import { useEffect, useCallback, useRef } from 'preact/hooks'; import useForm from '../../../utils/useForm'; import { useCoreContext } from '../../../core/Context/CoreProvider'; import './PhoneInput.scss'; @@ -7,6 +7,7 @@ import { phoneFormatters, phoneValidationRules } from './validate'; import { PhoneInputFormProps, PhoneInputSchema } from './types'; import Fieldset from '../FormFields/Fieldset'; import PhoneInputFields from './PhoneInputFields'; +import { ComponentMethodsRef } from '../UIElement/types'; /** * @@ -39,7 +40,13 @@ function PhoneInputForm(props: PhoneInputFormProps) { props.onChange({ data, valid, errors, isValid }); }, [data, valid, errors, isValid]); - this.showValidation = triggerValidation; + const componentRef = useRef({ + showValidation: triggerValidation + }); + + useEffect(() => { + props.setComponentRef(componentRef.current); + }, [props.setComponentRef]); // This is here for MBWay, prob should be moved up // MBWay has a weird way of loading its error messages diff --git a/packages/lib/src/components/internal/PhoneInput/types.ts b/packages/lib/src/components/internal/PhoneInput/types.ts index 57ed4ff2cd..9617cbeb86 100644 --- a/packages/lib/src/components/internal/PhoneInput/types.ts +++ b/packages/lib/src/components/internal/PhoneInput/types.ts @@ -1,4 +1,5 @@ import { DataSet, DataSetItem } from '../../../core/Services/data-set'; +import { ComponentMethodsRef } from '../UIElement/types'; export interface PhoneInputSchema { phoneNumber?: string; @@ -15,6 +16,7 @@ export interface PhoneInputFormProps { phoneNumberErrorKey?: string; placeholders?: PhoneInputSchema; ref?; + setComponentRef: (ref: ComponentMethodsRef) => void; } export interface PhonePrefixes { From 1284df9b59b4539ba162e3397266fc0a873b8487 Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 00:33:54 +0100 Subject: [PATCH 10/20] code review fixes --- .../Ach/components/AchInput/AchInput.tsx | 2 - .../lib/src/components/PayTo/PayTo.test.ts | 8 ++- packages/lib/src/components/PayTo/PayTo.tsx | 10 +--- .../components/PayTo/components/BSBInput.tsx | 3 +- .../PayTo/components/IdentifierSelector.tsx | 3 -- .../PayTo/components/MandateSummary.tsx | 1 - .../PayTo/components/PayIDInput.tsx | 7 ++- packages/lib/src/components/PayTo/types.ts | 4 +- .../PhoneInput/PhoneInputForm.test.tsx | 1 + .../stories/components/PayTo.stories.tsx | 54 +------------------ 10 files changed, 18 insertions(+), 75 deletions(-) diff --git a/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx b/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx index cdf6cfaeb3..8454915d85 100644 --- a/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx +++ b/packages/lib/src/components/Ach/components/AchInput/AchInput.tsx @@ -128,8 +128,6 @@ function AchInput(props: ACHInputProps) { props.onChange({ data, isValid, storePaymentMethod }); }, [data, valid, errors, storePaymentMethod]); - console.log('ach props 2', props); - return (
diff --git a/packages/lib/src/components/PayTo/PayTo.test.ts b/packages/lib/src/components/PayTo/PayTo.test.ts index 1d9d8c2e20..2c9ec92e46 100644 --- a/packages/lib/src/components/PayTo/PayTo.test.ts +++ b/packages/lib/src/components/PayTo/PayTo.test.ts @@ -58,11 +58,15 @@ describe('PayTo', () => { }); render(payTo.render()); - const button = await screen.findByRole('button', { name: 'Confirm purchase' }); + const button = await screen.findByRole('button', { name: 'Continue' }); - // check if button actually triggers submit + // should not trigger the submit and render validation await user.click(button); expect(onSubmitMock).toHaveBeenCalledTimes(0); + + expect(await screen.findByText('Invalid mobile number')).toBeTruthy(); + expect(await screen.findByText('Enter your first name')).toBeTruthy(); + expect(await screen.findByText('Enter your last name')).toBeTruthy(); }); test('should change to different identifier when selected', async () => { diff --git a/packages/lib/src/components/PayTo/PayTo.tsx b/packages/lib/src/components/PayTo/PayTo.tsx index 710ec71103..0617ffca4a 100644 --- a/packages/lib/src/components/PayTo/PayTo.tsx +++ b/packages/lib/src/components/PayTo/PayTo.tsx @@ -3,10 +3,6 @@ import UIElement from '../internal/UIElement/UIElement'; import { CoreProvider } from '../../core/Context/CoreProvider'; import Await from '../../components/internal/Await'; import SRPanelProvider from '../../core/Errors/SRPanelProvider'; - -/* -Types (previously in their own file) - */ import { TxVariants } from '../tx-variants'; import { PayToIdentifierEnum } from './components/IdentifierSelector'; import PayToComponent from './components/PayToComponent'; @@ -62,7 +58,7 @@ export class PayToElement extends UIElement { ...props, data: { ...props.data, - phonePrefix: props.data?.phonePrefix || '+61' // use AUS as default value + phonePrefix: '+61' // hardcode +61 } }; } @@ -88,10 +84,6 @@ export class PayToElement extends UIElement { return !!this.state.isValid; } - get displayName(): string { - return this.props.name; - } - render() { if (this.props.paymentData) { return ( diff --git a/packages/lib/src/components/PayTo/components/BSBInput.tsx b/packages/lib/src/components/PayTo/components/BSBInput.tsx index 0070bec8ec..a3345d925d 100644 --- a/packages/lib/src/components/PayTo/components/BSBInput.tsx +++ b/packages/lib/src/components/PayTo/components/BSBInput.tsx @@ -11,6 +11,7 @@ import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; import { ComponentMethodsRef } from '../../internal/UIElement/types'; import PayToNameFields from './PayToNameFields'; +import { PayToPlaceholdersType } from '../types'; export interface BSBFormData { bsb: string; @@ -21,7 +22,7 @@ export interface BSBFormData { export interface BSBInputProps { defaultData: BSBFormData; - placeholders: any; //TODO + placeholders: PayToPlaceholdersType; onChange: (e) => void; setComponentRef: (ref: ComponentMethodsRef) => void; } diff --git a/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx index fcddffda3b..efa14192fa 100644 --- a/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx +++ b/packages/lib/src/components/PayTo/components/IdentifierSelector.tsx @@ -55,10 +55,7 @@ export default function IdentifierSelector({ selectedIdentifier, onSelectedIdent const hydratedOptions = loadI18nForOptions(i18n, PAYID_IDENTIFIER_OPTIONS); - // TODO this probably can by a bit tidier, clean up some of these types - // maybe make Select type generic const onChange = (e: { target: SelectTargetObject }) => { - // TODO clean this const valueStr = e.target.value + ''; if (payToIdentifierEnumCheck(valueStr)) { diff --git a/packages/lib/src/components/PayTo/components/MandateSummary.tsx b/packages/lib/src/components/PayTo/components/MandateSummary.tsx index b7278dc3e3..f4774628a0 100644 --- a/packages/lib/src/components/PayTo/components/MandateSummary.tsx +++ b/packages/lib/src/components/PayTo/components/MandateSummary.tsx @@ -51,7 +51,6 @@ export default function MandateSummary({ mandate, currencyCode, payee }: Mandate }; } } - // TODO test this for XSS case 'remarks': return { label: labelText, diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.tsx b/packages/lib/src/components/PayTo/components/PayIDInput.tsx index 3e785bea10..f901b56c52 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.tsx +++ b/packages/lib/src/components/PayTo/components/PayIDInput.tsx @@ -14,6 +14,7 @@ import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; import { ComponentMethodsRef } from '../../internal/UIElement/types'; import PayToNameFields from './PayToNameFields'; +import { PayToPlaceholdersType } from '../types'; export interface PayIdFormData { email: string; @@ -29,7 +30,7 @@ export interface PayIdFormData { export interface PayIDInputProps { defaultData: PayIdFormData; - placeholders: any; //TODO + placeholders: PayToPlaceholdersType; onError: () => {}; onChange: (e) => void; setComponentRef: (ref: ComponentMethodsRef) => void; @@ -44,8 +45,6 @@ const IDENTIFIER_SCHEMA = { [PayToIdentifierEnum.orgid]: ['orgid'] }; -export interface KlarnaComponentRef extends ComponentMethodsRef {} - export default function PayIDInput({ setComponentRef, defaultData, placeholders, onError, onChange }: PayIDInputProps) { const { i18n } = useCoreContext(); @@ -102,7 +101,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, value={data.email} onInput={handleChangeFor('email', 'input')} onBlur={handleChangeFor('email', 'blur')} - placeholder={placeholders?.shopperEmail} + placeholder={placeholders?.email} required={true} /> diff --git a/packages/lib/src/components/PayTo/types.ts b/packages/lib/src/components/PayTo/types.ts index 2454067957..2780e0783f 100644 --- a/packages/lib/src/components/PayTo/types.ts +++ b/packages/lib/src/components/PayTo/types.ts @@ -15,10 +15,12 @@ export interface MandateType { count?: string; } +export type PayToPlaceholdersType = { [K in keyof PayToData]: string }; + export interface PayToConfiguration extends UIElementProps { paymentData?: any; data?: PayToData; - placeholders?: any; //TODO + placeholders?: PayToPlaceholdersType; mandate: MandateType; payee?: string; } diff --git a/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.test.tsx b/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.test.tsx index e1a695ea26..0884f19a86 100644 --- a/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.test.tsx +++ b/packages/lib/src/components/internal/PhoneInput/PhoneInputForm.test.tsx @@ -9,6 +9,7 @@ const items = [{ id: '+44', name: 'United Kingdom', code: 'GB', selectedOptionNa describe('PhoneInput', () => { const defaultProps: PhoneInputFormProps = { + setComponentRef: () => {}, items, data: { phonePrefix: items[0].id }, onChange: jest.fn(), diff --git a/packages/lib/storybook/stories/components/PayTo.stories.tsx b/packages/lib/storybook/stories/components/PayTo.stories.tsx index 4320769c39..87e70e6472 100644 --- a/packages/lib/storybook/stories/components/PayTo.stories.tsx +++ b/packages/lib/storybook/stories/components/PayTo.stories.tsx @@ -27,35 +27,6 @@ const meta: Meta> = { title: 'Components/PayTo' }; -// const payToPaymentObject = { -// amount: { -// currency: 'AUD', // [Mandatory] only supported value: "AUD" -// value: 4200 // [Mandatory] { int: 1 to 1000000000 } -// }, -// paymentMethod: { -// type: 'payto', // [Mandatory] -// shopperAccountIdentifier: '123456-98765432' // [Mandatory] -// }, -// countryCode: 'AU', // [Mandatory] -// merchantAccount: 'YOUR_MERCHANT_ACCOUNT', // [Mandatory] -// reference: 'YOUR_ORDER_NUMBER', // [Mandatory] -// mandate: { -// amount: '42000', // [Mandatory] { int: 1 to 1000000000 } -// amountRule: 'exact', // [Mandatory] -// frequency: 'monthly', // [Mandatory] need to update docs to add "adhoc" -// startsAt: '2024-10-01', // [Optional] -// endsAt: '2027-10-01', // [Mandatory] -// remarks: 'Remark on mandate', // [Mandatory] -// count: '1' // [Conditional] new field -// }, -// shopperName: { firstName: 'John', lastName: 'Doe' }, // [Mandatory] -// shopperEmail: 's.hopper@example.com', // [Mandatory] -// storePaymentMethod: true, // [Mandatory] -// shopperInteraction: 'Ecommerce', // [Mandatory] -// recurringProcessingModel: 'Subscription', // [Mandatory] -// shopperReference: 'YOUR_SHOPPER_REFERENCE' // [Mandatory] -// }; - export const Default: PayToStory = { render: ({ componentConfiguration, mandate, ...checkoutConfig }) => ( @@ -77,29 +48,6 @@ export const Default: PayToStory = { mandate: MANDATE_EXAMPLE } }; -export default meta; - -// const paymentResponse = { -// resultCode: 'Pending', -// action: { -// paymentData: 'Ab02b4c0....J86s=', -// paymentMethodType: 'payto', -// expiresAt: '2024-11-13T00:01:37Z', -// mandate: { -// amount: '4001', // [Mandatory] for PayTo - Mandate Amount field -// amountRule: 'exact', // [Mandatory] for PayTo - Needs to be Localised -// endsAt: '2024-12-31', // [Mandatory] for PayTo - Date format -// frequency: 'adhoc', // [Mandatory] for PayTo - Needs to be Localised -// remarks: 'testThroughFlow1', // [Mandatory] for PayTo - Needs to be Localised as "Description" -// count: '3', // [Optional] will be returned only if the merchant sends it -// startsAt: '2024-11-13' // [Optional] will be returned only if the merchant sends it -// }, -// name: 'John Smitty', // Echo back the field passed in the request -// shopperAccountIdentifier: 'test_again@test.com', // Echo back the field passed in the request -// payee: '[MERCHANT_NAME]', // Merchant name displayed in the agreement -// type: 'await' -// } -// }; export const PayToAwaitScreen: PayToStory = { args: { @@ -138,3 +86,5 @@ export const PayToAwaitScreen: PayToStory = { ) }; + +export default meta; From cbd7c36139222dc768b777a56127f04cf635cc0c Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 12:31:50 +0100 Subject: [PATCH 11/20] fix status --- .../lib/src/components/PayTo/components/BSBInput.tsx | 7 +++++-- .../lib/src/components/PayTo/components/PayIDInput.tsx | 7 +++++-- .../src/components/PayTo/components/PayToComponent.tsx | 9 ++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/lib/src/components/PayTo/components/BSBInput.tsx b/packages/lib/src/components/PayTo/components/BSBInput.tsx index a3345d925d..5bfd5fa021 100644 --- a/packages/lib/src/components/PayTo/components/BSBInput.tsx +++ b/packages/lib/src/components/PayTo/components/BSBInput.tsx @@ -9,7 +9,7 @@ import InputText from '../../internal/FormFields/InputText'; import { bsbValidationRules } from './validate'; import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; -import { ComponentMethodsRef } from '../../internal/UIElement/types'; +import { ComponentMethodsRef, UIElementStatus } from '../../internal/UIElement/types'; import PayToNameFields from './PayToNameFields'; import { PayToPlaceholdersType } from '../types'; @@ -21,6 +21,8 @@ export interface BSBFormData { } export interface BSBInputProps { + status: UIElementStatus; + setStatus: (status: UIElementStatus) => void; defaultData: BSBFormData; placeholders: PayToPlaceholdersType; onChange: (e) => void; @@ -29,7 +31,7 @@ export interface BSBInputProps { const BASE_SCHEMA = ['bankAccountNumber', 'bsb', 'firstName', 'lastName']; -export default function BSBInput({ setComponentRef, defaultData, placeholders, onChange }: BSBInputProps) { +export default function BSBInput({ setComponentRef, defaultData, placeholders, onChange, setStatus }: BSBInputProps) { const { i18n } = useCoreContext(); const form = useForm({ @@ -46,6 +48,7 @@ export default function BSBInput({ setComponentRef, defaultData, placeholders, o }, [data, valid, errors, isValid]); const payToRef = useRef({ + setStatus: setStatus, showValidation: triggerValidation }); diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.tsx b/packages/lib/src/components/PayTo/components/PayIDInput.tsx index f901b56c52..ed3b97f622 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.tsx +++ b/packages/lib/src/components/PayTo/components/PayIDInput.tsx @@ -12,7 +12,7 @@ import InputText from '../../internal/FormFields/InputText'; import { payIdValidationRules } from './validate'; import './PayIDInput.scss'; import { phoneFormatters } from '../../internal/PhoneInput/validate'; -import { ComponentMethodsRef } from '../../internal/UIElement/types'; +import { ComponentMethodsRef, UIElementStatus } from '../../internal/UIElement/types'; import PayToNameFields from './PayToNameFields'; import { PayToPlaceholdersType } from '../types'; @@ -29,6 +29,8 @@ export interface PayIdFormData { } export interface PayIDInputProps { + status: UIElementStatus; + setStatus: (status: UIElementStatus) => void; defaultData: PayIdFormData; placeholders: PayToPlaceholdersType; onError: () => {}; @@ -45,7 +47,7 @@ const IDENTIFIER_SCHEMA = { [PayToIdentifierEnum.orgid]: ['orgid'] }; -export default function PayIDInput({ setComponentRef, defaultData, placeholders, onError, onChange }: PayIDInputProps) { +export default function PayIDInput({ setComponentRef, defaultData, placeholders, onError, onChange, setStatus }: PayIDInputProps) { const { i18n } = useCoreContext(); const form = useForm({ @@ -68,6 +70,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, }, [data, valid, errors, isValid]); const payToRef = useRef({ + setStatus: setStatus, showValidation: triggerValidation }); diff --git a/packages/lib/src/components/PayTo/components/PayToComponent.tsx b/packages/lib/src/components/PayTo/components/PayToComponent.tsx index c174349ff2..44f0ec7b0a 100644 --- a/packages/lib/src/components/PayTo/components/PayToComponent.tsx +++ b/packages/lib/src/components/PayTo/components/PayToComponent.tsx @@ -6,6 +6,7 @@ import { SegmentedControlOptions } from '../../internal/SegmentedControl/Segment import PayIDInput from './PayIDInput'; import BSBInput from './BSBInput'; import { useCoreContext } from '../../../core/Context/CoreProvider'; +import { UIElementStatus } from '../../internal/UIElement/types'; export type PayToInputOption = 'payid-option' | 'bsb-option'; @@ -35,9 +36,7 @@ const inputOptions: SegmentedControlOptions = [ export default function PayToComponent(props) { const { i18n } = useCoreContext(); - const [status, setStatus] = useState('ready'); - - this.setStatus = setStatus; + const [status, setStatus] = useState('ready'); const defaultOption = inputOptions[0].value; const [selectedInput, setSelectedInput] = useState(defaultOption); @@ -53,6 +52,8 @@ export default function PayToComponent(props) { {selectedInput === 'payid-option' && ( Date: Thu, 13 Feb 2025 12:48:35 +0100 Subject: [PATCH 12/20] fix this --- .../src/components/internal/PhoneInput/PhoneInputFields.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/lib/src/components/internal/PhoneInput/PhoneInputFields.tsx b/packages/lib/src/components/internal/PhoneInput/PhoneInputFields.tsx index 8e79a38eb8..80842e60fc 100644 --- a/packages/lib/src/components/internal/PhoneInput/PhoneInputFields.tsx +++ b/packages/lib/src/components/internal/PhoneInput/PhoneInputFields.tsx @@ -33,7 +33,7 @@ export interface PhoneInputFieldProps { export default function PhoneInputFields({ getError, showNumber, showPrefix, form, canSelectPrefix = true, ...props }: PhoneInputFieldProps) { const { i18n } = useCoreContext(); - const { handleChangeFor, data, valid, triggerValidation } = form; + const { handleChangeFor, data, valid } = form; // Force re-validation of the phoneNumber when data.phonePrefix changes (since the validation rules will also change) useEffect((): void => { @@ -42,8 +42,6 @@ export default function PhoneInputFields({ getError, showNumber, showPrefix, for } }, [data.phonePrefix]); - this.triggerValidation = triggerValidation; - return ( {showPrefix && ( From 330176384e1abe420ada3fdaabe99ac3e07ac72e Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 13:30:37 +0100 Subject: [PATCH 13/20] sonar cloud improvements --- packages/lib/src/components/PayTo/PayTo.tsx | 2 +- packages/lib/src/components/PayTo/components/PayToPhone.tsx | 1 - packages/lib/src/components/PayTo/components/validate.ts | 3 ++- packages/lib/src/components/internal/Await/Await.tsx | 2 +- .../lib/src/components/internal/DetailsTable/DetailsTable.tsx | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/lib/src/components/PayTo/PayTo.tsx b/packages/lib/src/components/PayTo/PayTo.tsx index 0617ffca4a..f237dd1c06 100644 --- a/packages/lib/src/components/PayTo/PayTo.tsx +++ b/packages/lib/src/components/PayTo/PayTo.tsx @@ -47,7 +47,7 @@ const getAccountIdentifier = (state: PayToData) => { * */ export class PayToElement extends UIElement { - public static type = TxVariants.payto; + public static readonly type = TxVariants.payto; protected static defaultProps = { placeholders: {} diff --git a/packages/lib/src/components/PayTo/components/PayToPhone.tsx b/packages/lib/src/components/PayTo/components/PayToPhone.tsx index e5decb6efc..4c0ba43890 100644 --- a/packages/lib/src/components/PayTo/components/PayToPhone.tsx +++ b/packages/lib/src/components/PayTo/components/PayToPhone.tsx @@ -9,7 +9,6 @@ import { useCallback } from 'preact/hooks'; interface PayToPhoneProps { form: Form; onChange: (value: string) => void; - onError: (error: Error) => void; data: any; // Data } diff --git a/packages/lib/src/components/PayTo/components/validate.ts b/packages/lib/src/components/PayTo/components/validate.ts index 8a73a358dc..66336ad717 100644 --- a/packages/lib/src/components/PayTo/components/validate.ts +++ b/packages/lib/src/components/PayTo/components/validate.ts @@ -13,7 +13,8 @@ const emailRegex = const phoneNumberRegex = /^[1-9]{1,1}[0-9]{1,29}$/; export const validationFromRegex = (value: string, regex: RegExp, validationRule: ValidatorRule): boolean | null => { - // TODO investigate why null is the return value for 'empty' validation + // null is returned here for legacy reasons + // check comment on hasError() ValidatorRulesResult.ts:17 if (isEmpty(value)) { validationRule.errorMessage = ERROR_FIELD_REQUIRED; return null; diff --git a/packages/lib/src/components/internal/Await/Await.tsx b/packages/lib/src/components/internal/Await/Await.tsx index 53cc2b41b1..558882494c 100644 --- a/packages/lib/src/components/internal/Await/Await.tsx +++ b/packages/lib/src/components/internal/Await/Await.tsx @@ -194,7 +194,7 @@ function Await(props: AwaitComponentProps) { {/* Everything is wrapped in !! so we evaluate the result as boolean, otherwise we might just print the value or object as mistake */} - {!!(props.showAmount && amount && amount.value && amount.currency) && ( + {!!(props.showAmount && amount?.value && amount?.currency) && (
{i18n.amount(amount.value, amount.currency)}
)} diff --git a/packages/lib/src/components/internal/DetailsTable/DetailsTable.tsx b/packages/lib/src/components/internal/DetailsTable/DetailsTable.tsx index 90202fab70..df57a79cb2 100644 --- a/packages/lib/src/components/internal/DetailsTable/DetailsTable.tsx +++ b/packages/lib/src/components/internal/DetailsTable/DetailsTable.tsx @@ -22,8 +22,8 @@ export default function DetailsTable({ tableFields }: DetailsTableProps) { .filter(item => !!item) // or objects without label and value .filter(({ label, value }) => !!label && !!value) - .map(({ label, value }, index) => ( -
+ .map(({ label, value }) => ( +
{label}
{value}
From 35bb73dbcfd6efc432ea19746f538bafab372711 Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 14:29:10 +0100 Subject: [PATCH 14/20] fix build and types --- packages/lib/src/components/PayTo/PayTo.tsx | 1 - .../components/PayTo/components/PayIDInput.tsx | 5 ++--- .../PayTo/components/PayToComponent.tsx | 16 +++++++++++++--- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/lib/src/components/PayTo/PayTo.tsx b/packages/lib/src/components/PayTo/PayTo.tsx index f237dd1c06..3a3eda5440 100644 --- a/packages/lib/src/components/PayTo/PayTo.tsx +++ b/packages/lib/src/components/PayTo/PayTo.tsx @@ -123,7 +123,6 @@ export class PayToElement extends UIElement { data={this.props.data} placeholders={this.props.placeholders} setComponentRef={this.setComponentRef} - onSubmit={this.submit} onChange={this.setState} payButton={this.payButton} showPayButton={this.props.showPayButton} diff --git a/packages/lib/src/components/PayTo/components/PayIDInput.tsx b/packages/lib/src/components/PayTo/components/PayIDInput.tsx index ed3b97f622..8b7e8b3677 100644 --- a/packages/lib/src/components/PayTo/components/PayIDInput.tsx +++ b/packages/lib/src/components/PayTo/components/PayIDInput.tsx @@ -33,7 +33,6 @@ export interface PayIDInputProps { setStatus: (status: UIElementStatus) => void; defaultData: PayIdFormData; placeholders: PayToPlaceholdersType; - onError: () => {}; onChange: (e) => void; setComponentRef: (ref: ComponentMethodsRef) => void; } @@ -47,7 +46,7 @@ const IDENTIFIER_SCHEMA = { [PayToIdentifierEnum.orgid]: ['orgid'] }; -export default function PayIDInput({ setComponentRef, defaultData, placeholders, onError, onChange, setStatus }: PayIDInputProps) { +export default function PayIDInput({ setComponentRef, defaultData, placeholders, onChange, setStatus }: PayIDInputProps) { const { i18n } = useCoreContext(); const form = useForm({ @@ -86,7 +85,7 @@ export default function PayIDInput({ setComponentRef, defaultData, placeholders, selectedIdentifier={data.selectedIdentifier} /> {data.selectedIdentifier === PayToIdentifierEnum.phone && ( - + )} {/* TODO probably worth refactoring this into either re-usable components or builder */} diff --git a/packages/lib/src/components/PayTo/components/PayToComponent.tsx b/packages/lib/src/components/PayTo/components/PayToComponent.tsx index 44f0ec7b0a..8f3c89b306 100644 --- a/packages/lib/src/components/PayTo/components/PayToComponent.tsx +++ b/packages/lib/src/components/PayTo/components/PayToComponent.tsx @@ -6,7 +6,9 @@ import { SegmentedControlOptions } from '../../internal/SegmentedControl/Segment import PayIDInput from './PayIDInput'; import BSBInput from './BSBInput'; import { useCoreContext } from '../../../core/Context/CoreProvider'; -import { UIElementStatus } from '../../internal/UIElement/types'; +import { ComponentMethodsRef, UIElementStatus } from '../../internal/UIElement/types'; +import { PayToData, PayToPlaceholdersType } from '../types'; +import { PayButtonProps } from '../../internal/PayButton/PayButton'; export type PayToInputOption = 'payid-option' | 'bsb-option'; @@ -33,7 +35,16 @@ const inputOptions: SegmentedControlOptions = [ } ]; -export default function PayToComponent(props) { +export interface PayToComponentProps { + showPayButton: boolean; + onChange: (e) => void; + setComponentRef: (ref: ComponentMethodsRef) => void; + data: PayToData; + placeholders: PayToPlaceholdersType; + payButton: (props: Partial) => h.JSX.Element; +} + +export default function PayToComponent(props: PayToComponentProps) { const { i18n } = useCoreContext(); const [status, setStatus] = useState('ready'); @@ -57,7 +68,6 @@ export default function PayToComponent(props) { setComponentRef={props.setComponentRef} onChange={onChange} defaultData={props.data} - onError={props.onError} placeholders={props.placeholders} /> )} From b4f2b80051f266b51d4f3f3f906c36e20f7d9100 Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 14:52:54 +0100 Subject: [PATCH 15/20] add translations --- packages/server/translations/ar.json | 31 ++++++++++++++++++++++++- packages/server/translations/bg-BG.json | 31 ++++++++++++++++++++++++- packages/server/translations/ca-ES.json | 31 ++++++++++++++++++++++++- packages/server/translations/cs-CZ.json | 31 ++++++++++++++++++++++++- packages/server/translations/da-DK.json | 31 ++++++++++++++++++++++++- packages/server/translations/de-DE.json | 31 ++++++++++++++++++++++++- packages/server/translations/el-GR.json | 31 ++++++++++++++++++++++++- packages/server/translations/en-US.json | 3 +-- packages/server/translations/es-ES.json | 31 ++++++++++++++++++++++++- packages/server/translations/et-EE.json | 31 ++++++++++++++++++++++++- packages/server/translations/fi-FI.json | 31 ++++++++++++++++++++++++- packages/server/translations/fr-FR.json | 31 ++++++++++++++++++++++++- packages/server/translations/hr-HR.json | 31 ++++++++++++++++++++++++- packages/server/translations/hu-HU.json | 31 ++++++++++++++++++++++++- packages/server/translations/is-IS.json | 31 ++++++++++++++++++++++++- packages/server/translations/it-IT.json | 31 ++++++++++++++++++++++++- packages/server/translations/ja-JP.json | 31 ++++++++++++++++++++++++- packages/server/translations/ko-KR.json | 31 ++++++++++++++++++++++++- packages/server/translations/lt-LT.json | 31 ++++++++++++++++++++++++- packages/server/translations/lv-LV.json | 31 ++++++++++++++++++++++++- packages/server/translations/nl-NL.json | 31 ++++++++++++++++++++++++- packages/server/translations/no-NO.json | 31 ++++++++++++++++++++++++- packages/server/translations/pl-PL.json | 31 ++++++++++++++++++++++++- packages/server/translations/pt-BR.json | 31 ++++++++++++++++++++++++- packages/server/translations/pt-PT.json | 31 ++++++++++++++++++++++++- packages/server/translations/ro-RO.json | 31 ++++++++++++++++++++++++- packages/server/translations/ru-RU.json | 31 ++++++++++++++++++++++++- packages/server/translations/sk-SK.json | 31 ++++++++++++++++++++++++- packages/server/translations/sl-SI.json | 31 ++++++++++++++++++++++++- packages/server/translations/sv-SE.json | 31 ++++++++++++++++++++++++- packages/server/translations/zh-CN.json | 31 ++++++++++++++++++++++++- packages/server/translations/zh-TW.json | 31 ++++++++++++++++++++++++- 32 files changed, 931 insertions(+), 33 deletions(-) diff --git a/packages/server/translations/ar.json b/packages/server/translations/ar.json index c5ee0cf61d..616a243cdd 100644 --- a/packages/server/translations/ar.json +++ b/packages/server/translations/ar.json @@ -323,5 +323,34 @@ "paynow.mobileViewInstruction.step2": "افتح تطبيق بنك PayNow أو تطبيق الدفع.", "paynow.mobileViewInstruction.step3": "ابحث عن أداة قراءة رمز الاستجابة السريعة وشغلها.", "paynow.mobileViewInstruction.step4": "خدد خيار تحميل QR، ثم حدد لقطة الشاشة.", - "paynow.mobileViewInstruction.step5": "أكمل المعاملة." + "paynow.mobileViewInstruction.step5": "أكمل المعاملة.", + "payto.payid.description": "أدخل معرف PayID وتفاصيل الحساب المرتبطة بحساب Payto الخاص بك.", + "payto.payid.label.identifier": "المعرف", + "payto.payid.label.orgid": "معرف المنظمة", + "payto.payid.option.phone": "الهاتف المحمول", + "payto.payid.option.email": "البريد الإلكتروني", + "payto.payid.option.orgid": "معرف المنظمة", + "payto.bsb.description": "أدخل رقم الحساب المصرفي وفرع البنك في الولاية المرتبط بحسابك للمتابعة", + "payto.bsb.label.bankAccountNumber": "رقم الحساب البنكي", + "payto.instructions.steps": "سجّل الدخول إلى تطبيق PayTo المصرفي@وافق على اتفاقية PayTo@اعتمد شروط الدفع@أكمل المعاملة.", + "payto.confirmPayment": "نشكرك على عملية الشراء هذه، وفضلًا أكمل عملية الدفع باتباع التعليمات المبينة أدناه.", + "payto.mandate.amount.label": "المبلغ", + "payto.mandate.frequency.label": "التكرار", + "payto.mandate.remarks.label": "الوصف", + "payto.mandate.startsAt.label": "تاريخ أول دفعة", + "payto.mandate.endsAt.label": "تاريخ الانتهاء", + "payto.mandate.payee.label": "المدفوع له", + "payto.mandate.amount.max": "ما يصل إلى {amount}% لكل معاملة", + "payto.mandate.frequency.adhoc-no-count": "مخصص", + "payto.mandate.frequency.adhoc": "%{count} مرة (مرات)", + "payto.mandate.frequency.daily": "%{count} عملية (عمليات) دفع يوميًا", + "payto.mandate.frequency.weekly": "%{count} عملية (عمليات) دفع أسبوعيًا", + "payto.mandate.frequency.biWeekly": "%{count} عملية (عمليات) دفع كل أسبوعين", + "payto.mandate.frequency.monthly": "%{count} عملية (عمليات) دفع شهريًا", + "payto.mandate.frequency.quarterly": "%{count} عملية (عمليات) دفع ربع سنوية", + "payto.mandate.frequency.halfYearly": "%{count} عملية (عمليات) دفع نصف سنوية", + "payto.mandate.frequency.yearly": "%{count} عملية (عمليات) دفع سنويًا", + "payto.label.firstName": "الاسم الأول لصاحب الحساب", + "payto.label.lastName": "اسم العائلة لصاحب الحساب", + "payto.await.waitForConfirmation": "في انتظار موافقتكم" } \ No newline at end of file diff --git a/packages/server/translations/bg-BG.json b/packages/server/translations/bg-BG.json index 44ad4a1a98..8bbcff8d9e 100644 --- a/packages/server/translations/bg-BG.json +++ b/packages/server/translations/bg-BG.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Отворете банката или приложението за плащане PayNow.", "paynow.mobileViewInstruction.step3": "Изберете опцията за сканиране на QR код.", "paynow.mobileViewInstruction.step4": "Изберете опцията за качване на QR код и след това изберете екранната снимка.", - "paynow.mobileViewInstruction.step5": "Извършете транзакцията." + "paynow.mobileViewInstruction.step5": "Извършете транзакцията.", + "payto.payid.description": "Въведете PayID и данните за сметката, които са свързани с Вашия Payto акаунт.", + "payto.payid.label.identifier": "Идентификатор", + "payto.payid.label.orgid": "OrganizationID", + "payto.payid.option.phone": "Мобилно устройство", + "payto.payid.option.email": "Имейл", + "payto.payid.option.orgid": "OrganizationID", + "payto.bsb.description": "Въведете номера на банковата сметка и банковия клон, които са свързани с вашия акаунт, за да продължите", + "payto.bsb.label.bankAccountNumber": "Номер на банкова сметка", + "payto.instructions.steps": "Влезте в приложението за банкиране PayTo@Приемете споразумението с PayTo@Одобрете условията на плащането@Завършете транзакцията", + "payto.confirmPayment": "Благодарим Ви за покупката, завършете плащането, като следвате инструкциите по-долу.", + "payto.mandate.amount.label": "Сума", + "payto.mandate.frequency.label": "Честота", + "payto.mandate.remarks.label": "Описание", + "payto.mandate.startsAt.label": "Първа дата за плащане", + "payto.mandate.endsAt.label": "Крайна дата", + "payto.mandate.payee.label": "Получател по плащането", + "payto.mandate.amount.max": "До %{amount} на транзакция", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} път(и)", + "payto.mandate.frequency.daily": "%{count} плащания дневно", + "payto.mandate.frequency.weekly": "%{count} плащания седмично", + "payto.mandate.frequency.biWeekly": "%{count} плащания на две седмици", + "payto.mandate.frequency.monthly": "%{count} плащания месечно", + "payto.mandate.frequency.quarterly": "%{count} плащания на тримесечие", + "payto.mandate.frequency.halfYearly": "%{count} плащания на шест месеца", + "payto.mandate.frequency.yearly": "%{count} плащания годишно", + "payto.label.firstName": "Име на титуляра на сметката", + "payto.label.lastName": "Фамилия на титуляра на сметката", + "payto.await.waitForConfirmation": "Очакваме Вашето одобрение" } \ No newline at end of file diff --git a/packages/server/translations/ca-ES.json b/packages/server/translations/ca-ES.json index d5b92271b6..6185bcfc0e 100644 --- a/packages/server/translations/ca-ES.json +++ b/packages/server/translations/ca-ES.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Obriu PayNow o l'aplicació de pagament.", "paynow.mobileViewInstruction.step3": "Seleccioneu l'opció d'escanejar un codi QR.", "paynow.mobileViewInstruction.step4": "Trieu l'opció per carregar un QR i seleccioneu la captura de pantalla.", - "paynow.mobileViewInstruction.step5": "Completeu la transacció." + "paynow.mobileViewInstruction.step5": "Completeu la transacció.", + "payto.payid.description": "Introduïu el PayID i les dades del compte que estan connectades al vostre compte Payto.", + "payto.payid.label.identifier": "Identificador", + "payto.payid.label.orgid": "Identificació de l'organització", + "payto.payid.option.phone": "Mòbil", + "payto.payid.option.email": "Correu electrònic", + "payto.payid.option.orgid": "Identificació de l'organització", + "payto.bsb.description": "Introduïu el número de compte bancari i la sucursal bancària estatal que està associada al vostre compte per continuar", + "payto.bsb.label.bankAccountNumber": "Número de compte bancari", + "payto.instructions.steps": "Inicieu sessió a la vostra aplicació bancària PayTo @Autoritzeu l'acord PayTo @Aproveu els termes de pagament @Completeu la transacció", + "payto.confirmPayment": "Gràcies per la seva compra, completeu el vostre pagament seguint les instruccions següents.", + "payto.mandate.amount.label": "Import", + "payto.mandate.frequency.label": "Freqüència", + "payto.mandate.remarks.label": "Descripció", + "payto.mandate.startsAt.label": "Data del primer pagament", + "payto.mandate.endsAt.label": "Data de finalització", + "payto.mandate.payee.label": "Beneficiari", + "payto.mandate.amount.max": "Fins a %{amount} per transacció", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} vegada(es)", + "payto.mandate.frequency.daily": "%{count} pagament(s) diariament", + "payto.mandate.frequency.weekly": "%{count} pagament(s) setmanal(s)", + "payto.mandate.frequency.biWeekly": "%{count} pagament(s) cada quinze dies", + "payto.mandate.frequency.monthly": "%{count} pagament(s) mensual(s)", + "payto.mandate.frequency.quarterly": "%{count} pagament(s) trimestral(s)", + "payto.mandate.frequency.halfYearly": "%{count} pagament(s) bianual(s)", + "payto.mandate.frequency.yearly": "%{count} pagament(s) anual(s)", + "payto.label.firstName": "Nom del titular del compte", + "payto.label.lastName": "Cognom del titular del compte", + "payto.await.waitForConfirmation": "Esperant la vostra aprovació" } \ No newline at end of file diff --git a/packages/server/translations/cs-CZ.json b/packages/server/translations/cs-CZ.json index feffd04651..78a8d2b718 100644 --- a/packages/server/translations/cs-CZ.json +++ b/packages/server/translations/cs-CZ.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Otevřete PayNow nebo platební aplikaci.", "paynow.mobileViewInstruction.step3": "Zvolte možnost naskenovat QR kód.", "paynow.mobileViewInstruction.step4": "Klikněte na možnost QR kód a vyberte snímek obrazovky.", - "paynow.mobileViewInstruction.step5": "Dokončete transakci." + "paynow.mobileViewInstruction.step5": "Dokončete transakci.", + "payto.payid.description": "Zadejte PayID a údaje o účtu, které jsou propojeny s vaším účtem Payto.", + "payto.payid.label.identifier": "Identifikátor", + "payto.payid.label.orgid": "ID organizace", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID organizace", + "payto.bsb.description": "Pro pokračování zadejte číslo bankovního účtu a kód BSB (Bank State Branch) spojený s vaším účtem", + "payto.bsb.label.bankAccountNumber": "Číslo bankovního účtu", + "payto.instructions.steps": "Přihlaste se do bankovní aplikace PayTo@Potvrďte smlouvu s PayTo@Schvalte platební podmínky@Dokončete transakci", + "payto.confirmPayment": "Děkujeme za váš nákup, dokončete platbu podle níže uvedených pokynů.", + "payto.mandate.amount.label": "Částka", + "payto.mandate.frequency.label": "Frekvence", + "payto.mandate.remarks.label": "Popis", + "payto.mandate.startsAt.label": "Datum první platby", + "payto.mandate.endsAt.label": "Datum ukončení", + "payto.mandate.payee.label": "Příjemce platby", + "payto.mandate.amount.max": "Až %{amount} na jednu transakci", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count}krát", + "payto.mandate.frequency.daily": "%{count} platba/platby/plateb denně", + "payto.mandate.frequency.weekly": "%{count} platba/platby/plateb týdně", + "payto.mandate.frequency.biWeekly": "%{count} platba/platby/plateb co 14 dní", + "payto.mandate.frequency.monthly": "%{count} platba/platby/plateb měsíčně", + "payto.mandate.frequency.quarterly": "%{count} platba/platby/plateb čtvrtletně", + "payto.mandate.frequency.halfYearly": "%{count} platba/platby/plateb půlročně", + "payto.mandate.frequency.yearly": "%{count} platba/platby/plateb ročně", + "payto.label.firstName": "Křestní jméno držitele účtu", + "payto.label.lastName": "Příjmení držitele účtu", + "payto.await.waitForConfirmation": "Čekáme na vaše schválení" } \ No newline at end of file diff --git a/packages/server/translations/da-DK.json b/packages/server/translations/da-DK.json index c307fc0950..75c2d2a938 100644 --- a/packages/server/translations/da-DK.json +++ b/packages/server/translations/da-DK.json @@ -323,5 +323,34 @@ "paynow.mobileViewInstruction.step2": "Åbn PayNow-banken eller betalingsappen.", "paynow.mobileViewInstruction.step3": "Vælg muligheden for at scanne en QR-kode.", "paynow.mobileViewInstruction.step4": "Vælg muligheden for at uploade en QR-kode og vælg skærmbilledet.", - "paynow.mobileViewInstruction.step5": "Gennemfør transaktionen." + "paynow.mobileViewInstruction.step5": "Gennemfør transaktionen.", + "payto.payid.description": "Indtast PayID og kontooplysninger, der er knyttet til din PayTo-konto.", + "payto.payid.label.identifier": "Identifikator", + "payto.payid.label.orgid": "Organisations-id", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "Organisations-id", + "payto.bsb.description": "Indtast bankkontonummeret og bankafdeling (Bank State Branch, BSB), der er knyttet til din konto, for at fortsætte", + "payto.bsb.label.bankAccountNumber": "Bankkontonummer", + "payto.instructions.steps": "Log ind på din PayTo-bankapp@Godkend PayTo-aftalen@Godkend betalingsbetingelserne@Fuldfør transaktionen", + "payto.confirmPayment": "Tak for dit køb! Fuldfør din betaling ved at følge instruktionerne nedenfor.", + "payto.mandate.amount.label": "Beløb", + "payto.mandate.frequency.label": "Hyppighed", + "payto.mandate.remarks.label": "Beskrivelse", + "payto.mandate.startsAt.label": "Første betalingsdato", + "payto.mandate.endsAt.label": "Slutdato", + "payto.mandate.payee.label": "Betalingsmodtager", + "payto.mandate.amount.max": "Op til %{amount} pr. transaktion", + "payto.mandate.frequency.adhoc-no-count": "Ad hoc", + "payto.mandate.frequency.adhoc": "%{count} gang(e)", + "payto.mandate.frequency.daily": "%{count} betaling(er) dagligt", + "payto.mandate.frequency.weekly": "%{count} betaling(er) ugentligt", + "payto.mandate.frequency.biWeekly": "%{count} betaling(er) hver 2. uge", + "payto.mandate.frequency.monthly": "%{count} betaling(er) månedligt", + "payto.mandate.frequency.quarterly": "%{count} betaling(er) kvartalsvis", + "payto.mandate.frequency.halfYearly": "%{count} betaling(er) halvårlig", + "payto.mandate.frequency.yearly": "%{count} betaling(er) årligt", + "payto.label.firstName": "Kontohavers fornavn", + "payto.label.lastName": "Kontohavers efternavn", + "payto.await.waitForConfirmation": "Afventer din godkendelse" } \ No newline at end of file diff --git a/packages/server/translations/de-DE.json b/packages/server/translations/de-DE.json index e42f67c134..5b210d7afa 100644 --- a/packages/server/translations/de-DE.json +++ b/packages/server/translations/de-DE.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Öffnen Sie die PayNow-Bank- oder Zahlungs-App.", "paynow.mobileViewInstruction.step3": "Wählen Sie die Option, um einen QR-Code zu scannen.", "paynow.mobileViewInstruction.step4": "Wählen Sie die Option zum Hochladen eines QR-Codes und wählen Sie den Screenshot aus.", - "paynow.mobileViewInstruction.step5": "Schließen Sie die Transaktion ab." + "paynow.mobileViewInstruction.step5": "Schließen Sie die Transaktion ab.", + "payto.payid.description": "Geben Sie die PayID und die Kontodaten ein, die mit Ihrem Payto-Konto verknüpft sind.", + "payto.payid.label.identifier": "Kennung", + "payto.payid.label.orgid": "Organisations-ID", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-Mail-Adresse", + "payto.payid.option.orgid": "Organisations-ID", + "payto.bsb.description": "Geben Sie die Bankkontonummer und die dazugehörige Bankleitzahl ein, um fortzufahren", + "payto.bsb.label.bankAccountNumber": "Bankkontonummer", + "payto.instructions.steps": "Melden Sie sich bei Ihrer PayTo-Banking-App an@Genehmigen Sie die PayTo-Vereinbarung@Stimmen Sie den Zahlungsbedingungen zu@Schließen Sie die Transaktion ab", + "payto.confirmPayment": "Vielen Dank für Ihren Kauf. Bitte schließen Sie Ihre Zahlung ab, indem Sie die nachstehenden Anweisungen befolgen.", + "payto.mandate.amount.label": "Betrag", + "payto.mandate.frequency.label": "Häufigkeit", + "payto.mandate.remarks.label": "Beschreibung", + "payto.mandate.startsAt.label": "Erstes Zahlungsdatum", + "payto.mandate.endsAt.label": "Enddatum", + "payto.mandate.payee.label": "Zahlungsempfänger", + "payto.mandate.amount.max": "Bis zu %{amount} pro Transaktion", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} Mal", + "payto.mandate.frequency.daily": "%{count} Zahlung(en) täglich", + "payto.mandate.frequency.weekly": "%{count} Zahlung(en) wöchentlich", + "payto.mandate.frequency.biWeekly": "%{count} Zahlung(en) vierzehntägig", + "payto.mandate.frequency.monthly": "%{count} Zahlung(en) monatlich", + "payto.mandate.frequency.quarterly": "%{count} Zahlung(en) vierteljährlich", + "payto.mandate.frequency.halfYearly": "%{count} Zahlung(en) halbjährlich", + "payto.mandate.frequency.yearly": "%{count} Zahlung(en) jährlich", + "payto.label.firstName": "Vorname des Kontoinhabers", + "payto.label.lastName": "Nachname des Kontoinhabers", + "payto.await.waitForConfirmation": "Wir warten auf Ihre Genehmigung" } \ No newline at end of file diff --git a/packages/server/translations/el-GR.json b/packages/server/translations/el-GR.json index bff5068f64..45972645dd 100644 --- a/packages/server/translations/el-GR.json +++ b/packages/server/translations/el-GR.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Ανοίξτε την τράπεζα PayNow ή την εφαρμογή πληρωμών.", "paynow.mobileViewInstruction.step3": "Επιλέξτε τη δυνατότητα σάρωσης ενός κωδικού QR.", "paynow.mobileViewInstruction.step4": "Επιλέξτε τη δυνατότητα μεταφόρτωσης ενός QR και επιλέξτε το στιγμιότυπο οθόνης.", - "paynow.mobileViewInstruction.step5": "Ολοκληρώστε τη συναλλαγή." + "paynow.mobileViewInstruction.step5": "Ολοκληρώστε τη συναλλαγή.", + "payto.payid.description": "Εισαγάγετε το PayID και τα στοιχεία λογαριασμού που είναι συνδεδεμένα με τον λογαριασμό Payto που διαθέτετε.", + "payto.payid.label.identifier": "Αναγνωριστικό", + "payto.payid.label.orgid": "Αναγνωριστικό οργανισμού", + "payto.payid.option.phone": "Κινητό", + "payto.payid.option.email": "Email", + "payto.payid.option.orgid": "Αναγνωριστικό οργανισμού", + "payto.bsb.description": "Εισαγάγετε τον αριθμό τραπεζικού λογαριασμού και το υποκατάστημα της τράπεζας που συνδέεται με τον λογαριασμό σας για να συνεχίσετε.", + "payto.bsb.label.bankAccountNumber": "Αριθμός τραπεζικού λογαριασμού", + "payto.instructions.steps": "Συνδεθείτε στην εφαρμογή τραπεζικής σας PayTo@Εξουσιοδοτήστε τη συμφωνία PayTo@Εγκρίνετε τους όρους πληρωμής@Ολοκληρώστε τη συναλλαγή", + "payto.confirmPayment": "Σας ευχαριστούμε για την αγορά σας. Ολοκληρώστε την πληρωμή σας ακολουθώντας τις παρακάτω οδηγίες.", + "payto.mandate.amount.label": "Ποσό", + "payto.mandate.frequency.label": "Συχνότητα", + "payto.mandate.remarks.label": "Περιγραφή", + "payto.mandate.startsAt.label": "Ημερομηνία πρώτης πληρωμής", + "payto.mandate.endsAt.label": "Ημερομηνία λήξης", + "payto.mandate.payee.label": "Δικαιούχος", + "payto.mandate.amount.max": "Έως %{amount} ανά συναλλαγή", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} φορά(-ές)", + "payto.mandate.frequency.daily": "%{count} πληρωμή(-ές) καθημερινά", + "payto.mandate.frequency.weekly": "%{count} πληρωμή(-ές) εβδομαδιαίως", + "payto.mandate.frequency.biWeekly": "%{count} πληρωμή(-ές) ανά δεκαπενθήμερο", + "payto.mandate.frequency.monthly": "%{count} πληρωμή(-ές) μηνιαίως", + "payto.mandate.frequency.quarterly": "%{count} πληρωμή(-ές) ανά τρίμηνο", + "payto.mandate.frequency.halfYearly": "%{count} πληρωμή(-ές) ανά εξάμηνο", + "payto.mandate.frequency.yearly": "%{count} πληρωμή(-ές) ετησίως", + "payto.label.firstName": "Όνομα κατόχου λογαριασμού", + "payto.label.lastName": "Επώνυμο κατόχου λογαριασμού", + "payto.await.waitForConfirmation": "Αναμονή για την έγκρισή σας" } \ No newline at end of file diff --git a/packages/server/translations/en-US.json b/packages/server/translations/en-US.json index a0dd10e089..316c5af602 100644 --- a/packages/server/translations/en-US.json +++ b/packages/server/translations/en-US.json @@ -331,8 +331,7 @@ "payto.payid.option.phone": "Mobile", "payto.payid.option.email": "Email", "payto.payid.option.orgid": "Organization ID", - "payto.bsb.header": "BSB", - "payto.bsb.description" : "Enter the bank account number and the Bank State Branch that is connected to your account to continue", + "payto.bsb.description": "Enter the bank account number and the Bank State Branch that is connected to your account to continue", "payto.bsb.label.bankAccountNumber": "Bank account number", "payto.instructions.steps": "Log into your PayTo banking app@Authorize the PayTo agreement@Approve the payment terms@Complete the transaction", "payto.confirmPayment": "Thank you for your purchase, complete your payment by following the instructions below.", diff --git a/packages/server/translations/es-ES.json b/packages/server/translations/es-ES.json index d7dbcefa20..d1956292c6 100644 --- a/packages/server/translations/es-ES.json +++ b/packages/server/translations/es-ES.json @@ -320,5 +320,34 @@ "paynow.mobileViewInstruction.step2": "Abra la aplicación bancaria o de pago PayNow.", "paynow.mobileViewInstruction.step3": "Seleccione la opción de escanear un código QR.", "paynow.mobileViewInstruction.step4": "Elija la opción de subir un QR y seleccione la captura de pantalla.", - "paynow.mobileViewInstruction.step5": "Complete la transacción." + "paynow.mobileViewInstruction.step5": "Complete la transacción.", + "payto.payid.description": "Introduzca el PayID y los detalles de la cuenta que están conectados a su cuenta Payto.", + "payto.payid.label.identifier": "Identificador", + "payto.payid.label.orgid": "ID de la organización", + "payto.payid.option.phone": "Teléfono móvil", + "payto.payid.option.email": "Correo electrónico", + "payto.payid.option.orgid": "ID de la organización", + "payto.bsb.description": "Introduzca el número de cuenta bancaria y la sucursal del banco estatal que está vinculada a su cuenta para continuar", + "payto.bsb.label.bankAccountNumber": "Número de cuenta bancaria", + "payto.instructions.steps": "Inicie sesión en su aplicación bancaria PayTo@Autorice el acuerdo de PayTo@Apruebe las condiciones de pago @Complete la transacción", + "payto.confirmPayment": "Gracias por su compra. Complete su pago siguiendo las instrucciones a continuación.", + "payto.mandate.amount.label": "Cantidad", + "payto.mandate.frequency.label": "Frecuencia", + "payto.mandate.remarks.label": "Descripción", + "payto.mandate.startsAt.label": "Fecha del primer pago", + "payto.mandate.endsAt.label": "Fecha de finalización", + "payto.mandate.payee.label": "Beneficiario", + "payto.mandate.amount.max": "Hasta %{amount} por transacción", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} vez/veces", + "payto.mandate.frequency.daily": "%{count} pago(s) diariamente", + "payto.mandate.frequency.weekly": "%{count} pago(s) semanalmente", + "payto.mandate.frequency.biWeekly": "%{count} pago(s) quincenal(es)", + "payto.mandate.frequency.monthly": "%{count} pago(s) mensual(es)", + "payto.mandate.frequency.quarterly": "%{count} pago(s) trimestralmente", + "payto.mandate.frequency.halfYearly": "%{count} pago(s) semestralmente", + "payto.mandate.frequency.yearly": "%{count} pago(s) anualmente", + "payto.label.firstName": "Nombre del titular de la cuenta", + "payto.label.lastName": "Apellidos del titular de la cuenta", + "payto.await.waitForConfirmation": "Esperando su aprobación" } \ No newline at end of file diff --git a/packages/server/translations/et-EE.json b/packages/server/translations/et-EE.json index b6d8b8873a..7d9bdc695d 100644 --- a/packages/server/translations/et-EE.json +++ b/packages/server/translations/et-EE.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Avage pank või makserakendus PayNow.", "paynow.mobileViewInstruction.step3": "Valige QR-koodi skannimise valik.", "paynow.mobileViewInstruction.step4": "Valige QR-koodi üleslaadimise valik ja valige kuvatõmmis.", - "paynow.mobileViewInstruction.step5": "Viige kanne lõpule." + "paynow.mobileViewInstruction.step5": "Viige kanne lõpule.", + "payto.payid.description": "Sisestage PayID ja teie Payto kontoga ühendatud konto andmed.", + "payto.payid.label.identifier": "Tunnus", + "payto.payid.label.orgid": "Organisatsiooni ID", + "payto.payid.option.phone": "Mobiil", + "payto.payid.option.email": "E-post", + "payto.payid.option.orgid": "Organisatsiooni ID", + "payto.bsb.description": "Jätkamiseks sisestage pangakonto number ja teie kontoga seotud panga riiklik filiaal", + "payto.bsb.label.bankAccountNumber": "Pangakonto number", + "payto.instructions.steps": "Logige sisse oma PayTo pangarakendusse@Kinnitage PayTo leping@Kinnitage maksetingimused@Lõpetage kanne", + "payto.confirmPayment": "Täname teid ostu eest, täitke makse allpool toodud juhiseid järgides.", + "payto.mandate.amount.label": "Summa", + "payto.mandate.frequency.label": "Sagedus", + "payto.mandate.remarks.label": "Kirjeldus", + "payto.mandate.startsAt.label": "Esimese makse kuupäev", + "payto.mandate.endsAt.label": "Lõppkuupäev", + "payto.mandate.payee.label": "Makse saaja", + "payto.mandate.amount.max": "Kuni %{amount} tehingu kohta", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} kord(a)", + "payto.mandate.frequency.daily": "%{count} makse(t) päevas", + "payto.mandate.frequency.weekly": "%{count} makse(t) nädalas", + "payto.mandate.frequency.biWeekly": "%{count} makse(t) iga kahe nädala tagant", + "payto.mandate.frequency.monthly": "%{count} makse(t) kuus", + "payto.mandate.frequency.quarterly": "%{count} makse(t) kvartalis", + "payto.mandate.frequency.halfYearly": "%{count} makse(t) kaks korda aastas", + "payto.mandate.frequency.yearly": "%{count} makse(t) aastas", + "payto.label.firstName": "Konto omaniku eesnimi", + "payto.label.lastName": "Konto omaniku perekonnanimi", + "payto.await.waitForConfirmation": "Teie heakskiidu ootel" } \ No newline at end of file diff --git a/packages/server/translations/fi-FI.json b/packages/server/translations/fi-FI.json index 3df07a0e76..e30c12fda8 100644 --- a/packages/server/translations/fi-FI.json +++ b/packages/server/translations/fi-FI.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Avaa PayNow-pankkisovellus tai -maksusovellus.", "paynow.mobileViewInstruction.step3": "Valitse QR-koodin skannaustoiminto.", "paynow.mobileViewInstruction.step4": "Valitse QR-koodin lataustoiminto ja valitse ottamasi näyttökuva.", - "paynow.mobileViewInstruction.step5": "Suorita maksutapahtuma loppuun." + "paynow.mobileViewInstruction.step5": "Suorita maksutapahtuma loppuun.", + "payto.payid.description": "Anna Payto-tilisi PayID ja tilitiedot", + "payto.payid.label.identifier": "Tunniste", + "payto.payid.label.orgid": "Organisaatiotunnus", + "payto.payid.option.phone": "Matkapuhelinnumero", + "payto.payid.option.email": "Sähköposti", + "payto.payid.option.orgid": "Organisaation tunnus", + "payto.bsb.description": "Jotta voit jatkaa, lisää tiliisi yhdistetty pankkitilin numero ja BSB-numero (pankkikonttorin tunnus)", + "payto.bsb.label.bankAccountNumber": "Pankkitilinumero", + "payto.instructions.steps": "Kirjaudu PayTo-pankkisovellukseesi@Hyväksy PayTo-sopimus@Hyväksy maksuehdot@Viimeistele maksutapahtuma", + "payto.confirmPayment": "Kiitos ostoksestasi. Suorita maksu alla annettujen ohjeiden mukaisesti.", + "payto.mandate.amount.label": "Summa", + "payto.mandate.frequency.label": "Maksuaikataulu", + "payto.mandate.remarks.label": "Kuvaus", + "payto.mandate.startsAt.label": "Ensimmäinen maksupäivä", + "payto.mandate.endsAt.label": "Päättymispäivämäärä", + "payto.mandate.payee.label": "Maksunsaaja", + "payto.mandate.amount.max": "Jopa %{amount} per maksutapahtuma", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} kertaa", + "payto.mandate.frequency.daily": "%{count} maksua päivittäin", + "payto.mandate.frequency.weekly": "%{count} maksua viikoittain", + "payto.mandate.frequency.biWeekly": "%{count} maksu kahdessa viikossa", + "payto.mandate.frequency.monthly": "%{count} maksua kuukausittain", + "payto.mandate.frequency.quarterly": "%{count} maksua neljännesvuosittain", + "payto.mandate.frequency.halfYearly": "%{count} maksu(a) puolivuosittain", + "payto.mandate.frequency.yearly": "%{count} maksua vuosittain", + "payto.label.firstName": "Tilinhaltijan etunimi", + "payto.label.lastName": "Tilinhaltijan sukunimi", + "payto.await.waitForConfirmation": "Odottaa hyväksyntääsi" } \ No newline at end of file diff --git a/packages/server/translations/fr-FR.json b/packages/server/translations/fr-FR.json index e6d25519ae..6d62d7a3b5 100644 --- a/packages/server/translations/fr-FR.json +++ b/packages/server/translations/fr-FR.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Ouvrez l'application bancaire ou de paiement PayNow.", "paynow.mobileViewInstruction.step3": "Sélectionnez l'option permettant de scanner un code QR.", "paynow.mobileViewInstruction.step4": "Choisissez l'option pour télécharger un code QR et sélectionnez la capture d'écran.", - "paynow.mobileViewInstruction.step5": "Complétez la transaction." + "paynow.mobileViewInstruction.step5": "Complétez la transaction.", + "payto.payid.description": "Veuillez saisir le PayID et les détails du compte qui sont connectés à votre compte Payto.", + "payto.payid.label.identifier": "Identifiant", + "payto.payid.label.orgid": "Identifiant de l'organisation", + "payto.payid.option.phone": "Portable", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "Identifiant de l'organisation", + "payto.bsb.description": "Saisissez le numéro de compte bancaire et la succursale bancaire qui est liée à votre compte pour continuer.", + "payto.bsb.label.bankAccountNumber": "Numéro du compte bancaire", + "payto.instructions.steps": "Connectez-vous à votre application bancaire PayTo@Autorisez l'accord PayTo@Approuvez les conditions de paiement@Finalisez la transaction", + "payto.confirmPayment": "Nous vous remercions de votre achat. Veuillez finaliser votre paiement en suivant les instructions ci-dessous.", + "payto.mandate.amount.label": "Montant", + "payto.mandate.frequency.label": "Fréquence", + "payto.mandate.remarks.label": "Description", + "payto.mandate.startsAt.label": "Date du premier paiement", + "payto.mandate.endsAt.label": "Date de fin", + "payto.mandate.payee.label": "Bénéficiaire", + "payto.mandate.amount.max": "Jusqu'à %{amount} par transaction", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} fois", + "payto.mandate.frequency.daily": "%{count} paiement(s) par jour", + "payto.mandate.frequency.weekly": "%{count} paiement(s) par semaine", + "payto.mandate.frequency.biWeekly": "%{count} paiement(s) toutes les deux semaines", + "payto.mandate.frequency.monthly": "%{count} paiement(s) mensuel(s)", + "payto.mandate.frequency.quarterly": "%{count} paiement(s) par trimestre", + "payto.mandate.frequency.halfYearly": "%{count} paiement(s) par semestre", + "payto.mandate.frequency.yearly": "%{count} paiement(s) par an", + "payto.label.firstName": "Prénom du titulaire du compte", + "payto.label.lastName": "Nom de famille du titulaire du compte", + "payto.await.waitForConfirmation": "En attente de votre approbation" } \ No newline at end of file diff --git a/packages/server/translations/hr-HR.json b/packages/server/translations/hr-HR.json index e18030904a..c4b9512a30 100644 --- a/packages/server/translations/hr-HR.json +++ b/packages/server/translations/hr-HR.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Otvorite PayNow banku ili aplikaciju za plaćanje.", "paynow.mobileViewInstruction.step3": "Odaberite opciju skeniranja QR kôda.", "paynow.mobileViewInstruction.step4": "Odaberite opciju za prijenos QR-a i odaberite snimku zaslona.", - "paynow.mobileViewInstruction.step5": "Dovršite transakciju." + "paynow.mobileViewInstruction.step5": "Dovršite transakciju.", + "payto.payid.description": "Unesite PayID i podatke o računu koji su povezani s vašim Payto računom.", + "payto.payid.label.identifier": "Identifikator", + "payto.payid.label.orgid": "ID organizacije", + "payto.payid.option.phone": "Mobilni telefon", + "payto.payid.option.email": "E-pošta", + "payto.payid.option.orgid": "ID organizacije", + "payto.bsb.description": "Unesite broj bankovnog računa i državnu podružnicu banke koja je povezana s vašim računom kako biste nastavili", + "payto.bsb.label.bankAccountNumber": "Broj bankovnog računa", + "payto.instructions.steps": "Prijavite se u svoju PayTo bankarsku aplikaciju kako biste@autorizirali ugovor PayTo @odobrili uvjete plaćanja@dovršili transakciju", + "payto.confirmPayment": "Zahvaljujemo vam na kupnji, dovršite uplatu slijedeći upute u nastavku.", + "payto.mandate.amount.label": "Iznos", + "payto.mandate.frequency.label": "Učestalost", + "payto.mandate.remarks.label": "Opis", + "payto.mandate.startsAt.label": "Datum prve uplate", + "payto.mandate.endsAt.label": "Datum završetka", + "payto.mandate.payee.label": "Primatelj uplate", + "payto.mandate.amount.max": "Do %{amount} po transakciji", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} puta", + "payto.mandate.frequency.daily": "Dnevnih uplata: %{count}", + "payto.mandate.frequency.weekly": "Tjednih uplata: %{count}", + "payto.mandate.frequency.biWeekly": "Dvotjednih uplata: %{count}", + "payto.mandate.frequency.monthly": "Mjesečnih uplata: %{count}", + "payto.mandate.frequency.quarterly": "Kvartalnih uplata: %{count}", + "payto.mandate.frequency.halfYearly": "%{count}", + "payto.mandate.frequency.yearly": "Godišnjih uplata: %{count}", + "payto.label.firstName": "Ime vlasnika računa", + "payto.label.lastName": "Prezime vlasnika računa", + "payto.await.waitForConfirmation": "Čekamo vaše odobrenje" } \ No newline at end of file diff --git a/packages/server/translations/hu-HU.json b/packages/server/translations/hu-HU.json index 9715c90ac0..075a9a10b2 100644 --- a/packages/server/translations/hu-HU.json +++ b/packages/server/translations/hu-HU.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Nyissa meg a PayNow banki vagy fizetési alkalmazást.", "paynow.mobileViewInstruction.step3": "Válassza ki a QR-kód beolvasásának lehetőségét.", "paynow.mobileViewInstruction.step4": "Válassza ki a QR-feltöltés lehetőségét, és jelölje ki a képernyőképet.", - "paynow.mobileViewInstruction.step5": "Fejezze be a tranzakciót." + "paynow.mobileViewInstruction.step5": "Fejezze be a tranzakciót.", + "payto.payid.description": "Adja meg a Payto-fiókjához kapcsolódó PayID-t és a számlaadatait.", + "payto.payid.label.identifier": "Azonosító", + "payto.payid.label.orgid": "Szervezeti azonosító", + "payto.payid.option.phone": "Mobiltelefon", + "payto.payid.option.email": "E-mail-cím", + "payto.payid.option.orgid": "Szervezeti azonosító", + "payto.bsb.description": "A folytatáshoz adja meg a bankszámlaszámot és a számlájához kapcsolódó bankfiók azonosító (BSB) kódját", + "payto.bsb.label.bankAccountNumber": "Bankszámlaszám", + "payto.instructions.steps": "Jelentkezzen be PayTo banki alkalmazásába@Hagyja jóvá a PayTo megállapodást@Fogadja el a fizetési feltételeket@Fejezze be a tranzakciót", + "payto.confirmPayment": "Köszönjük vásárlást! Fejezze be a fizetést az alábbi utasításokat követve.", + "payto.mandate.amount.label": "Összeg", + "payto.mandate.frequency.label": "Gyakoriság", + "payto.mandate.remarks.label": "Leírás", + "payto.mandate.startsAt.label": "Első fizetési dátum", + "payto.mandate.endsAt.label": "Befejező dátum", + "payto.mandate.payee.label": "Kedvezményezett", + "payto.mandate.amount.max": "Tranzakciónként legfeljebb %{amount}", + "payto.mandate.frequency.adhoc-no-count": "Eseti", + "payto.mandate.frequency.adhoc": "%{count} alkalommal", + "payto.mandate.frequency.daily": "%{count} fizetés naponta", + "payto.mandate.frequency.weekly": "%{count} fizetés hetente", + "payto.mandate.frequency.biWeekly": "%{count} fizetés kéthetente", + "payto.mandate.frequency.monthly": "%{count} fizetés havonta", + "payto.mandate.frequency.quarterly": "%{count} fizetés negyedévente", + "payto.mandate.frequency.halfYearly": "%{count} fizetés kétévente", + "payto.mandate.frequency.yearly": "%{count} fizetés évente", + "payto.label.firstName": "Számlatulajdonos utóneve", + "payto.label.lastName": "Számlatulajdonos vezetékneve", + "payto.await.waitForConfirmation": "Várakozás az Ön jóváhagyására" } \ No newline at end of file diff --git a/packages/server/translations/is-IS.json b/packages/server/translations/is-IS.json index f01b99b0cb..74257a70e4 100644 --- a/packages/server/translations/is-IS.json +++ b/packages/server/translations/is-IS.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Opnaðu PayNow-banka- eða greiðsluapp.", "paynow.mobileViewInstruction.step3": "Veldu valkostinn til að skanna QR-kóða.", "paynow.mobileViewInstruction.step4": "Veldu valkostinn til að hlaða upp QR-kóða og veldu skjámyndina.", - "paynow.mobileViewInstruction.step5": "Ljúktu færslunni." + "paynow.mobileViewInstruction.step5": "Ljúktu færslunni.", + "payto.payid.description": "Sláðu inn PayID og reikningsupplýsingar sem eru tengjast Payto-reikningnum þínum.", + "payto.payid.label.identifier": "Auðkenni", + "payto.payid.label.orgid": "Auðkenni fyrirtækis", + "payto.payid.option.phone": "Farsími", + "payto.payid.option.email": "Netfang", + "payto.payid.option.orgid": "Auðkenni fyrirtækis", + "payto.bsb.description": "Sláðu inn bankareikningsnúmerið og bankaútibúið sem er tengt við reikninginn til að halda áfram", + "payto.bsb.label.bankAccountNumber": "Bankareikningsnúmer", + "payto.instructions.steps": "Skráðu þig inn á PayTo-bankaforritið@Samþykktu PayTo-samninginn@Samþykktu greiðsluskilmálana@Ljúktu við færsluna", + "payto.confirmPayment": "Takk fyrir kaupin, ljúktu við greiðsluna með því að fylgja leiðbeiningunum hér fyrir neðan.", + "payto.mandate.amount.label": "Upphæð", + "payto.mandate.frequency.label": "Tíðni", + "payto.mandate.remarks.label": "Lýsing", + "payto.mandate.startsAt.label": "Fyrsti greiðsludagur", + "payto.mandate.endsAt.label": "Lokadagsetning", + "payto.mandate.payee.label": "Greiðsluþegi", + "payto.mandate.amount.max": "Allt að %{amount} fyrir hverja færslu", + "payto.mandate.frequency.adhoc-no-count": "Sértækt", + "payto.mandate.frequency.adhoc": "%{count} skipti", + "payto.mandate.frequency.daily": "%{count} greiðsla/greiðslur daglega", + "payto.mandate.frequency.weekly": "%{count} greiðsla/greiðslur vikulega", + "payto.mandate.frequency.biWeekly": "%{count} greiðsla/greiðslur á tveggja vikna fresti", + "payto.mandate.frequency.monthly": "%{count} greiðsla/greiðslur á mánuði", + "payto.mandate.frequency.quarterly": "%{count} greiðsla/greiðslur ársfjórðungslega", + "payto.mandate.frequency.halfYearly": "%{count} greiðsla/greiðslur á sex mánaða fresti", + "payto.mandate.frequency.yearly": "%{count} greiðsla/greiðslur árlega", + "payto.label.firstName": "Fornafn reikningshafa", + "payto.label.lastName": "Eftirnafn reikningshafa", + "payto.await.waitForConfirmation": "Bíður samþykkis" } \ No newline at end of file diff --git a/packages/server/translations/it-IT.json b/packages/server/translations/it-IT.json index e89f0ca172..f7ad7b57d6 100644 --- a/packages/server/translations/it-IT.json +++ b/packages/server/translations/it-IT.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Apri PayNow o l'app di pagamento.", "paynow.mobileViewInstruction.step3": "Seleziona l'opzione per scansionare un codice QR.", "paynow.mobileViewInstruction.step4": "Scegli l'opzione per caricare un QR e seleziona lo screenshot.", - "paynow.mobileViewInstruction.step5": "Completa la transazione." + "paynow.mobileViewInstruction.step5": "Completa la transazione.", + "payto.payid.description": "Immettere la PayID e i dettagli del conto collegati al conto Payto.", + "payto.payid.label.identifier": "Identificatore", + "payto.payid.label.orgid": "ID organizzazione", + "payto.payid.option.phone": "Cellulare", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID dell'organizzazione", + "payto.bsb.description": "Per continuare, immettere il numero di conto bancario e la filiale della banca collegata al tuo conto", + "payto.bsb.label.bankAccountNumber": "Numero di conto bancario", + "payto.instructions.steps": "Accedere all'app bancaria PayTo@Autorizzare il contratto PayTo@Approvare i termini di pagamento@Completare la transazione", + "payto.confirmPayment": "Grazie per l'acquisto, completare il pagamento seguendo le istruzioni riportate di seguito.", + "payto.mandate.amount.label": "Somma", + "payto.mandate.frequency.label": "Frequenza", + "payto.mandate.remarks.label": "Descrizione", + "payto.mandate.startsAt.label": "Data del primo pagamento", + "payto.mandate.endsAt.label": "Data di fine", + "payto.mandate.payee.label": "Beneficiario", + "payto.mandate.amount.max": "Fino a %{amount} per transazione", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} volta(e)", + "payto.mandate.frequency.daily": "%{count} pagamento(i) giornaliero(i)", + "payto.mandate.frequency.weekly": "%{count} pagamento(i) settimanale(i)", + "payto.mandate.frequency.biWeekly": "%{count} pagamento/i ogni quindici giorni", + "payto.mandate.frequency.monthly": "%{count} pagamento/i mensile(i)", + "payto.mandate.frequency.quarterly": "%{count} pagamento/i trimestrale(i)", + "payto.mandate.frequency.halfYearly": "%{count} pagamento(i) semestrale(i)", + "payto.mandate.frequency.yearly": "%{count} pagamento/i all'anno", + "payto.label.firstName": "Nome del titolare del conto", + "payto.label.lastName": "Cognome del titolare del conto", + "payto.await.waitForConfirmation": "In attesa della tua approvazione" } \ No newline at end of file diff --git a/packages/server/translations/ja-JP.json b/packages/server/translations/ja-JP.json index dde1ea6343..4e7c068150 100644 --- a/packages/server/translations/ja-JP.json +++ b/packages/server/translations/ja-JP.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "PayNow銀行または支払アプリを開きます。", "paynow.mobileViewInstruction.step3": "QRコードをスキャンするオプションを選択します。", "paynow.mobileViewInstruction.step4": "QRをアップロードするオプションを選択し、スクリーンショットを選択します。", - "paynow.mobileViewInstruction.step5": "取引を完了します。" + "paynow.mobileViewInstruction.step5": "取引を完了します。", + "payto.payid.description": "Paytoアカウントに接続されているPayIDとアカウントの詳細を入力してください。", + "payto.payid.label.identifier": "識別子", + "payto.payid.label.orgid": "組織ID", + "payto.payid.option.phone": "携帯", + "payto.payid.option.email": "メールアドレス", + "payto.payid.option.orgid": "組織ID", + "payto.bsb.description": "アカウントに接続されている銀行口座番号と銀行支店コードを入力して、続行してください。", + "payto.bsb.label.bankAccountNumber": "銀行口座番号", + "payto.instructions.steps": "PayTo銀行アプリにログインしてPayTo契約を承認し、支払い条件を確認して、取引を完了してください", + "payto.confirmPayment": "お買い上げありがとうございます。以下の指示に従って、支払いを完了してください。", + "payto.mandate.amount.label": "金額", + "payto.mandate.frequency.label": "頻度", + "payto.mandate.remarks.label": "説明", + "payto.mandate.startsAt.label": "初回支払日", + "payto.mandate.endsAt.label": "終了日", + "payto.mandate.payee.label": "受取人", + "payto.mandate.amount.max": "取引ごとに最大%{amount}", + "payto.mandate.frequency.adhoc-no-count": "アドホック", + "payto.mandate.frequency.adhoc": "%{count}回", + "payto.mandate.frequency.daily": "%{count}件の支払を毎日", + "payto.mandate.frequency.weekly": "%{count}件の支払を毎週", + "payto.mandate.frequency.biWeekly": "%{count}件の支払を隔週", + "payto.mandate.frequency.monthly": "%{count}件の支払を毎月", + "payto.mandate.frequency.quarterly": "%{count}件の支払を毎四半期", + "payto.mandate.frequency.halfYearly": "%{count}件の支払を半年毎", + "payto.mandate.frequency.yearly": "%{count}件の支払を毎年", + "payto.label.firstName": "口座名義人の名", + "payto.label.lastName": "口座名義人の姓", + "payto.await.waitForConfirmation": "承認待ち" } \ No newline at end of file diff --git a/packages/server/translations/ko-KR.json b/packages/server/translations/ko-KR.json index 2cdbe796d5..5e11790efb 100644 --- a/packages/server/translations/ko-KR.json +++ b/packages/server/translations/ko-KR.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "PayNow 은행 또는 결제 앱을 여세요.", "paynow.mobileViewInstruction.step3": "QR 코드 스캔 옵션을 선택하세요.", "paynow.mobileViewInstruction.step4": "QR 업로드 옵션으로 들어가 스크린샷을 선택하세요.", - "paynow.mobileViewInstruction.step5": "거래를 완료하세요." + "paynow.mobileViewInstruction.step5": "거래를 완료하세요.", + "payto.payid.description": "Payto 계정에 연결된 PayID와 계정 세부 정보를 입력하세요.", + "payto.payid.label.identifier": "식별자", + "payto.payid.label.orgid": "조직 ID", + "payto.payid.option.phone": "휴대폰", + "payto.payid.option.email": "이메일", + "payto.payid.option.orgid": "조직 ID", + "payto.bsb.description": "계속하려면 계정에 연결된 은행 계좌 번호와 은행 지점을 입력하세요.", + "payto.bsb.label.bankAccountNumber": "계좌 번호", + "payto.instructions.steps": "PayTo 뱅킹 앱에 로그인하세요@PayTo 이용 약관을 승인하세요@결제 조건을 승인하세요@거래를 완료하세요", + "payto.confirmPayment": "구매해 주셔서 감사드리며, 아래 안내에 따라 결제를 완료하세요.", + "payto.mandate.amount.label": "금액", + "payto.mandate.frequency.label": "빈도", + "payto.mandate.remarks.label": "설명", + "payto.mandate.startsAt.label": "첫 번째 결제 날짜", + "payto.mandate.endsAt.label": "종료일", + "payto.mandate.payee.label": "수취인", + "payto.mandate.amount.max": "거래당 최대 %{amount}", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count}건", + "payto.mandate.frequency.daily": "일별 결제 %{count}건", + "payto.mandate.frequency.weekly": "주별 결제 %{count}건", + "payto.mandate.frequency.biWeekly": "2주마다 결제 %{count}건", + "payto.mandate.frequency.monthly": "월별 결제 %{count}건", + "payto.mandate.frequency.quarterly": "분기별 결제 %{count}건", + "payto.mandate.frequency.halfYearly": "반년마다 결제 %{count}건", + "payto.mandate.frequency.yearly": "연간 결제 %{count}건", + "payto.label.firstName": "계좌 소유자 이름(이름)", + "payto.label.lastName": "계좌 소유자 성", + "payto.await.waitForConfirmation": "승인 대기 중" } \ No newline at end of file diff --git a/packages/server/translations/lt-LT.json b/packages/server/translations/lt-LT.json index a36b770469..45881a5bd0 100644 --- a/packages/server/translations/lt-LT.json +++ b/packages/server/translations/lt-LT.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Atidarykite „PayNow“ banko arba mokėjimo programėlę.", "paynow.mobileViewInstruction.step3": "Pasirinkite QR kodo nuskaitymo parinktį.", "paynow.mobileViewInstruction.step4": "Pasirinkite parinktį įkelti QR kodą ir pasirinkite ekrano nuotrauką.", - "paynow.mobileViewInstruction.step5": "Užbaikite operaciją." + "paynow.mobileViewInstruction.step5": "Užbaikite operaciją.", + "payto.payid.description": "Įveskite „PayID“ ir sąskaitos duomenis, susietus su jūsų „Payto“ sąskaita.", + "payto.payid.label.identifier": "Identifikatorius", + "payto.payid.label.orgid": "Organizacijos identifikatorius", + "payto.payid.option.phone": "Mobilusis telefonas", + "payto.payid.option.email": "El. paštas", + "payto.payid.option.orgid": "Organizacijos ID", + "payto.bsb.description": "Įveskite banko sąskaitos numerį ir banko filialo kodą, susietą su jūsų sąskaita, kad galėtumėte tęsti", + "payto.bsb.label.bankAccountNumber": "Banko sąskaitos numeris", + "payto.instructions.steps": "Prisijunkite prie „PayTo“ banko programėlės@Autorizuokite „PayTo“ sutartį@Patvirtinkite mokėjimo sąlygas@Užbaikite operaciją", + "payto.confirmPayment": "Dėkojame už pirkinį, atlikite mokėjimą vadovaudamiesi toliau pateiktais nurodymais.", + "payto.mandate.amount.label": "Suma", + "payto.mandate.frequency.label": "Dažnis", + "payto.mandate.remarks.label": "Aprašymas", + "payto.mandate.startsAt.label": "Pirmojo mokėjimo data", + "payto.mandate.endsAt.label": "Pabaigos data", + "payto.mandate.payee.label": "Gavėjas", + "payto.mandate.amount.max": "Iki %{amount} vienai operacijai", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} kartas (-ai; -ų)", + "payto.mandate.frequency.daily": "%{count} mokėjimas (-ai; -ų) kasdien", + "payto.mandate.frequency.weekly": "%{count} mokėjimas (-ai; -ų) kas savaitę", + "payto.mandate.frequency.biWeekly": "%{count} mokėjimas (-ai; -ų) kas dvi savaites", + "payto.mandate.frequency.monthly": "%{count} mokėjimas (-ai; -ų) kas mėnesį", + "payto.mandate.frequency.quarterly": "%{count} mokėjimas (-ai; -ų) kas ketvirtį", + "payto.mandate.frequency.halfYearly": "%{count} mokėjimas (-ai; -ų) kas pusmetį", + "payto.mandate.frequency.yearly": "%{count} mokėjimas (-ai; -ų) kas metus", + "payto.label.firstName": "Sąskaitos turėtojo vardas", + "payto.label.lastName": "Sąskaitos turėtojo pavardė", + "payto.await.waitForConfirmation": "Laukiama jūsų patvirtinimo" } \ No newline at end of file diff --git a/packages/server/translations/lv-LV.json b/packages/server/translations/lv-LV.json index b9bfd9ea3f..b3f290e84e 100644 --- a/packages/server/translations/lv-LV.json +++ b/packages/server/translations/lv-LV.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Atveriet PayNow banku vai maksājumu lietotni.", "paynow.mobileViewInstruction.step3": "Atlasiet opciju skenēt QR kodu.", "paynow.mobileViewInstruction.step4": "Izvēlieties opciju augšupielādēt QR kodu un veiciet ekrānuzņēmumu.", - "paynow.mobileViewInstruction.step5": "Pabeidziet darījumu." + "paynow.mobileViewInstruction.step5": "Pabeidziet darījumu.", + "payto.payid.description": "Ievadiet PayID un konta informāciju, kas ir savienota ar Jūsu Payto kontu.", + "payto.payid.label.identifier": "Identifikators", + "payto.payid.label.orgid": "Organizācijas ID", + "payto.payid.option.phone": "Mobilais", + "payto.payid.option.email": "E-pasts", + "payto.payid.option.orgid": "Organizācijas ID", + "payto.bsb.description": "Ievadiet bankas konta numuru un bankas valsts filiāli, kas ir saistīta ar jūsu kontu, lai turpinātu", + "payto.bsb.label.bankAccountNumber": "Bankas konta numurs", + "payto.instructions.steps": "Pierakstieties PayTo bankas lietotnē@Autorizējiet PayTo līgumu@Apstipriniet maksājuma noteikumus@Pabeidziet transakciju.", + "payto.confirmPayment": "Paldies par pirkumu, lūdzu, pabeidziet maksājumu, ievērojot tālāk sniegtos norādījumus.", + "payto.mandate.amount.label": "Summa", + "payto.mandate.frequency.label": "Biežums", + "payto.mandate.remarks.label": "Apraksts", + "payto.mandate.startsAt.label": "Pirmā maksājuma datums", + "payto.mandate.endsAt.label": "Beigu datums", + "payto.mandate.payee.label": "Saņēmējs", + "payto.mandate.amount.max": "Līdz %{amount} par vienu darījumu", + "payto.mandate.frequency.adhoc-no-count": "Speciāli", + "payto.mandate.frequency.adhoc": "%{count} reize(s)", + "payto.mandate.frequency.daily": "%{count} maksājums(-i) katru dienu", + "payto.mandate.frequency.weekly": "%{count} maksājums(-i) nedēļā", + "payto.mandate.frequency.biWeekly": "%{count} maksājums(-i) ik pēc divām nedēļām", + "payto.mandate.frequency.monthly": "%{count} maksājums(-i) mēnesī", + "payto.mandate.frequency.quarterly": "%{count} maksājums(-i) ceturksnī", + "payto.mandate.frequency.halfYearly": "%{count} maksājums(-i) divreiz gadā", + "payto.mandate.frequency.yearly": "%{count} maksājums(-i) gadā", + "payto.label.firstName": "Konta īpašnieka vārds", + "payto.label.lastName": "Konta īpašnieka uzvārds", + "payto.await.waitForConfirmation": "Gaida jūsu apstiprinājumu" } \ No newline at end of file diff --git a/packages/server/translations/nl-NL.json b/packages/server/translations/nl-NL.json index 692dee1f4e..8d3282f255 100644 --- a/packages/server/translations/nl-NL.json +++ b/packages/server/translations/nl-NL.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Open de bank- of betaalapp van PayNow.", "paynow.mobileViewInstruction.step3": "Selecteer de optie om een QR-code te scannen.", "paynow.mobileViewInstruction.step4": "Kies de optie om een QR-code te uploaden en selecteer de schermafbeelding.", - "paynow.mobileViewInstruction.step5": "Voltooi de transactie." + "paynow.mobileViewInstruction.step5": "Voltooi de transactie.", + "payto.payid.description": "Voer de PayID en accountgegevens in die gekoppeld zijn aan uw Payto-account.", + "payto.payid.label.identifier": "Identificator", + "payto.payid.label.orgid": "Organisatie-ID", + "payto.payid.option.phone": "Mobiele telefoon", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "Organisatie-ID", + "payto.bsb.description": "Voer het bankrekeningnummer en BSB in die aan uw rekening zijn gekoppeld om door te gaan", + "payto.bsb.label.bankAccountNumber": "Bankrekeningnummer", + "payto.instructions.steps": "Log in op uw PayTo-bankapp@Autoriseer de PayTo-overeenkomst@Keur de betalingsvoorwaarden goed@Voltooi de transactie", + "payto.confirmPayment": "Bedankt voor uw aankoop. Volg de onderstaande instructies om uw betaling te voltooien.", + "payto.mandate.amount.label": "Bedrag", + "payto.mandate.frequency.label": "Frequentie", + "payto.mandate.remarks.label": "Beschrijving", + "payto.mandate.startsAt.label": "Eerste betalingsdatum", + "payto.mandate.endsAt.label": "Einddatum", + "payto.mandate.payee.label": "Begunstigde", + "payto.mandate.amount.max": "Tot %{amount} per transactie toegestaan", + "payto.mandate.frequency.adhoc-no-count": "Ad hoc", + "payto.mandate.frequency.adhoc": "%{count} keer", + "payto.mandate.frequency.daily": "%{count} betaling(en) per dag", + "payto.mandate.frequency.weekly": "%{count} betaling(en) per week", + "payto.mandate.frequency.biWeekly": "%{count} betaling(en) om de twee weken", + "payto.mandate.frequency.monthly": "%{count} betaling(en) per maand", + "payto.mandate.frequency.quarterly": "%{count} betaling(en) per kwartaal", + "payto.mandate.frequency.halfYearly": "%{count} betaling(en) per half jaar", + "payto.mandate.frequency.yearly": "%{count} betaling(en) per jaar", + "payto.label.firstName": "Voornaam rekeninghouder", + "payto.label.lastName": "Achternaam rekeninghouder", + "payto.await.waitForConfirmation": "In afwachting van uw goedkeuring" } \ No newline at end of file diff --git a/packages/server/translations/no-NO.json b/packages/server/translations/no-NO.json index d80c3f0c45..9da87e4be1 100644 --- a/packages/server/translations/no-NO.json +++ b/packages/server/translations/no-NO.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Åpne PayNow-banken eller betalingsappen.", "paynow.mobileViewInstruction.step3": "Velg alternativet å skanne en QR-kode.", "paynow.mobileViewInstruction.step4": "Velg alternativet å laste opp en QR-kode og velge skjermbildet.", - "paynow.mobileViewInstruction.step5": "Fullfør transaksjonen." + "paynow.mobileViewInstruction.step5": "Fullfør transaksjonen.", + "payto.payid.description": "Skriv inn PayID og kontoopplysningene som er tilknyttet PayTo-kontoen din.", + "payto.payid.label.identifier": "Identifikator", + "payto.payid.label.orgid": "Organisasjons-ID", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-postadresse", + "payto.payid.option.orgid": "Organisasjons-ID", + "payto.bsb.description": "Skriv inn bankkontonummeret og Bank State Branch som er knyttet til kontoen din, for å fortsette", + "payto.bsb.label.bankAccountNumber": "Bankkontonummer", + "payto.instructions.steps": "Logg inn i PayTo-bankappen@Autoriser PayTo-avtalen@Godkjenn betalingsvilkårene@Fullfør transaksjonen", + "payto.confirmPayment": "Takk for kjøpet. Følg instruksjonene nedenfor for å fullføre betalingen.", + "payto.mandate.amount.label": "Beløp", + "payto.mandate.frequency.label": "Hyppighet", + "payto.mandate.remarks.label": "Beskrivelse", + "payto.mandate.startsAt.label": "Første betalingsdato", + "payto.mandate.endsAt.label": "Sluttdato", + "payto.mandate.payee.label": "Betalingsmottaker", + "payto.mandate.amount.max": "Opptil %{amount} per transaksjon", + "payto.mandate.frequency.adhoc-no-count": "Ad hoc", + "payto.mandate.frequency.adhoc": "%{count} gang(er)", + "payto.mandate.frequency.daily": "%{count} betaling(er) per dag", + "payto.mandate.frequency.weekly": "%{count} betaling(er) per uke", + "payto.mandate.frequency.biWeekly": "%{count} betaling(er) annenhver uke", + "payto.mandate.frequency.monthly": "%{count} betaling(er) per måned", + "payto.mandate.frequency.quarterly": "%{count} betaling(er) per kvartal", + "payto.mandate.frequency.halfYearly": "%{count} betaling(er) per halvår", + "payto.mandate.frequency.yearly": "%{count} betaling(er) per år", + "payto.label.firstName": "Kontoinnehaverens fornavn", + "payto.label.lastName": "Kontoinnehaverens etternavn", + "payto.await.waitForConfirmation": "Venter på godkjenningen din" } \ No newline at end of file diff --git a/packages/server/translations/pl-PL.json b/packages/server/translations/pl-PL.json index 4a31d7d4bc..ca0758e5d5 100644 --- a/packages/server/translations/pl-PL.json +++ b/packages/server/translations/pl-PL.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Otwórz aplikację bankową lub płatniczą PayNow.", "paynow.mobileViewInstruction.step3": "Wybierz opcję zeskanowania kodu QR.", "paynow.mobileViewInstruction.step4": "Wybierz opcję przesłania kodu QR i wybierz zrzut ekranu.", - "paynow.mobileViewInstruction.step5": "Sfinalizuj transakcję." + "paynow.mobileViewInstruction.step5": "Sfinalizuj transakcję.", + "payto.payid.description": "Wprowadź PayID i dane konta powiązane z Twoim kontem Payto.", + "payto.payid.label.identifier": "Identyfikator", + "payto.payid.label.orgid": "Identyfikator organizacji", + "payto.payid.option.phone": "Telefon komórkowy", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "Identyfikator organizacji", + "payto.bsb.description": "Aby kontynuować, wprowadź numer konta bankowego i oddział banku, który jest powiązany z Twoim kontem", + "payto.bsb.label.bankAccountNumber": "Numer rachunku", + "payto.instructions.steps": "Zaloguj się do aplikacji bankowej PayTo@Autoryzuj umowę PayTo@Zatwierdź warunki płatności@Dokończ transakcję", + "payto.confirmPayment": "Dziękujemy za zakup, dokończ płatność, postępując zgodnie z poniższymi instrukcjami.", + "payto.mandate.amount.label": "Kwota", + "payto.mandate.frequency.label": "Częstotliwość", + "payto.mandate.remarks.label": "Opis", + "payto.mandate.startsAt.label": "Data pierwszej płatności", + "payto.mandate.endsAt.label": "Data zakończenia", + "payto.mandate.payee.label": "Odbiorca", + "payto.mandate.amount.max": "Do %{amount} na transakcję", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} raz(y)", + "payto.mandate.frequency.daily": "%{count} płatności dziennie", + "payto.mandate.frequency.weekly": "%{count} płatności tygodniowo", + "payto.mandate.frequency.biWeekly": "%{count} płatności co dwa tygodnie", + "payto.mandate.frequency.monthly": "%{count} płatności miesięcznie", + "payto.mandate.frequency.quarterly": "%{count} płatności kwartalnie", + "payto.mandate.frequency.halfYearly": "%{count} płatności co pół roku", + "payto.mandate.frequency.yearly": "%{count} płatności rocznie", + "payto.label.firstName": "Imię posiadacza rachunku", + "payto.label.lastName": "Nazwisko posiadacza rachunku", + "payto.await.waitForConfirmation": "Oczekiwanie na Twoją zgodę" } \ No newline at end of file diff --git a/packages/server/translations/pt-BR.json b/packages/server/translations/pt-BR.json index 7ce2386a10..3a351f6379 100644 --- a/packages/server/translations/pt-BR.json +++ b/packages/server/translations/pt-BR.json @@ -323,5 +323,34 @@ "paynow.mobileViewInstruction.step2": "Abra o banco PayNow ou o aplicativo de pagamento.", "paynow.mobileViewInstruction.step3": "Selecione a opção para escanear um código QR.", "paynow.mobileViewInstruction.step4": "Escolha a opção para carregar um QR e selecione a captura de tela.", - "paynow.mobileViewInstruction.step5": "Conclua a transação." + "paynow.mobileViewInstruction.step5": "Conclua a transação.", + "payto.payid.description": "Digite o PayID e as informações da conta associados à sua conta Payto.", + "payto.payid.label.identifier": "Identificador", + "payto.payid.label.orgid": "ID da organização", + "payto.payid.option.phone": "Dispositivo móvel", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID da organização", + "payto.bsb.description": "Informe o número da conta bancária e a agência bancária estadual associada à sua conta para continuar", + "payto.bsb.label.bankAccountNumber": "Número da conta bancária", + "payto.instructions.steps": "Faça login no seu aplicativo bancário PayTo para@Autorizar o acordo PayTo@Aprovar os termos de pagamentos@Concluir a transação", + "payto.confirmPayment": "Obrigado pela sua compra! Siga as instruções abaixo para concluir o pagamento.", + "payto.mandate.amount.label": "Valor", + "payto.mandate.frequency.label": "Frequência", + "payto.mandate.remarks.label": "Descrição", + "payto.mandate.startsAt.label": "Primeira data de pagamento", + "payto.mandate.endsAt.label": "Data de término", + "payto.mandate.payee.label": "Beneficiário", + "payto.mandate.amount.max": "Até %{amount} por transação", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} vezes", + "payto.mandate.frequency.daily": "%{count} pagamento(s) por dia", + "payto.mandate.frequency.weekly": "%{count} pagamento(s) por semana", + "payto.mandate.frequency.biWeekly": "%{count} pagamento(s) por quinzena", + "payto.mandate.frequency.monthly": "%{count} pagamento(s) por mês", + "payto.mandate.frequency.quarterly": "%{count} pagamento(s) por trimestre", + "payto.mandate.frequency.halfYearly": "%{count} pagamento(s) por biênio", + "payto.mandate.frequency.yearly": "%{count} pagamento(s) por ano", + "payto.label.firstName": "Nome do titular da conta", + "payto.label.lastName": "Sobrenome do titular da conta", + "payto.await.waitForConfirmation": "Aguardando sua aprovação" } \ No newline at end of file diff --git a/packages/server/translations/pt-PT.json b/packages/server/translations/pt-PT.json index ab54f80830..7a274b192a 100644 --- a/packages/server/translations/pt-PT.json +++ b/packages/server/translations/pt-PT.json @@ -324,5 +324,34 @@ "paynow.mobileViewInstruction.step2": "Abra a aplicação bancária ou de pagamento da PayNow.", "paynow.mobileViewInstruction.step3": "Selecione a opção para ler um código QR.", "paynow.mobileViewInstruction.step4": "Escolha a opção para carregar um QR e selecione a captura de ecrã.", - "paynow.mobileViewInstruction.step5": "Conclua a transação." + "paynow.mobileViewInstruction.step5": "Conclua a transação.", + "payto.payid.description": "Introduza o PayID e os dados da conta que estão ligados à sua conta Payto.", + "payto.payid.label.identifier": "Identificador", + "payto.payid.label.orgid": "ID da Organização", + "payto.payid.option.phone": "Celular", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID da Organização", + "payto.bsb.description": "Para continuar, insira o número da conta e a agência bancária associadas à sua conta", + "payto.bsb.label.bankAccountNumber": "Número da conta bancária", + "payto.instructions.steps": "Inicie sessão na sua aplicação bancária PayTo@Autorize o contrato PayTo@Aprove os termos de pagamento@Conclua a transação", + "payto.confirmPayment": "Agradecemos a sua compra, conclua o pagamento ao seguir as instruções abaixo.", + "payto.mandate.amount.label": "Valor", + "payto.mandate.frequency.label": "Frequência", + "payto.mandate.remarks.label": "Descrição", + "payto.mandate.startsAt.label": "Data do primeiro pagamento", + "payto.mandate.endsAt.label": "Data de fim", + "payto.mandate.payee.label": "Beneficiário", + "payto.mandate.amount.max": "Até %{amount} por transação", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} vez(es)", + "payto.mandate.frequency.daily": "%{count} pagamentos diários", + "payto.mandate.frequency.weekly": "%{count} pagamentos semanais", + "payto.mandate.frequency.biWeekly": "%{count} pagamentos quinzenais", + "payto.mandate.frequency.monthly": "%{count} pagamentos mensais", + "payto.mandate.frequency.quarterly": "%{count} pagamentos trimestrais", + "payto.mandate.frequency.halfYearly": "%{count} pagamentos semestrais", + "payto.mandate.frequency.yearly": "%{count} pagamentos anuais", + "payto.label.firstName": "Nome próprio do titular da conta", + "payto.label.lastName": "Sobrenome do titular da conta", + "payto.await.waitForConfirmation": "Aguardando sua aprovação" } \ No newline at end of file diff --git a/packages/server/translations/ro-RO.json b/packages/server/translations/ro-RO.json index 733266aecd..32c1a0cf2a 100644 --- a/packages/server/translations/ro-RO.json +++ b/packages/server/translations/ro-RO.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Deschideți aplicația bancară sau de plată PayNow.", "paynow.mobileViewInstruction.step3": "Selectați opțiunea pentru a scana un cod QR.", "paynow.mobileViewInstruction.step4": "Alegeți opțiunea de a încărca un QR și selectați captura de ecran.", - "paynow.mobileViewInstruction.step5": "Finalizați tranzacția." + "paynow.mobileViewInstruction.step5": "Finalizați tranzacția.", + "payto.payid.description": "Completați PayID și detaliile contului care sunt conectate la contul dvs. Payto.", + "payto.payid.label.identifier": "Identificator", + "payto.payid.label.orgid": "ID organizație", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID organizație", + "payto.bsb.description": "Pentru a continua, introduceți numărul contului bancar și sucursala băncii de stat care este asociată cu contul dvs.", + "payto.bsb.label.bankAccountNumber": "Numărul contului bancar", + "payto.instructions.steps": "Conectați-vă la aplicația dvs. bancară PayTo. Acceptați acordul PayTo. Aprobați condițiile de plată. Finalizați tranzacția.", + "payto.confirmPayment": "Vă mulțumim pentru achiziție, finalizați plata urmând instrucțiunile de mai jos.", + "payto.mandate.amount.label": "Sumă", + "payto.mandate.frequency.label": "Frecvență", + "payto.mandate.remarks.label": "Descriere", + "payto.mandate.startsAt.label": "Data primei plăți", + "payto.mandate.endsAt.label": "Data de sfârșit", + "payto.mandate.payee.label": "Beneficiarul plății", + "payto.mandate.amount.max": "Până la %{amount} per tranzacție", + "payto.mandate.frequency.adhoc-no-count": "Ad-hoc", + "payto.mandate.frequency.adhoc": "%{count} dată/dăți", + "payto.mandate.frequency.daily": "%{count} plată/plăți zilnice", + "payto.mandate.frequency.weekly": "%{count} plată/plăți săptămânale", + "payto.mandate.frequency.biWeekly": "%{count} plată/plăți bilunare", + "payto.mandate.frequency.monthly": "%{count} plată/plăți lunare", + "payto.mandate.frequency.quarterly": "%{count} plată/plăți trimestriale", + "payto.mandate.frequency.halfYearly": "%{count} plată/plăți semestriale", + "payto.mandate.frequency.yearly": "%{count} plată/plăți anuale", + "payto.label.firstName": "Prenumele titularului de cont", + "payto.label.lastName": "Numele de familie al titularului de cont", + "payto.await.waitForConfirmation": "Se așteaptă aprobarea dvs." } \ No newline at end of file diff --git a/packages/server/translations/ru-RU.json b/packages/server/translations/ru-RU.json index 0cf75394fa..3dd0aba1bb 100644 --- a/packages/server/translations/ru-RU.json +++ b/packages/server/translations/ru-RU.json @@ -320,5 +320,34 @@ "paynow.mobileViewInstruction.step2": "Откройте банковское или платежное приложение PayNow.", "paynow.mobileViewInstruction.step3": "Выберите опцию сканирования QR-кода.", "paynow.mobileViewInstruction.step4": "Выберите опцию загрузки QR-кода и скриншот.", - "paynow.mobileViewInstruction.step5": "Завершите транзакцию." + "paynow.mobileViewInstruction.step5": "Завершите транзакцию.", + "payto.payid.description": "Введите PayID и данные счета, которые связаны с вашей учетной записью Payto.", + "payto.payid.label.identifier": "Идентификатор", + "payto.payid.label.orgid": "Идентификатор организации", + "payto.payid.option.phone": "Мобильный", + "payto.payid.option.email": "Эл. почта", + "payto.payid.option.orgid": "Идентификатор организации", + "payto.bsb.description": "Введите номер банковского счета и отделение банка, связанное с вашим счетом, чтобы продолжить", + "payto.bsb.label.bankAccountNumber": "Номер банковского счета", + "payto.instructions.steps": "Войдите в банковское приложение PayTo@Подпишите соглашение PayTo@Одобрите условия оплаты@Завершите транзакцию", + "payto.confirmPayment": "Благодарим за покупку. Завершите оплату, следуя инструкциям ниже.", + "payto.mandate.amount.label": "Сумма", + "payto.mandate.frequency.label": "Частота", + "payto.mandate.remarks.label": "Описание", + "payto.mandate.startsAt.label": "Дата первого платежа", + "payto.mandate.endsAt.label": "Дата окончания", + "payto.mandate.payee.label": "Получатель", + "payto.mandate.amount.max": "До %{amount} на одну транзакцию", + "payto.mandate.frequency.adhoc-no-count": "По необходимости", + "payto.mandate.frequency.adhoc": "%{count} раз(а)", + "payto.mandate.frequency.daily": "Платежей за день: %{count}", + "payto.mandate.frequency.weekly": "Платежей за неделю: %{count}", + "payto.mandate.frequency.biWeekly": "Платежей за две недели: %{count}", + "payto.mandate.frequency.monthly": "Платежей за месяц %{count}", + "payto.mandate.frequency.quarterly": "Платежей за квартал: %{count}", + "payto.mandate.frequency.halfYearly": "Платежей за полгода: %{count}", + "payto.mandate.frequency.yearly": "Платежей за год: %{count}", + "payto.label.firstName": "Имя владельца счета", + "payto.label.lastName": "Фамилия владельца счета", + "payto.await.waitForConfirmation": "В ожидании вашего одобрения" } \ No newline at end of file diff --git a/packages/server/translations/sk-SK.json b/packages/server/translations/sk-SK.json index a319f80ed4..f9a041a723 100644 --- a/packages/server/translations/sk-SK.json +++ b/packages/server/translations/sk-SK.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Otvorte banku alebo platobnú aplikáciu PayNow.", "paynow.mobileViewInstruction.step3": "Vyberte možnosť na nasnímanie QR kódu.", "paynow.mobileViewInstruction.step4": "Vyberte možnosť nahrať QR kód a vyberte snímku obrazovky.", - "paynow.mobileViewInstruction.step5": "Dokončite transakciu." + "paynow.mobileViewInstruction.step5": "Dokončite transakciu.", + "payto.payid.description": "Zadajte PayID a údaje o účte, ktoré sú pripojené k vášmu účtu Payto.", + "payto.payid.label.identifier": "Identifikátor", + "payto.payid.label.orgid": "ID organizácie", + "payto.payid.option.phone": "Mobilný telefón", + "payto.payid.option.email": "E-mail", + "payto.payid.option.orgid": "ID organizácie", + "payto.bsb.description": "Pokračujte zadaním čísla bankového účtu a pobočky banky, ktorá je pripojená k vášmu účtu", + "payto.bsb.label.bankAccountNumber": "Číslo bankového účtu", + "payto.instructions.steps": "Prihláste sa do svojej bankovej aplikácie PayTo@Autorizujte zmluvu s PayTo@Schváľte podmienky platby@Dokončite transakciu", + "payto.confirmPayment": "Ďakujeme vám za nákup, dokončite platbu podľa nižšie uvedených pokynov.", + "payto.mandate.amount.label": "Čiastka", + "payto.mandate.frequency.label": "Frekvencia", + "payto.mandate.remarks.label": "Opis", + "payto.mandate.startsAt.label": "Dátum prvej platby", + "payto.mandate.endsAt.label": "Dátum ukončenia", + "payto.mandate.payee.label": "Príjemca", + "payto.mandate.amount.max": "Maximálne %{amount} na jednu transakciu", + "payto.mandate.frequency.adhoc-no-count": "Ad Hoc", + "payto.mandate.frequency.adhoc": "%{count} krát", + "payto.mandate.frequency.daily": "%{count} platba(y/ieb) denne", + "payto.mandate.frequency.weekly": "%{count} platba(y/ieb) týždenne", + "payto.mandate.frequency.biWeekly": "%{count} platba(y/ieb) každé dva týždne", + "payto.mandate.frequency.monthly": "%{count} platba(y/ieb) mesačne", + "payto.mandate.frequency.quarterly": "%{count} platba(y/ieb) štvrťročne", + "payto.mandate.frequency.halfYearly": "%{count} platba(y/ieb) polročne", + "payto.mandate.frequency.yearly": "%{count} platba(y/ieb) ročne", + "payto.label.firstName": "Krstné meno majiteľa účtu", + "payto.label.lastName": "Priezvisko majiteľa účtu", + "payto.await.waitForConfirmation": "Čakáme na váš súhlas" } \ No newline at end of file diff --git a/packages/server/translations/sl-SI.json b/packages/server/translations/sl-SI.json index 6fc565d231..c4211a0848 100644 --- a/packages/server/translations/sl-SI.json +++ b/packages/server/translations/sl-SI.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Odprite banko PayNow ali aplikacijo za plačevanje.", "paynow.mobileViewInstruction.step3": "Izberite možnost za skeniranje kode QR.", "paynow.mobileViewInstruction.step4": "Izberite možnost za nalaganje QR in izberite posnetek zaslona.", - "paynow.mobileViewInstruction.step5": "Zaključite transakcijo." + "paynow.mobileViewInstruction.step5": "Zaključite transakcijo.", + "payto.payid.description": "Vnesite PayID in podrobnosti o računu, ki so povezani z vašim računom PayTo.", + "payto.payid.label.identifier": "Identifikator", + "payto.payid.label.orgid": "ID organizacije", + "payto.payid.option.phone": "Mobilni telefon", + "payto.payid.option.email": "E-pošta", + "payto.payid.option.orgid": "ID organizacije", + "payto.bsb.description": "Za nadaljevanje vnesite številko bančnega računa in podružnico banke, ki sta povezani z vašim računom", + "payto.bsb.label.bankAccountNumber": "Številka bančnega računa", + "payto.instructions.steps": "Prijavite se v bančno aplikacijo PayTo@Sprejmite pogodbo PayTo@Potrdite plačilne pogoje@Zaključite transakcijo", + "payto.confirmPayment": "Zahvaljujemo se vam za nakup. Izvedite plačilo po spodnjih navodilih.", + "payto.mandate.amount.label": "Znesek", + "payto.mandate.frequency.label": "Pogostost", + "payto.mandate.remarks.label": "Opis", + "payto.mandate.startsAt.label": "Datum prvega plačila", + "payto.mandate.endsAt.label": "Končni datum", + "payto.mandate.payee.label": "Prejemnik plačila", + "payto.mandate.amount.max": "Do %{amount} na transakcijo", + "payto.mandate.frequency.adhoc-no-count": "Enkratno plačilo", + "payto.mandate.frequency.adhoc": "%{count}-krat", + "payto.mandate.frequency.daily": "Št. plačil na dan: %{count}", + "payto.mandate.frequency.weekly": "Št. plačil na teden: %{count}", + "payto.mandate.frequency.biWeekly": "Št. plačil na 14 dni: %{count}", + "payto.mandate.frequency.monthly": "Št. plačil na mesec: %{count}", + "payto.mandate.frequency.quarterly": "Št. plačil na četrtletje: %{count}", + "payto.mandate.frequency.halfYearly": "Št. plačil na polletje: %{count}", + "payto.mandate.frequency.yearly": "Št. plačil na leto: %{count}", + "payto.label.firstName": "Ime imetnika računa", + "payto.label.lastName": "Priimek imetnika računa", + "payto.await.waitForConfirmation": "Čakanje na vašo odobritev" } \ No newline at end of file diff --git a/packages/server/translations/sv-SE.json b/packages/server/translations/sv-SE.json index f79eab59d9..e63ca5304c 100644 --- a/packages/server/translations/sv-SE.json +++ b/packages/server/translations/sv-SE.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "Öppna PayNow-banken eller betalningsappen.", "paynow.mobileViewInstruction.step3": "Välj alternativet för att skanna en QR-kod.", "paynow.mobileViewInstruction.step4": "Välj alternativet att ladda upp en QR och välj skärmdumpen.", - "paynow.mobileViewInstruction.step5": "Slutför transaktionen." + "paynow.mobileViewInstruction.step5": "Slutför transaktionen.", + "payto.payid.description": "Ange PayID och kontouppgifter för Payto-kontot.", + "payto.payid.label.identifier": "Identifierare", + "payto.payid.label.orgid": "Organisations-id", + "payto.payid.option.phone": "Mobil", + "payto.payid.option.email": "E-postadress", + "payto.payid.option.orgid": "Organisations-id", + "payto.bsb.description": "Ange bankkontonumret och det bankkontor som är kopplat till ditt konto för att fortsätta", + "payto.bsb.label.bankAccountNumber": "Bankkontonummer", + "payto.instructions.steps": "Logga in på din PayTo-bankapp@Godkänn PayTo-avtalet@Godkänn betalningsvillkoren@Slutför transaktionen", + "payto.confirmPayment": "Tack för ditt köp. Slutför betalningen genom att följa instruktionerna nedan.", + "payto.mandate.amount.label": "Belopp", + "payto.mandate.frequency.label": "Frekvens", + "payto.mandate.remarks.label": "Beskrivning", + "payto.mandate.startsAt.label": "Första betalningsdatum", + "payto.mandate.endsAt.label": "Slutdatum", + "payto.mandate.payee.label": "Betalningsmottagare", + "payto.mandate.amount.max": "Upp till %{amount} per transaktion", + "payto.mandate.frequency.adhoc-no-count": "Ad hoc", + "payto.mandate.frequency.adhoc": "%{count} gång(er)", + "payto.mandate.frequency.daily": "%{count} betalning(ar) dagligen", + "payto.mandate.frequency.weekly": "%{count} betalning(ar) varje vecka", + "payto.mandate.frequency.biWeekly": "%{count} betalning(ar) varannan vecka", + "payto.mandate.frequency.monthly": "%{count} betalning(ar) i månaden", + "payto.mandate.frequency.quarterly": "%{count} betalning(ar) kvartalsvis", + "payto.mandate.frequency.halfYearly": "%{count} betalning(ar) halvårsvis", + "payto.mandate.frequency.yearly": "%{count} betalning(ar) om året", + "payto.label.firstName": "Kontoinnehavarens förnamn", + "payto.label.lastName": "Kontoinnehavarens efternamn", + "payto.await.waitForConfirmation": "Väntar på ditt godkännande" } \ No newline at end of file diff --git a/packages/server/translations/zh-CN.json b/packages/server/translations/zh-CN.json index 215e396ecd..e26f6179d5 100644 --- a/packages/server/translations/zh-CN.json +++ b/packages/server/translations/zh-CN.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "打开 PayNow 银行或支付应用程序。", "paynow.mobileViewInstruction.step3": "选择扫描二维码的选项。", "paynow.mobileViewInstruction.step4": "选择上传二维码选项并选择截图。", - "paynow.mobileViewInstruction.step5": "完成交易。" + "paynow.mobileViewInstruction.step5": "完成交易。", + "payto.payid.description": "请输入与您的 Payto 账户关联的 PayID 和账户详细信息。", + "payto.payid.label.identifier": "标识符", + "payto.payid.label.orgid": "组织 ID", + "payto.payid.option.phone": "移动设备", + "payto.payid.option.email": "电子邮件", + "payto.payid.option.orgid": "组织 ID", + "payto.bsb.description": "请输入银行账号和与您的账户关联的银行州分行以继续", + "payto.bsb.label.bankAccountNumber": "银行账号", + "payto.instructions.steps": "登录您的 PayTo 银行应用程序@授权 PayTo 协议@批准支付条款@完成交易", + "payto.confirmPayment": "感谢您的购买,请按照以下说明完成支付。", + "payto.mandate.amount.label": "金额", + "payto.mandate.frequency.label": "频率", + "payto.mandate.remarks.label": "描述", + "payto.mandate.startsAt.label": "首次支付日期", + "payto.mandate.endsAt.label": "结束日期", + "payto.mandate.payee.label": "收款人", + "payto.mandate.amount.max": "每笔交易的最大金额为 %{amount}", + "payto.mandate.frequency.adhoc-no-count": "临时", + "payto.mandate.frequency.adhoc": "%{count} 次", + "payto.mandate.frequency.daily": "每日 %{count} 笔付款", + "payto.mandate.frequency.weekly": "每周 %{count} 笔付款", + "payto.mandate.frequency.biWeekly": "每每两周 %{count} 笔付款", + "payto.mandate.frequency.monthly": "每月 %{count} 笔付款", + "payto.mandate.frequency.quarterly": "每季度 %{count} 笔付款", + "payto.mandate.frequency.halfYearly": "每每半年 %{count} 笔付款", + "payto.mandate.frequency.yearly": "每年 %{count} 笔付款", + "payto.label.firstName": "账户持有人名字", + "payto.label.lastName": "账户持有人姓氏", + "payto.await.waitForConfirmation": "等待您的批准…" } \ No newline at end of file diff --git a/packages/server/translations/zh-TW.json b/packages/server/translations/zh-TW.json index 378159e0ce..68af07079f 100644 --- a/packages/server/translations/zh-TW.json +++ b/packages/server/translations/zh-TW.json @@ -322,5 +322,34 @@ "paynow.mobileViewInstruction.step2": "開啟 PayNow 銀行或支付應用程式。", "paynow.mobileViewInstruction.step3": "選取掃描 QR 代碼的選項。", "paynow.mobileViewInstruction.step4": "選擇上傳 QR 代碼的選項並選取此螢幕擷取畫面。", - "paynow.mobileViewInstruction.step5": "完成此交易。" + "paynow.mobileViewInstruction.step5": "完成此交易。", + "payto.payid.description": "請輸入與 Payto 帳戶相連的 PayID 和帳戶詳情。", + "payto.payid.label.identifier": "識別碼", + "payto.payid.label.orgid": "組織 ID", + "payto.payid.option.phone": "手機", + "payto.payid.option.email": "電子郵件", + "payto.payid.option.orgid": "組織 ID", + "payto.bsb.description": "請輸入銀行帳號以及您帳戶的銀行分行代碼以繼續至下一步", + "payto.bsb.label.bankAccountNumber": "銀行帳戶號碼", + "payto.instructions.steps": "登入您的 PayTo 金融應用程式@授權《PayTo 協議》@同意《付款條款》@完成交易", + "payto.confirmPayment": "感謝您的購買,敬請依照以下的指示來完成付款。", + "payto.mandate.amount.label": "金額", + "payto.mandate.frequency.label": "頻率", + "payto.mandate.remarks.label": "說明", + "payto.mandate.startsAt.label": "首次付款日期", + "payto.mandate.endsAt.label": "結束日期", + "payto.mandate.payee.label": "受款人", + "payto.mandate.amount.max": "每筆交易的金額上限為 %{amount}", + "payto.mandate.frequency.adhoc-no-count": "隨選", + "payto.mandate.frequency.adhoc": "%{count} 次", + "payto.mandate.frequency.daily": "每日 %{count} 筆付款", + "payto.mandate.frequency.weekly": "%{count} 筆付款(每週)", + "payto.mandate.frequency.biWeekly": "每兩週 %{count} 筆付款", + "payto.mandate.frequency.monthly": "每月 %{count} 筆付款", + "payto.mandate.frequency.quarterly": "每季 %{count} 筆付款", + "payto.mandate.frequency.halfYearly": "每半年 %{count} 筆付款", + "payto.mandate.frequency.yearly": "每年 %{count} 筆付款", + "payto.label.firstName": "帳戶持有人名字", + "payto.label.lastName": "帳戶持有人的姓氏", + "payto.await.waitForConfirmation": "正在等待您的核准" } \ No newline at end of file From 2a7a63c70418c17f3a23ed62f54ff58d8eedeffe Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 15:08:15 +0100 Subject: [PATCH 16/20] add changeset --- .changeset/silent-turtles-walk.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silent-turtles-walk.md diff --git a/.changeset/silent-turtles-walk.md b/.changeset/silent-turtles-walk.md new file mode 100644 index 0000000000..543bf22035 --- /dev/null +++ b/.changeset/silent-turtles-walk.md @@ -0,0 +1,5 @@ +--- +'@adyen/adyen-web': minor +--- + +Feature: New PayTo payment method From f89583518dc8e8fb3f9f404df7850b265a0c5bae Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 16:59:37 +0100 Subject: [PATCH 17/20] fix broken e2e --- packages/lib/.storybook/preview.tsx | 12 +- .../lib/storybook/public/mockServiceWorker.js | 302 ------------------ .../stories/components/PayTo.stories.tsx | 24 +- 3 files changed, 18 insertions(+), 320 deletions(-) delete mode 100644 packages/lib/storybook/public/mockServiceWorker.js diff --git a/packages/lib/.storybook/preview.tsx b/packages/lib/.storybook/preview.tsx index d210f21516..938ce76ffb 100644 --- a/packages/lib/.storybook/preview.tsx +++ b/packages/lib/.storybook/preview.tsx @@ -1,12 +1,12 @@ import './main.css'; import { Preview } from '@storybook/preact'; import { DEFAULT_COUNTRY_CODE, DEFAULT_SHOPPER_LOCALE, DEFAULT_AMOUNT_VALUE, SHOPPER_LOCALES } from '../storybook/config/commonConfig'; -import { initialize as initializeMSW, mswLoader } from 'msw-storybook-addon'; +//import { initialize as initializeMSW, mswLoader } from 'msw-storybook-addon'; // from the docs: https://github.com/mswjs/msw-storybook-addon -initializeMSW({ - onUnhandledRequest: 'bypass' -}); +// initializeMSW({ +// onUnhandledRequest: 'bypass' +// }); const preview: Preview = { argTypes: { @@ -33,8 +33,8 @@ const preview: Preview = { shopperLocale: DEFAULT_SHOPPER_LOCALE, amount: DEFAULT_AMOUNT_VALUE, showPayButton: true - }, - loaders: [mswLoader] + } + //loaders: [mswLoader] }; export default preview; diff --git a/packages/lib/storybook/public/mockServiceWorker.js b/packages/lib/storybook/public/mockServiceWorker.js deleted file mode 100644 index 4c0b038ee9..0000000000 --- a/packages/lib/storybook/public/mockServiceWorker.js +++ /dev/null @@ -1,302 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ - -/** - * Mock Service Worker. - * @see https://github.com/mswjs/msw - * - Please do NOT modify this file. - * - Please do NOT serve this file on production. - */ - -const PACKAGE_VERSION = '2.7.0'; -const INTEGRITY_CHECKSUM = '00729d72e3b82faf54ca8b9621dbb96f'; -const IS_MOCKED_RESPONSE = Symbol('isMockedResponse'); -const activeClientIds = new Set(); - -self.addEventListener('install', function () { - self.skipWaiting(); -}); - -self.addEventListener('activate', function (event) { - event.waitUntil(self.clients.claim()); -}); - -self.addEventListener('message', async function (event) { - const clientId = event.source.id; - - if (!clientId || !self.clients) { - return; - } - - const client = await self.clients.get(clientId); - - if (!client) { - return; - } - - const allClients = await self.clients.matchAll({ - type: 'window' - }); - - switch (event.data) { - case 'KEEPALIVE_REQUEST': { - sendToClient(client, { - type: 'KEEPALIVE_RESPONSE' - }); - break; - } - - case 'INTEGRITY_CHECK_REQUEST': { - sendToClient(client, { - type: 'INTEGRITY_CHECK_RESPONSE', - payload: { - packageVersion: PACKAGE_VERSION, - checksum: INTEGRITY_CHECKSUM - } - }); - break; - } - - case 'MOCK_ACTIVATE': { - activeClientIds.add(clientId); - - sendToClient(client, { - type: 'MOCKING_ENABLED', - payload: { - client: { - id: client.id, - frameType: client.frameType - } - } - }); - break; - } - - case 'MOCK_DEACTIVATE': { - activeClientIds.delete(clientId); - break; - } - - case 'CLIENT_CLOSED': { - activeClientIds.delete(clientId); - - const remainingClients = allClients.filter(client => { - return client.id !== clientId; - }); - - // Unregister itself when there are no more clients - if (remainingClients.length === 0) { - self.registration.unregister(); - } - - break; - } - } -}); - -self.addEventListener('fetch', function (event) { - const { request } = event; - - // Bypass navigation requests. - if (request.mode === 'navigate') { - return; - } - - // Opening the DevTools triggers the "only-if-cached" request - // that cannot be handled by the worker. Bypass such requests. - if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { - return; - } - - // Bypass all requests when there are no active clients. - // Prevents the self-unregistered worked from handling requests - // after it's been deleted (still remains active until the next reload). - if (activeClientIds.size === 0) { - return; - } - - // Generate unique request ID. - const requestId = crypto.randomUUID(); - event.respondWith(handleRequest(event, requestId)); -}); - -async function handleRequest(event, requestId) { - const client = await resolveMainClient(event); - const response = await getResponse(event, client, requestId); - - // Send back the response clone for the "response:*" life-cycle events. - // Ensure MSW is active and ready to handle the message, otherwise - // this message will pend indefinitely. - if (client && activeClientIds.has(client.id)) { - (async function () { - const responseClone = response.clone(); - - sendToClient( - client, - { - type: 'RESPONSE', - payload: { - requestId, - isMockedResponse: IS_MOCKED_RESPONSE in response, - type: responseClone.type, - status: responseClone.status, - statusText: responseClone.statusText, - body: responseClone.body, - headers: Object.fromEntries(responseClone.headers.entries()) - } - }, - [responseClone.body] - ); - })(); - } - - return response; -} - -// Resolve the main client for the given event. -// Client that issues a request doesn't necessarily equal the client -// that registered the worker. It's with the latter the worker should -// communicate with during the response resolving phase. -async function resolveMainClient(event) { - const client = await self.clients.get(event.clientId); - - if (activeClientIds.has(event.clientId)) { - return client; - } - - if (client?.frameType === 'top-level') { - return client; - } - - const allClients = await self.clients.matchAll({ - type: 'window' - }); - - return allClients - .filter(client => { - // Get only those clients that are currently visible. - return client.visibilityState === 'visible'; - }) - .find(client => { - // Find the client ID that's recorded in the - // set of clients that have registered the worker. - return activeClientIds.has(client.id); - }); -} - -async function getResponse(event, client, requestId) { - const { request } = event; - - // Clone the request because it might've been already used - // (i.e. its body has been read and sent to the client). - const requestClone = request.clone(); - - function passthrough() { - // Cast the request headers to a new Headers instance - // so the headers can be manipulated with. - const headers = new Headers(requestClone.headers); - - // Remove the "accept" header value that marked this request as passthrough. - // This prevents request alteration and also keeps it compliant with the - // user-defined CORS policies. - const acceptHeader = headers.get('accept'); - if (acceptHeader) { - const values = acceptHeader.split(',').map(value => value.trim()); - const filteredValues = values.filter(value => value !== 'msw/passthrough'); - - if (filteredValues.length > 0) { - headers.set('accept', filteredValues.join(', ')); - } else { - headers.delete('accept'); - } - } - - return fetch(requestClone, { headers }); - } - - // Bypass mocking when the client is not active. - if (!client) { - return passthrough(); - } - - // Bypass initial page load requests (i.e. static assets). - // The absence of the immediate/parent client in the map of the active clients - // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet - // and is not ready to handle requests. - if (!activeClientIds.has(client.id)) { - return passthrough(); - } - - // Notify the client that a request has been intercepted. - const requestBuffer = await request.arrayBuffer(); - const clientMessage = await sendToClient( - client, - { - type: 'REQUEST', - payload: { - id: requestId, - url: request.url, - mode: request.mode, - method: request.method, - headers: Object.fromEntries(request.headers.entries()), - cache: request.cache, - credentials: request.credentials, - destination: request.destination, - integrity: request.integrity, - redirect: request.redirect, - referrer: request.referrer, - referrerPolicy: request.referrerPolicy, - body: requestBuffer, - keepalive: request.keepalive - } - }, - [requestBuffer] - ); - - switch (clientMessage.type) { - case 'MOCK_RESPONSE': { - return respondWithMock(clientMessage.data); - } - - case 'PASSTHROUGH': { - return passthrough(); - } - } - - return passthrough(); -} - -function sendToClient(client, message, transferrables = []) { - return new Promise((resolve, reject) => { - const channel = new MessageChannel(); - - channel.port1.onmessage = event => { - if (event.data && event.data.error) { - return reject(event.data.error); - } - - resolve(event.data); - }; - - client.postMessage(message, [channel.port2].concat(transferrables.filter(Boolean))); - }); -} - -async function respondWithMock(response) { - // Setting response status code to 0 is a no-op. - // However, when responding with a "Response.error()", the produced Response - // instance will have status code set to 0. Since it's not possible to create - // a Response instance with status code 0, handle that use-case separately. - if (response.status === 0) { - return Response.error(); - } - - const mockedResponse = new Response(response.body, response); - - Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { - value: true, - enumerable: true - }); - - return mockedResponse; -} diff --git a/packages/lib/storybook/stories/components/PayTo.stories.tsx b/packages/lib/storybook/stories/components/PayTo.stories.tsx index 87e70e6472..ead7751c5b 100644 --- a/packages/lib/storybook/stories/components/PayTo.stories.tsx +++ b/packages/lib/storybook/stories/components/PayTo.stories.tsx @@ -3,7 +3,7 @@ import { PaymentMethodStoryProps } from '../types'; import { ComponentContainer } from '../ComponentContainer'; import { Checkout } from '../Checkout'; import PayTo from '../../../src/components/PayTo/PayTo'; -import { http, HttpResponse } from 'msw'; +// import { http, HttpResponse } from 'msw'; import { MandateType, PayToConfiguration } from '../../../src/components/PayTo/types'; // extend the default story args so we can change mandate top level @@ -57,17 +57,17 @@ export const PayToAwaitScreen: PayToStory = { payee: 'Cool Merchant Ltd' }, parameters: { - msw: { - handlers: [ - http.post('https://checkoutshopper-test.adyen.com/checkoutshopper/services/PaymentInitiation/v1/status', () => { - return HttpResponse.json({ - payload: '', - resultCode: 'pending', - type: 'pending' - }); - }) - ] - } + // msw: { + // handlers: [ + // http.post('https://checkoutshopper-test.adyen.com/checkoutshopper/services/PaymentInitiation/v1/status', () => { + // return HttpResponse.json({ + // payload: '', + // resultCode: 'pending', + // type: 'pending' + // }); + // }) + // ] + // } }, render: ({ componentConfiguration, mandate, payee, ...checkoutConfig }) => ( From a5b50b49892e01d711f193ea1d58ed31ff08f345 Mon Sep 17 00:00:00 2001 From: antoniof Date: Thu, 13 Feb 2025 17:04:23 +0100 Subject: [PATCH 18/20] fix broken e2e 2 --- packages/lib/.storybook/main.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/lib/.storybook/main.ts b/packages/lib/.storybook/main.ts index a5f9ee27c2..31ae567154 100644 --- a/packages/lib/.storybook/main.ts +++ b/packages/lib/.storybook/main.ts @@ -27,7 +27,8 @@ const config: StorybookConfig = { }, // public added for msw: https://github.com/mswjs/msw-storybook-addon?tab=readme-ov-file#start-storybook - staticDirs: ['../storybook/assets', '../storybook/public'], + // '../storybook/public' + staticDirs: ['../storybook/assets'], viteFinal(config) { return mergeConfig(config, { From d970ca6add8fd3893c2d6c857c3a173e2d8fc77c Mon Sep 17 00:00:00 2001 From: antoniof Date: Wed, 19 Feb 2025 16:15:18 +0100 Subject: [PATCH 19/20] fix payto loading state --- .../src/components/PayTo/components/PayToComponent.scss | 7 +++++++ .../src/components/PayTo/components/PayToComponent.tsx | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/lib/src/components/PayTo/components/PayToComponent.scss diff --git a/packages/lib/src/components/PayTo/components/PayToComponent.scss b/packages/lib/src/components/PayTo/components/PayToComponent.scss new file mode 100644 index 0000000000..4d2d16528e --- /dev/null +++ b/packages/lib/src/components/PayTo/components/PayToComponent.scss @@ -0,0 +1,7 @@ +@use 'styles/index'; + +.adyen-checkout__payto-component { + &--loading{ + @include index.adyen-checkout-component-loading; + } +} \ No newline at end of file diff --git a/packages/lib/src/components/PayTo/components/PayToComponent.tsx b/packages/lib/src/components/PayTo/components/PayToComponent.tsx index 8f3c89b306..cbe722a19e 100644 --- a/packages/lib/src/components/PayTo/components/PayToComponent.tsx +++ b/packages/lib/src/components/PayTo/components/PayToComponent.tsx @@ -9,6 +9,8 @@ import { useCoreContext } from '../../../core/Context/CoreProvider'; import { ComponentMethodsRef, UIElementStatus } from '../../internal/UIElement/types'; import { PayToData, PayToPlaceholdersType } from '../types'; import { PayButtonProps } from '../../internal/PayButton/PayButton'; +import classNames from 'classnames'; +import './PayToComponent.scss'; export type PayToInputOption = 'payid-option' | 'bsb-option'; @@ -59,7 +61,12 @@ export default function PayToComponent(props: PayToComponentProps) { return ( -
+
{selectedInput === 'payid-option' && ( Date: Wed, 19 Feb 2025 16:36:38 +0100 Subject: [PATCH 20/20] remove loading wrapper --- .../PayTo/components/PayToComponent.tsx | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/packages/lib/src/components/PayTo/components/PayToComponent.tsx b/packages/lib/src/components/PayTo/components/PayToComponent.tsx index cbe722a19e..a663fee829 100644 --- a/packages/lib/src/components/PayTo/components/PayToComponent.tsx +++ b/packages/lib/src/components/PayTo/components/PayToComponent.tsx @@ -1,5 +1,4 @@ import { h } from 'preact'; -import LoadingWrapper from '../../internal/LoadingWrapper'; import SegmentedControl from '../../internal/SegmentedControl'; import { useState } from 'preact/hooks'; import { SegmentedControlOptions } from '../../internal/SegmentedControl/SegmentedControl'; @@ -60,37 +59,35 @@ export default function PayToComponent(props: PayToComponentProps) { }; return ( - -
- - {selectedInput === 'payid-option' && ( - - )} - {selectedInput === 'bsb-option' && ( - - )} +
+ + {selectedInput === 'payid-option' && ( + + )} + {selectedInput === 'bsb-option' && ( + + )} - {props.showPayButton && props.payButton({ status, label: i18n.get('continue') })} -
- + {props.showPayButton && props.payButton({ status, label: i18n.get('continue') })} +
); }