@one-payments/web-components 1.5.3 → 1.5.5
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.
- package/dist/index.js +1671 -1404
- package/dist/one-payment.browser.iife.js +565 -204
- package/dist/one-payment.browser.iife.js.map +1 -1
- package/dist/one-payment.d.ts +30 -0
- package/dist/one-payment.d.ts.map +1 -1
- package/dist/one-payment.js +302 -15
- package/dist/one-payment.js.map +1 -1
- package/package.json +2 -2
package/dist/one-payment.d.ts
CHANGED
|
@@ -249,6 +249,26 @@ export declare class OnePayment extends LitElement {
|
|
|
249
249
|
* @public
|
|
250
250
|
*/
|
|
251
251
|
email: string;
|
|
252
|
+
/**
|
|
253
|
+
* Customer's phone number (REQUIRED)
|
|
254
|
+
*
|
|
255
|
+
* The payer's phone number. This field is required for all payment methods
|
|
256
|
+
* and is used for:
|
|
257
|
+
* - Payment verification
|
|
258
|
+
* - Transaction notifications via SMS
|
|
259
|
+
* - Customer communication
|
|
260
|
+
* - Fraud prevention
|
|
261
|
+
*
|
|
262
|
+
* **Validation:**
|
|
263
|
+
* - Cannot be empty or whitespace-only
|
|
264
|
+
* - Must be provided before payment submission
|
|
265
|
+
* - Should include country code (e.g., '+65' for Singapore, '+60' for Malaysia)
|
|
266
|
+
*
|
|
267
|
+
* @required
|
|
268
|
+
* @type {string}
|
|
269
|
+
* @public
|
|
270
|
+
*/
|
|
271
|
+
phoneNumber: string;
|
|
252
272
|
/**
|
|
253
273
|
* Optional array of payment method IDs to exclude from display
|
|
254
274
|
*
|
|
@@ -462,6 +482,13 @@ export declare class OnePayment extends LitElement {
|
|
|
462
482
|
private handleGoPayPayment;
|
|
463
483
|
private handleBoostPayment;
|
|
464
484
|
private handleShopeePayPayment;
|
|
485
|
+
private handleAtomPayment;
|
|
486
|
+
private handleDanaPayment;
|
|
487
|
+
private handleTngPayment;
|
|
488
|
+
/**
|
|
489
|
+
* Get the formatted pay amount for buttons (net amount including fees)
|
|
490
|
+
*/
|
|
491
|
+
private getPayButtonAmount;
|
|
465
492
|
private getTransactionData;
|
|
466
493
|
private renderTransactionDetailsSkeleton;
|
|
467
494
|
private renderPaymentMethodsSkeleton;
|
|
@@ -474,6 +501,9 @@ export declare class OnePayment extends LitElement {
|
|
|
474
501
|
private renderGoPayContent;
|
|
475
502
|
private renderBoostContent;
|
|
476
503
|
private renderShopeePayContent;
|
|
504
|
+
private renderAtomContent;
|
|
505
|
+
private renderDanaContent;
|
|
506
|
+
private renderTngContent;
|
|
477
507
|
private render3DSModal;
|
|
478
508
|
private renderStatusBlock;
|
|
479
509
|
render(): import("lit").TemplateResult<1>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one-payment.d.ts","sourceRoot":"","sources":["../src/one-payment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,KAAK,EACL,eAAe,EAGf,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAM5B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,WAAW,CAAC;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,eAAe,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,cAAc,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CAC/C;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBACa,UAAW,SAAQ,UAAU;IAGxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACyB,MAAM,EAAG,SAAS,CAAC;IAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACyB,QAAQ,EAAG,QAAQ,CAAC;IAEhD;;;;;;;;;;;;;;;;;OAiBG;IACyB,MAAM,EAAG,MAAM,CAAC;IAE5C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACyB,QAAQ,EAAG,MAAM,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACyB,OAAO,EAAG,MAAM,CAAC;IAE7C;;;;;;;;;;;;;;;;OAgBG;IACyB,SAAS,EAAG,MAAM,CAAC;IAE/C;;;;;;;;;;;;;;;;OAgBG;IACyB,QAAQ,EAAG,MAAM,CAAC;IAE9C;;;;;;;;;;;;;;;;;;OAkBG;IACyB,KAAK,EAAG,MAAM,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACwB,qBAAqB,CAAC,EAAE,eAAe,EAAE,CAAC;IAErE;;;;;;;;;;;;;;;;;;;OAmBG;IACyB,KAAK,CAAC,EAAE,MAAM,CAAC;IAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACyB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACyB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAGlD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,YAAY,CAK3B;IACO,OAAO,CAAC,UAAU,CAAmD;IACrE,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,SAAS,CAAwB;IAGzC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,mBAAmB,CAAS;IAE7C,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,aAAa,CAAsB;IAE3C;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"one-payment.d.ts","sourceRoot":"","sources":["../src/one-payment.ts"],"names":[],"mappings":"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"}
|
package/dist/one-payment.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { __decorate } from "tslib";
|
|
6
6
|
import { LitElement, html, css } from 'lit';
|
|
7
7
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
8
|
-
import { PaymentSDK, PAYMENT_METHODS, PAYNOW_ICON_DATA_URL, PROMPTPAY_ICON_DATA_URL, DUITNOW_ICON_DATA_URL, GOPAY_ICON_DATA_URL, BOOST_ICON_DATA_URL, SHOPEEPAY_ICON_DATA_URL } from '@one-payments/core';
|
|
8
|
+
import { PaymentSDK, PAYMENT_METHODS, PAYNOW_ICON_DATA_URL, PROMPTPAY_ICON_DATA_URL, DUITNOW_ICON_DATA_URL, GOPAY_ICON_DATA_URL, BOOST_ICON_DATA_URL, SHOPEEPAY_ICON_DATA_URL, ATOM_ICON_DATA_URL, DANA_ICON_DATA_URL, TNG_ICON_DATA_URL } from '@one-payments/core';
|
|
9
9
|
import CleaveConstructor from 'cleave.js';
|
|
10
10
|
import QRCode from 'qrcode';
|
|
11
11
|
/**
|
|
@@ -145,6 +145,9 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
145
145
|
if (!this.email || typeof this.email !== 'string' || this.email.trim() === '') {
|
|
146
146
|
return false;
|
|
147
147
|
}
|
|
148
|
+
if (!this.phoneNumber || typeof this.phoneNumber !== 'string' || this.phoneNumber.trim() === '') {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
148
151
|
return true;
|
|
149
152
|
}
|
|
150
153
|
/**
|
|
@@ -422,6 +425,42 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
422
425
|
};
|
|
423
426
|
}
|
|
424
427
|
}
|
|
428
|
+
// Check currency validation for Atom (SGD or MYR only)
|
|
429
|
+
if (method.id === PAYMENT_METHODS.ATOM) {
|
|
430
|
+
const transactionData = this.getTransactionData();
|
|
431
|
+
const currency = transactionData.currency;
|
|
432
|
+
if (currency !== 'SGD' && currency !== 'MYR') {
|
|
433
|
+
return {
|
|
434
|
+
id: method.id,
|
|
435
|
+
enabled: false,
|
|
436
|
+
disabledReason: 'Atom is only available for SGD and MYR currencies',
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
// Check currency validation for Dana (IDR only)
|
|
441
|
+
if (method.id === PAYMENT_METHODS.DANA) {
|
|
442
|
+
const transactionData = this.getTransactionData();
|
|
443
|
+
const currency = transactionData.currency;
|
|
444
|
+
if (currency !== 'IDR') {
|
|
445
|
+
return {
|
|
446
|
+
id: method.id,
|
|
447
|
+
enabled: false,
|
|
448
|
+
disabledReason: 'Dana is only available for IDR currency',
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Check currency validation for Touch 'n Go (MYR only)
|
|
453
|
+
if (method.id === PAYMENT_METHODS.TNG) {
|
|
454
|
+
const transactionData = this.getTransactionData();
|
|
455
|
+
const currency = transactionData.currency;
|
|
456
|
+
if (currency !== 'MYR') {
|
|
457
|
+
return {
|
|
458
|
+
id: method.id,
|
|
459
|
+
enabled: false,
|
|
460
|
+
disabledReason: "Touch 'n Go is only available for MYR currency",
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
}
|
|
425
464
|
return {
|
|
426
465
|
id: method.id,
|
|
427
466
|
enabled: true,
|
|
@@ -604,6 +643,34 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
604
643
|
window.location.href = redirectUrl;
|
|
605
644
|
}
|
|
606
645
|
});
|
|
646
|
+
// Handle Atom redirect
|
|
647
|
+
this.sdk.on('atom_redirect', (event) => {
|
|
648
|
+
const { redirectUrl } = event.payload;
|
|
649
|
+
if (redirectUrl) {
|
|
650
|
+
// Redirect the entire page to the external payment page
|
|
651
|
+
window.location.href = redirectUrl;
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
// Handle Dana redirect
|
|
655
|
+
this.sdk.on('dana_redirect', (event) => {
|
|
656
|
+
console.log('[WebComponent] dana_redirect event received:', event.payload);
|
|
657
|
+
const { redirectUrl } = event.payload;
|
|
658
|
+
if (redirectUrl) {
|
|
659
|
+
console.log('[WebComponent] Redirecting to Dana URL:', redirectUrl);
|
|
660
|
+
// Redirect the entire page to the external payment page
|
|
661
|
+
window.location.href = redirectUrl;
|
|
662
|
+
}
|
|
663
|
+
});
|
|
664
|
+
// Handle Touch 'n Go redirect
|
|
665
|
+
this.sdk.on('tng_redirect', (event) => {
|
|
666
|
+
console.log('[WebComponent] tng_redirect event received:', event.payload);
|
|
667
|
+
const { redirectUrl } = event.payload;
|
|
668
|
+
if (redirectUrl) {
|
|
669
|
+
console.log('[WebComponent] Redirecting to TnG URL:', redirectUrl);
|
|
670
|
+
// Redirect the entire page to the external payment page
|
|
671
|
+
window.location.href = redirectUrl;
|
|
672
|
+
}
|
|
673
|
+
});
|
|
607
674
|
this.sdk.initialize({
|
|
608
675
|
amount: this.amount,
|
|
609
676
|
currency: this.currency,
|
|
@@ -806,6 +873,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
806
873
|
firstName: this.firstName,
|
|
807
874
|
lastName: this.lastName,
|
|
808
875
|
email: this.email,
|
|
876
|
+
phoneNumber: this.phoneNumber,
|
|
809
877
|
});
|
|
810
878
|
}
|
|
811
879
|
handlePayNowPayment() {
|
|
@@ -819,6 +887,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
819
887
|
firstName: this.firstName,
|
|
820
888
|
lastName: this.lastName,
|
|
821
889
|
email: this.email,
|
|
890
|
+
phoneNumber: this.phoneNumber,
|
|
822
891
|
});
|
|
823
892
|
// showQRCode will be set by the event listener when qrCode is received
|
|
824
893
|
}
|
|
@@ -834,6 +903,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
834
903
|
firstName: this.firstName,
|
|
835
904
|
lastName: this.lastName,
|
|
836
905
|
email: this.email,
|
|
906
|
+
phoneNumber: this.phoneNumber,
|
|
837
907
|
});
|
|
838
908
|
}
|
|
839
909
|
handleDuitNowPayment() {
|
|
@@ -848,6 +918,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
848
918
|
firstName: this.firstName,
|
|
849
919
|
lastName: this.lastName,
|
|
850
920
|
email: this.email,
|
|
921
|
+
phoneNumber: this.phoneNumber,
|
|
851
922
|
});
|
|
852
923
|
}
|
|
853
924
|
handleGoPayPayment() {
|
|
@@ -862,6 +933,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
862
933
|
firstName: this.firstName,
|
|
863
934
|
lastName: this.lastName,
|
|
864
935
|
email: this.email,
|
|
936
|
+
phoneNumber: this.phoneNumber,
|
|
865
937
|
});
|
|
866
938
|
}
|
|
867
939
|
handleBoostPayment() {
|
|
@@ -876,6 +948,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
876
948
|
firstName: this.firstName,
|
|
877
949
|
lastName: this.lastName,
|
|
878
950
|
email: this.email,
|
|
951
|
+
phoneNumber: this.phoneNumber,
|
|
879
952
|
});
|
|
880
953
|
}
|
|
881
954
|
handleShopeePayPayment() {
|
|
@@ -890,9 +963,62 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
890
963
|
firstName: this.firstName,
|
|
891
964
|
lastName: this.lastName,
|
|
892
965
|
email: this.email,
|
|
966
|
+
phoneNumber: this.phoneNumber,
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
handleAtomPayment() {
|
|
970
|
+
if (!this.sdk || this.currentState.status !== 'ready') {
|
|
971
|
+
return;
|
|
972
|
+
}
|
|
973
|
+
// Lock payment methods to prevent switching
|
|
974
|
+
this.paymentLocked = true;
|
|
975
|
+
// Use customer info from props
|
|
976
|
+
// SDK will redirect to external payment page when nextActionUrl is received
|
|
977
|
+
this.sdk.submitPayment(PAYMENT_METHODS.ATOM, {
|
|
978
|
+
firstName: this.firstName,
|
|
979
|
+
lastName: this.lastName,
|
|
980
|
+
email: this.email,
|
|
981
|
+
phoneNumber: this.phoneNumber,
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
handleDanaPayment() {
|
|
985
|
+
if (!this.sdk || this.currentState.status !== 'ready') {
|
|
986
|
+
return;
|
|
987
|
+
}
|
|
988
|
+
// Lock payment methods to prevent switching
|
|
989
|
+
this.paymentLocked = true;
|
|
990
|
+
// Use customer info from props
|
|
991
|
+
// SDK will redirect to external payment page when nextActionUrl is received
|
|
992
|
+
this.sdk.submitPayment(PAYMENT_METHODS.DANA, {
|
|
993
|
+
firstName: this.firstName,
|
|
994
|
+
lastName: this.lastName,
|
|
995
|
+
email: this.email,
|
|
996
|
+
phoneNumber: this.phoneNumber,
|
|
997
|
+
});
|
|
998
|
+
}
|
|
999
|
+
handleTngPayment() {
|
|
1000
|
+
if (!this.sdk || this.currentState.status !== 'ready') {
|
|
1001
|
+
return;
|
|
1002
|
+
}
|
|
1003
|
+
// Lock payment methods to prevent switching
|
|
1004
|
+
this.paymentLocked = true;
|
|
1005
|
+
// Use customer info from props
|
|
1006
|
+
// SDK will redirect to external payment page when nextActionUrl is received
|
|
1007
|
+
this.sdk.submitPayment(PAYMENT_METHODS.TNG, {
|
|
1008
|
+
firstName: this.firstName,
|
|
1009
|
+
lastName: this.lastName,
|
|
1010
|
+
email: this.email,
|
|
1011
|
+
phoneNumber: this.phoneNumber,
|
|
893
1012
|
});
|
|
894
1013
|
}
|
|
895
1014
|
// --- Render Methods ---
|
|
1015
|
+
/**
|
|
1016
|
+
* Get the formatted pay amount for buttons (net amount including fees)
|
|
1017
|
+
*/
|
|
1018
|
+
getPayButtonAmount() {
|
|
1019
|
+
const transactionData = this.getTransactionData();
|
|
1020
|
+
return `${this.currency} ${transactionData.netAmount.toFixed(2)}`;
|
|
1021
|
+
}
|
|
896
1022
|
getTransactionData() {
|
|
897
1023
|
const data = this.paymentData;
|
|
898
1024
|
// Return fallback data if payment data is not loaded yet
|
|
@@ -1054,12 +1180,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1054
1180
|
</span>
|
|
1055
1181
|
</div>
|
|
1056
1182
|
<div class="breakdown-row">
|
|
1057
|
-
<span class="breakdown-label">
|
|
1058
|
-
Merchant
|
|
1059
|
-
fee${transactionData.feeBreakdown.merchantFeeLabel
|
|
1060
|
-
? ` ${transactionData.feeBreakdown.merchantFeeLabel}`
|
|
1061
|
-
: ''}:
|
|
1062
|
-
</span>
|
|
1183
|
+
<span class="breakdown-label">Merchant fee:</span>
|
|
1063
1184
|
<span class="breakdown-value">
|
|
1064
1185
|
${formatAmount(transactionData.feeBreakdown.merchantFee)}
|
|
1065
1186
|
</span>
|
|
@@ -1183,7 +1304,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1183
1304
|
${this.currentState.status === 'processing' ||
|
|
1184
1305
|
this.currentState.status === 'requires_action'
|
|
1185
1306
|
? 'Processing...'
|
|
1186
|
-
: `Pay ${this.
|
|
1307
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1187
1308
|
</button>
|
|
1188
1309
|
</div>
|
|
1189
1310
|
</div>
|
|
@@ -1242,7 +1363,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1242
1363
|
${this.currentState.status === 'processing' ||
|
|
1243
1364
|
this.currentState.status === 'requires_action'
|
|
1244
1365
|
? 'Processing...'
|
|
1245
|
-
: `Pay ${this.
|
|
1366
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1246
1367
|
</button>
|
|
1247
1368
|
</div>
|
|
1248
1369
|
</div>
|
|
@@ -1285,7 +1406,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1285
1406
|
${this.currentState.status === 'processing' ||
|
|
1286
1407
|
this.currentState.status === 'requires_action'
|
|
1287
1408
|
? 'Redirecting...'
|
|
1288
|
-
: `Pay ${this.
|
|
1409
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1289
1410
|
</button>
|
|
1290
1411
|
</div>
|
|
1291
1412
|
</div>
|
|
@@ -1328,7 +1449,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1328
1449
|
${this.currentState.status === 'processing' ||
|
|
1329
1450
|
this.currentState.status === 'requires_action'
|
|
1330
1451
|
? 'Redirecting...'
|
|
1331
|
-
: `Pay ${this.
|
|
1452
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1332
1453
|
</button>
|
|
1333
1454
|
</div>
|
|
1334
1455
|
</div>
|
|
@@ -1371,7 +1492,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1371
1492
|
${this.currentState.status === 'processing' ||
|
|
1372
1493
|
this.currentState.status === 'requires_action'
|
|
1373
1494
|
? 'Redirecting...'
|
|
1374
|
-
: `Pay ${this.
|
|
1495
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1375
1496
|
</button>
|
|
1376
1497
|
</div>
|
|
1377
1498
|
</div>
|
|
@@ -1414,7 +1535,7 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1414
1535
|
${this.currentState.status === 'processing' ||
|
|
1415
1536
|
this.currentState.status === 'requires_action'
|
|
1416
1537
|
? 'Redirecting...'
|
|
1417
|
-
: `Pay ${this.
|
|
1538
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1418
1539
|
</button>
|
|
1419
1540
|
</div>
|
|
1420
1541
|
</div>
|
|
@@ -1457,7 +1578,136 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1457
1578
|
${this.currentState.status === 'processing' ||
|
|
1458
1579
|
this.currentState.status === 'requires_action'
|
|
1459
1580
|
? 'Redirecting...'
|
|
1460
|
-
: `Pay ${this.
|
|
1581
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1582
|
+
</button>
|
|
1583
|
+
</div>
|
|
1584
|
+
</div>
|
|
1585
|
+
</div>
|
|
1586
|
+
`;
|
|
1587
|
+
}
|
|
1588
|
+
renderAtomContent() {
|
|
1589
|
+
return html `
|
|
1590
|
+
<div class="paynow-container">
|
|
1591
|
+
<div class="paynow-instructions">
|
|
1592
|
+
<h3 class="instructions-title">How to Pay with Atome:</h3>
|
|
1593
|
+
|
|
1594
|
+
<div class="instruction-steps">
|
|
1595
|
+
<div class="instruction-step">
|
|
1596
|
+
<div class="step-number">1</div>
|
|
1597
|
+
<p class="step-text">Click <strong>"Pay"</strong> to go to the payment page.</p>
|
|
1598
|
+
</div>
|
|
1599
|
+
|
|
1600
|
+
<div class="instruction-step">
|
|
1601
|
+
<div class="step-number">2</div>
|
|
1602
|
+
<p class="step-text">Complete the payment on the external page.</p>
|
|
1603
|
+
</div>
|
|
1604
|
+
|
|
1605
|
+
<div class="instruction-step">
|
|
1606
|
+
<div class="step-number">3</div>
|
|
1607
|
+
<p class="step-text">You'll be redirected back automatically.</p>
|
|
1608
|
+
</div>
|
|
1609
|
+
</div>
|
|
1610
|
+
|
|
1611
|
+
<div class="submit-section">
|
|
1612
|
+
<button
|
|
1613
|
+
class="pay-button ${this.currentState.status === 'processing' ||
|
|
1614
|
+
this.currentState.status === 'requires_action'
|
|
1615
|
+
? 'loading'
|
|
1616
|
+
: ''}"
|
|
1617
|
+
@click=${this.handleAtomPayment}
|
|
1618
|
+
?disabled=${this.currentState.status === 'processing' ||
|
|
1619
|
+
this.currentState.status === 'requires_action'}
|
|
1620
|
+
>
|
|
1621
|
+
${this.currentState.status === 'processing' ||
|
|
1622
|
+
this.currentState.status === 'requires_action'
|
|
1623
|
+
? 'Redirecting...'
|
|
1624
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1625
|
+
</button>
|
|
1626
|
+
</div>
|
|
1627
|
+
</div>
|
|
1628
|
+
</div>
|
|
1629
|
+
`;
|
|
1630
|
+
}
|
|
1631
|
+
renderDanaContent() {
|
|
1632
|
+
return html `
|
|
1633
|
+
<div class="paynow-container">
|
|
1634
|
+
<div class="paynow-instructions">
|
|
1635
|
+
<h3 class="instructions-title">How to Pay with Dana:</h3>
|
|
1636
|
+
|
|
1637
|
+
<div class="instruction-steps">
|
|
1638
|
+
<div class="instruction-step">
|
|
1639
|
+
<div class="step-number">1</div>
|
|
1640
|
+
<p class="step-text">Click <strong>"Pay"</strong> to go to the payment page.</p>
|
|
1641
|
+
</div>
|
|
1642
|
+
|
|
1643
|
+
<div class="instruction-step">
|
|
1644
|
+
<div class="step-number">2</div>
|
|
1645
|
+
<p class="step-text">Complete the payment in the Dana app.</p>
|
|
1646
|
+
</div>
|
|
1647
|
+
|
|
1648
|
+
<div class="instruction-step">
|
|
1649
|
+
<div class="step-number">3</div>
|
|
1650
|
+
<p class="step-text">You'll be redirected back automatically.</p>
|
|
1651
|
+
</div>
|
|
1652
|
+
</div>
|
|
1653
|
+
|
|
1654
|
+
<div class="submit-section">
|
|
1655
|
+
<button
|
|
1656
|
+
class="pay-button ${this.currentState.status === 'processing' ||
|
|
1657
|
+
this.currentState.status === 'requires_action'
|
|
1658
|
+
? 'loading'
|
|
1659
|
+
: ''}"
|
|
1660
|
+
@click=${this.handleDanaPayment}
|
|
1661
|
+
?disabled=${this.currentState.status === 'processing' ||
|
|
1662
|
+
this.currentState.status === 'requires_action'}
|
|
1663
|
+
>
|
|
1664
|
+
${this.currentState.status === 'processing' ||
|
|
1665
|
+
this.currentState.status === 'requires_action'
|
|
1666
|
+
? 'Redirecting...'
|
|
1667
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1668
|
+
</button>
|
|
1669
|
+
</div>
|
|
1670
|
+
</div>
|
|
1671
|
+
</div>
|
|
1672
|
+
`;
|
|
1673
|
+
}
|
|
1674
|
+
renderTngContent() {
|
|
1675
|
+
return html `
|
|
1676
|
+
<div class="paynow-container">
|
|
1677
|
+
<div class="paynow-instructions">
|
|
1678
|
+
<h3 class="instructions-title">How to Pay with Touch 'n Go:</h3>
|
|
1679
|
+
|
|
1680
|
+
<div class="instruction-steps">
|
|
1681
|
+
<div class="instruction-step">
|
|
1682
|
+
<div class="step-number">1</div>
|
|
1683
|
+
<p class="step-text">Click <strong>"Pay"</strong> to go to the payment page.</p>
|
|
1684
|
+
</div>
|
|
1685
|
+
|
|
1686
|
+
<div class="instruction-step">
|
|
1687
|
+
<div class="step-number">2</div>
|
|
1688
|
+
<p class="step-text">Complete the payment in the Touch 'n Go eWallet app.</p>
|
|
1689
|
+
</div>
|
|
1690
|
+
|
|
1691
|
+
<div class="instruction-step">
|
|
1692
|
+
<div class="step-number">3</div>
|
|
1693
|
+
<p class="step-text">You'll be redirected back automatically.</p>
|
|
1694
|
+
</div>
|
|
1695
|
+
</div>
|
|
1696
|
+
|
|
1697
|
+
<div class="submit-section">
|
|
1698
|
+
<button
|
|
1699
|
+
class="pay-button ${this.currentState.status === 'processing' ||
|
|
1700
|
+
this.currentState.status === 'requires_action'
|
|
1701
|
+
? 'loading'
|
|
1702
|
+
: ''}"
|
|
1703
|
+
@click=${this.handleTngPayment}
|
|
1704
|
+
?disabled=${this.currentState.status === 'processing' ||
|
|
1705
|
+
this.currentState.status === 'requires_action'}
|
|
1706
|
+
>
|
|
1707
|
+
${this.currentState.status === 'processing' ||
|
|
1708
|
+
this.currentState.status === 'requires_action'
|
|
1709
|
+
? 'Redirecting...'
|
|
1710
|
+
: `Pay ${this.getPayButtonAmount()}`}
|
|
1461
1711
|
</button>
|
|
1462
1712
|
</div>
|
|
1463
1713
|
</div>
|
|
@@ -1555,6 +1805,12 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1555
1805
|
return 'Boost';
|
|
1556
1806
|
case PAYMENT_METHODS.SHOPEEPAY:
|
|
1557
1807
|
return 'ShopeePay';
|
|
1808
|
+
case PAYMENT_METHODS.ATOM:
|
|
1809
|
+
return 'Atome';
|
|
1810
|
+
case PAYMENT_METHODS.DANA:
|
|
1811
|
+
return 'Dana';
|
|
1812
|
+
case PAYMENT_METHODS.TNG:
|
|
1813
|
+
return "Touch 'n Go";
|
|
1558
1814
|
default:
|
|
1559
1815
|
return id;
|
|
1560
1816
|
}
|
|
@@ -1618,6 +1874,27 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1618
1874
|
<div class="method-icon-right">
|
|
1619
1875
|
<img src="${SHOPEEPAY_ICON_DATA_URL}" alt="ShopeePay" style="width: 45px; height: auto;" />
|
|
1620
1876
|
</div>
|
|
1877
|
+
`;
|
|
1878
|
+
}
|
|
1879
|
+
else if (id === PAYMENT_METHODS.ATOM) {
|
|
1880
|
+
return html `
|
|
1881
|
+
<div class="method-icon-right">
|
|
1882
|
+
<img src="${ATOM_ICON_DATA_URL}" alt="Atome" style="width: 45px; height: auto;" />
|
|
1883
|
+
</div>
|
|
1884
|
+
`;
|
|
1885
|
+
}
|
|
1886
|
+
else if (id === PAYMENT_METHODS.DANA) {
|
|
1887
|
+
return html `
|
|
1888
|
+
<div class="method-icon-right">
|
|
1889
|
+
<img src="${DANA_ICON_DATA_URL}" alt="Dana" style="width: 45px; height: auto;" />
|
|
1890
|
+
</div>
|
|
1891
|
+
`;
|
|
1892
|
+
}
|
|
1893
|
+
else if (id === PAYMENT_METHODS.TNG) {
|
|
1894
|
+
return html `
|
|
1895
|
+
<div class="method-icon-right">
|
|
1896
|
+
<img src="${TNG_ICON_DATA_URL}" alt="Touch 'n Go" style="width: 45px; height: auto;" />
|
|
1897
|
+
</div>
|
|
1621
1898
|
`;
|
|
1622
1899
|
}
|
|
1623
1900
|
return null;
|
|
@@ -1682,7 +1959,13 @@ let OnePayment = class OnePayment extends LitElement {
|
|
|
1682
1959
|
? this.renderBoostContent()
|
|
1683
1960
|
: method.id === PAYMENT_METHODS.SHOPEEPAY
|
|
1684
1961
|
? this.renderShopeePayContent()
|
|
1685
|
-
:
|
|
1962
|
+
: method.id === PAYMENT_METHODS.ATOM
|
|
1963
|
+
? this.renderAtomContent()
|
|
1964
|
+
: method.id === PAYMENT_METHODS.DANA
|
|
1965
|
+
? this.renderDanaContent()
|
|
1966
|
+
: method.id === PAYMENT_METHODS.TNG
|
|
1967
|
+
? this.renderTngContent()
|
|
1968
|
+
: null}
|
|
1686
1969
|
</div>`
|
|
1687
1970
|
: ''}
|
|
1688
1971
|
</div>
|
|
@@ -1880,6 +2163,7 @@ OnePayment.styles = css `
|
|
|
1880
2163
|
justify-content: center;
|
|
1881
2164
|
flex-shrink: 0;
|
|
1882
2165
|
color: var(--op-color-text-secondary);
|
|
2166
|
+
margin-left: 0.5rem;
|
|
1883
2167
|
}
|
|
1884
2168
|
|
|
1885
2169
|
.method-icon-right svg {
|
|
@@ -3045,6 +3329,9 @@ __decorate([
|
|
|
3045
3329
|
__decorate([
|
|
3046
3330
|
property({ type: String })
|
|
3047
3331
|
], OnePayment.prototype, "email", void 0);
|
|
3332
|
+
__decorate([
|
|
3333
|
+
property({ type: String })
|
|
3334
|
+
], OnePayment.prototype, "phoneNumber", void 0);
|
|
3048
3335
|
__decorate([
|
|
3049
3336
|
property({ type: Array })
|
|
3050
3337
|
], OnePayment.prototype, "excludePaymentMethods", void 0);
|