@paykka/card-checkout-ui 0.11.5 → 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 (189) 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 +14 -14
  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 +34 -38
  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/es/utils/request-cache-manager.js +32 -0
  90. package/dist/style.css +1 -1
  91. package/dist/types/api/modules/address/index.d.ts +15 -6
  92. package/dist/types/api/modules/ali-pay/index.d.ts +3 -19
  93. package/dist/types/api/modules/apple-pay/index.d.ts +4 -14
  94. package/dist/types/api/modules/boost/index.d.ts +3 -23
  95. package/dist/types/api/modules/card/index.d.ts +3 -30
  96. package/dist/types/api/modules/checkout/index.d.ts +3 -3
  97. package/dist/types/api/modules/checkout/map.d.ts +3 -3
  98. package/dist/types/api/modules/checkout/type.d.ts +33 -4
  99. package/dist/types/api/modules/gcash/index.d.ts +3 -23
  100. package/dist/types/api/modules/google-pay/index.d.ts +3 -13
  101. package/dist/types/api/modules/grab-pay/index.d.ts +3 -23
  102. package/dist/types/api/modules/index.d.ts +1 -0
  103. package/dist/types/api/modules/line-pay/index.d.ts +3 -23
  104. package/dist/types/api/modules/map.d.ts +2 -2
  105. package/dist/types/api/modules/may-bank-qr-pay/index.d.ts +3 -23
  106. package/dist/types/api/modules/nine-pay/index.d.ts +3 -23
  107. package/dist/types/api/modules/paymaya/index.d.ts +3 -23
  108. package/dist/types/api/modules/sepa/index.d.ts +3 -24
  109. package/dist/types/api/modules/shopee-pay/index.d.ts +3 -23
  110. package/dist/types/api/modules/tng-wallet/index.d.ts +3 -23
  111. package/dist/types/api/modules/type.d.ts +74 -21
  112. package/dist/types/api/modules/wechat-pay/index.d.ts +3 -20
  113. package/dist/types/api/modules/zalopay/index.d.ts +4 -0
  114. package/dist/types/api/utils/index.d.ts +48 -0
  115. package/dist/types/components/AddressField/type.d.ts +3 -9
  116. package/dist/types/components/AliPay/AliPay.d.ts +6 -2
  117. package/dist/types/components/AliPay/type.d.ts +15 -2
  118. package/dist/types/components/ApplePay/ApplePay.d.ts +6 -2
  119. package/dist/types/components/ApplePay/type.d.ts +10 -14
  120. package/dist/types/components/ApplePay/utils.d.ts +1 -1
  121. package/dist/types/components/Boost/Boost.d.ts +6 -2
  122. package/dist/types/components/Boost/type.d.ts +2 -24
  123. package/dist/types/components/Card/Card.d.ts +6 -2
  124. package/dist/types/components/Card/type.d.ts +3 -43
  125. package/dist/types/components/DropIn/DropIn.d.ts +6 -2
  126. package/dist/types/components/DropIn/type.d.ts +4 -10
  127. package/dist/types/components/GooglePay/GooglePay.d.ts +6 -2
  128. package/dist/types/components/GooglePay/createGooglePay.d.ts +2 -1
  129. package/dist/types/components/GooglePay/type.d.ts +10 -26
  130. package/dist/types/components/GrabPay/GrabPay.d.ts +6 -2
  131. package/dist/types/components/GrabPay/type.d.ts +3 -25
  132. package/dist/types/components/LinePay/LinePay.d.ts +6 -2
  133. package/dist/types/components/LinePay/type.d.ts +3 -25
  134. package/dist/types/components/MayBankQRPay/MayBankQRPay.d.ts +6 -2
  135. package/dist/types/components/MayBankQRPay/type.d.ts +3 -25
  136. package/dist/types/components/NinePay/NinePay.d.ts +6 -2
  137. package/dist/types/components/NinePay/type.d.ts +3 -25
  138. package/dist/types/components/Sepa/Sepa.d.ts +6 -2
  139. package/dist/types/components/Sepa/type.d.ts +3 -2
  140. package/dist/types/components/ShopeePay/ShopeePay.d.ts +6 -2
  141. package/dist/types/components/ShopeePay/type.d.ts +3 -25
  142. package/dist/types/components/TNGWallet/TNGWallet.d.ts +6 -2
  143. package/dist/types/components/TNGWallet/type.d.ts +3 -25
  144. package/dist/types/components/WechatPay/WechatPay.d.ts +6 -2
  145. package/dist/types/components/WechatPay/type.d.ts +15 -2
  146. package/dist/types/components/business/QRCodeModal/type.d.ts +2 -0
  147. package/dist/types/components/index.d.ts +1 -0
  148. package/dist/types/components/internal/icons/IconZalopay.d.ts +2 -0
  149. package/dist/types/components/internal/icons/IconZalopayComplete.d.ts +2 -0
  150. package/dist/types/components/internal/icons/index.d.ts +3 -0
  151. package/dist/types/components/wallets/GCash/GCash.d.ts +6 -2
  152. package/dist/types/components/wallets/GCash/type.d.ts +3 -35
  153. package/dist/types/components/wallets/Paymaya/Paymaya.d.ts +6 -2
  154. package/dist/types/components/wallets/Paymaya/type.d.ts +3 -25
  155. package/dist/types/components/wallets/Zalopay/Zalopay.d.ts +10 -0
  156. package/dist/types/components/wallets/Zalopay/index.d.ts +2 -0
  157. package/dist/types/components/wallets/Zalopay/type.d.ts +39 -0
  158. package/dist/types/config.d.ts +2 -4
  159. package/dist/types/constant.d.ts +3 -1
  160. package/dist/types/core/{Address.d.ts → address.d.ts} +23 -24
  161. package/dist/types/core/{PayKKaCheckout.d.ts → checkout.d.ts} +5 -3
  162. package/dist/types/core/context.d.ts +3 -2
  163. package/dist/types/core/index.d.ts +2 -2
  164. package/dist/types/core/query.d.ts +2 -2
  165. package/dist/types/core/session.d.ts +33 -0
  166. package/dist/types/hooks/index.d.ts +1 -0
  167. package/dist/types/hooks/usePayment.d.ts +8 -0
  168. package/dist/types/i18n/locales/de-DE.d.ts +2 -0
  169. package/dist/types/i18n/locales/en-GB.d.ts +2 -0
  170. package/dist/types/i18n/locales/es-ES.d.ts +2 -0
  171. package/dist/types/i18n/locales/fr-FR.d.ts +2 -0
  172. package/dist/types/i18n/locales/ja-JP.d.ts +2 -0
  173. package/dist/types/i18n/locales/ko-KR.d.ts +2 -0
  174. package/dist/types/i18n/locales/nl-NL.d.ts +2 -0
  175. package/dist/types/i18n/locales/pt-PT.d.ts +2 -0
  176. package/dist/types/i18n/locales/ru-RU.d.ts +2 -0
  177. package/dist/types/i18n/locales/zh-CN.d.ts +2 -0
  178. package/dist/types/i18n/locales/zh-HK.d.ts +2 -0
  179. package/dist/types/i18n/locales/zh-TW.d.ts +2 -0
  180. package/dist/types/index.d.ts +2 -1
  181. package/dist/types/types/index.d.ts +70 -32
  182. package/dist/types/types/message.d.ts +1 -0
  183. package/dist/types/utils/card-brand/index.d.ts +3 -3
  184. package/dist/types/utils/colors.d.ts +1 -0
  185. package/dist/types/utils/index.d.ts +1 -0
  186. package/dist/types/utils/payment.d.ts +37 -0
  187. package/dist/types/utils/request-cache-manager.d.ts +12 -0
  188. package/package.json +67 -67
  189. package/dist/types/core/Session.d.ts +0 -16
@@ -1,10 +1,12 @@
1
1
  import { w, F, h, q, y, A, u, b } from "../../core.js";
2
2
  import { isTimeoutError } from "../../api/http.js";
3
- import { SessionMode, PaymentMethod } from "../../constant.js";
4
3
  import "../../utils/card-brand/brands.js";
5
4
  import "../../utils/system-info/get-browser-info.js";
6
5
  import { extractAreaCodeAndPhoneNumber } from "../../utils/format.js";
6
+ import { deepMerge } from "../../utils/object.js";
7
+ import { formatPaymentResult } from "../../utils/payment.js";
7
8
  import { getBrowserParams } from "../../api/modules/get-browser-params.js";
9
+ import { SessionMode, PaymentMethod } from "../../constant.js";
8
10
  import { getGooglePayInfo, googlePay } from "../../api/modules/google-pay/index.js";
9
11
  import { useBEM } from "../../hooks/useBEM.js";
10
12
  import "../../core/context.js";
@@ -14,7 +16,7 @@ import { useRetry } from "../../hooks/useRetry.js";
14
16
  import { Info } from "../internal/Info/Info.js";
15
17
  import { loadScript } from "../../utils/load.js";
16
18
  import { ThreeDSAuth } from "../ThreeDS/index.js";
17
- function createGooglePay(checkout, pay, onClick, onCanUse) {
19
+ function createGooglePay(checkout, googlePayConfig, pay, onClick, onCanUse) {
18
20
  const {
19
21
  transAmount,
20
22
  theme: { merchantName }
@@ -128,6 +130,7 @@ function createGooglePay(checkout, pay, onClick, onCanUse) {
128
130
  paymentsClient2.isReadyToPay(getGoogleIsReadyToPayRequest()).then(function(response) {
129
131
  if (response.result) {
130
132
  addGooglePayButton(container);
133
+ onCanUse == null ? void 0 : onCanUse(true);
131
134
  } else {
132
135
  onCanUse == null ? void 0 : onCanUse(false);
133
136
  }
@@ -138,10 +141,7 @@ function createGooglePay(checkout, pay, onClick, onCanUse) {
138
141
  function addGooglePayButton(container) {
139
142
  const paymentsClient2 = getGooglePaymentsClient();
140
143
  const button = paymentsClient2.createButton({
141
- buttonColor: "default",
142
- buttonType: "pay",
143
- buttonRadius: 8,
144
- buttonSizeMode: "fill",
144
+ ...googlePayConfig == null ? void 0 : googlePayConfig.button,
145
145
  onClick: onGooglePaymentButtonClicked,
146
146
  allowedPaymentMethods: [baseCardPaymentMethod]
147
147
  });
@@ -175,9 +175,19 @@ const loadGooglePayJS = (onload, onerror) => {
175
175
  });
176
176
  };
177
177
  const { bem } = useBEM("google-pay");
178
+ const DEFAULT_GOOGLE_PAY_CONFIG = {
179
+ button: {
180
+ buttonColor: "default",
181
+ buttonType: "pay",
182
+ buttonRadius: 8,
183
+ buttonSizeMode: "fill",
184
+ buttonBorderType: "default_border"
185
+ }
186
+ };
178
187
  const GooglePay = w((props, ref) => {
179
188
  var _a;
180
- const { session, threeDSFrame, isDropIn } = props;
189
+ const { session, threeDSFrame, isDropIn, core } = props;
190
+ const googlePayConfig = deepMerge(DEFAULT_GOOGLE_PAY_CONFIG, props.config || {});
181
191
  F(ref, () => ({
182
192
  checkThreeDS
183
193
  }));
@@ -195,15 +205,19 @@ const GooglePay = w((props, ref) => {
195
205
  },
196
206
  [i18n, props.onTimeout]
197
207
  );
198
- const getPaymentSuccessData = () => ({
199
- returnUrl: session == null ? void 0 : session.checkout.returnUrl
200
- });
208
+ const processOnSuccess = (res) => {
209
+ var _a2, _b;
210
+ (_b = props.onSuccess) == null ? void 0 : _b.call(props, formatPaymentResult({
211
+ ...res,
212
+ returnUrl: (_a2 = session == null ? void 0 : session.checkout) == null ? void 0 : _a2.returnUrl
213
+ }));
214
+ };
201
215
  y(() => {
202
- var _a2, _b, _c;
216
+ var _a2, _b;
203
217
  if (!sessionReady) {
204
218
  return;
205
219
  }
206
- const { status, paymentMethod = [], sessionMode } = (session == null ? void 0 : session.checkout) || {};
220
+ const { status, supportMethods = [], sessionMode } = (session == null ? void 0 : session.checkout) || {};
207
221
  if (sessionMode === SessionMode.DROP_IN && !isDropIn) {
208
222
  (_b = (_a2 = props.core.config).onInitError) == null ? void 0 : _b.call(
209
223
  _a2,
@@ -211,7 +225,7 @@ const GooglePay = w((props, ref) => {
211
225
  );
212
226
  return;
213
227
  }
214
- if (!paymentMethod.includes(PaymentMethod.GOOGLE_PAY)) {
228
+ if (!supportMethods.includes(PaymentMethod.GOOGLE_PAY)) {
215
229
  return;
216
230
  }
217
231
  loadGooglePayJS(
@@ -228,7 +242,7 @@ const GooglePay = w((props, ref) => {
228
242
  );
229
243
  setHosted(sessionMode === SessionMode.HOSTED);
230
244
  if (status === "SUCCESS") {
231
- (_c = props.onSuccess) == null ? void 0 : _c.call(props, getPaymentSuccessData());
245
+ processOnSuccess(session == null ? void 0 : session.checkout);
232
246
  }
233
247
  }, [sessionReady]);
234
248
  const processThreeDS = (threeDSUrl, incomplete) => {
@@ -258,50 +272,66 @@ const GooglePay = w((props, ref) => {
258
272
  onTimeout: () => onTimeout(i18n.get("common.queryTimeout"))
259
273
  }
260
274
  );
275
+ const getPaymentParams = async (token, billAddress) => {
276
+ const phone = extractAreaCodeAndPhoneNumber(billAddress == null ? void 0 : billAddress.phoneNumber);
277
+ return {
278
+ sessionId: session.sessionId,
279
+ clientKey: session.clientKey,
280
+ payment: {
281
+ paymentMethod: PaymentMethod.GOOGLE_PAY,
282
+ tokenData: token ?? ""
283
+ },
284
+ bill: {
285
+ firstName: billAddress == null ? void 0 : billAddress.name,
286
+ addressLine1: billAddress == null ? void 0 : billAddress.address1,
287
+ addressLine2: (billAddress == null ? void 0 : billAddress.address2) ?? "" + (billAddress == null ? void 0 : billAddress.address3) ?? "",
288
+ country: billAddress == null ? void 0 : billAddress.countryCode,
289
+ state: billAddress == null ? void 0 : billAddress.administrativeArea,
290
+ city: billAddress == null ? void 0 : billAddress.locality,
291
+ email: billAddress == null ? void 0 : billAddress.email,
292
+ postalCode: billAddress == null ? void 0 : billAddress.postalCode,
293
+ phoneNumber: phone == null ? void 0 : phone.phoneNumber,
294
+ areaCode: phone == null ? void 0 : phone.areaCode
295
+ },
296
+ browser: await getBrowserParams({
297
+ fraudDetectionId: await (fraudDetection == null ? void 0 : fraudDetection.getFraudDetectionId())
298
+ })
299
+ };
300
+ };
261
301
  async function pay(token, billAddress, search = false, timeout) {
262
- var _a2, _b, _c, _d, _e, _f, _g, _h;
302
+ var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
263
303
  setErrorMsg("");
264
304
  if (!search) {
265
305
  (_a2 = props.onSubmit) == null ? void 0 : _a2.call(props);
266
306
  }
267
307
  try {
268
- const res = await (search ? getGooglePayInfo(
269
- {
270
- sessionId: session.sessionId,
271
- clientKey: session.clientKey
272
- },
273
- { locale: i18n.locale, timeout }
274
- ) : async function() {
275
- const phone = extractAreaCodeAndPhoneNumber(billAddress == null ? void 0 : billAddress.phoneNumber);
276
- return googlePay(
308
+ const requestOptions = { locale: i18n.locale, timeout };
309
+ let res = null;
310
+ if (search) {
311
+ const extraParams = (_c = (_b = core.config)._getExtraParams) == null ? void 0 : _c.call(_b, "query", PaymentMethod.GOOGLE_PAY);
312
+ res = await getGooglePayInfo(
277
313
  {
278
314
  sessionId: session.sessionId,
279
315
  clientKey: session.clientKey,
280
- token: token ?? "",
281
- bill: {
282
- firstName: billAddress == null ? void 0 : billAddress.name,
283
- addressLine1: billAddress == null ? void 0 : billAddress.address1,
284
- addressLine2: (billAddress == null ? void 0 : billAddress.address2) ?? "" + (billAddress == null ? void 0 : billAddress.address3) ?? "",
285
- country: billAddress == null ? void 0 : billAddress.countryCode,
286
- state: billAddress == null ? void 0 : billAddress.administrativeArea,
287
- city: billAddress == null ? void 0 : billAddress.locality,
288
- email: billAddress == null ? void 0 : billAddress.email,
289
- postalCode: billAddress == null ? void 0 : billAddress.postalCode,
290
- phoneNumber: phone == null ? void 0 : phone.phoneNumber,
291
- areaCode: phone == null ? void 0 : phone.areaCode
292
- },
293
- browser: await getBrowserParams({
294
- fraudDetectionId: await (fraudDetection == null ? void 0 : fraudDetection.getFraudDetectionId())
295
- })
316
+ paymentMethod: PaymentMethod.GOOGLE_PAY
296
317
  },
297
- props.core,
298
- { locale: i18n.locale }
318
+ extraParams,
319
+ requestOptions
320
+ );
321
+ } else {
322
+ const extraParams = (_e = (_d = core.config)._getExtraParams) == null ? void 0 : _e.call(_d, "payment", PaymentMethod.GOOGLE_PAY);
323
+ res = await googlePay(
324
+ await getPaymentParams(token, billAddress),
325
+ extraParams,
326
+ requestOptions
299
327
  );
300
- }());
301
- const { status, orderStatus, errorMessage, threeDSUrl, errorCode } = res;
328
+ }
329
+ const { status, orderStatus, errorMessage, payInfo = {}, errorCode, sessionId } = res;
330
+ const { threeDSUrl } = payInfo;
331
+ sessionId && (session.sessionId = sessionId);
302
332
  if (status === "PROCESSING") {
303
333
  if (orderStatus === "SUCCESS") {
304
- (_b = props.onSuccess) == null ? void 0 : _b.call(props, getPaymentSuccessData());
334
+ processOnSuccess(res);
305
335
  return {
306
336
  end: true,
307
337
  res: { transactionState: "SUCCESS" }
@@ -313,33 +343,33 @@ const GooglePay = w((props, ref) => {
313
343
  res: res2.res
314
344
  } : await startReFetchPayInfo();
315
345
  } else if (orderStatus === "FAILURE") {
316
- setErrorMsg(errorMessage);
317
- (_c = props.onError) == null ? void 0 : _c.call(props, new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
346
+ errorMessage && setErrorMsg(errorMessage);
347
+ (_f = props.onError) == null ? void 0 : _f.call(props, new PayKKaError("API_ERROR", errorMessage, { code: errorCode }));
318
348
  return {
319
349
  end: true,
320
350
  res: {
321
351
  transactionState: "ERROR",
322
352
  error: {
323
353
  intent: "PAYMENT_AUTHORIZATION",
324
- message: errorMessage,
354
+ message: errorMessage || "",
325
355
  reason: "OTHER_ERROR"
326
356
  }
327
357
  }
328
358
  };
329
359
  } else if (orderStatus === "AUTHORIZED") {
330
- (_d = props.onAuthorized) == null ? void 0 : _d.call(props);
360
+ (_g = props.onAuthorized) == null ? void 0 : _g.call(props);
331
361
  return {
332
362
  end: true,
333
363
  res: { transactionState: "SUCCESS" }
334
364
  };
335
365
  } else if (orderStatus === "IN_THREED") {
336
- processThreeDS(threeDSUrl, false);
366
+ threeDSUrl && processThreeDS(threeDSUrl, false);
337
367
  return {
338
368
  end: true,
339
369
  res: { transactionState: "SUCCESS" }
340
370
  };
341
371
  } else if (orderStatus === "IN_PREVIOUS_THREED") {
342
- processThreeDS(threeDSUrl, true);
372
+ threeDSUrl && processThreeDS(threeDSUrl, true);
343
373
  return {
344
374
  end: true,
345
375
  res: { transactionState: "SUCCESS" }
@@ -351,19 +381,19 @@ const GooglePay = w((props, ref) => {
351
381
  };
352
382
  }
353
383
  } else if (status === "SUCCESS") {
354
- (_e = props.onSuccess) == null ? void 0 : _e.call(props, getPaymentSuccessData());
384
+ processOnSuccess(res);
355
385
  return {
356
386
  end: true,
357
387
  res: { transactionState: "SUCCESS" }
358
388
  };
359
389
  } else if (status === "EXPIRED") {
360
- (_f = props.onExpired) == null ? void 0 : _f.call(props);
390
+ (_h = props.onExpired) == null ? void 0 : _h.call(props);
361
391
  return {
362
392
  end: true,
363
393
  res: { transactionState: "SUCCESS" }
364
394
  };
365
395
  }
366
- (_g = props.onSuccess) == null ? void 0 : _g.call(props, getPaymentSuccessData());
396
+ processOnSuccess(res);
367
397
  return {
368
398
  end: false,
369
399
  res: { transactionState: "SUCCESS" }
@@ -389,7 +419,7 @@ const GooglePay = w((props, ref) => {
389
419
  } else {
390
420
  const message = error.i18nKey ? i18n.get(error.i18nKey) : error.message;
391
421
  setErrorMsg(message);
392
- (_h = props.onError) == null ? void 0 : _h.call(props, new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
422
+ (_i = props.onError) == null ? void 0 : _i.call(props, new PayKKaError("API_ERROR", message, { code: error.code, cause: error }));
393
423
  return {
394
424
  end: true,
395
425
  res: {
@@ -416,11 +446,13 @@ const GooglePay = w((props, ref) => {
416
446
  if (!session)
417
447
  return { end: true };
418
448
  try {
449
+ const extraParams = (_b = (_a2 = core.config)._getExtraParams) == null ? void 0 : _b.call(_a2, "query", PaymentMethod.GOOGLE_PAY);
419
450
  const res = await getGooglePayInfo(
420
451
  {
421
452
  sessionId: session.sessionId,
422
453
  clientKey: session.clientKey
423
454
  },
455
+ extraParams,
424
456
  {
425
457
  locale: i18n.locale
426
458
  }
@@ -430,9 +462,9 @@ const GooglePay = w((props, ref) => {
430
462
  if (orderStatus === "PROCESSING") {
431
463
  startReFetchPayInfo();
432
464
  } else if (orderStatus === "FAILURE") {
433
- setErrorMsg(errorMessage);
465
+ errorMessage && setErrorMsg(errorMessage);
434
466
  } else if (orderStatus === "AUTHORIZED") {
435
- (_a2 = props.onAuthorized) == null ? void 0 : _a2.call(props);
467
+ (_c = props.onAuthorized) == null ? void 0 : _c.call(props);
436
468
  } else if (orderStatus === "IN_THREED") {
437
469
  !search && startReFetchCardPay3DSInfo();
438
470
  return { end: false };
@@ -443,15 +475,15 @@ const GooglePay = w((props, ref) => {
443
475
  stopReFetchCardPay3DSInfo();
444
476
  return { end: true };
445
477
  } else if (status === "SUCCESS") {
446
- (_b = props.onSuccess) == null ? void 0 : _b.call(props, getPaymentSuccessData());
478
+ processOnSuccess(res);
447
479
  stopReFetchCardPay3DSInfo();
448
480
  return { end: true };
449
481
  } else if (status === "EXPIRED") {
450
- (_c = props.onExpired) == null ? void 0 : _c.call(props);
482
+ (_d = props.onExpired) == null ? void 0 : _d.call(props);
451
483
  stopReFetchCardPay3DSInfo();
452
484
  return { end: true };
453
485
  }
454
- (_d = props.onSuccess) == null ? void 0 : _d.call(props, getPaymentSuccessData());
486
+ processOnSuccess(res);
455
487
  stopReFetchCardPay3DSInfo();
456
488
  return { end: true };
457
489
  } catch (error) {
@@ -475,6 +507,7 @@ const GooglePay = w((props, ref) => {
475
507
  if (containRef && (session == null ? void 0 : session.checkout) && showGooglePay) {
476
508
  const { onGooglePayLoaded } = createGooglePay(
477
509
  session == null ? void 0 : session.checkout,
510
+ googlePayConfig,
478
511
  pay,
479
512
  props.onBtnClick,
480
513
  props.onCanUse
@@ -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 { getGrabPayInfo, grabPay } from "../../api/modules/grab-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 GrabPay = w((props, ref) => {
34
33
  core,
35
34
  redirectMode = "auto",
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 GrabPay = 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 GrabPay = 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 GrabPay = 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 GrabPay = 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.GRAB_PAY)) {
117
+ const { bill = {}, supportMethods = [], country } = (session == null ? void 0 : session.checkout) || {};
118
+ if (!supportMethods.includes(PaymentMethod.GRAB_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.GRAB_PAY) {
115
127
  setSubmitButtonStatus("loading");
116
128
  startReFetchPayInfo();
@@ -144,34 +156,49 @@ const GrabPay = 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 getGrabPayInfo(
160
- { sessionId: session.sessionId, clientKey: session.clientKey },
161
- requestOptions
162
- ) : await grabPay(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.GRAB_PAY);
177
+ res = await getGrabPayInfo(
178
+ {
179
+ sessionId: session.sessionId,
180
+ clientKey: session.clientKey,
181
+ paymentMethod: PaymentMethod.GRAB_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.GRAB_PAY);
188
+ res = await grabPay(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 GrabPay = 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 GrabPay = 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 GrabPay = 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 GrabPay = 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.GRAB_PAY }),
@@ -2,10 +2,10 @@ import { u, b } from "../../core.js";
2
2
  import { PaymentCategory } from "../../constant.js";
3
3
  import { useBEM } from "../../hooks/useBEM.js";
4
4
  import { useI18n } from "../../hooks/useI18n.js";
5
- import "../../api/http.js";
6
5
  import "../../utils/card-brand/brands.js";
7
6
  import "../../utils/system-info/get-browser-info.js";
8
7
  import { isMobile } from "../../utils/system-info/get-system-info.js";
8
+ import "../../api/http.js";
9
9
  import { IconRedirect } from "../internal/icons/IconRedirect.js";
10
10
  import { IconScan } from "../internal/icons/IconScan.js";
11
11
  const { bem } = useBEM("guide-card");
@@ -17,9 +17,11 @@ const GuideCard = (props) => {
17
17
  icon: /* @__PURE__ */ u(IconRedirect, { size: 36 }),
18
18
  description: i18n.get("guideCard.redirectDescription")
19
19
  };
20
- const qrCodeGuideCard = {
21
- icon: /* @__PURE__ */ u(IconScan, { size: 36 }),
22
- description: i18n.get("guideCard.scanQRCode", { method: i18n.get("dropIn.gcash.label") })
20
+ const getQRCodeGuideCard = (method) => {
21
+ return {
22
+ icon: /* @__PURE__ */ u(IconScan, { size: 36 }),
23
+ description: i18n.get("guideCard.scanQRCode", { method })
24
+ };
23
25
  };
24
26
  const guideCardInfoMap = {
25
27
  [PaymentCategory.ALI_PAY]: redirectGuideCard,
@@ -31,11 +33,12 @@ const GuideCard = (props) => {
31
33
  [PaymentCategory.SHOPEE_PAY]: redirectGuideCard,
32
34
  [PaymentCategory.TNG_WALLET]: redirectGuideCard,
33
35
  [PaymentCategory.MAY_BANK_QR_PAY]: redirectGuideCard,
34
- [PaymentCategory.GCASH]: isMobile() ? redirectGuideCard : qrCodeGuideCard,
35
- [PaymentCategory.PAYMAYA]: redirectGuideCard
36
+ [PaymentCategory.GCASH]: isMobile() ? redirectGuideCard : getQRCodeGuideCard(i18n.get("dropIn.gcash.label")),
37
+ [PaymentCategory.PAYMAYA]: redirectGuideCard,
38
+ [PaymentCategory.ZALOPAY]: isMobile() ? redirectGuideCard : getQRCodeGuideCard(i18n.get("dropIn.zalopay.label"))
36
39
  };
37
40
  return /* @__PURE__ */ u(b, { children: guideCardInfoMap[type] && /* @__PURE__ */ u("div", { className: bem(), children: /* @__PURE__ */ u("div", { className: bem("content"), children: [
38
- (_a = guideCardInfoMap[type]) == null ? void 0 : _a.icon,
41
+ /* @__PURE__ */ u("div", { className: bem("icon"), children: (_a = guideCardInfoMap[type]) == null ? void 0 : _a.icon }),
39
42
  /* @__PURE__ */ u("div", { className: bem("description"), children: (_b = guideCardInfoMap[type]) == null ? void 0 : _b.description })
40
43
  ] }) }) });
41
44
  };