@everymatrix/cashier-method-details 1.29.3 → 1.29.5
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +1 -0
- package/dist/cashier-method-details.js +236 -225
- package/dist/cashier-method-details.js.map +1 -1
- package/package.json +2 -2
- package/src/CashierMethodDetails.svelte +91 -11
- package/src/translations.js +7 -7
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@everymatrix/cashier-method-details",
|
3
|
-
"version": "1.29.
|
3
|
+
"version": "1.29.5",
|
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": "
|
38
|
+
"gitHead": "f2e3f1edbe2a15979fd224f987ea52d179bb95f0"
|
39
39
|
}
|
@@ -15,7 +15,8 @@
|
|
15
15
|
import flatpickr from "flatpickr";
|
16
16
|
import "flatpickr/dist/flatpickr.min.css";
|
17
17
|
import FlatpickrLanguages from "flatpickr/dist/l10n";
|
18
|
-
|
18
|
+
import dayjs from 'dayjs';
|
19
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
19
20
|
import type {PaymentMethod} from "./CashierMethodDetails.types";
|
20
21
|
export class PaymentMethodDetails {
|
21
22
|
name: string;
|
@@ -279,7 +280,19 @@
|
|
279
280
|
if(!el) {
|
280
281
|
return;
|
281
282
|
}
|
282
|
-
|
283
|
+
const field = JSON.parse(el.dataset.field);
|
284
|
+
flatpickr(el, {...dateOptions[field.type], maxDate: field.maxValue, minDate: field.minValue, defaultDate: field.defaultValue,
|
285
|
+
onReady: (selectedDates, dateStr) => {
|
286
|
+
prepareFields[field.name] = dateStr;
|
287
|
+
},
|
288
|
+
onClose: (selectedDates, dateStr, instance) => {
|
289
|
+
if(!fieldValidation[field.name]) {
|
290
|
+
prepareFields[field.name] = dateStr;
|
291
|
+
} else {
|
292
|
+
prepareFields[field.name] = '';
|
293
|
+
}
|
294
|
+
}
|
295
|
+
})
|
283
296
|
});
|
284
297
|
}
|
285
298
|
const setActiveLanguage = ():void => {
|
@@ -377,7 +390,8 @@
|
|
377
390
|
window.addEventListener('closeIframe', closeIframe, false);
|
378
391
|
window.addEventListener('notificationButtonClick', retryRedirect, false);
|
379
392
|
window.addEventListener('closeCashierReceiptPage', closeReceiptPage, false);
|
380
|
-
document.addEventListener('click',closeAllLookups)
|
393
|
+
document.addEventListener('click',closeAllLookups);
|
394
|
+
dayjs.extend(customParseFormat);
|
381
395
|
|
382
396
|
return () => {
|
383
397
|
window.removeEventListener('closeModal', closeModal);
|
@@ -678,6 +692,19 @@
|
|
678
692
|
amountIntError() || amountDecimalError();
|
679
693
|
}
|
680
694
|
|
695
|
+
const dateTimeValidation = (field) => {
|
696
|
+
const value = prepareFields[field.name];
|
697
|
+
const format = field.placeholder;
|
698
|
+
const inputValue = dayjs(value, format);
|
699
|
+
const maxValue = dayjs(field.maxValue, format);
|
700
|
+
const minValue = dayjs(field.minValue, format);
|
701
|
+
if (inputValue.isBefore(minValue) || inputValue.isAfter(maxValue)) {
|
702
|
+
fieldValidation[field.name] = $_('invalidFieldError',{ values: { field: field.label }})
|
703
|
+
return;
|
704
|
+
}
|
705
|
+
fieldValidation[field.name] = showField(field) ? (emptyFieldError(field, value) || patternMatchesError(field, value)) : '';
|
706
|
+
}
|
707
|
+
|
681
708
|
const validateField = (field) => {
|
682
709
|
const value = prepareFields[field.name]
|
683
710
|
fieldValidation[field.name] = showField(field) ? (emptyFieldError(field, value) || patternMatchesError(field, value)) : '';
|
@@ -762,15 +789,19 @@
|
|
762
789
|
on:input="{() => { validateField(field) }}"
|
763
790
|
on:blur="{() => { showError[field.name] = true; validateField(field) }}">
|
764
791
|
{:else if field.type === FieldTypes.Time || field.type === FieldTypes.Date || field.type === FieldTypes.DateTime}
|
765
|
-
|
766
|
-
|
767
|
-
data-
|
768
|
-
data-minvalue={field.minValue}
|
792
|
+
<div class="DateInput">
|
793
|
+
<input class="DateTimePicker" type="text" bind:value={ prepareFields[field.name] } pattern={field.format}
|
794
|
+
data-field={JSON.stringify(field)}
|
769
795
|
placeholder={field.placeholder}
|
770
|
-
on:input={() => {
|
771
|
-
on:change={() => { showError[field.name] = true;
|
796
|
+
on:input={() => { showError[field.name] = true; dateTimeValidation(field) }}
|
797
|
+
on:change={() => { showError[field.name] = true; dateTimeValidation(field) }}
|
798
|
+
on:blur={() => { showError[field.name] = true; dateTimeValidation(field) }}
|
772
799
|
bind:this={flatpickrEl[flatpickrEl.length]}
|
773
800
|
>
|
801
|
+
{#if isMobile(userAgent)}
|
802
|
+
<div class="MobileDateInput">{prepareFields[field.name]}</div>
|
803
|
+
{/if}
|
804
|
+
</div>
|
774
805
|
{:else if field.type === FieldTypes.Number || field.type === FieldTypes.Money}
|
775
806
|
<input type="number" placeholder="{field.placeholder}" bind:value={prepareFields[field.name]}
|
776
807
|
on:input="{() => { validateField(field) }}"
|
@@ -786,7 +817,7 @@
|
|
786
817
|
|
787
818
|
{:else if field.type === FieldTypes.Lookup}
|
788
819
|
<div class="CustomSelect">
|
789
|
-
<div class="Selected" id="{index}" on:click="{(e) => showLookup(e, field.name)}"> {getValueByFieldName(field.values, prepareFields[field.name])}</div>
|
820
|
+
<div class="Selected" id="{index}" on:click="{(e) => showLookup(e, field.name)}"> <span class="SelectedValue">{getValueByFieldName(field.values, prepareFields[field.name])}</span></div>
|
790
821
|
<div class="OptionList"
|
791
822
|
class:Opened={openedLookup === field.name}
|
792
823
|
class:Top={openLookupTop}
|
@@ -946,12 +977,18 @@
|
|
946
977
|
margin: 0;
|
947
978
|
}
|
948
979
|
|
980
|
+
input::-webkit-date-and-time-value {
|
981
|
+
visibility: hidden;
|
982
|
+
}
|
983
|
+
|
949
984
|
input[type=number] {
|
950
985
|
-moz-appearance: textfield;
|
951
986
|
}
|
952
987
|
.CashierMethodDetails {
|
953
988
|
width: 100%;
|
954
|
-
height:
|
989
|
+
height: inherit;
|
990
|
+
container-name: method-details;
|
991
|
+
container-type: inline-size;
|
955
992
|
}
|
956
993
|
.ReceiptPage {
|
957
994
|
background-color: var(--emw--color-gray-transparency-100, rgb(255, 255, 255));
|
@@ -1247,6 +1284,19 @@
|
|
1247
1284
|
display: block;
|
1248
1285
|
}
|
1249
1286
|
}
|
1287
|
+
}
|
1288
|
+
.DateInput {
|
1289
|
+
position: relative;
|
1290
|
+
}
|
1291
|
+
.MobileDateInput {
|
1292
|
+
position: absolute;
|
1293
|
+
top: 50%;
|
1294
|
+
transform: translateY(-50%);
|
1295
|
+
left: 15px;
|
1296
|
+
}
|
1297
|
+
.DateTimePicker {
|
1298
|
+
width: -webkit-fill-available;
|
1299
|
+
width: -moz-available;
|
1250
1300
|
}
|
1251
1301
|
.CustomSelect {
|
1252
1302
|
width: 100%;
|
@@ -1256,6 +1306,9 @@
|
|
1256
1306
|
display: flex;
|
1257
1307
|
align-items: center;
|
1258
1308
|
cursor: pointer;
|
1309
|
+
.SelectedValue {
|
1310
|
+
max-width: 95%;
|
1311
|
+
}
|
1259
1312
|
&:after {
|
1260
1313
|
position: absolute;
|
1261
1314
|
content: "";
|
@@ -1296,4 +1349,31 @@
|
|
1296
1349
|
display: block;
|
1297
1350
|
}
|
1298
1351
|
}
|
1352
|
+
@container method-details (width < 699px) {
|
1353
|
+
.FormLogo .SelectedLogoDescription {
|
1354
|
+
font-size: var(--emw--font-size-x-small, 12px);
|
1355
|
+
display: -webkit-box;
|
1356
|
+
-webkit-line-clamp: 2;
|
1357
|
+
-webkit-box-orient: vertical;
|
1358
|
+
overflow: hidden;
|
1359
|
+
text-overflow: ellipsis;
|
1360
|
+
}
|
1361
|
+
|
1362
|
+
label, input, .Description, .FormLogo .ChangePaymeth, .OptionList div {
|
1363
|
+
font-size: var(--emw--font-size-x-small, 12px);
|
1364
|
+
}
|
1365
|
+
.SelectedMethodDescription, .AmountLimits {
|
1366
|
+
font-size: var(--emw--font-size-2x-small, 10px);
|
1367
|
+
}
|
1368
|
+
|
1369
|
+
.DateTimePicker {
|
1370
|
+
-webkit-appearance: none;
|
1371
|
+
-moz-appearance: none;
|
1372
|
+
font-size: inherit;
|
1373
|
+
background: none;
|
1374
|
+
width: -webkit-fill-available;
|
1375
|
+
font-size: 0;
|
1376
|
+
width: -moz-available;
|
1377
|
+
}
|
1378
|
+
}
|
1299
1379
|
</style>
|
package/src/translations.js
CHANGED
@@ -2,8 +2,8 @@ export const TRANSLATIONS = {
|
|
2
2
|
"en": {
|
3
3
|
"loading": "Loading...",
|
4
4
|
"amountLabel": "Amount",
|
5
|
-
"redirectTitle": "You are redirected to the payment
|
6
|
-
"redirectMessage": "Please complete your transaction on the payment
|
5
|
+
"redirectTitle": "You are redirected to the payment's provider page",
|
6
|
+
"redirectMessage": "Please complete your transaction on the payment's provider page.",
|
7
7
|
"backToPayment": "Close",
|
8
8
|
"retryText": "Please note that your popup blocker may prevent the payment window from appearing",
|
9
9
|
"retryButton": "RETRY",
|
@@ -23,13 +23,13 @@ export const TRANSLATIONS = {
|
|
23
23
|
"backToMethodList": "BACK TO PAYMENT METHODS",
|
24
24
|
"deposit": {
|
25
25
|
"makeTxnButton": "DEPOSIT",
|
26
|
-
"confirmText": "You
|
27
|
-
"confirmButton": "Ok"
|
26
|
+
"confirmText": "You're going to deposit {amount} {currency} to your account",
|
27
|
+
"confirmButton": "Ok"
|
28
28
|
},
|
29
29
|
"withdraw": {
|
30
30
|
"makeTxnButton": "WITHDRAW",
|
31
|
-
"confirmText": "You
|
32
|
-
"confirmButton": "Ok"
|
31
|
+
"confirmText": "You're going to withdraw {amount} {currency} from your account",
|
32
|
+
"confirmButton": "Ok"
|
33
33
|
}
|
34
34
|
}
|
35
|
-
}
|
35
|
+
}
|