@fluid-app/portal-sdk 0.1.311 → 0.1.313

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/{AddressAutocompleteInput-CmbuVfD5.cjs → AddressAutocompleteInput-BqZwiUup.cjs} +212 -136
  2. package/dist/AddressAutocompleteInput-BqZwiUup.cjs.map +1 -0
  3. package/dist/{AddressAutocompleteInput-RLaGWKfq.mjs → AddressAutocompleteInput-DY0ZFQOs.mjs} +212 -136
  4. package/dist/AddressAutocompleteInput-DY0ZFQOs.mjs.map +1 -0
  5. package/dist/{ContactsScreen-C2-ScK3i.cjs → ContactsScreen-B_iTSV67.cjs} +21 -21
  6. package/dist/{ContactsScreen-C2-ScK3i.cjs.map → ContactsScreen-B_iTSV67.cjs.map} +1 -1
  7. package/dist/{ContactsScreen-9613La-4.cjs → ContactsScreen-BacGvYpU.cjs} +1 -1
  8. package/dist/{ContactsScreen-CAwUXMDr.mjs → ContactsScreen-D2htG3gL.mjs} +21 -21
  9. package/dist/{ContactsScreen-CAwUXMDr.mjs.map → ContactsScreen-D2htG3gL.mjs.map} +1 -1
  10. package/dist/{FluidProvider-D4T1Tfn7.mjs → FluidProvider-BdjVFM6g.mjs} +5 -3
  11. package/dist/{FluidProvider-D4T1Tfn7.mjs.map → FluidProvider-BdjVFM6g.mjs.map} +1 -1
  12. package/dist/{FluidProvider-FvdFx8ML.cjs → FluidProvider-CiMgrTE0.cjs} +5 -3
  13. package/dist/{FluidProvider-FvdFx8ML.cjs.map → FluidProvider-CiMgrTE0.cjs.map} +1 -1
  14. package/dist/{MessagingScreen-_TJsaL8I.cjs → MessagingScreen-B0nvkVRJ.cjs} +2 -2
  15. package/dist/{MessagingScreen-_TJsaL8I.cjs.map → MessagingScreen-B0nvkVRJ.cjs.map} +1 -1
  16. package/dist/{MessagingScreen-CWqnuXcd.mjs → MessagingScreen-ClnTfJPR.mjs} +2 -2
  17. package/dist/{MessagingScreen-CWqnuXcd.mjs.map → MessagingScreen-ClnTfJPR.mjs.map} +1 -1
  18. package/dist/{MessagingScreen-bUf-46H5.cjs → MessagingScreen-DckwoF5C.cjs} +2 -2
  19. package/dist/{MessagingScreen-DuYCzPYW.mjs → MessagingScreen-Dz57LSh8.mjs} +2 -2
  20. package/dist/{OrdersScreen-kVm3EyXs.cjs → OrdersScreen-Ci3ZZZKP.cjs} +2 -2
  21. package/dist/{OrdersScreen-kVm3EyXs.cjs.map → OrdersScreen-Ci3ZZZKP.cjs.map} +1 -1
  22. package/dist/{OrdersScreen-CGxEuDzh.cjs → OrdersScreen-CtzoJUXX.cjs} +2 -2
  23. package/dist/{OrdersScreen-D1Whz24J.mjs → OrdersScreen-DKzZQPWm.mjs} +2 -2
  24. package/dist/{OrdersScreen-OEk3M3Qm.mjs → OrdersScreen-zpW6p4eP.mjs} +2 -2
  25. package/dist/{OrdersScreen-OEk3M3Qm.mjs.map → OrdersScreen-zpW6p4eP.mjs.map} +1 -1
  26. package/dist/{ProfileScreen-DCrPvVaF.cjs → ProfileScreen-BRYNGS4S.cjs} +3 -3
  27. package/dist/{ProfileScreen-BBjsjvuj.cjs → ProfileScreen-BXZMqNcY.cjs} +30 -23
  28. package/dist/ProfileScreen-BXZMqNcY.cjs.map +1 -0
  29. package/dist/{ProfileScreen-eeXNttNa.mjs → ProfileScreen-BirNjDNw.mjs} +3 -3
  30. package/dist/{ProfileScreen-DeTQ4Xoo.mjs → ProfileScreen-D-Vo-_yC.mjs} +30 -23
  31. package/dist/ProfileScreen-D-Vo-_yC.mjs.map +1 -0
  32. package/dist/{ShopScreen-BGiVyKAO.cjs → ShopScreen-CBZsxycw.cjs} +2 -2
  33. package/dist/{ShopScreen-KF3dsnFC.mjs → ShopScreen-CC3KbNCc.mjs} +2 -2
  34. package/dist/{ShopScreen-KF3dsnFC.mjs.map → ShopScreen-CC3KbNCc.mjs.map} +1 -1
  35. package/dist/{ShopScreen-Cx-iyP99.cjs → ShopScreen-D9I_t5HX.cjs} +2 -2
  36. package/dist/{ShopScreen-Cx-iyP99.cjs.map → ShopScreen-D9I_t5HX.cjs.map} +1 -1
  37. package/dist/{ShopScreen-CH3PhvzA.mjs → ShopScreen-Jsj-2scF.mjs} +2 -2
  38. package/dist/{SubscriptionsScreen-BJ8yW6x3.cjs → SubscriptionsScreen-Bo4cTf0n.cjs} +3 -3
  39. package/dist/{SubscriptionsScreen-7DGtY49t.cjs → SubscriptionsScreen-CNjeVllB.cjs} +152 -57
  40. package/dist/SubscriptionsScreen-CNjeVllB.cjs.map +1 -0
  41. package/dist/{SubscriptionsScreen-DpcL08EP.mjs → SubscriptionsScreen-DcmKn9y1.mjs} +152 -57
  42. package/dist/SubscriptionsScreen-DcmKn9y1.mjs.map +1 -0
  43. package/dist/{SubscriptionsScreen-CHdYF4Ga.mjs → SubscriptionsScreen-s9CNAkH9.mjs} +3 -3
  44. package/dist/{de-5dJcGXHd.mjs → de-CZcaM1mg.mjs} +33 -1
  45. package/dist/de-CZcaM1mg.mjs.map +1 -0
  46. package/dist/{de-279qQKkW.cjs → de-DOhr1RUy.cjs} +33 -1
  47. package/dist/de-DOhr1RUy.cjs.map +1 -0
  48. package/dist/{el-DXt-pZcE.mjs → el-CFfcOTW0.mjs} +33 -1
  49. package/dist/el-CFfcOTW0.mjs.map +1 -0
  50. package/dist/{el-CFPYRWKm.cjs → el-De6RiFnZ.cjs} +33 -1
  51. package/dist/el-De6RiFnZ.cjs.map +1 -0
  52. package/dist/{es-DLfWfxCc.cjs → es-BxpjC2GW.cjs} +33 -1
  53. package/dist/es-BxpjC2GW.cjs.map +1 -0
  54. package/dist/{es-WB2frRI4.mjs → es-jVAovyyN.mjs} +33 -1
  55. package/dist/es-jVAovyyN.mjs.map +1 -0
  56. package/dist/{fr-DgmvSclY.mjs → fr-BS-JXutt.mjs} +33 -1
  57. package/dist/fr-BS-JXutt.mjs.map +1 -0
  58. package/dist/{fr-C3IQZmS6.cjs → fr-DErR5mVD.cjs} +33 -1
  59. package/dist/fr-DErR5mVD.cjs.map +1 -0
  60. package/dist/{he-XJMTsvul.cjs → he-BCoena1G.cjs} +33 -1
  61. package/dist/he-BCoena1G.cjs.map +1 -0
  62. package/dist/{he-w6k-YiLm.mjs → he-Dm3gcP5z.mjs} +33 -1
  63. package/dist/he-Dm3gcP5z.mjs.map +1 -0
  64. package/dist/{hu-BydB22cZ.cjs → hu-BzV6oL5x.cjs} +33 -1
  65. package/dist/hu-BzV6oL5x.cjs.map +1 -0
  66. package/dist/{hu-tDjFfQ9J.mjs → hu-DrbPFf-v.mjs} +33 -1
  67. package/dist/hu-DrbPFf-v.mjs.map +1 -0
  68. package/dist/{id-Dp68FLAc.mjs → id-B8lS0RIT.mjs} +33 -1
  69. package/dist/id-B8lS0RIT.mjs.map +1 -0
  70. package/dist/{id-0CifOwIm.cjs → id-BJnQbLNZ.cjs} +33 -1
  71. package/dist/id-BJnQbLNZ.cjs.map +1 -0
  72. package/dist/index.cjs +20 -20
  73. package/dist/index.mjs +20 -20
  74. package/dist/{it-DngfQciz.mjs → it-Cz92WfRO.mjs} +33 -1
  75. package/dist/it-Cz92WfRO.mjs.map +1 -0
  76. package/dist/{it-CBdazuIz.cjs → it-Dij-dYqs.cjs} +33 -1
  77. package/dist/it-Dij-dYqs.cjs.map +1 -0
  78. package/dist/{ja-CVtC1kDv.cjs → ja-CrT0URkz.cjs} +33 -1
  79. package/dist/ja-CrT0URkz.cjs.map +1 -0
  80. package/dist/{ja-CkMDVPtH.mjs → ja-DI_TV2Zj.mjs} +33 -1
  81. package/dist/ja-DI_TV2Zj.mjs.map +1 -0
  82. package/dist/{ko-R-Le9JU8.cjs → ko-Dv4sXcM3.cjs} +33 -1
  83. package/dist/ko-Dv4sXcM3.cjs.map +1 -0
  84. package/dist/{ko-B72HbkvY.mjs → ko-E9TdOA9L.mjs} +33 -1
  85. package/dist/ko-E9TdOA9L.mjs.map +1 -0
  86. package/dist/{nl-CuaJpFBW.mjs → nl-B_w0JfzN.mjs} +33 -1
  87. package/dist/nl-B_w0JfzN.mjs.map +1 -0
  88. package/dist/{nl-dE66DT9d.cjs → nl-CPxJexkh.cjs} +33 -1
  89. package/dist/nl-CPxJexkh.cjs.map +1 -0
  90. package/dist/{pl-CNTDY6Ov.mjs → pl-BTmWl6HG.mjs} +33 -1
  91. package/dist/pl-BTmWl6HG.mjs.map +1 -0
  92. package/dist/{pl-d7LeUSmm.cjs → pl-ifHwr3rd.cjs} +33 -1
  93. package/dist/pl-ifHwr3rd.cjs.map +1 -0
  94. package/dist/{pt-Cu2TCvrS.mjs → pt-C1UtoI8g.mjs} +33 -1
  95. package/dist/pt-C1UtoI8g.mjs.map +1 -0
  96. package/dist/{pt-DlWYOQB7.cjs → pt-lMkT_wS4.cjs} +33 -1
  97. package/dist/pt-lMkT_wS4.cjs.map +1 -0
  98. package/dist/{ro-IGnNpnPk.mjs → ro-CQ1vwLZl.mjs} +33 -1
  99. package/dist/ro-CQ1vwLZl.mjs.map +1 -0
  100. package/dist/{ro-CxRERiJd.cjs → ro-DDUpw1f5.cjs} +33 -1
  101. package/dist/ro-DDUpw1f5.cjs.map +1 -0
  102. package/dist/{ru-BaL7GN_2.cjs → ru-BQOLcWNV.cjs} +33 -1
  103. package/dist/ru-BQOLcWNV.cjs.map +1 -0
  104. package/dist/{ru-CDda1N4V.mjs → ru-V4rwK1qm.mjs} +33 -1
  105. package/dist/ru-V4rwK1qm.mjs.map +1 -0
  106. package/dist/{th-Bmg6T2oO.mjs → th-BBDWFncd.mjs} +33 -1
  107. package/dist/th-BBDWFncd.mjs.map +1 -0
  108. package/dist/{th-eBfuOCvu.cjs → th-BCAGq41B.cjs} +33 -1
  109. package/dist/th-BCAGq41B.cjs.map +1 -0
  110. package/dist/{tl-yM51nib5.mjs → tl-CKtTJyIH.mjs} +33 -1
  111. package/dist/tl-CKtTJyIH.mjs.map +1 -0
  112. package/dist/{tl-DorumJMB.cjs → tl-D-jPdAL3.cjs} +33 -1
  113. package/dist/tl-D-jPdAL3.cjs.map +1 -0
  114. package/dist/{tr-q4NrT_MG.mjs → tr-C1fcNn_N.mjs} +33 -1
  115. package/dist/tr-C1fcNn_N.mjs.map +1 -0
  116. package/dist/{tr-CPLe40Ae.cjs → tr-DylwTPzx.cjs} +33 -1
  117. package/dist/tr-DylwTPzx.cjs.map +1 -0
  118. package/dist/{zh_CN-DELFfbhB.mjs → zh_CN-Ctx0sPwT.mjs} +33 -1
  119. package/dist/zh_CN-Ctx0sPwT.mjs.map +1 -0
  120. package/dist/{zh_CN-Bvmrqi_G.cjs → zh_CN-DhRV2h7N.cjs} +33 -1
  121. package/dist/zh_CN-DhRV2h7N.cjs.map +1 -0
  122. package/dist/{zh_TW-CryKLufw.mjs → zh_TW-Buj0u5-2.mjs} +33 -1
  123. package/dist/zh_TW-Buj0u5-2.mjs.map +1 -0
  124. package/dist/{zh_TW-DVfX_7Is.cjs → zh_TW-N9P2PjhJ.cjs} +33 -1
  125. package/dist/zh_TW-N9P2PjhJ.cjs.map +1 -0
  126. package/package.json +14 -14
  127. package/dist/AddressAutocompleteInput-CmbuVfD5.cjs.map +0 -1
  128. package/dist/AddressAutocompleteInput-RLaGWKfq.mjs.map +0 -1
  129. package/dist/ProfileScreen-BBjsjvuj.cjs.map +0 -1
  130. package/dist/ProfileScreen-DeTQ4Xoo.mjs.map +0 -1
  131. package/dist/SubscriptionsScreen-7DGtY49t.cjs.map +0 -1
  132. package/dist/SubscriptionsScreen-DpcL08EP.mjs.map +0 -1
  133. package/dist/de-279qQKkW.cjs.map +0 -1
  134. package/dist/de-5dJcGXHd.mjs.map +0 -1
  135. package/dist/el-CFPYRWKm.cjs.map +0 -1
  136. package/dist/el-DXt-pZcE.mjs.map +0 -1
  137. package/dist/es-DLfWfxCc.cjs.map +0 -1
  138. package/dist/es-WB2frRI4.mjs.map +0 -1
  139. package/dist/fr-C3IQZmS6.cjs.map +0 -1
  140. package/dist/fr-DgmvSclY.mjs.map +0 -1
  141. package/dist/he-XJMTsvul.cjs.map +0 -1
  142. package/dist/he-w6k-YiLm.mjs.map +0 -1
  143. package/dist/hu-BydB22cZ.cjs.map +0 -1
  144. package/dist/hu-tDjFfQ9J.mjs.map +0 -1
  145. package/dist/id-0CifOwIm.cjs.map +0 -1
  146. package/dist/id-Dp68FLAc.mjs.map +0 -1
  147. package/dist/it-CBdazuIz.cjs.map +0 -1
  148. package/dist/it-DngfQciz.mjs.map +0 -1
  149. package/dist/ja-CVtC1kDv.cjs.map +0 -1
  150. package/dist/ja-CkMDVPtH.mjs.map +0 -1
  151. package/dist/ko-B72HbkvY.mjs.map +0 -1
  152. package/dist/ko-R-Le9JU8.cjs.map +0 -1
  153. package/dist/nl-CuaJpFBW.mjs.map +0 -1
  154. package/dist/nl-dE66DT9d.cjs.map +0 -1
  155. package/dist/pl-CNTDY6Ov.mjs.map +0 -1
  156. package/dist/pl-d7LeUSmm.cjs.map +0 -1
  157. package/dist/pt-Cu2TCvrS.mjs.map +0 -1
  158. package/dist/pt-DlWYOQB7.cjs.map +0 -1
  159. package/dist/ro-CxRERiJd.cjs.map +0 -1
  160. package/dist/ro-IGnNpnPk.mjs.map +0 -1
  161. package/dist/ru-BaL7GN_2.cjs.map +0 -1
  162. package/dist/ru-CDda1N4V.mjs.map +0 -1
  163. package/dist/th-Bmg6T2oO.mjs.map +0 -1
  164. package/dist/th-eBfuOCvu.cjs.map +0 -1
  165. package/dist/tl-DorumJMB.cjs.map +0 -1
  166. package/dist/tl-yM51nib5.mjs.map +0 -1
  167. package/dist/tr-CPLe40Ae.cjs.map +0 -1
  168. package/dist/tr-q4NrT_MG.mjs.map +0 -1
  169. package/dist/zh_CN-Bvmrqi_G.cjs.map +0 -1
  170. package/dist/zh_CN-DELFfbhB.mjs.map +0 -1
  171. package/dist/zh_TW-CryKLufw.mjs.map +0 -1
  172. package/dist/zh_TW-DVfX_7Is.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
- const require_FluidProvider = require("./FluidProvider-FvdFx8ML.cjs");
2
+ const require_FluidProvider = require("./FluidProvider-CiMgrTE0.cjs");
3
3
  const require_locale_context = require("./locale-context-8CiNKIho.cjs");
4
4
  const require_src = require("./src-BYCIOmsD.cjs");
5
5
  const require_translation_api_context_factory = require("./translation-api-context-factory-BSuSh5Zg.cjs");
@@ -76,6 +76,9 @@ const profileDomain = require_static_dict_adapter.createDomainTranslations({
76
76
  postal_code: "Postal Code",
77
77
  select_state: "Select state",
78
78
  set_as_default_payment_method: "Set as default payment method",
79
+ same_as_shipping: "Same as shipping address",
80
+ use_a_different_address: "Use a different address",
81
+ add_billing_address: "Add billing address",
79
82
  cancel: "Cancel",
80
83
  save: "Save",
81
84
  close: "Close",
@@ -1752,14 +1755,9 @@ function useVgsCollect() {
1752
1755
  }
1753
1756
  //#endregion
1754
1757
  //#region ../../fluid-pay/ui/src/components/CreditCardFormDialog.tsx
1755
- const billingAddressSchema = zod.z.object({
1756
- name: zod.z.string().min(1, "Name is required"),
1757
- address1: zod.z.string().min(1, "Address line 1 is required"),
1758
- address2: zod.z.string().optional().nullable(),
1759
- city: zod.z.string().min(1, "City is required"),
1760
- state: zod.z.string().min(1, "State is required"),
1761
- zip: zod.z.string().min(1, "Zip code is required"),
1762
- country_code: zod.z.string().min(1, "Country is required"),
1758
+ const SENTINEL_CREATE_NEW = "__create_new__";
1759
+ const formSchema = zod.z.object({
1760
+ billing_address_selection: zod.z.string().refine((value) => value !== "" && value !== SENTINEL_CREATE_NEW, { message: "Please select a billing address" }),
1763
1761
  set_as_default: zod.z.boolean()
1764
1762
  });
1765
1763
  function VgsInputWrapper({ id, label, fieldState, className }) {
@@ -1813,68 +1811,140 @@ function VgsCardForm({ vgsFieldState, networkError }) {
1813
1811
  ]
1814
1812
  });
1815
1813
  }
1816
- function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countries = [], error, jwt, renderAddressAutocomplete, t }) {
1814
+ function formatAddressOneLine(addr) {
1815
+ const cityStateZip = [
1816
+ addr.city,
1817
+ addr.state,
1818
+ addr.postal_code
1819
+ ].filter((p) => Boolean(p && p.trim().length > 0)).join(", ");
1820
+ return [
1821
+ addr.address1,
1822
+ addr.address2,
1823
+ cityStateZip,
1824
+ addr.country_code
1825
+ ].filter((p) => Boolean(p && p.trim().length > 0)).join(" • ");
1826
+ }
1827
+ function AddressSummaryCard({ address }) {
1828
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1829
+ className: "border-input bg-muted/30 rounded-md border p-3 text-sm break-words",
1830
+ children: [
1831
+ address.name && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1832
+ className: "font-medium",
1833
+ children: address.name
1834
+ }),
1835
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1836
+ className: "text-muted-foreground",
1837
+ children: address.address1
1838
+ }),
1839
+ address.address2 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1840
+ className: "text-muted-foreground",
1841
+ children: address.address2
1842
+ }),
1843
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1844
+ className: "text-muted-foreground",
1845
+ children: [[address.city, address.state].filter(Boolean).join(", "), address.postal_code ? ` ${address.postal_code}` : ""]
1846
+ }),
1847
+ address.country_code && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1848
+ className: "text-muted-foreground",
1849
+ children: address.country_code
1850
+ })
1851
+ ]
1852
+ });
1853
+ }
1854
+ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, error, jwt, shippingAddress, savedAddresses = [], defaultBillingAddressId, renderAddressFormDialog, t }) {
1817
1855
  const api = useFluidPayApi();
1818
1856
  const [cardError, setCardError] = (0, react.useState)(void 0);
1819
1857
  const [isVgsSubmitting, setIsVgsSubmitting] = (0, react.useState)(false);
1858
+ const [createdAddresses, setCreatedAddresses] = (0, react.useState)([]);
1859
+ const [isAddressDialogOpen, setIsAddressDialogOpen] = (0, react.useState)(false);
1820
1860
  const { isFormReady, isLoading: isVgsLoading, isScriptLoaded, scriptLoadError, initializeForm, submitCard, vgsFieldState, resetVgs, onSuccessRef, onErrorRef } = useVgsCollect();
1821
- const { control, handleSubmit, reset, setValue } = require_src.useZodForm(billingAddressSchema, { defaultValues: {
1822
- name: "",
1823
- address1: "",
1824
- address2: "",
1825
- city: "",
1826
- state: "",
1827
- zip: "",
1828
- country_code: "US",
1861
+ const shippingId = shippingAddress?.id ?? null;
1862
+ const dedupedSavedAddresses = (0, react.useMemo)(() => shippingId === null ? savedAddresses : savedAddresses.filter((a) => a.id !== shippingId), [savedAddresses, shippingId]);
1863
+ const allAddresses = (0, react.useMemo)(() => {
1864
+ const list = [];
1865
+ if (shippingAddress) list.push(shippingAddress);
1866
+ list.push(...dedupedSavedAddresses);
1867
+ list.push(...createdAddresses);
1868
+ return list;
1869
+ }, [
1870
+ shippingAddress,
1871
+ dedupedSavedAddresses,
1872
+ createdAddresses
1873
+ ]);
1874
+ const hasRealAddresses = allAddresses.length > 0;
1875
+ const initialSelection = (0, react.useMemo)(() => {
1876
+ if (shippingAddress) return shippingAddress.id.toString();
1877
+ if (defaultBillingAddressId && dedupedSavedAddresses.some((a) => a.id === defaultBillingAddressId)) return defaultBillingAddressId.toString();
1878
+ const first = dedupedSavedAddresses[0];
1879
+ if (first) return first.id.toString();
1880
+ return SENTINEL_CREATE_NEW;
1881
+ }, [
1882
+ shippingAddress,
1883
+ defaultBillingAddressId,
1884
+ dedupedSavedAddresses
1885
+ ]);
1886
+ const { control, handleSubmit, reset, setValue, watch } = require_src.useZodForm(formSchema, { defaultValues: {
1887
+ billing_address_selection: initialSelection,
1829
1888
  set_as_default: false
1830
1889
  } });
1831
- const billingCountry = (0, react_hook_form.useWatch)({
1832
- control,
1833
- name: "country_code"
1834
- });
1835
- const setAsDefault = (0, react_hook_form.useWatch)({
1836
- control,
1837
- name: "set_as_default"
1838
- });
1839
- const { stateOptions, config, handleCountryChange } = useCountryStates();
1840
- const countrySelectOptions = [...countries].map((country) => ({
1841
- name: country.name,
1842
- value: country.iso
1843
- })).sort((a, b) => {
1844
- if (a.value === billingCountry) return -1;
1845
- if (b.value === billingCountry) return 1;
1846
- return a.name.localeCompare(b.name);
1847
- });
1848
- const stateSelectOptions = stateOptions.map((state) => ({
1849
- name: state.name,
1850
- value: state.isoCode
1851
- }));
1852
- (0, react.useEffect)(() => {
1853
- handleCountryChange(billingCountry);
1854
- }, [billingCountry, handleCountryChange]);
1855
1890
  (0, react.useEffect)(() => {
1856
- if (!isOpen || !isScriptLoaded) return;
1857
- let cancelled = false;
1858
- const init = async () => {
1859
- try {
1860
- const credentials = await api.vault.fetchCredentials(jwt);
1861
- if (!cancelled) await initializeForm(credentials);
1862
- } catch (err) {
1863
- console.error("Failed to fetch vault credentials:", err);
1864
- if (!cancelled) setCardError("Failed to initialize payment form");
1865
- }
1866
- };
1867
- init();
1868
- return () => {
1869
- cancelled = true;
1870
- };
1891
+ if (isOpen) {
1892
+ reset({
1893
+ billing_address_selection: initialSelection,
1894
+ set_as_default: false
1895
+ });
1896
+ setCreatedAddresses([]);
1897
+ }
1871
1898
  }, [
1872
1899
  isOpen,
1873
- isScriptLoaded,
1874
- jwt,
1875
- api,
1876
- initializeForm
1900
+ initialSelection,
1901
+ reset
1877
1902
  ]);
1903
+ const currentSelection = watch("billing_address_selection");
1904
+ const setAsDefault = watch("set_as_default");
1905
+ const selectedAddress = (0, react.useMemo)(() => {
1906
+ if (!currentSelection || currentSelection === SENTINEL_CREATE_NEW) return null;
1907
+ const id = Number(currentSelection);
1908
+ if (!Number.isFinite(id)) return null;
1909
+ return allAddresses.find((a) => a.id === id) ?? null;
1910
+ }, [currentSelection, allAddresses]);
1911
+ const selectOptions = (0, react.useMemo)(() => {
1912
+ const options = [];
1913
+ if (shippingAddress) options.push({
1914
+ name: t("same_as_shipping"),
1915
+ value: shippingAddress.id.toString()
1916
+ });
1917
+ for (const addr of dedupedSavedAddresses) options.push({
1918
+ name: formatAddressOneLine(addr),
1919
+ value: addr.id.toString()
1920
+ });
1921
+ for (const addr of createdAddresses) options.push({
1922
+ name: formatAddressOneLine(addr),
1923
+ value: addr.id.toString()
1924
+ });
1925
+ options.push({
1926
+ name: t("use_a_different_address"),
1927
+ value: SENTINEL_CREATE_NEW
1928
+ });
1929
+ return options;
1930
+ }, [
1931
+ shippingAddress,
1932
+ dedupedSavedAddresses,
1933
+ createdAddresses,
1934
+ t
1935
+ ]);
1936
+ const handleSelectionChange = (0, react.useCallback)((value) => {
1937
+ if (value === SENTINEL_CREATE_NEW) {
1938
+ setIsAddressDialogOpen(true);
1939
+ return;
1940
+ }
1941
+ setValue("billing_address_selection", value, { shouldValidate: true });
1942
+ }, [setValue]);
1943
+ const handleAddressCreated = (0, react.useCallback)((address) => {
1944
+ setCreatedAddresses((list) => [...list, address]);
1945
+ setValue("billing_address_selection", address.id.toString(), { shouldValidate: true });
1946
+ setIsAddressDialogOpen(false);
1947
+ }, [setValue]);
1878
1948
  const handleVgsSuccess = (0, react.useCallback)((response) => {
1879
1949
  const expValue = response?.card_exp;
1880
1950
  if (!expValue) {
@@ -1896,31 +1966,26 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1896
1966
  return;
1897
1967
  }
1898
1968
  handleSubmit((formData) => {
1969
+ const billingAddressId = Number(formData.billing_address_selection);
1970
+ if (!Number.isFinite(billingAddressId)) {
1971
+ setCardError("Please select a billing address.");
1972
+ setIsVgsSubmitting(false);
1973
+ return;
1974
+ }
1899
1975
  onSubmit({
1900
- type: "credit_card",
1901
- country_code: formData.country_code,
1902
- default_payment_method: formData.set_as_default,
1976
+ set_as_default: formData.set_as_default,
1903
1977
  payment_method: {
1904
1978
  token: response.card_number,
1905
1979
  cvv_token: response.card_cvc,
1906
1980
  exp_month: expMonth,
1907
1981
  exp_year: expYear,
1908
- card_holder: cardholderName,
1909
- billing_zip: formData.zip
1982
+ card_holder: cardholderName
1910
1983
  },
1911
- billing_address: {
1912
- name: formData.name,
1913
- address1: formData.address1,
1914
- address2: formData.address2 ?? void 0,
1915
- city: formData.city,
1916
- state: formData.state,
1917
- zip: formData.zip,
1918
- country_code: formData.country_code
1919
- }
1984
+ billing_address_id: billingAddressId
1920
1985
  });
1921
1986
  setIsVgsSubmitting(false);
1922
1987
  }, () => {
1923
- setCardError("Please fix the errors in the billing address.");
1988
+ setCardError("Please select a billing address.");
1924
1989
  setIsVgsSubmitting(false);
1925
1990
  })();
1926
1991
  }, [handleSubmit, onSubmit]);
@@ -1937,11 +2002,35 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1937
2002
  onSuccessRef,
1938
2003
  onErrorRef
1939
2004
  ]);
2005
+ (0, react.useEffect)(() => {
2006
+ if (!isOpen || !isScriptLoaded) return;
2007
+ let cancelled = false;
2008
+ const init = async () => {
2009
+ try {
2010
+ const credentials = await api.vault.fetchCredentials(jwt);
2011
+ if (!cancelled) await initializeForm(credentials);
2012
+ } catch (err) {
2013
+ console.error("Failed to fetch vault credentials:", err);
2014
+ if (!cancelled) setCardError("Failed to initialize payment form");
2015
+ }
2016
+ };
2017
+ init();
2018
+ return () => {
2019
+ cancelled = true;
2020
+ };
2021
+ }, [
2022
+ isOpen,
2023
+ isScriptLoaded,
2024
+ jwt,
2025
+ api,
2026
+ initializeForm
2027
+ ]);
1940
2028
  const handleClose = () => {
1941
2029
  resetVgs();
1942
2030
  reset();
1943
2031
  setCardError(void 0);
1944
2032
  setIsVgsSubmitting(false);
2033
+ setIsAddressDialogOpen(false);
1945
2034
  onClose();
1946
2035
  };
1947
2036
  const handleFormSubmit = handleSubmit(() => {
@@ -1950,13 +2039,13 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1950
2039
  submitCard();
1951
2040
  });
1952
2041
  const isBusy = isSubmitting || isVgsSubmitting;
1953
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Dialog, {
2042
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Dialog, {
1954
2043
  open: isOpen,
1955
2044
  onOpenChange: (open) => !open && handleClose(),
1956
2045
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DialogContent, {
1957
2046
  className: "max-h-[90vh] max-w-md overflow-y-auto p-0 md:max-w-xl",
1958
2047
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1959
- className: "relative p-6",
2048
+ className: "relative min-w-0 p-6",
1960
2049
  children: [
1961
2050
  (isVgsLoading || !isFormReady) && !scriptLoadError && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1962
2051
  className: "bg-background/80 absolute inset-0 z-10 flex items-center justify-center rounded backdrop-blur-[1px]",
@@ -1981,64 +2070,47 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
1981
2070
  className: "text-muted-foreground text-sm font-medium",
1982
2071
  children: t("billing_address")
1983
2072
  }),
1984
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormSelectField, {
1985
- control,
1986
- name: "country_code",
1987
- label: t("country"),
1988
- placeholder: t("select_an_option"),
1989
- options: countrySelectOptions,
1990
- disabled: isBusy
1991
- }),
1992
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormTextField, {
1993
- control,
1994
- name: "name",
1995
- label: t("name"),
1996
- disabled: isBusy
1997
- }),
1998
- renderAddressAutocomplete ? renderAddressAutocomplete({
1999
- control,
2000
- setValue,
2001
- countryCode: billingCountry
2002
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormTextField, {
2073
+ hasRealAddresses ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_hook_form.Controller, {
2003
2074
  control,
2004
- name: "address1",
2005
- label: t("address_line_1"),
2006
- disabled: isBusy
2007
- }),
2008
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormTextField, {
2009
- control,
2010
- name: "address2",
2011
- label: t("address_line_2"),
2012
- disabled: isBusy
2075
+ name: "billing_address_selection",
2076
+ render: ({ field: { value }, fieldState: { error: fieldError } }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2077
+ className: "space-y-1",
2078
+ children: [
2079
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Label, {
2080
+ htmlFor: "billing-address-selection",
2081
+ className: "mb-1.5 block text-sm font-medium",
2082
+ children: t("billing_address")
2083
+ }),
2084
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Select, {
2085
+ value,
2086
+ onValueChange: handleSelectionChange,
2087
+ disabled: isBusy,
2088
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.SelectTrigger, {
2089
+ id: "billing-address-selection",
2090
+ "aria-invalid": !!fieldError,
2091
+ className: "w-full min-w-0 [&>span]:block! [&>span]:min-w-0 [&>span]:truncate",
2092
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.SelectValue, { placeholder: t("select_an_option") })
2093
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.SelectContent, { children: selectOptions.map((opt) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.SelectItem, {
2094
+ value: opt.value,
2095
+ onClick: opt.value === SENTINEL_CREATE_NEW ? () => setIsAddressDialogOpen(true) : void 0,
2096
+ children: opt.name
2097
+ }, opt.value)) })]
2098
+ }),
2099
+ fieldError?.message && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2100
+ className: "text-destructive text-sm",
2101
+ children: fieldError.message
2102
+ })
2103
+ ]
2104
+ })
2105
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
2106
+ type: "button",
2107
+ variant: "outline",
2108
+ onClick: () => setIsAddressDialogOpen(true),
2109
+ disabled: isBusy,
2110
+ className: "w-full",
2111
+ children: t("add_billing_address")
2013
2112
  }),
2014
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2015
- className: "flex gap-3",
2016
- children: [
2017
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormTextField, {
2018
- control,
2019
- name: "city",
2020
- label: t("city"),
2021
- containerClassName: "flex-1",
2022
- disabled: isBusy
2023
- }),
2024
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormSelectField, {
2025
- control,
2026
- name: "state",
2027
- label: config?.regionLabel ? t(config.regionLabel) : t("state"),
2028
- placeholder: t("select_state"),
2029
- options: stateSelectOptions,
2030
- containerClassName: "flex-1",
2031
- disabled: isBusy
2032
- }),
2033
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormTextField, {
2034
- control,
2035
- name: "zip",
2036
- label: config?.postalLabel ? t(config.postalLabel) : t("zip_code"),
2037
- containerClassName: "flex-1",
2038
- disabled: isBusy
2039
- })
2040
- ]
2041
- })
2113
+ selectedAddress && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AddressSummaryCard, { address: selectedAddress })
2042
2114
  ]
2043
2115
  })]
2044
2116
  }),
@@ -2068,7 +2140,11 @@ function CreditCardFormDialog({ isOpen, onClose, onSubmit, isSubmitting, countri
2068
2140
  ]
2069
2141
  })
2070
2142
  })
2071
- });
2143
+ }), renderAddressFormDialog?.({
2144
+ isOpen: isAddressDialogOpen,
2145
+ onClose: () => setIsAddressDialogOpen(false),
2146
+ onAddressCreated: handleAddressCreated
2147
+ })] });
2072
2148
  }
2073
2149
  //#endregion
2074
2150
  //#region src/adapters/fluid-pay-api-adapter.ts
@@ -2390,4 +2466,4 @@ Object.defineProperty(exports, "useProfileTranslation", {
2390
2466
  }
2391
2467
  });
2392
2468
 
2393
- //# sourceMappingURL=AddressAutocompleteInput-CmbuVfD5.cjs.map
2469
+ //# sourceMappingURL=AddressAutocompleteInput-BqZwiUup.cjs.map