@paykka/card-checkout-ui 0.11.6 → 0.13.1

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 (187) hide show
  1. package/dist/card-checkout-ui.js +17 -17
  2. package/dist/card-checkout-ui.umd.cjs +17 -17
  3. package/dist/es/api/index.js +1 -0
  4. package/dist/es/api/modules/address/index.js +9 -9
  5. package/dist/es/api/modules/ali-pay/index.js +10 -49
  6. package/dist/es/api/modules/apple-pay/index.js +13 -59
  7. package/dist/es/api/modules/boost/index.js +8 -48
  8. package/dist/es/api/modules/card/index.js +10 -54
  9. package/dist/es/api/modules/checkout/index.js +11 -9
  10. package/dist/es/api/modules/checkout/map.js +25 -18
  11. package/dist/es/api/modules/encrypted-card/index.js +3 -2
  12. package/dist/es/api/modules/gcash/index.js +8 -48
  13. package/dist/es/api/modules/google-pay/index.js +10 -56
  14. package/dist/es/api/modules/grab-pay/index.js +8 -48
  15. package/dist/es/api/modules/index.js +1 -0
  16. package/dist/es/api/modules/line-pay/index.js +8 -48
  17. package/dist/es/api/modules/map.js +17 -11
  18. package/dist/es/api/modules/may-bank-qr-pay/index.js +8 -48
  19. package/dist/es/api/modules/nine-pay/index.js +8 -48
  20. package/dist/es/api/modules/paymaya/index.js +8 -48
  21. package/dist/es/api/modules/risk/index.js +2 -1
  22. package/dist/es/api/modules/sepa/index.js +10 -51
  23. package/dist/es/api/modules/shopee-pay/index.js +8 -48
  24. package/dist/es/api/modules/threeDS/index.js +3 -0
  25. package/dist/es/api/modules/tng-wallet/index.js +8 -48
  26. package/dist/es/api/modules/wechat-pay/index.js +10 -51
  27. package/dist/es/api/modules/zalopay/index.js +16 -0
  28. package/dist/es/api/utils/index.js +59 -0
  29. package/dist/es/components/AddressField/index.js +37 -37
  30. package/dist/es/components/AliPay/index.js +143 -90
  31. package/dist/es/components/ApplePay/index.js +99 -67
  32. package/dist/es/components/Boost/index.js +66 -39
  33. package/dist/es/components/Card/index.js +90 -79
  34. package/dist/es/components/CardSelector/index.js +1 -1
  35. package/dist/es/components/DropIn/index.js +12 -4
  36. package/dist/es/components/EncryptedCard/index.js +1 -1
  37. package/dist/es/components/GooglePay/index.js +93 -60
  38. package/dist/es/components/GrabPay/index.js +66 -39
  39. package/dist/es/components/GuideCard/index.js +10 -7
  40. package/dist/es/components/LinePay/index.js +66 -39
  41. package/dist/es/components/MayBankQRPay/index.js +306 -273
  42. package/dist/es/components/NinePay/index.js +66 -39
  43. package/dist/es/components/SecuredFieldsProvider/index.js +3 -2
  44. package/dist/es/components/SecuredIframe/index.js +4 -2
  45. package/dist/es/components/Sepa/index.js +62 -39
  46. package/dist/es/components/ShopeePay/index.js +66 -39
  47. package/dist/es/components/SubmitButton/index.js +8 -7
  48. package/dist/es/components/TNGWallet/index.js +66 -39
  49. package/dist/es/components/WechatPay/index.js +146 -92
  50. package/dist/es/components/business/QRCodeModal/QRCodeModal.js +26 -6
  51. package/dist/es/components/index.js +1 -0
  52. package/dist/es/components/internal/Modal/Modal.js +1 -1
  53. package/dist/es/components/internal/Select/Select.js +19 -8
  54. package/dist/es/components/internal/Select/SelectMenuItem.js +12 -4
  55. package/dist/es/components/internal/icons/IconZalopay.js +47 -0
  56. package/dist/es/components/internal/icons/IconZalopayComplete.js +48 -0
  57. package/dist/es/components/wallets/GCash/GCash.js +68 -39
  58. package/dist/es/components/wallets/Paymaya/Paymaya.js +66 -39
  59. package/dist/es/components/wallets/Zalopay/Zalopay.js +386 -0
  60. package/dist/es/components/wallets/Zalopay/index.js +1 -0
  61. package/dist/es/components/wallets/Zalopay/type.js +1 -0
  62. package/dist/es/components/wallets/Zalopay/zalopay2.js +1 -0
  63. package/dist/es/config.js +5 -5
  64. package/dist/es/constant.js +8 -2
  65. package/dist/es/core/{Address.js → address.js} +8 -16
  66. package/dist/es/core/{PayKKaCheckout.js → checkout.js} +78 -27
  67. package/dist/es/core/query.js +3 -2
  68. package/dist/es/core/{Session.js → session.js} +37 -20
  69. package/dist/es/core.js +0 -4
  70. package/dist/es/hooks/usePayment.js +14 -0
  71. package/dist/es/i18n/locales/de-DE.js +3 -1
  72. package/dist/es/i18n/locales/en-GB.js +3 -1
  73. package/dist/es/i18n/locales/es-ES.js +3 -1
  74. package/dist/es/i18n/locales/fr-FR.js +3 -1
  75. package/dist/es/i18n/locales/ja-JP.js +3 -1
  76. package/dist/es/i18n/locales/ko-KR.js +3 -1
  77. package/dist/es/i18n/locales/nl-NL.js +3 -1
  78. package/dist/es/i18n/locales/pt-PT.js +3 -1
  79. package/dist/es/i18n/locales/ru-RU.js +3 -1
  80. package/dist/es/i18n/locales/zh-CN.js +3 -1
  81. package/dist/es/i18n/locales/zh-HK.js +3 -1
  82. package/dist/es/i18n/locales/zh-TW.js +3 -1
  83. package/dist/es/index.js +16 -4
  84. package/dist/es/style.css +1 -1
  85. package/dist/es/types/index.js +7 -0
  86. package/dist/es/utils/colors.js +5 -1
  87. package/dist/es/utils/payment.js +82 -0
  88. package/dist/es/utils/redirect.js +4 -4
  89. package/dist/style.css +1 -1
  90. package/dist/types/api/modules/address/index.d.ts +15 -6
  91. package/dist/types/api/modules/ali-pay/index.d.ts +3 -19
  92. package/dist/types/api/modules/apple-pay/index.d.ts +4 -14
  93. package/dist/types/api/modules/boost/index.d.ts +3 -23
  94. package/dist/types/api/modules/card/index.d.ts +3 -30
  95. package/dist/types/api/modules/checkout/index.d.ts +3 -3
  96. package/dist/types/api/modules/checkout/map.d.ts +3 -3
  97. package/dist/types/api/modules/checkout/type.d.ts +33 -4
  98. package/dist/types/api/modules/gcash/index.d.ts +3 -23
  99. package/dist/types/api/modules/google-pay/index.d.ts +3 -13
  100. package/dist/types/api/modules/grab-pay/index.d.ts +3 -23
  101. package/dist/types/api/modules/index.d.ts +1 -0
  102. package/dist/types/api/modules/line-pay/index.d.ts +3 -23
  103. package/dist/types/api/modules/map.d.ts +2 -2
  104. package/dist/types/api/modules/may-bank-qr-pay/index.d.ts +3 -23
  105. package/dist/types/api/modules/nine-pay/index.d.ts +3 -23
  106. package/dist/types/api/modules/paymaya/index.d.ts +3 -23
  107. package/dist/types/api/modules/sepa/index.d.ts +3 -24
  108. package/dist/types/api/modules/shopee-pay/index.d.ts +3 -23
  109. package/dist/types/api/modules/tng-wallet/index.d.ts +3 -23
  110. package/dist/types/api/modules/type.d.ts +74 -21
  111. package/dist/types/api/modules/wechat-pay/index.d.ts +3 -20
  112. package/dist/types/api/modules/zalopay/index.d.ts +4 -0
  113. package/dist/types/api/utils/index.d.ts +48 -0
  114. package/dist/types/components/AddressField/type.d.ts +3 -9
  115. package/dist/types/components/AliPay/AliPay.d.ts +6 -2
  116. package/dist/types/components/AliPay/type.d.ts +15 -2
  117. package/dist/types/components/ApplePay/ApplePay.d.ts +6 -2
  118. package/dist/types/components/ApplePay/type.d.ts +10 -14
  119. package/dist/types/components/ApplePay/utils.d.ts +1 -1
  120. package/dist/types/components/Boost/Boost.d.ts +6 -2
  121. package/dist/types/components/Boost/type.d.ts +2 -24
  122. package/dist/types/components/Card/Card.d.ts +6 -2
  123. package/dist/types/components/Card/type.d.ts +3 -43
  124. package/dist/types/components/DropIn/DropIn.d.ts +6 -2
  125. package/dist/types/components/DropIn/type.d.ts +4 -10
  126. package/dist/types/components/GooglePay/GooglePay.d.ts +6 -2
  127. package/dist/types/components/GooglePay/createGooglePay.d.ts +2 -1
  128. package/dist/types/components/GooglePay/type.d.ts +10 -26
  129. package/dist/types/components/GrabPay/GrabPay.d.ts +6 -2
  130. package/dist/types/components/GrabPay/type.d.ts +3 -25
  131. package/dist/types/components/LinePay/LinePay.d.ts +6 -2
  132. package/dist/types/components/LinePay/type.d.ts +3 -25
  133. package/dist/types/components/MayBankQRPay/MayBankQRPay.d.ts +6 -2
  134. package/dist/types/components/MayBankQRPay/type.d.ts +3 -25
  135. package/dist/types/components/NinePay/NinePay.d.ts +6 -2
  136. package/dist/types/components/NinePay/type.d.ts +3 -25
  137. package/dist/types/components/Sepa/Sepa.d.ts +6 -2
  138. package/dist/types/components/Sepa/type.d.ts +3 -2
  139. package/dist/types/components/ShopeePay/ShopeePay.d.ts +6 -2
  140. package/dist/types/components/ShopeePay/type.d.ts +3 -25
  141. package/dist/types/components/TNGWallet/TNGWallet.d.ts +6 -2
  142. package/dist/types/components/TNGWallet/type.d.ts +3 -25
  143. package/dist/types/components/WechatPay/WechatPay.d.ts +6 -2
  144. package/dist/types/components/WechatPay/type.d.ts +15 -2
  145. package/dist/types/components/business/QRCodeModal/type.d.ts +2 -0
  146. package/dist/types/components/index.d.ts +1 -0
  147. package/dist/types/components/internal/icons/IconZalopay.d.ts +2 -0
  148. package/dist/types/components/internal/icons/IconZalopayComplete.d.ts +2 -0
  149. package/dist/types/components/internal/icons/index.d.ts +3 -0
  150. package/dist/types/components/wallets/GCash/GCash.d.ts +6 -2
  151. package/dist/types/components/wallets/GCash/type.d.ts +3 -35
  152. package/dist/types/components/wallets/Paymaya/Paymaya.d.ts +6 -2
  153. package/dist/types/components/wallets/Paymaya/type.d.ts +3 -25
  154. package/dist/types/components/wallets/Zalopay/Zalopay.d.ts +10 -0
  155. package/dist/types/components/wallets/Zalopay/index.d.ts +2 -0
  156. package/dist/types/components/wallets/Zalopay/type.d.ts +39 -0
  157. package/dist/types/config.d.ts +2 -4
  158. package/dist/types/constant.d.ts +3 -1
  159. package/dist/types/core/{Address.d.ts → address.d.ts} +23 -24
  160. package/dist/types/core/{PayKKaCheckout.d.ts → checkout.d.ts} +5 -3
  161. package/dist/types/core/context.d.ts +3 -2
  162. package/dist/types/core/index.d.ts +2 -2
  163. package/dist/types/core/query.d.ts +2 -2
  164. package/dist/types/core/session.d.ts +33 -0
  165. package/dist/types/hooks/index.d.ts +1 -0
  166. package/dist/types/hooks/usePayment.d.ts +8 -0
  167. package/dist/types/i18n/locales/de-DE.d.ts +2 -0
  168. package/dist/types/i18n/locales/en-GB.d.ts +2 -0
  169. package/dist/types/i18n/locales/es-ES.d.ts +2 -0
  170. package/dist/types/i18n/locales/fr-FR.d.ts +2 -0
  171. package/dist/types/i18n/locales/ja-JP.d.ts +2 -0
  172. package/dist/types/i18n/locales/ko-KR.d.ts +2 -0
  173. package/dist/types/i18n/locales/nl-NL.d.ts +2 -0
  174. package/dist/types/i18n/locales/pt-PT.d.ts +2 -0
  175. package/dist/types/i18n/locales/ru-RU.d.ts +2 -0
  176. package/dist/types/i18n/locales/zh-CN.d.ts +2 -0
  177. package/dist/types/i18n/locales/zh-HK.d.ts +2 -0
  178. package/dist/types/i18n/locales/zh-TW.d.ts +2 -0
  179. package/dist/types/index.d.ts +2 -1
  180. package/dist/types/types/index.d.ts +70 -32
  181. package/dist/types/types/message.d.ts +1 -0
  182. package/dist/types/utils/card-brand/index.d.ts +3 -3
  183. package/dist/types/utils/colors.d.ts +1 -0
  184. package/dist/types/utils/index.d.ts +1 -0
  185. package/dist/types/utils/payment.d.ts +37 -0
  186. package/package.json +3 -3
  187. package/dist/types/core/Session.d.ts +0 -16
@@ -5,16 +5,15 @@ import "../../utils/card-brand/brands.js";
5
5
  import "../../utils/system-info/get-browser-info.js";
6
6
  import { cssVarPrefix, normalizedClass, formatAmount } from "../../utils/format.js";
7
7
  import { redirectToPayment } from "../../utils/redirect.js";
8
+ import { formatPaymentResult } from "../../utils/payment.js";
8
9
  import { isTimeoutError } from "../../api/http.js";
9
- import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
10
10
  import { getBrowserParams } from "../../api/modules/get-browser-params.js";
11
+ import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
11
12
  import { getShopeePayInfo, shopeePay } from "../../api/modules/shopee-pay/index.js";
12
13
  import { PayKKaError } from "../../core/error.js";
13
- import { hidePaymentButton } from "../../config.js";
14
14
  import { usePayState } from "../../hooks/usePayState.js";
15
15
  import { useRetry } from "../../hooks/useRetry.js";
16
16
  import { createEmailCore, EmailField } from "../EmailField/EmailField.js";
17
- import { createAddressCore } from "../../core/Address.js";
18
17
  import { SubmitButton } from "../SubmitButton/index.js";
19
18
  import "../internal/Form/type.js";
20
19
  import "../internal/Form/context.js";
@@ -34,7 +33,8 @@ const ShopeePay = w((props, ref) => {
34
33
  redirectMode = "auto",
35
34
  core,
36
35
  autoQuery = true,
37
- showGuideCard = true
36
+ showGuideCard = true,
37
+ hidePaymentButton = false
38
38
  } = props;
39
39
  F(ref, () => ({
40
40
  stopRetry: () => {
@@ -49,15 +49,17 @@ const ShopeePay = w((props, ref) => {
49
49
  var _a2;
50
50
  if (!(fieldStatus == null ? void 0 : fieldStatus.address.show))
51
51
  return;
52
- setForm(Object.assign(form, { address: addressState.getAddressState() }));
53
- (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressState.getAddressState());
52
+ const newForm = Object.assign(form, { address: addressCore.getAddressState() });
53
+ setForm(newForm);
54
+ (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressCore.getAddressState());
55
+ validateForm();
54
56
  },
55
57
  updateEmail: () => {
56
58
  var _a2;
57
59
  if (!(fieldStatus == null ? void 0 : fieldStatus.email.show))
58
60
  return;
59
- setForm(Object.assign(form, { email: emailState.email }));
60
- form.email = emailState.email;
61
+ const newForm = Object.assign(form, { email: emailState.email });
62
+ setForm(newForm);
61
63
  (_a2 = emailFieldRef.current) == null ? void 0 : _a2.update(emailState.email);
62
64
  validateForm();
63
65
  },
@@ -65,7 +67,7 @@ const ShopeePay = w((props, ref) => {
65
67
  hidePaymentButton && onSubmit();
66
68
  }
67
69
  }));
68
- const addressState = createAddressCore();
70
+ const addressCore = core.getAddressCore();
69
71
  const emailState = createEmailCore();
70
72
  const addressFieldRef = A(null);
71
73
  const emailFieldRef = A(null);
@@ -76,13 +78,13 @@ const ShopeePay = w((props, ref) => {
76
78
  const [form, setForm] = h({
77
79
  email: "",
78
80
  address: {
79
- country: "",
80
- province: "",
81
- city: "",
82
- area: "",
83
- postCode: "",
84
- address1: "",
85
- address2: ""
81
+ country: void 0,
82
+ province: void 0,
83
+ city: void 0,
84
+ area: void 0,
85
+ postCode: void 0,
86
+ address1: void 0,
87
+ address2: void 0
86
88
  }
87
89
  });
88
90
  const [validated, setValidated] = h(false);
@@ -100,17 +102,27 @@ const ShopeePay = w((props, ref) => {
100
102
  }
101
103
  setFieldStatus({ ...field });
102
104
  };
105
+ const processOnSuccess = (res) => {
106
+ var _a2, _b2;
107
+ setSubmitButtonStatus("success");
108
+ (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props, formatPaymentResult({
109
+ ...res,
110
+ returnUrl: (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.returnUrl
111
+ }));
112
+ };
103
113
  y(() => {
104
114
  if (!sessionReady) {
105
115
  return;
106
116
  }
107
- const { bill = {}, paymentMethod = [] } = (session == null ? void 0 : session.checkout) || {};
108
- if (!paymentMethod.includes(PaymentMethod.SHOPEE_PAY)) {
117
+ const { bill = {}, supportMethods = [], country } = (session == null ? void 0 : session.checkout) || {};
118
+ if (!supportMethods.includes(PaymentMethod.SHOPEE_PAY)) {
109
119
  return;
110
120
  }
111
121
  initFieldStatus();
112
122
  setIsCheckoutEnabled(true);
123
+ country && addressCore.setCountry(country);
113
124
  form.email = bill.email ?? "";
125
+ form.address.country = country;
114
126
  if (autoQuery && core.processingPaymentMethod === PaymentMethod.SHOPEE_PAY) {
115
127
  setSubmitButtonStatus("loading");
116
128
  startReFetchPayInfo();
@@ -144,34 +156,49 @@ const ShopeePay = w((props, ref) => {
144
156
  },
145
157
  bill: {
146
158
  email: form.email,
147
- ...form.address,
148
- province: addressState.getLabel(form.address.province, addressState.getProvinceOption()) ?? form.address.province,
149
- city: addressState.getLabel(form.address.city, addressState.getCityOptions()) ?? form.address.city
159
+ addressLine1: form.address.address1,
160
+ addressLine2: form.address.address2,
161
+ postalCode: form.address.postCode,
162
+ country: form.address.country,
163
+ district: form.address.area,
164
+ state: form.address.province ? addressCore.getLabel(form.address.province, addressCore.getProvinceOption()) ?? form.address.province : void 0,
165
+ city: form.address.city ? addressCore.getLabel(form.address.city, addressCore.getCityOptions()) ?? form.address.city : void 0
150
166
  },
151
167
  browser: await getBrowserParams()
152
168
  };
153
169
  };
154
170
  const pay = async (search = false, timeout) => {
155
- var _a2, _b2, _c2, _d2, _e2;
171
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g;
156
172
  try {
157
- const paymentParams = await getPaymentParams();
158
173
  const requestOptions = { locale: i18n.locale, timeout };
159
- const res = search ? await getShopeePayInfo(
160
- { sessionId: session.sessionId, clientKey: session.clientKey },
161
- requestOptions
162
- ) : await shopeePay(paymentParams, props.core, requestOptions);
163
- !search && ((_a2 = props.onSubmitResponse) == null ? void 0 : _a2.call(props, res));
164
- const { status, orderStatus, errorMessage, errorCode, payInfo } = res;
174
+ let res = null;
175
+ if (search) {
176
+ const extraParams = (_b2 = (_a2 = core.config)._getExtraParams) == null ? void 0 : _b2.call(_a2, "query", PaymentMethod.SHOPEE_PAY);
177
+ res = await getShopeePayInfo(
178
+ {
179
+ sessionId: session.sessionId,
180
+ clientKey: session.clientKey,
181
+ paymentMethod: PaymentMethod.SHOPEE_PAY
182
+ },
183
+ extraParams,
184
+ requestOptions
185
+ );
186
+ } else {
187
+ const extraParams = (_d2 = (_c2 = core.config)._getExtraParams) == null ? void 0 : _d2.call(_c2, "payment", PaymentMethod.SHOPEE_PAY);
188
+ res = await shopeePay(await getPaymentParams(), extraParams, requestOptions);
189
+ }
190
+ !search && ((_e2 = props.onSubmitResponse) == null ? void 0 : _e2.call(props, res));
191
+ const { status, orderStatus, errorMessage, errorCode, payInfo, sessionId } = res;
192
+ sessionId && (session.sessionId = sessionId);
165
193
  if (status === "PROCESSING") {
166
194
  if (!orderStatus) {
167
195
  setSubmitButtonStatus("unSubmit");
168
196
  return { end: true };
169
197
  } else if (orderStatus === "SUCCESS") {
170
- setSubmitButtonStatus("success");
171
- (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props);
198
+ processOnSuccess(res);
172
199
  return { end: true };
173
200
  } else if (orderStatus === "FAILURE") {
174
- setErrorMsg(errorMessage);
201
+ errorMessage && setErrorMsg(errorMessage);
175
202
  setSubmitButtonStatus("unSubmit");
176
203
  processOnError(new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
177
204
  return { end: true };
@@ -187,17 +214,16 @@ const ShopeePay = w((props, ref) => {
187
214
  return { end: false };
188
215
  } else if (orderStatus === "CANCELED") {
189
216
  setSubmitButtonStatus("unSubmit");
190
- (_c2 = props.onTimeout) == null ? void 0 : _c2.call(props);
217
+ (_f2 = props.onTimeout) == null ? void 0 : _f2.call(props);
191
218
  core.resetEnablePaymentMethod();
192
219
  return { end: true };
193
220
  }
194
221
  } else if (status === "SUCCESS") {
195
- setSubmitButtonStatus("success");
196
- (_d2 = props.onSuccess) == null ? void 0 : _d2.call(props);
222
+ processOnSuccess(res);
197
223
  return { end: true };
198
224
  } else if (status === "EXPIRED") {
199
225
  setSubmitButtonStatus("unSubmit");
200
- (_e2 = props.onExpired) == null ? void 0 : _e2.call(props);
226
+ (_g = props.onExpired) == null ? void 0 : _g.call(props);
201
227
  return { end: true };
202
228
  }
203
229
  setSubmitButtonStatus("unSubmit");
@@ -212,7 +238,7 @@ const ShopeePay = w((props, ref) => {
212
238
  }
213
239
  } else {
214
240
  const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
215
- setErrorMsg(message);
241
+ message && setErrorMsg(message);
216
242
  processOnError(new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
217
243
  setSubmitButtonStatus("unSubmit");
218
244
  return { end: true };
@@ -235,7 +261,7 @@ const ShopeePay = w((props, ref) => {
235
261
  setErrorMsg("");
236
262
  (_a2 = formRef.current) == null ? void 0 : _a2.validate(async (errors) => {
237
263
  var _a3;
238
- (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressState.setValidateAllFields(true);
264
+ (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressCore.setValidateAllFields(true);
239
265
  (_a3 = props.onSubmit) == null ? void 0 : _a3.call(props, errors);
240
266
  if (errors) {
241
267
  setSubmitButtonStatus("unSubmit");
@@ -305,7 +331,8 @@ const ShopeePay = w((props, ref) => {
305
331
  {
306
332
  value: {
307
333
  i18n,
308
- session
334
+ session,
335
+ core
309
336
  },
310
337
  children: isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u(b, { children: [
311
338
  showGuideCard && /* @__PURE__ */ u(GuideCard, { type: PaymentCategory.SHOPEE_PAY }),
@@ -1,20 +1,19 @@
1
1
  import { h, y, u } from "../../core.js";
2
2
  import { useBEM } from "../../hooks/useBEM.js";
3
- import "../../core/context.js";
3
+ import { useI18n } from "../../hooks/useI18n.js";
4
4
  import "../../utils/card-brand/brands.js";
5
5
  import "../../utils/system-info/get-browser-info.js";
6
6
  import { normalizedClass } from "../../utils/format.js";
7
7
  import "../../api/http.js";
8
- import enGB from "../../i18n/locales/en-GB.js";
9
8
  import { Button } from "../internal/Button/Button.js";
10
9
  import { IconSafe } from "../internal/icons/IconSafe.js";
11
10
  import { LoadingCheck } from "../internal/LoadingCheck/LoadingCheck.js";
12
11
  const { bem } = useBEM("submit-button");
13
12
  const SubmitButton = (props) => {
14
13
  const {
15
- text = enGB["common.pay"],
16
- loadingText = enGB["common.payProcessing"],
17
- successText = enGB["common.paySuccess"],
14
+ text,
15
+ loadingText,
16
+ successText,
18
17
  status = "unSubmit",
19
18
  onClick,
20
19
  className,
@@ -22,6 +21,7 @@ const SubmitButton = (props) => {
22
21
  icon = IconSafe
23
22
  } = props;
24
23
  const [content, setContent] = h(text);
24
+ const { i18n } = useI18n();
25
25
  const Icon = () => {
26
26
  if (status === "unSubmit") {
27
27
  const Comp = icon;
@@ -32,14 +32,15 @@ const SubmitButton = (props) => {
32
32
  {
33
33
  checked: status === "success",
34
34
  size: 20,
35
- onCheckShow: () => setContent(successText)
35
+ onCheckShow: () => setContent(successText || i18n.get("common.paySuccess"))
36
36
  }
37
37
  );
38
38
  };
39
39
  y(() => {
40
40
  if (status === "success")
41
41
  return;
42
- setContent(status === "loading" ? loadingText : text);
42
+ const buttonText = status === "loading" ? loadingText || i18n.get("common.payProcessing") : text || i18n.get("common.pay");
43
+ setContent(buttonText);
43
44
  }, [status, text]);
44
45
  return /* @__PURE__ */ u(
45
46
  Button,
@@ -5,16 +5,15 @@ import "../../utils/card-brand/brands.js";
5
5
  import "../../utils/system-info/get-browser-info.js";
6
6
  import { cssVarPrefix, normalizedClass, formatAmount } from "../../utils/format.js";
7
7
  import { redirectToPayment } from "../../utils/redirect.js";
8
+ import { formatPaymentResult } from "../../utils/payment.js";
8
9
  import { isTimeoutError } from "../../api/http.js";
9
- import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
10
10
  import { getBrowserParams } from "../../api/modules/get-browser-params.js";
11
+ import { PaymentCategory, COMMON_CLASS_NAME, PaymentMethod, SessionMode } from "../../constant.js";
11
12
  import { getTNGWalletPayInfo, tngWalletPay } from "../../api/modules/tng-wallet/index.js";
12
13
  import { PayKKaError } from "../../core/error.js";
13
- import { hidePaymentButton } from "../../config.js";
14
14
  import { usePayState } from "../../hooks/usePayState.js";
15
15
  import { useRetry } from "../../hooks/useRetry.js";
16
16
  import { createEmailCore, EmailField } from "../EmailField/EmailField.js";
17
- import { createAddressCore } from "../../core/Address.js";
18
17
  import { SubmitButton } from "../SubmitButton/index.js";
19
18
  import "../internal/Form/type.js";
20
19
  import "../internal/Form/context.js";
@@ -34,7 +33,8 @@ const TNGWallet = w((props, ref) => {
34
33
  redirectMode = "auto",
35
34
  core,
36
35
  autoQuery = true,
37
- showGuideCard = true
36
+ showGuideCard = true,
37
+ hidePaymentButton = false
38
38
  } = props;
39
39
  F(ref, () => ({
40
40
  stopRetry: () => {
@@ -49,15 +49,17 @@ const TNGWallet = w((props, ref) => {
49
49
  var _a2;
50
50
  if (!(fieldStatus == null ? void 0 : fieldStatus.address.show))
51
51
  return;
52
- setForm(Object.assign(form, { address: addressState.getAddressState() }));
53
- (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressState.getAddressState());
52
+ const newForm = Object.assign(form, { address: addressCore.getAddressState() });
53
+ setForm(newForm);
54
+ (_a2 = addressFieldRef.current) == null ? void 0 : _a2.update(addressCore.getAddressState());
55
+ validateForm();
54
56
  },
55
57
  updateEmail: () => {
56
58
  var _a2;
57
59
  if (!(fieldStatus == null ? void 0 : fieldStatus.email.show))
58
60
  return;
59
- setForm(Object.assign(form, { email: emailState.email }));
60
- form.email = emailState.email;
61
+ const newForm = Object.assign(form, { email: emailState.email });
62
+ setForm(newForm);
61
63
  (_a2 = emailFieldRef.current) == null ? void 0 : _a2.update(emailState.email);
62
64
  validateForm();
63
65
  },
@@ -65,7 +67,7 @@ const TNGWallet = w((props, ref) => {
65
67
  hidePaymentButton && onSubmit();
66
68
  }
67
69
  }));
68
- const addressState = createAddressCore();
70
+ const addressCore = core.getAddressCore();
69
71
  const emailState = createEmailCore();
70
72
  const addressFieldRef = A(null);
71
73
  const emailFieldRef = A(null);
@@ -76,13 +78,13 @@ const TNGWallet = w((props, ref) => {
76
78
  const [form, setForm] = h({
77
79
  email: "",
78
80
  address: {
79
- country: "",
80
- province: "",
81
- city: "",
82
- area: "",
83
- postCode: "",
84
- address1: "",
85
- address2: ""
81
+ country: void 0,
82
+ province: void 0,
83
+ city: void 0,
84
+ area: void 0,
85
+ postCode: void 0,
86
+ address1: void 0,
87
+ address2: void 0
86
88
  }
87
89
  });
88
90
  const [validated, setValidated] = h(false);
@@ -100,17 +102,27 @@ const TNGWallet = w((props, ref) => {
100
102
  }
101
103
  setFieldStatus({ ...field });
102
104
  };
105
+ const processOnSuccess = (res) => {
106
+ var _a2, _b2;
107
+ setSubmitButtonStatus("success");
108
+ (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props, formatPaymentResult({
109
+ ...res,
110
+ returnUrl: (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.returnUrl
111
+ }));
112
+ };
103
113
  y(() => {
104
114
  if (!sessionReady) {
105
115
  return;
106
116
  }
107
- const { bill = {}, paymentMethod = [] } = (session == null ? void 0 : session.checkout) || {};
108
- if (!paymentMethod.includes(PaymentMethod.TNG_WALLET)) {
117
+ const { bill = {}, supportMethods = [], country } = (session == null ? void 0 : session.checkout) || {};
118
+ if (!supportMethods.includes(PaymentMethod.TNG_WALLET)) {
109
119
  return;
110
120
  }
111
121
  initFieldStatus();
112
122
  setIsCheckoutEnabled(true);
123
+ country && addressCore.setCountry(country);
113
124
  form.email = bill.email ?? "";
125
+ form.address.country = country;
114
126
  if (autoQuery && core.processingPaymentMethod === PaymentMethod.TNG_WALLET) {
115
127
  setSubmitButtonStatus("loading");
116
128
  startReFetchPayInfo();
@@ -144,34 +156,49 @@ const TNGWallet = w((props, ref) => {
144
156
  },
145
157
  bill: {
146
158
  email: form.email,
147
- ...form.address,
148
- province: addressState.getLabel(form.address.province, addressState.getProvinceOption()) ?? form.address.province,
149
- city: addressState.getLabel(form.address.city, addressState.getCityOptions()) ?? form.address.city
159
+ addressLine1: form.address.address1,
160
+ addressLine2: form.address.address2,
161
+ postalCode: form.address.postCode,
162
+ country: form.address.country,
163
+ district: form.address.area,
164
+ state: form.address.province ? addressCore.getLabel(form.address.province, addressCore.getProvinceOption()) ?? form.address.province : void 0,
165
+ city: form.address.city ? addressCore.getLabel(form.address.city, addressCore.getCityOptions()) ?? form.address.city : void 0
150
166
  },
151
167
  browser: await getBrowserParams()
152
168
  };
153
169
  };
154
170
  const pay = async (search = false, timeout) => {
155
- var _a2, _b2, _c2, _d2, _e2;
171
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g;
156
172
  try {
157
- const paymentParams = await getPaymentParams();
158
173
  const requestOptions = { locale: i18n.locale, timeout };
159
- const res = search ? await getTNGWalletPayInfo(
160
- { sessionId: session.sessionId, clientKey: session.clientKey },
161
- requestOptions
162
- ) : await tngWalletPay(paymentParams, props.core, requestOptions);
163
- !search && ((_a2 = props.onSubmitResponse) == null ? void 0 : _a2.call(props, res));
164
- const { status, orderStatus, errorMessage, errorCode, payInfo } = res;
174
+ let res = null;
175
+ if (search) {
176
+ const extraParams = (_b2 = (_a2 = core.config)._getExtraParams) == null ? void 0 : _b2.call(_a2, "query", PaymentMethod.TNG_WALLET);
177
+ res = await getTNGWalletPayInfo(
178
+ {
179
+ sessionId: session.sessionId,
180
+ clientKey: session.clientKey,
181
+ paymentMethod: PaymentMethod.TNG_WALLET
182
+ },
183
+ extraParams,
184
+ requestOptions
185
+ );
186
+ } else {
187
+ const extraParams = (_d2 = (_c2 = core.config)._getExtraParams) == null ? void 0 : _d2.call(_c2, "payment", PaymentMethod.TNG_WALLET);
188
+ res = await tngWalletPay(await getPaymentParams(), extraParams, requestOptions);
189
+ }
190
+ !search && ((_e2 = props.onSubmitResponse) == null ? void 0 : _e2.call(props, res));
191
+ const { status, orderStatus, errorMessage, errorCode, payInfo, sessionId } = res;
192
+ sessionId && (session.sessionId = sessionId);
165
193
  if (status === "PROCESSING") {
166
194
  if (!orderStatus) {
167
195
  setSubmitButtonStatus("unSubmit");
168
196
  return { end: true };
169
197
  } else if (orderStatus === "SUCCESS") {
170
- setSubmitButtonStatus("success");
171
- (_b2 = props.onSuccess) == null ? void 0 : _b2.call(props);
198
+ processOnSuccess(res);
172
199
  return { end: true };
173
200
  } else if (orderStatus === "FAILURE") {
174
- setErrorMsg(errorMessage);
201
+ errorMessage && setErrorMsg(errorMessage);
175
202
  setSubmitButtonStatus("unSubmit");
176
203
  processOnError(new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
177
204
  return { end: true };
@@ -187,17 +214,16 @@ const TNGWallet = w((props, ref) => {
187
214
  return { end: false };
188
215
  } else if (orderStatus === "CANCELED") {
189
216
  setSubmitButtonStatus("unSubmit");
190
- (_c2 = props.onTimeout) == null ? void 0 : _c2.call(props);
217
+ (_f2 = props.onTimeout) == null ? void 0 : _f2.call(props);
191
218
  core.resetEnablePaymentMethod();
192
219
  return { end: true };
193
220
  }
194
221
  } else if (status === "SUCCESS") {
195
- setSubmitButtonStatus("success");
196
- (_d2 = props.onSuccess) == null ? void 0 : _d2.call(props);
222
+ processOnSuccess(res);
197
223
  return { end: true };
198
224
  } else if (status === "EXPIRED") {
199
225
  setSubmitButtonStatus("unSubmit");
200
- (_e2 = props.onExpired) == null ? void 0 : _e2.call(props);
226
+ (_g = props.onExpired) == null ? void 0 : _g.call(props);
201
227
  return { end: true };
202
228
  }
203
229
  setSubmitButtonStatus("unSubmit");
@@ -212,7 +238,7 @@ const TNGWallet = w((props, ref) => {
212
238
  }
213
239
  } else {
214
240
  const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
215
- setErrorMsg(message);
241
+ message && setErrorMsg(message);
216
242
  processOnError(new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
217
243
  setSubmitButtonStatus("unSubmit");
218
244
  return { end: true };
@@ -235,7 +261,7 @@ const TNGWallet = w((props, ref) => {
235
261
  setErrorMsg("");
236
262
  (_a2 = formRef.current) == null ? void 0 : _a2.validate(async (errors) => {
237
263
  var _a3;
238
- (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressState.setValidateAllFields(true);
264
+ (fieldStatus == null ? void 0 : fieldStatus.address.show) && addressCore.setValidateAllFields(true);
239
265
  (_a3 = props.onSubmit) == null ? void 0 : _a3.call(props, errors);
240
266
  if (errors) {
241
267
  setSubmitButtonStatus("unSubmit");
@@ -305,7 +331,8 @@ const TNGWallet = w((props, ref) => {
305
331
  {
306
332
  value: {
307
333
  i18n,
308
- session
334
+ session,
335
+ core
309
336
  },
310
337
  children: isCheckoutEnabled && i18n.ready.value && /* @__PURE__ */ u(b, { children: [
311
338
  showGuideCard && /* @__PURE__ */ u(GuideCard, { type: PaymentCategory.TNG_WALLET }),