{"version":3,"file":"BankAccountForm.mjs","names":["React","useEffect","useMemo","useState","useTranslation","UdpFlexbox","UdpRadioGroup","UdpSpinner","usePaymentProviderForm","PaymentDetails","PaymentMethodData","PaymentTenderTypeEnum","PaymentVendorFactoryEnum","useApiQuery","HostedPaymentError","NewECheckForm","ConfigService","OTHER_RADIO_VALUE","BankAccountFormProps","bankAccountTypes","name","value","isFormDisabled","paymentDetails","providerType","providerProps","isHostedPaymentPage","hasReadPropertiesError","readPropertiesMessageError","onStatusChange","paymentFormResult","enabled","actionLabel","allowSaveMethod","data","externalId","setSelectedPaymentAccount","paymentAccount","s2sToken","s2sTenantId","BankAccountForm","t","paymentAccounts","isLoading","loadingPaymentAccounts","pgV1ApiUrl","Boolean","savedMethods","hasSavedMethods","length","selected","setSelected","paymentTokenID","sel","find","s","showOtherForm","isValid","paymentProviderForm","ECheck","items","savedItems","map","m","nickname","paymentToken","defaultValue","routing","routingNumber","label","String","e","target"],"sources":["../../../../src/utilities/form/paymentForm/BankAccountForm.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { UdpFlexbox } from '../../../UI/fluent-web-components/UdpFlexbox';\nimport { UdpRadioGroup } from '../../../UI/fluent-web-components/UdpRadioGroup';\nimport { UdpSpinner } from '../../../UI/fluent-web-components/UdpSpinner';\nimport { usePaymentProviderForm } from './usePaymentProviderForm';\nimport { PaymentDetails, PaymentMethodData } from './AccountPayment.model';\nimport { PaymentTenderTypeEnum } from '../../../enums/paymentTenderTypeEnum';\nimport { PaymentVendorFactoryEnum } from '../../../enums/paymentVendorFactoryEnum';\nimport { useApiQuery } from '../../useApiQuery';\nimport { HostedPaymentError } from './HostedPaymentError';\nimport { NewECheckForm } from './NewECheckForm';\nimport { ConfigService } from '../../../configService';\n\nconst OTHER_RADIO_VALUE = '__other__';\n\ninterface BankAccountFormProps {\n  bankAccountTypes?: { name: string; value: string }[];\n  isFormDisabled?: boolean;\n  paymentDetails: PaymentDetails;\n  providerType?: PaymentVendorFactoryEnum | null;\n  providerProps?: any;\n  isHostedPaymentPage?: boolean | null;\n  hasReadPropertiesError?: boolean | null;\n  readPropertiesMessageError?: string | null;\n  onStatusChange?: (paymentFormResult: any) => void;\n  enabled?: boolean | null;\n  actionLabel?: string;\n  /** When false, the manual eCheck form hides its \"save\" checkbox. */\n  allowSaveMethod?: boolean;\n  data?: PaymentMethodData;\n  externalId?: string;\n  setSelectedPaymentAccount?: (paymentAccount: any) => void;\n  /** S2S bearer token; forwarded to the hosted payment provider form. */\n  s2sToken?: string;\n  /** Tenant ID required alongside `s2sToken` for S2S mode API calls. */\n  s2sTenantId?: string;\n}\n\n/**\n * eCheck / bank-account branch of the payment form. Mirrors the credit-card\n * branch: radio list of saved accounts when any exist + \"Other / new account\"\n * option per D3, otherwise renders the appropriate entry form directly.\n */\nexport const BankAccountForm = ({\n  bankAccountTypes = [],\n  data,\n  externalId,\n  isFormDisabled = false,\n  providerType = null,\n  providerProps = null,\n  paymentDetails,\n  isHostedPaymentPage,\n  hasReadPropertiesError,\n  readPropertiesMessageError,\n  onStatusChange,\n  actionLabel,\n  allowSaveMethod = true,\n  setSelectedPaymentAccount,\n  s2sToken,\n  s2sTenantId,\n}: BankAccountFormProps) => {\n  const { t } = useTranslation();\n\n  const { data: paymentAccounts, isLoading: loadingPaymentAccounts } = useApiQuery<any[]>(\n    ConfigService.pgV1ApiUrl,\n    `PaymentTokenECheck/${externalId}`,\n    {},\n    { enabled: Boolean(externalId) },\n  );\n\n  const savedMethods = paymentAccounts ?? [];\n  const hasSavedMethods = savedMethods.length > 0;\n\n  const [selected, setSelected] = useState<string>(OTHER_RADIO_VALUE);\n\n  useEffect(() => {\n    setSelected(savedMethods[0]?.paymentTokenID || OTHER_RADIO_VALUE);\n  }, [savedMethods]);\n\n  useEffect(() => {\n    if (selected && selected !== OTHER_RADIO_VALUE) {\n      const sel = savedMethods.find((s: any) => s?.paymentTokenID === selected);\n      setSelectedPaymentAccount?.(sel || null);\n    } else {\n      setSelectedPaymentAccount?.(null);\n    }\n  }, [selected, savedMethods, setSelectedPaymentAccount]);\n\n  const showOtherForm = selected === OTHER_RADIO_VALUE;\n\n  useEffect(() => {\n    if (!showOtherForm) {\n      onStatusChange?.({ isValid: true });\n      return;\n    }\n    if (isHostedPaymentPage === false) {\n      onStatusChange?.({ isValid: true });\n    } else {\n      onStatusChange?.({ isValid: false });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [showOtherForm, isHostedPaymentPage]);\n\n  const paymentProviderForm = usePaymentProviderForm(\n    PaymentTenderTypeEnum.ECheck,\n    providerType,\n    providerProps,\n    onStatusChange,\n    paymentDetails,\n    data,\n    s2sToken,\n    s2sTenantId,\n  );\n\n  const items = useMemo(() => {\n    const savedItems = savedMethods.map((m: any) => {\n      const nickname =\n        m?.paymentToken?.nickname ??\n        t('payments.bank.savedAccount', { defaultValue: 'Saved account' });\n      const routing = m?.routingNumber ? ` (${m.routingNumber})` : '';\n      return {\n        label: `${nickname}${routing}`,\n        value: String(m?.paymentTokenID ?? ''),\n      };\n    });\n    return [\n      ...savedItems,\n      {\n        label:\n          actionLabel ||\n          t('payments.bank.useDifferentAccount', { defaultValue: 'Use a different account' }),\n        value: OTHER_RADIO_VALUE,\n      },\n    ];\n  }, [savedMethods, actionLabel, t]);\n\n  if (loadingPaymentAccounts) {\n    return (\n      <UdpFlexbox direction=\"row\" justify=\"center\" align=\"center\">\n        <UdpSpinner size=\"medium\" />\n      </UdpFlexbox>\n    );\n  }\n\n  if (hasReadPropertiesError) {\n    return (\n      <HostedPaymentError\n        error={t('payments.form.configurationError', { defaultValue: 'Configuration error' })}\n        message={\n          readPropertiesMessageError ||\n          t('payments.form.unknownError', { defaultValue: 'Unknown error' })\n        }\n      />\n    );\n  }\n\n  return (\n    <UdpFlexbox direction=\"column\" gap=\"sm\" wrap=\"nowrap\">\n      {hasSavedMethods && (\n        <UdpRadioGroup\n          label={t('payments.bank.savedAccounts', { defaultValue: 'Saved accounts' })}\n          name=\"savedBankAccount\"\n          orientation=\"vertical\"\n          disabled={isFormDisabled}\n          value={selected}\n          items={items}\n          onChange={(e) => setSelected(String(e.target.value))}\n        />\n      )}\n\n      {showOtherForm &&\n        (isHostedPaymentPage ? (\n          paymentProviderForm\n        ) : (\n          <NewECheckForm\n            isFormDisabled={isFormDisabled}\n            bankAccountTypes={bankAccountTypes}\n            allowSaveMethod={allowSaveMethod}\n          />\n        ))}\n    </UdpFlexbox>\n  );\n};\n"],"mappings":"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"}