@everymatrix/cashier-method-details 1.29.4 → 1.29.6

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@everymatrix/cashier-method-details",
3
- "version": "1.29.4",
3
+ "version": "1.29.6",
4
4
  "main": "index.js",
5
5
  "svelte": "src/index.ts",
6
6
  "scripts": {
@@ -35,5 +35,5 @@
35
35
  "publishConfig": {
36
36
  "access": "public"
37
37
  },
38
- "gitHead": "70873f2feed3be9c071d9ad09343a833b236b4fc"
38
+ "gitHead": "a67714e03295f6cdb76990ce33c8baeec7819b9f"
39
39
  }
@@ -17,8 +17,6 @@
17
17
  import FlatpickrLanguages from "flatpickr/dist/l10n";
18
18
  import dayjs from 'dayjs';
19
19
  import customParseFormat from 'dayjs/plugin/customParseFormat';
20
- import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
21
- import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
22
20
  import type {PaymentMethod} from "./CashierMethodDetails.types";
23
21
  export class PaymentMethodDetails {
24
22
  name: string;
@@ -164,7 +162,7 @@
164
162
  export let translationurl: string;
165
163
  export let customerid: string;
166
164
  export let currency: string;
167
- export let amount: number;
165
+ export let amount: string;
168
166
  export let assetsurl: string;
169
167
  export let type: string = TxnType.Deposit;
170
168
  export let selectedpaymentmethodname: string;
@@ -209,6 +207,7 @@
209
207
  let editedAmount: number;
210
208
  let errorResponseCode: string;
211
209
  let isDisabled: boolean;
210
+ let showErrorModal = false;
212
211
 
213
212
  $: endpoint && session && selectedpaymentmethodname && currency && reinitMethod();
214
213
  $: clientstyling && customStylingContainer && setClientStyling();
@@ -238,7 +237,9 @@
238
237
  fieldValidation = {};
239
238
  qrCodeContainer = [];
240
239
  selectedPaymentMethod = null;
241
- errorResponseCode = ''
240
+ errorResponseCode = '';
241
+ showErrorModal = false;
242
+ setErrorResponseCode();
242
243
  getPaymentDetails();
243
244
  }
244
245
 
@@ -341,11 +342,12 @@
341
342
  }
342
343
  if (data.ResponseCode !== 'Success') {
343
344
  errorResponseCode = data.ResponseCode;
345
+ setErrorResponseCode();
344
346
  return;
345
347
  }
346
348
  xPaymentSessionToken = data.XPaymentSessionToken;
347
349
  selectedPaymentMethod = data.PaymentMethod;
348
- editedAmount = amount;
350
+ editedAmount = Number(amount);
349
351
  if (!selectedPaymentMethod.HideAmountField) {
350
352
  validateAmount();
351
353
  }
@@ -356,6 +358,8 @@
356
358
  }
357
359
  validateField(field);
358
360
  })
361
+ setConfirmModalInfo();
362
+ setErrorResponseCode();
359
363
  hideMethodsList();
360
364
  })
361
365
  }
@@ -386,6 +390,13 @@
386
390
  mobileView = isMobile(userAgent) || mediaQuery.matches
387
391
  }
388
392
 
393
+ const messageHandler = (e:any) => {
394
+ if (e.data.type == 'ErrorResponseCode') {
395
+ errorResponseCode = e.data.errorResponseCode;
396
+ showReceiptPage = e.data.showReceiptPage;
397
+ }
398
+ }
399
+
389
400
  onMount(() => {
390
401
  window.addEventListener('closeModal', closeModal, false);
391
402
  window.addEventListener('confirmModal', confirmTxn, false);
@@ -393,9 +404,8 @@
393
404
  window.addEventListener('notificationButtonClick', retryRedirect, false);
394
405
  window.addEventListener('closeCashierReceiptPage', closeReceiptPage, false);
395
406
  document.addEventListener('click',closeAllLookups);
407
+ window.addEventListener('message', messageHandler, false);
396
408
  dayjs.extend(customParseFormat);
397
- dayjs.extend(isSameOrBefore);
398
- dayjs.extend(isSameOrAfter);
399
409
 
400
410
  return () => {
401
411
  window.removeEventListener('closeModal', closeModal);
@@ -403,6 +413,7 @@
403
413
  window.removeEventListener('closeIframe', closeIframe);
404
414
  window.removeEventListener('notificationButtonClick', retryRedirect);
405
415
  window.removeEventListener('closeCashierReceiptPage', closeReceiptPage);
416
+ window.removeEventListener('message', messageHandler);
406
417
  }
407
418
  });
408
419
 
@@ -470,6 +481,7 @@
470
481
  if (data.ResponseCode !== 'Success') {
471
482
  errorResponseCode = data.ResponseCode
472
483
  isProcessingTxn = false;
484
+ setErrorResponseCode();
473
485
  toggleDisableActionOnPage();
474
486
  showModal()
475
487
  return;
@@ -477,18 +489,24 @@
477
489
  xPaymentSessionToken = data.XPaymentSessionToken;
478
490
  isProcessingTxn = false;
479
491
  showConfirmModal = true;
492
+ setConfirmModalInfo();
480
493
  toggleDisableActionOnPage();
481
494
  })
482
495
  }
483
496
 
497
+ const setErrorResponseCode = () => {
498
+ window.postMessage({type: 'ErrorResponseCode', errorResponseCode});
499
+ }
500
+ const setConfirmModalInfo = () => {
501
+ window.postMessage({type:'ShowConfirmModal', showConfirmModal, editedAmount});
502
+ }
503
+ const setRedirectInfo = () => {
504
+ window.postMessage({type: 'RedirectInfo', redirectMode, redirectUrl});
505
+ }
484
506
  const showModal = () => {
507
+ showErrorModal = true;
485
508
  window.postMessage({ type: 'ShowCashierModal' }, window.location.href)
486
509
  }
487
-
488
- const hideModal = () => {
489
- window.postMessage({ type: 'HideCashierModal' }, window.location.href)
490
- }
491
-
492
510
  const backToMethodList = () => {
493
511
  dispatchEvent(new CustomEvent('backToMethodList', {
494
512
  bubbles: true,
@@ -522,6 +540,7 @@
522
540
  const closeIframe = () => {
523
541
  redirectUrl = null;
524
542
  showReceiptPage = true;
543
+ setRedirectInfo();
525
544
  }
526
545
  const closeModal = () => {
527
546
  showConfirmModal = false;
@@ -545,6 +564,7 @@
545
564
  if (data.ResponseCode !== 'Success') {
546
565
  errorResponseCode = data.ResponseCode;
547
566
  isProcessingTxn = false;
567
+ toggleDisableActionOnPage();
548
568
  showModal();
549
569
  return;
550
570
  }
@@ -553,6 +573,7 @@
553
573
  redirectMode = redirectModeMap.get(data.RedirectionMode);
554
574
  isProcessingTxn = false;
555
575
  toggleDisableActionOnPage();
576
+ setRedirectInfo();
556
577
  if (!redirectUrl) {
557
578
  showReceiptPage = true;
558
579
  }
@@ -569,6 +590,7 @@
569
590
  windowRedirect = window.open(redirectUrl, '_blank');
570
591
  showRedirectNotification = true;
571
592
  showRetryNotification = false;
593
+ setRedirectInfo();
572
594
  }
573
595
 
574
596
  const closeReceiptPage = () => {
@@ -702,7 +724,7 @@
702
724
  const inputValue = dayjs(value, format);
703
725
  const maxValue = dayjs(field.maxValue, format);
704
726
  const minValue = dayjs(field.minValue, format);
705
- if (inputValue.isSameOrBefore(minValue) || inputValue.isSameOrAfter(maxValue)) {
727
+ if (inputValue.isBefore(minValue) || inputValue.isAfter(maxValue)) {
706
728
  fieldValidation[field.name] = $_('invalidFieldError',{ values: { field: field.label }})
707
729
  return;
708
730
  }
@@ -727,7 +749,7 @@
727
749
  <div class="CashierMethodDetails" bind:this={customStylingContainer}>
728
750
  {#if selectedPaymentMethod?.Name}
729
751
  <div class="MethodsDetails">
730
- {#if !showReceiptPage}
752
+ {#if !showReceiptPage && !errorResponseCode || (errorResponseCode && showErrorModal)}
731
753
  <form on:submit|preventDefault={prepareTxn} novalidate>
732
754
  <div class="FieldWrapper">
733
755
  <div class="FormLogo">
@@ -793,7 +815,8 @@
793
815
  on:input="{() => { validateField(field) }}"
794
816
  on:blur="{() => { showError[field.name] = true; validateField(field) }}">
795
817
  {:else if field.type === FieldTypes.Time || field.type === FieldTypes.Date || field.type === FieldTypes.DateTime}
796
- <input type="text" bind:value={ prepareFields[field.name] } pattern={field.format}
818
+ <div class="DateInput">
819
+ <input class="DateTimePicker" type="text" bind:value={ prepareFields[field.name] } pattern={field.format}
797
820
  data-field={JSON.stringify(field)}
798
821
  placeholder={field.placeholder}
799
822
  on:input={() => { showError[field.name] = true; dateTimeValidation(field) }}
@@ -801,6 +824,10 @@
801
824
  on:blur={() => { showError[field.name] = true; dateTimeValidation(field) }}
802
825
  bind:this={flatpickrEl[flatpickrEl.length]}
803
826
  >
827
+ {#if isMobile(userAgent)}
828
+ <div class="MobileDateInput">{prepareFields[field.name]}</div>
829
+ {/if}
830
+ </div>
804
831
  {:else if field.type === FieldTypes.Number || field.type === FieldTypes.Money}
805
832
  <input type="number" placeholder="{field.placeholder}" bind:value={prepareFields[field.name]}
806
833
  on:input="{() => { validateField(field) }}"
@@ -903,7 +930,7 @@
903
930
  </div>
904
931
  {/if}
905
932
  </div>
906
- {:else if errorResponseCode}
933
+ {#if errorResponseCode && !showErrorModal}
907
934
  <cashier-error
908
935
  {assetsurl}
909
936
  {translationurl}
@@ -915,33 +942,7 @@
915
942
  <div slot="button" class="ModalButton" on:click={backToMethodList}>{$_('backToMethodList')}</div>
916
943
  </cashier-error>
917
944
  {/if}
918
- {#if redirectUrl && redirectMode === RedirectionModeStringEnum.Default}
919
- <div class="IframeRedirect">
920
- <cashier-iframe-redirect
921
- lang="{lang}"
922
- translationurl="{translationurl}"
923
- iframeurl="{redirectUrl}"
924
- ></cashier-iframe-redirect>
925
- </div>
926
945
  {/if}
927
- {#if showConfirmModal}
928
- <cashier-confirm-modal>
929
- <span slot="text">{$_(`${type.toLowerCase()}.confirmText`,
930
- { values: !selectedPaymentMethod.HideAmountField ? { amount: formatter.format(editedAmount ?? 0), currency } : {amount: '', currency: ''}})}</span>
931
- <div slot="confirm">{$_(`${type.toLowerCase()}.confirmButton`)}</div>
932
- </cashier-confirm-modal>
933
- {/if}
934
- <cashier-modal>
935
- <cashier-error
936
- {assetsurl}
937
- {translationurl}
938
- {clientstylingurl}
939
- {clientstyling}
940
- errorcode={errorResponseCode}
941
- >
942
- <div slot="button" class="ModalButton" on:click={hideModal}>{$_('closeModal')}</div>
943
- </cashier-error>
944
- </cashier-modal>
945
946
  </div>
946
947
 
947
948
 
@@ -976,12 +977,16 @@
976
977
  margin: 0;
977
978
  }
978
979
 
980
+ input::-webkit-date-and-time-value {
981
+ visibility: hidden;
982
+ }
983
+
979
984
  input[type=number] {
980
985
  -moz-appearance: textfield;
981
986
  }
982
987
  .CashierMethodDetails {
983
988
  width: 100%;
984
- height: 100%;
989
+ height: inherit;
985
990
  container-name: method-details;
986
991
  container-type: inline-size;
987
992
  }
@@ -1083,22 +1088,6 @@
1083
1088
  text-transform: none;
1084
1089
  }
1085
1090
  }
1086
- cashier-iframe-redirect {
1087
- height: inherit;
1088
- width: inherit;
1089
- }
1090
- .IframeRedirect {
1091
- display: flex;
1092
- position: absolute;
1093
- align-items: center;
1094
- justify-content: center;
1095
- width: 100%;
1096
- height: 100%;
1097
- z-index: 100;
1098
- top: 0;
1099
- left: 0;
1100
- background-color: var(--emw--color-white, #FFF);
1101
- }
1102
1091
  .FieldWrapper, label{
1103
1092
  display: flex;
1104
1093
  flex-direction: column ;
@@ -1279,6 +1268,19 @@
1279
1268
  display: block;
1280
1269
  }
1281
1270
  }
1271
+ }
1272
+ .DateInput {
1273
+ position: relative;
1274
+ }
1275
+ .MobileDateInput {
1276
+ position: absolute;
1277
+ top: 50%;
1278
+ transform: translateY(-50%);
1279
+ left: 15px;
1280
+ }
1281
+ .DateTimePicker {
1282
+ width: -webkit-fill-available;
1283
+ width: -moz-available;
1282
1284
  }
1283
1285
  .CustomSelect {
1284
1286
  width: 100%;
@@ -1341,11 +1343,21 @@
1341
1343
  text-overflow: ellipsis;
1342
1344
  }
1343
1345
 
1344
- label, input, .Description, .FormLogo .ChangePaymeth {
1346
+ label, input, .Description, .FormLogo .ChangePaymeth, .OptionList div {
1345
1347
  font-size: var(--emw--font-size-x-small, 12px);
1346
1348
  }
1347
1349
  .SelectedMethodDescription, .AmountLimits {
1348
1350
  font-size: var(--emw--font-size-2x-small, 10px);
1349
1351
  }
1350
- }
1352
+
1353
+ .DateTimePicker {
1354
+ -webkit-appearance: none;
1355
+ -moz-appearance: none;
1356
+ font-size: inherit;
1357
+ background: none;
1358
+ width: -webkit-fill-available;
1359
+ font-size: 0;
1360
+ width: -moz-available;
1361
+ }
1362
+ }
1351
1363
  </style>
@@ -19,17 +19,6 @@ export const TRANSLATIONS = {
19
19
  "amountIntError": "Amount should be integer value",
20
20
  "amountDecimalError": "Amount should have 2 or less digits after decimal point",
21
21
  "invalidFieldError": "{field} is invalid",
22
- "closeModal": "CLOSE",
23
22
  "backToMethodList": "BACK TO PAYMENT METHODS",
24
- "deposit": {
25
- "makeTxnButton": "DEPOSIT",
26
- "confirmText": "You're going to deposit {amount} {currency} to your account",
27
- "confirmButton": "Ok"
28
- },
29
- "withdraw": {
30
- "makeTxnButton": "WITHDRAW",
31
- "confirmText": "You're going to withdraw {amount} {currency} from your account",
32
- "confirmButton": "Ok"
33
- }
34
23
  }
35
24
  }