Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implemented International Bank Account flow #52322

Open
wants to merge 61 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
abe4671
Implemented International Bank Account flow
shubham1206agra Nov 11, 2024
21bd467
Fix edge case
shubham1206agra Nov 11, 2024
bf6cca4
Fix step calc function
shubham1206agra Nov 11, 2024
16f10ad
Clear corpay fields before starting flow
shubham1206agra Nov 11, 2024
6d5ce0f
Fix optional label
shubham1206agra Nov 12, 2024
463d41a
Clear draft values before starting flow
shubham1206agra Nov 12, 2024
5411eb3
Fix crash
shubham1206agra Nov 12, 2024
6553f6a
Fix optional
shubham1206agra Nov 12, 2024
d1a3dc9
Fix skipping condition
shubham1206agra Nov 12, 2024
2fdcca6
Fix back on success page
shubham1206agra Nov 12, 2024
067a6b7
Fix styling
shubham1206agra Nov 12, 2024
40abc73
Fix validation
shubham1206agra Nov 12, 2024
1a0a18e
Merge branch 'main' into intl-bank-account
shubham1206agra Nov 15, 2024
eb4835f
Tons of fixes
shubham1206agra Nov 16, 2024
9425ba0
Merge branch 'Expensify:main' into intl-bank-account
shubham1206agra Nov 16, 2024
6e2a5ca
Page loading fix
shubham1206agra Nov 16, 2024
54c7ca7
Style fix
shubham1206agra Nov 16, 2024
f2fd2e5
Style fix
shubham1206agra Nov 16, 2024
3507e17
Style fix
shubham1206agra Nov 16, 2024
8f3b3ad
Fix confirm page
shubham1206agra Nov 16, 2024
92c8153
Fix confirm page
shubham1206agra Nov 16, 2024
0b32262
Fix confirm page
shubham1206agra Nov 16, 2024
ae133b7
Fix confirm page
shubham1206agra Nov 17, 2024
9fe9bde
Fix API command
shubham1206agra Nov 18, 2024
a5ecb6a
Fix API command
shubham1206agra Nov 18, 2024
70abea6
Fix opening page
shubham1206agra Nov 19, 2024
13e2a16
Fix API command
shubham1206agra Nov 20, 2024
d6284c3
Disable changing of account holder country
shubham1206agra Nov 24, 2024
a4dd11d
Merge branch 'main' into intl-bank-account
shubham1206agra Nov 25, 2024
0962c44
Fix lint
shubham1206agra Nov 25, 2024
3937be1
Fix viewing bank account
shubham1206agra Nov 25, 2024
0ca1925
Fix start flow
shubham1206agra Nov 25, 2024
3f59009
Fix menu option
shubham1206agra Nov 25, 2024
09794f9
Fix success page in native
shubham1206agra Nov 25, 2024
4605a96
Merge branch 'main' into intl-bank-account
shubham1206agra Nov 29, 2024
1d701a5
Fix focus on selecting option
shubham1206agra Nov 29, 2024
814a94c
Spanish translations
shubham1206agra Nov 29, 2024
8442147
Applying suggestions
shubham1206agra Nov 29, 2024
bdcd655
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 1, 2024
676c9ee
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 5, 2024
05fe810
Merge branch 'Expensify:main' into intl-bank-account
shubham1206agra Dec 6, 2024
3347a48
Fix padding
shubham1206agra Dec 6, 2024
c082ae6
Fix components
shubham1206agra Dec 6, 2024
2bc8d2e
Fix textpicker label
shubham1206agra Dec 6, 2024
2b60723
Make error modal for error codes
shubham1206agra Dec 6, 2024
fb2ff94
Lint fix
shubham1206agra Dec 6, 2024
ed31b75
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 9, 2024
979a784
Fix navigation when changing country
shubham1206agra Dec 9, 2024
58c684c
Disable account holder country interactive
shubham1206agra Dec 11, 2024
833e420
Merge branch 'Expensify:main' into intl-bank-account
shubham1206agra Dec 13, 2024
d608757
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 13, 2024
7476678
Apply suggestions from code review
shubham1206agra Dec 13, 2024
14512b9
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 16, 2024
69bd060
Merge branch 'Expensify:main' into intl-bank-account
shubham1206agra Dec 18, 2024
603f742
Apply suggestions from code review
shubham1206agra Dec 18, 2024
d640cd0
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 19, 2024
91a9c52
Use loader when submitting form
shubham1206agra Dec 19, 2024
d41ed82
Add docstring
shubham1206agra Dec 19, 2024
af44752
Add header to currency step
shubham1206agra Dec 19, 2024
aee88f3
Style fix
shubham1206agra Dec 19, 2024
69ffb72
Merge branch 'main' into intl-bank-account
shubham1206agra Dec 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,7 @@ const CONST = {
CONFIGURE_REIMBURSEMENT_SETTINGS_HELP_URL: 'https://help.expensify.com/articles/expensify-classic/workspaces/Configure-Reimbursement-Settings',
COPILOT_HELP_URL: 'https://help.expensify.com/articles/expensify-classic/copilots-and-delegates/Assign-or-remove-a-Copilot',
DELAYED_SUBMISSION_HELP_URL: 'https://help.expensify.com/articles/expensify-classic/reports/Automatically-submit-employee-reports',
ENCRYPTION_AND_SECURITY_HELP_URL: 'https://help.expensify.com/articles/new-expensify/settings/Encryption-and-Data-Security',
PLAN_TYPES_AND_PRICING_HELP_URL: 'https://help.expensify.com/articles/new-expensify/billing-and-subscriptions/Plan-types-and-pricing',
// Use Environment.getEnvironmentURL to get the complete URL with port number
DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:',
Expand Down Expand Up @@ -6435,6 +6436,50 @@ const CONST = {
},
},

CORPAY_FIELDS: {
BANK_ACCOUNT_DETAILS_FIELDS: ['accountNumber', 'localAccountNumber', 'routingCode', 'localRoutingCode', 'swiftBicCode'] as string[],
ACCOUNT_TYPE_KEY: 'BeneficiaryAccountType',
BANK_INFORMATION_FIELDS: ['bankName', 'bankAddressLine1', 'bankAddressLine2', 'bankCity', 'bankRegion', 'bankPostal', 'BeneficiaryBankBranchName'] as string[],
ACCOUNT_HOLDER_FIELDS: [
'accountHolderName',
'accountHolderAddress1',
'accountHolderAddress2',
'accountHolderCity',
'accountHolderRegion',
'accountHolderCountry',
'accountHolderPostal',
'accountHolderPhoneNumber',
'accountHolderEmail',
'ContactName',
'BeneficiaryCPF',
'BeneficiaryRUT',
'BeneficiaryCedulaID',
'BeneficiaryTaxID',
] as string[],
SPECIAL_LIST_REGION_KEYS: ['bankRegion', 'accountHolderRegion'] as string[],
SPECIAL_LIST_ADDRESS_KEYS: ['bankAddressLine1', 'accountHolderAddress1'] as string[],
STEPS_NAME: {
COUNTRY_SELECTOR: 'CountrySelector',
BANK_ACCOUNT_DETAILS: 'BankAccountDetails',
ACCOUNT_TYPE: 'AccountType',
BANK_INFORMATION: 'BankInformation',
ACCOUNT_HOLDER_INFORMATION: 'AccountHolderInformation',
CONFIRMATION: 'Confirmation',
SUCCESS: 'Success',
},
INDEXES: {
MAPPING: {
COUNTRY_SELECTOR: 0,
BANK_ACCOUNT_DETAILS: 1,
ACCOUNT_TYPE: 2,
BANK_INFORMATION: 3,
ACCOUNT_HOLDER_INFORMATION: 4,
CONFIRMATION: 5,
SUCCESS: 6,
},
},
},

DEVICE_CONTACT: {
FIRST_NAME: 'FIRST_NAME',
LAST_NAME: 'LAST_NAME',
Expand Down
7 changes: 7 additions & 0 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,9 @@ const ONYXKEYS = {
/** The user's Concierge reportID */
CONCIERGE_REPORT_ID: 'conciergeReportID',

/** Corpay Fields while doing international bank account connection */
CORPAY_FIELDS: 'corpayFields',

/** The user's session that will be preserved when using imported state */
PRESERVED_USER_SESSION: 'preservedUserSession',

Expand Down Expand Up @@ -609,6 +612,8 @@ const ONYXKEYS = {
HOME_ADDRESS_FORM_DRAFT: 'homeAddressFormDraft',
PERSONAL_DETAILS_FORM: 'personalDetailsForm',
PERSONAL_DETAILS_FORM_DRAFT: 'personalDetailsFormDraft',
INTERNATIONAL_BANK_ACCOUNT_FORM: 'internationalBankAccountForm',
INTERNATIONAL_BANK_ACCOUNT_FORM_DRAFT: 'internationalBankAccountFormDraft',
NEW_ROOM_FORM: 'newRoomForm',
NEW_ROOM_FORM_DRAFT: 'newRoomFormDraft',
ROOM_SETTINGS_FORM: 'roomSettingsForm',
Expand Down Expand Up @@ -826,6 +831,7 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.RULES_MAX_EXPENSE_AGE_FORM]: FormTypes.RulesMaxExpenseAgeForm;
[ONYXKEYS.FORMS.SEARCH_SAVED_SEARCH_RENAME_FORM]: FormTypes.SearchSavedSearchRenameForm;
[ONYXKEYS.FORMS.DEBUG_DETAILS_FORM]: FormTypes.DebugReportForm | FormTypes.DebugReportActionForm | FormTypes.DebugTransactionForm | FormTypes.DebugTransactionViolationForm;
[ONYXKEYS.FORMS.INTERNATIONAL_BANK_ACCOUNT_FORM]: FormTypes.InternationalBankAccountForm;
};

type OnyxFormDraftValuesMapping = {
Expand Down Expand Up @@ -1041,6 +1047,7 @@ type OnyxValuesMapping = {
[ONYXKEYS.SHOULD_SHOW_SAVED_SEARCH_RENAME_TOOLTIP]: boolean;
[ONYXKEYS.NVP_EXPENSIFY_COMPANY_CARDS_CUSTOM_NAMES]: Record<string, string>;
[ONYXKEYS.CONCIERGE_REPORT_ID]: string;
[ONYXKEYS.CORPAY_FIELDS]: OnyxTypes.CorpayFields;
[ONYXKEYS.PRESERVED_USER_SESSION]: OnyxTypes.Session;
[ONYXKEYS.NVP_DISMISSED_PRODUCT_TRAINING]: OnyxTypes.DismissedProductTraining;
};
Expand Down
1 change: 1 addition & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ const ROUTES = {
},
SETTINGS_ADD_DEBIT_CARD: 'settings/wallet/add-debit-card',
SETTINGS_ADD_BANK_ACCOUNT: 'settings/wallet/add-bank-account',
SETTINGS_ADD_US_BANK_ACCOUNT: 'settings/wallet/add-us-bank-account',
SETTINGS_ENABLE_PAYMENTS: 'settings/wallet/enable-payments',
SETTINGS_WALLET_CARD_DIGITAL_DETAILS_UPDATE_ADDRESS: {
route: 'settings/wallet/card/:domain/digital-details/update-address',
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ const SCREENS = {
ADD_DEBIT_CARD: 'Settings_Add_Debit_Card',
ADD_PAYMENT_CARD_CHANGE_CURRENCY: 'Settings_Add_Payment_Card_Change_Currency',
ADD_BANK_ACCOUNT: 'Settings_Add_Bank_Account',
ADD_US_BANK_ACCOUNT: 'Settings_Add_US_Bank_Account',
CLOSE: 'Settings_Close',
TWO_FACTOR_AUTH: 'Settings_TwoFactorAuth',
REPORT_CARD_LOST_OR_DAMAGED: 'Settings_ReportCardLostOrDamaged',
Expand Down
86 changes: 86 additions & 0 deletions src/components/CurrencyPicker.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import type {ReactNode} from 'react';
import React, {useState} from 'react';
import useLocalize from '@hooks/useLocalize';
import useThemeStyles from '@hooks/useThemeStyles';
import * as CurrencyUtils from '@libs/CurrencyUtils';
import Navigation from '@libs/Navigation/Navigation';
import CONST from '@src/CONST';
import CurrencySelectionList from './CurrencySelectionList';
import type {CurrencyListItem} from './CurrencySelectionList/types';
import HeaderWithBackButton from './HeaderWithBackButton';
import MenuItemWithTopDescription from './MenuItemWithTopDescription';
import Modal from './Modal';
import ScreenWrapper from './ScreenWrapper';

type CurrencyPickerProps = {
/** Current value of the selected item */
value?: string;

/** Custom content to display in the header */
headerContent?: ReactNode;

/** Callback when the list item is selected */
onInputChange?: (value: string, key?: string) => void;

/** Form Error description */
errorText?: string;
};

function CurrencyPicker({value, errorText, headerContent, onInputChange = () => {}}: CurrencyPickerProps) {
const {translate} = useLocalize();
const [isPickerVisible, setIsPickerVisible] = useState(false);
const styles = useThemeStyles();

const hidePickerModal = () => {
setIsPickerVisible(false);
};

const updateInput = (item: CurrencyListItem) => {
onInputChange?.(item.currencyCode);
hidePickerModal();
};

return (
<>
<MenuItemWithTopDescription
shouldShowRightIcon
title={value ? `${value} - ${CurrencyUtils.getCurrencySymbol(value)}` : undefined}
description={translate('common.currency')}
onPress={() => setIsPickerVisible(true)}
brickRoadIndicator={errorText ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined}
errorText={errorText}
/>
<Modal
type={CONST.MODAL.MODAL_TYPE.RIGHT_DOCKED}
isVisible={isPickerVisible}
onClose={hidePickerModal}
onModalHide={hidePickerModal}
hideModalContentWhileAnimating
useNativeDriver
onBackdropPress={Navigation.dismissModal}
>
<ScreenWrapper
style={[styles.pb0]}
includePaddingTop={false}
includeSafeAreaPaddingBottom
testID={CurrencyPicker.displayName}
>
<HeaderWithBackButton
title={translate('common.currency')}
shouldShowBackButton
onBackButtonPress={hidePickerModal}
/>
{!!headerContent && headerContent}
<CurrencySelectionList
initiallySelectedCurrencyCode={value}
onSelect={updateInput}
searchInputLabel={translate('common.search')}
/>
</ScreenWrapper>
</Modal>
</>
);
}

CurrencyPicker.displayName = 'CurrencyPicker';
export default CurrencyPicker;
9 changes: 7 additions & 2 deletions src/components/Form/FormProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ type FormProviderProps<TFormID extends OnyxFormKey = OnyxFormKey> = FormProps<TF

/** Whether HTML is allowed in form inputs */
allowHTML?: boolean;

/** Whether the form is loading */
isLoading?: boolean;
};

function FormProvider(
Expand All @@ -82,6 +85,7 @@ function FormProvider(
onSubmit,
shouldTrimValues = true,
allowHTML = false,
isLoading = false,
...rest
}: FormProviderProps,
forwardedRef: ForwardedRef<FormRef>,
Expand Down Expand Up @@ -189,7 +193,7 @@ function FormProvider(
const submit = useDebounceNonReactive(
useCallback(() => {
// Return early if the form is already submitting to avoid duplicate submission
if (formState?.isLoading) {
if (!!formState?.isLoading || isLoading) {
return;
}

Expand All @@ -210,7 +214,7 @@ function FormProvider(
}

KeyboardUtils.dismiss().then(() => onSubmit(trimmedStringValues));
}, [enabledWhenOffline, formState?.isLoading, inputValues, network?.isOffline, onSubmit, onValidate, shouldTrimValues]),
}, [enabledWhenOffline, formState?.isLoading, inputValues, isLoading, network?.isOffline, onSubmit, onValidate, shouldTrimValues]),
1000,
{leading: true, trailing: false},
);
Expand Down Expand Up @@ -406,6 +410,7 @@ function FormProvider(
onSubmit={submit}
inputRefs={inputRefs}
errors={errors}
isLoading={isLoading}
enabledWhenOffline={enabledWhenOffline}
>
{typeof children === 'function' ? children({inputValues}) : children}
Expand Down
7 changes: 6 additions & 1 deletion src/components/Form/FormWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ type FormWrapperProps = ChildrenProps &

/** Callback to submit the form */
onSubmit: () => void;

/** Whether the form is loading */
isLoading?: boolean;
};

function FormWrapper({
Expand All @@ -57,6 +60,7 @@ function FormWrapper({
shouldHideFixErrorsAlert = false,
disablePressOnEnter = false,
isSubmitDisabled = false,
isLoading = false,
}: FormWrapperProps) {
const styles = useThemeStyles();
const {paddingBottom: safeAreaInsetPaddingBottom} = useStyledSafeAreaInsets();
Expand Down Expand Up @@ -112,7 +116,7 @@ function FormWrapper({
buttonText={submitButtonText}
isDisabled={isSubmitDisabled}
isAlertVisible={((!isEmptyObject(errors) || !isEmptyObject(formState?.errorFields)) && !shouldHideFixErrorsAlert) || !!errorMessage}
isLoading={!!formState?.isLoading}
isLoading={!!formState?.isLoading || isLoading}
message={isEmptyObject(formState?.errorFields) ? errorMessage : undefined}
onSubmit={onSubmit}
footerContent={footerContent}
Expand Down Expand Up @@ -143,6 +147,7 @@ function FormWrapper({
formState?.isLoading,
shouldHideFixErrorsAlert,
errorMessage,
isLoading,
onSubmit,
footerContent,
onFixTheErrorsLinkPressed,
Expand Down
4 changes: 3 additions & 1 deletion src/components/SelectionList/BaseSelectionList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ function BaseSelectionList<TItem extends ListItem>(
showScrollIndicator = true,
showLoadingPlaceholder = false,
showConfirmButton = false,
isConfirmButtonDisabled = false,
shouldUseDefaultTheme = false,
shouldPreventDefaultFocusOnSelectRow = false,
containerStyle,
Expand Down Expand Up @@ -765,7 +766,7 @@ function BaseSelectionList<TItem extends ListItem>(
{
captureOnInputs: true,
shouldBubble: !flattenedSections.allOptions.at(focusedIndex) || focusedIndex === -1,
isActive: !disableKeyboardShortcuts && isFocused,
isActive: !disableKeyboardShortcuts && isFocused && !isConfirmButtonDisabled,
},
);

Expand Down Expand Up @@ -848,6 +849,7 @@ function BaseSelectionList<TItem extends ListItem>(
onPress={onConfirm}
pressOnEnter
enterKeyEventListenerPriority={1}
isDisabled={isConfirmButtonDisabled}
/>
</FixedFooter>
)}
Expand Down
3 changes: 3 additions & 0 deletions src/components/SelectionList/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,9 @@ type BaseSelectionListProps<TItem extends ListItem> = Partial<ChildrenProps> & {
/** Whether to show the default confirm button */
showConfirmButton?: boolean;

/** Whether to show the default confirm button disabled */
isConfirmButtonDisabled?: boolean;

/** Whether to use the default theme for the confirm button */
shouldUseDefaultTheme?: boolean;

Expand Down
12 changes: 10 additions & 2 deletions src/components/TextPicker/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,17 @@ import CONST from '@src/CONST';
import TextSelectorModal from './TextSelectorModal';
import type {TextPickerProps} from './types';

function TextPicker({value, description, placeholder = '', errorText = '', onInputChange, furtherDetails, rightLabel, ...rest}: TextPickerProps, forwardedRef: ForwardedRef<View>) {
function TextPicker(
{value, description, placeholder = '', errorText = '', onInputChange, furtherDetails, rightLabel, disabled = false, interactive = true, ...rest}: TextPickerProps,
forwardedRef: ForwardedRef<View>,
) {
const styles = useThemeStyles();
const [isPickerVisible, setIsPickerVisible] = useState(false);

const showPickerModal = () => {
if (disabled) {
return;
}
setIsPickerVisible(true);
};

Expand All @@ -30,7 +36,7 @@ function TextPicker({value, description, placeholder = '', errorText = '', onInp
<View>
<MenuItemWithTopDescription
ref={forwardedRef}
shouldShowRightIcon
shouldShowRightIcon={!disabled}
title={value ?? placeholder ?? ''}
description={description}
onPress={showPickerModal}
Expand All @@ -39,13 +45,15 @@ function TextPicker({value, description, placeholder = '', errorText = '', onInp
brickRoadIndicator={errorText ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined}
errorText={errorText}
style={[styles.moneyRequestMenuItem]}
interactive={interactive}
/>
<TextSelectorModal
value={value}
isVisible={isPickerVisible}
description={description}
onClose={hidePickerModal}
onValueSelected={updateInput}
disabled={disabled}
// eslint-disable-next-line react/jsx-props-no-spreading
{...rest}
/>
Expand Down
2 changes: 1 addition & 1 deletion src/components/TextPicker/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ type TextPickerProps = {

/** Whether to show the tooltip text */
shouldShowTooltips?: boolean;
} & Pick<MenuItemBaseProps, 'rightLabel' | 'subtitle' | 'description'> &
} & Pick<MenuItemBaseProps, 'rightLabel' | 'subtitle' | 'description' | 'interactive'> &
TextProps;

export type {TextSelectorModalProps, TextPickerProps};
27 changes: 27 additions & 0 deletions src/hooks/useInternationalBankAccountFormSubmit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import type {FormOnyxKeys} from '@components/Form/types';
import type {OnyxFormKey} from '@src/ONYXKEYS';
import ONYXKEYS from '@src/ONYXKEYS';
import useStepFormSubmit from './useStepFormSubmit';
import type {SubStepProps} from './useSubStep/types';

type UseInternationalBankAccountFormSubmitParams = Pick<SubStepProps, 'onNext'> & {
formId?: OnyxFormKey;
fieldIds: Array<FormOnyxKeys<typeof ONYXKEYS.FORMS.INTERNATIONAL_BANK_ACCOUNT_FORM>>;
shouldSaveDraft: boolean;
};

/**
* Hook for handling submit method in Missing Personal Details substeps.
* When user is in editing mode, we should save values only when user confirms the change
* @param onNext - callback
* @param fieldIds - field IDs for particular step
* @param shouldSaveDraft - if we should save draft values
*/
export default function useInternationalBankAccountFormSubmit({onNext, fieldIds, shouldSaveDraft}: UseInternationalBankAccountFormSubmitParams) {
return useStepFormSubmit<typeof ONYXKEYS.FORMS.INTERNATIONAL_BANK_ACCOUNT_FORM>({
formId: ONYXKEYS.FORMS.INTERNATIONAL_BANK_ACCOUNT_FORM,
onNext,
fieldIds,
shouldSaveDraft,
});
}
Loading
Loading