{"version":3,"file":"usePaymentContext.mjs","names":["useEffect","useState","useApiQuery","apiMutate","useUser","ConfigService","stringToProps","PaymentVendorFactoryEnum","HostedPaymentPageSetup","IPaymentMethod","IPaymentMethodTab","PaymentContext","methods","isLoading","isError","usePaymentContext","s2sToken","s2sTenantId","user","setMethods","undefined","resolveError","setResolveError","s2s","path","s2sConfig","headers","Authorization","currentTenantId","data","paymentMethodList","listLoading","listError","pgV1ApiUrl","validMethods","filter","Boolean","length","cancelled","resolve","results","Promise","allSettled","map","paymentMethod","paymentMethodID","name","enabled","paymentVendorConnection","isHostedPaymentPage","providerType","providerProps","hasReadPropertiesError","readPropertiesMessageError","result","method","paymentVendorFactoryID","hostedPaymentPageSetup","find","x","useHostedPaymentPage","error","attributes","hostedPaymentPageConfig","customCss","customCSS","baseUrl","resolved","status","console","filtered","r","PromiseFulfilledResult","value"],"sources":["../../../../src/utilities/form/paymentForm/usePaymentContext.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { useApiQuery } from '../../useApiQuery';\nimport { apiMutate } from '../../useAxiosMutate';\nimport { useUser } from '../../auth/useUser';\nimport { ConfigService } from '../../../configService';\nimport { stringToProps } from '../../stringUtils';\nimport { PaymentVendorFactoryEnum } from '../../../enums/paymentVendorFactoryEnum';\nimport {\n  HostedPaymentPageSetup,\n  IPaymentMethod,\n  IPaymentMethodTab,\n} from './AccountPayment.model';\n\nexport interface PaymentContext {\n  /**\n   * Resolved payment methods with vendor connection info and enabled state.\n   * `undefined` while loading; `[]` when the user has no available methods.\n   */\n  methods: IPaymentMethodTab[] | undefined;\n  isLoading: boolean;\n  isError: boolean;\n}\n\n/**\n * Wraps today's N+1 payment-method discovery:\n *   1. GET /PaymentMethod                                  (list)\n *   2. GET /AppPaymentVendor/PaymentMethod/{id} for each   (per-method vendor info)\n *\n * When the backend ships a single payment-context endpoint, this hook is the\n * one file that needs to change — replace the implementation with a single\n * `useApiQuery` call that returns the same shape and the rest of the form is\n * unaffected.\n */\nexport function usePaymentContext(s2sToken?: string, s2sTenantId?: string): PaymentContext {\n  const user = useUser();\n  const [methods, setMethods] = useState<IPaymentMethodTab[] | undefined>(undefined);\n  const [resolveError, setResolveError] = useState(false);\n\n  const s2s = (path: string) => s2sToken ? `${path}/S2S` : path;\n  const s2sConfig = s2sToken\n    ? { headers: { Authorization: `Bearer ${s2sToken}`, currentTenantId: s2sTenantId } }\n    : {};\n\n  const {\n    data: paymentMethodList,\n    isLoading: listLoading,\n    isError: listError,\n  } = useApiQuery<IPaymentMethod[]>(\n    ConfigService.pgV1ApiUrl,\n    s2s('PaymentMethod'),\n    s2sConfig,\n  );\n\n  useEffect(() => {\n    if (!paymentMethodList) return;\n\n    const validMethods = paymentMethodList.filter(Boolean);\n    if (validMethods.length === 0) {\n      setMethods([]);\n      return;\n    }\n\n    let cancelled = false;\n\n    const resolve = async () => {\n      try {\n        const results = await Promise.allSettled(\n          validMethods.map(async (paymentMethod: IPaymentMethod) => {\n            // In S2S mode there is no Unity user, but methods should be enabled.\n            // In non-S2S mode, short-circuit when there is no tenant context.\n            if (!s2sToken && !user?.currentTenantId) {\n              return {\n                paymentMethodID: paymentMethod.paymentMethodID,\n                name: paymentMethod.name,\n                enabled: false,\n                data: null,\n                paymentVendorConnection: undefined,\n                isHostedPaymentPage: false,\n                providerType: null,\n                providerProps: null,\n                hasReadPropertiesError: false,\n                readPropertiesMessageError: null,\n              } as IPaymentMethodTab;\n            }\n\n            try {\n              const result = await apiMutate(\n                ConfigService.pgV1ApiUrl,\n                s2s(`AppPaymentVendor/PaymentMethod/${paymentMethod.paymentMethodID}`),\n                { method: 'GET', ...s2sConfig },\n                {},\n              );\n\n              const paymentVendorConnection = result?.data?.paymentVendorConnection || null;\n              const providerType =\n                (paymentVendorConnection?.paymentVendorFactoryID as PaymentVendorFactoryEnum | null) ?? null;\n              const hostedPaymentPageSetup =\n                paymentVendorConnection?.hostedPaymentPageSetup?.find(\n                  (x: HostedPaymentPageSetup) => x.useHostedPaymentPage,\n                ) || null;\n              const isHostedPaymentPage = hostedPaymentPageSetup?.useHostedPaymentPage || false;\n\n              let providerProps: any = {};\n              let hasReadPropertiesError = false;\n              let readPropertiesMessageError: string | null = null;\n\n              if (isHostedPaymentPage) {\n                const { error, attributes } = stringToProps(\n                  hostedPaymentPageSetup?.hostedPaymentPageConfig,\n                );\n\n                providerProps = {\n                  customCss: hostedPaymentPageSetup?.customCSS,\n                  attributes,\n                  ...(attributes?.baseUrl ? { baseUrl: attributes?.baseUrl } : null),\n                };\n\n                hasReadPropertiesError = Boolean(error);\n                readPropertiesMessageError = error || null;\n              }\n\n              const resolved: IPaymentMethodTab = {\n                paymentMethodID: paymentMethod.paymentMethodID,\n                name: paymentMethod.name,\n                enabled: result?.status === 200,\n                data: result?.status === 200 ? result.data : null,\n                paymentVendorConnection,\n                isHostedPaymentPage,\n                providerType,\n                providerProps,\n                hasReadPropertiesError,\n                readPropertiesMessageError,\n              };\n              return resolved;\n            } catch (error) {\n              console.error(\n                `Error fetching payment method info for ${paymentMethod?.paymentMethodID}:`,\n                error,\n              );\n              return null;\n            }\n          }),\n        );\n\n        if (cancelled) return;\n\n        const filtered = results\n          .filter((r): r is PromiseFulfilledResult<IPaymentMethodTab | null> =>\n            r.status === 'fulfilled' && r.value !== null,\n          )\n          .map((r) => r.value as IPaymentMethodTab);\n\n        setMethods(filtered);\n        setResolveError(false);\n      } catch (error) {\n        if (cancelled) return;\n        console.error('Error resolving payment methods:', error);\n        setMethods([]);\n        setResolveError(true);\n      }\n    };\n\n    resolve();\n    return () => {\n      cancelled = true;\n    };\n  }, [paymentMethodList, user?.currentTenantId, s2sToken, s2sTenantId]);\n\n  return {\n    methods,\n    isLoading: listLoading || (paymentMethodList !== undefined && methods === undefined),\n    isError: listError || resolveError,\n  };\n}\n"],"mappings":"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"}