@bigbinary/neeto-payments-frontend 6.3.5 → 6.3.7

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 (59) hide show
  1. package/app/javascript/src/translations/ar.json +3 -3
  2. package/app/javascript/src/translations/bg.json +3 -3
  3. package/app/javascript/src/translations/ca.json +3 -3
  4. package/app/javascript/src/translations/cs.json +3 -3
  5. package/app/javascript/src/translations/da.json +3 -3
  6. package/app/javascript/src/translations/de.json +3 -3
  7. package/app/javascript/src/translations/en.json +3 -3
  8. package/app/javascript/src/translations/es-MX.json +3 -3
  9. package/app/javascript/src/translations/es.json +3 -3
  10. package/app/javascript/src/translations/et.json +3 -3
  11. package/app/javascript/src/translations/fi.json +3 -3
  12. package/app/javascript/src/translations/fil.json +3 -3
  13. package/app/javascript/src/translations/fr.json +3 -3
  14. package/app/javascript/src/translations/he.json +3 -3
  15. package/app/javascript/src/translations/hi.json +3 -3
  16. package/app/javascript/src/translations/hr.json +3 -3
  17. package/app/javascript/src/translations/hu.json +3 -3
  18. package/app/javascript/src/translations/id.json +3 -3
  19. package/app/javascript/src/translations/it.json +3 -3
  20. package/app/javascript/src/translations/ja.json +3 -3
  21. package/app/javascript/src/translations/ko.json +3 -3
  22. package/app/javascript/src/translations/nl.json +3 -3
  23. package/app/javascript/src/translations/pl.json +3 -3
  24. package/app/javascript/src/translations/pt-BR.json +3 -3
  25. package/app/javascript/src/translations/pt.json +3 -3
  26. package/app/javascript/src/translations/ro.json +3 -3
  27. package/app/javascript/src/translations/ru.json +3 -3
  28. package/app/javascript/src/translations/sk.json +3 -3
  29. package/app/javascript/src/translations/sl.json +3 -3
  30. package/app/javascript/src/translations/sv.json +3 -3
  31. package/app/javascript/src/translations/th.json +3 -3
  32. package/app/javascript/src/translations/tr.json +3 -3
  33. package/app/javascript/src/translations/uk.json +3 -3
  34. package/app/javascript/src/translations/vi.json +3 -3
  35. package/app/javascript/src/translations/zh-CN.json +3 -3
  36. package/app/javascript/src/translations/zh-TW.json +3 -3
  37. package/dist/ManualUpiPayment.js +96 -21
  38. package/dist/ManualUpiPayment.js.map +1 -1
  39. package/dist/ManualUpiPaymentConfirmButton.js +1 -1
  40. package/dist/ManualUpiPaymentRejectButton.js +1 -1
  41. package/dist/cjs/ManualUpiPayment.js +96 -21
  42. package/dist/cjs/ManualUpiPayment.js.map +1 -1
  43. package/dist/cjs/index.js +1 -0
  44. package/dist/cjs/index.js.map +1 -1
  45. package/dist/cjs/v2/ManualUpiPayment.js +88 -14
  46. package/dist/cjs/v2/ManualUpiPayment.js.map +1 -1
  47. package/dist/cjs/v2/index.js +1 -0
  48. package/dist/cjs/v2/index.js.map +1 -1
  49. package/dist/index.js +2 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/{usePaymentApi-C8fRdHmK.js → usePaymentApi-CjtkL3IU.js} +2 -2
  52. package/dist/{usePaymentApi-C8fRdHmK.js.map → usePaymentApi-CjtkL3IU.js.map} +1 -1
  53. package/dist/v2/ManualUpiPayment.js +88 -14
  54. package/dist/v2/ManualUpiPayment.js.map +1 -1
  55. package/dist/v2/ManualUpiPaymentConfirmButton.js +1 -1
  56. package/dist/v2/ManualUpiPaymentRejectButton.js +1 -1
  57. package/dist/v2/index.js +2 -1
  58. package/dist/v2/index.js.map +1 -1
  59. package/package.json +5 -5
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "Transakčný ID by malo mať 6 znakov",
153
153
  "identifierOrScreenshot": "Zadajte ID transakcie alebo nahrajte snímku obrazovky platby"
154
154
  },
155
- "vpaText": "Odošlite vyššie uvedenú sumu na nasledujúce UPI ID a zadajte ID transakcie UPI alebo nahrajte snímku obrazovky platby.",
156
- "vpaText_other": "Odošlite vyššie uvedenú sumu na akékoľvek z nasledujúcich UPI ID a zadajte ID transakcie UPI alebo nahrajte snímku obrazovky platby.",
155
+ "vpaText": "Prosím, zaplaťte hore uvedenú sumu na nasledujúce UPI ID. Akonáhle je platba dokončená, zadajte UPI transakčný ID alebo nahrajte snímku obrazovky platby.",
156
+ "vpaText_other": "Prosím, zaplaťte hore uvedenú sumu na ktorékoľvek z nasledujúcich UPI ID. Akonáhle je platba dokončená, zadajte UPI transakčný ID alebo nahrajte snímku obrazovky platby.",
157
157
  "buttons": {
158
158
  "submit": "Odoslať",
159
159
  "back": "Späť",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Nahrajte snímku obrazovky platby",
166
166
  "alt": "Snímka obrazovky platby",
167
- "uploadText": "Kliknite na nahranie snímky obrazovky platby",
167
+ "uploadText": "Kliknite sem pre nahratie snímky obrazovky platby",
168
168
  "formatHint": "PNG, JPG do {{maxSize}}MB",
169
169
  "tooLarge": "Veľkosť súboru musí byť menšia ako {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "Transakcijska številka mora imeti 6 znakov",
153
153
  "identifierOrScreenshot": "Prosimo, vnesite identifikacijsko številko transakcije ali naložite plačilno sliko zaslona"
154
154
  },
155
- "vpaText": "Pošljite zgoraj omenjeni znesek na naslednjo UPI ID in vnesite UPI identifikacijsko številko transakcije ali naložite sliko zaslona plačila.",
156
- "vpaText_other": "Pošljite zgoraj omenjeni znesek na katero koli od naslednjih UPI ID-jev in vnesite UPI identifikacijsko številko transakcije ali naložite sliko zaslona plačila.",
155
+ "vpaText": "Prosimo, plačajte zgoraj omenjeno vsoto na naslednji UPI ID. Ko je plačilo končano, vpišite UPI transakcijsko ID ali naložite posnetek zaslona plačila.",
156
+ "vpaText_other": "Prosimo, plačajte zgoraj omenjeno vsoto na katerikoli od naslednjih UPI ID-jev. Ko je plačilo končano, vpišite UPI transakcijsko ID ali naložite posnetek zaslona plačila.",
157
157
  "buttons": {
158
158
  "submit": "Pošlji",
159
159
  "back": "Nazaj",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Naloži sliko zaslona plačila",
166
166
  "alt": "Slika zaslona plačila",
167
- "uploadText": "Kliknite za nalaganje slike zaslona plačila",
167
+ "uploadText": "Kliknite tukaj za nalaganje posnetka zaslona plačila",
168
168
  "formatHint": "PNG, JPG do {{maxSize}}MB",
169
169
  "tooLarge": "Velikost datoteke mora biti manjša od {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "Transaktions-ID ska ha 6 tecken",
153
153
  "identifierOrScreenshot": "Vänligen ange ett transaktions-ID eller ladda upp en betalningsskärmdump"
154
154
  },
155
- "vpaText": "Skicka det ovan nämnda beloppet till följande UPI-ID och ange UPI transaktions-ID:t eller ladda upp betalningsskärmdump.",
156
- "vpaText_other": "Skicka det ovan nämnda beloppet till något av följande UPI-ID:n och ange UPI transaktions-ID:t eller ladda upp betalningsskärmdump.",
155
+ "vpaText": "Vänligen betala det ovan angivna beloppet till följande UPI-ID. När betalningen är genomförd, ange UPI-transaktions-ID eller ladda upp betalningsskärmdump.",
156
+ "vpaText_other": "Vänligen betala det ovan angivna beloppet till något av följande UPI-ID:n. När betalningen är genomförd, ange UPI-transaktions-ID eller ladda upp betalningsskärmdump.",
157
157
  "buttons": {
158
158
  "submit": "Skicka",
159
159
  "back": "Tillbaka",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Ladda upp betalningsskärmdump",
166
166
  "alt": "Betalningsskärmdump",
167
- "uploadText": "Klicka för att ladda upp betalningsskärmdump",
167
+ "uploadText": "Klicka här för att ladda upp betalningsskärmdump",
168
168
  "formatHint": "PNG, JPG upp till {{maxSize}}MB",
169
169
  "tooLarge": "Filstorleken måste vara mindre än {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "รหัสรายการต้องมี 6 ตัวอักษร",
153
153
  "identifierOrScreenshot": "กรุณาใส่หมายเลขการทำธุรกรรมหรืออัปโหลดภาพหน้าจอการชำระเงิน"
154
154
  },
155
- "vpaText": "ส่งจำนวนเงินที่กล่าวถึงข้างต้นไปยัง UPI ID ดังต่อไปนี้และกรอกหมายเลขการทำธุรกรรม UPI หรืออัปโหลดภาพหน้าจอการชำระเงิน",
156
- "vpaText_other": "ส่งจำนวนเงินที่กล่าวถึงข้างต้นไปยัง UPI ID ใด ๆ ดังต่อไปนี้และกรอกหมายเลขการทำธุรกรรม UPI หรืออัปโหลดภาพหน้าจอการชำระเงิน",
155
+ "vpaText": "กรุณาชำระจำนวนเงินที่กล่าวถึงข้างต้นไปยัง UPI ID ต่อไปนี้ เมื่อการชำระเงินเสร็จสิ้น ให้ป้อนหมายเลขธุรกรรม UPI หรืออัปโหลดภาพหน้าจอการชำระเงิน",
156
+ "vpaText_other": "กรุณาชำระจำนวนเงินที่กล่าวถึงข้างต้นไปยัง UPI ID ใด ๆ ต่อไปนี้ เมื่อการชำระเงินเสร็จสิ้น ให้ป้อนหมายเลขธุรกรรม UPI หรืออัปโหลดภาพหน้าจอการชำระเงิน",
157
157
  "buttons": {
158
158
  "submit": "ส่ง",
159
159
  "back": "กลับ",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "อัปโหลดภาพหน้าจอการชำระเงิน",
166
166
  "alt": "ภาพหน้าจอการชำระเงิน",
167
- "uploadText": "คลิกเพื่อลงภาพหน้าจอการชำระเงิน",
167
+ "uploadText": "คลิกที่นี่เพื่ออัปโหลดภาพหน้าจอการชำระเงิน",
168
168
  "formatHint": "PNG, JPG ขนาดสูงสุด {{maxSize}}MB",
169
169
  "tooLarge": "ขนาดไฟล์ต้องน้อยกว่า {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "İşlem kimliği 6 karakter olmalıdır",
153
153
  "identifierOrScreenshot": "Lütfen bir işlem kimliği girin veya bir ödeme ekran görüntüsü yükleyin"
154
154
  },
155
- "vpaText": "Yukarıda belirtilen tutarı aşağıdaki UPI ID'sine gönderin ve UPI işlem kimliğini girin veya ödeme ekran görüntüsünü yükleyin.",
156
- "vpaText_other": "Yukarıda belirtilen tutarı aşağıdaki UPI ID'lerinden herhangi birine gönderin ve UPI işlem kimliğini girin veya ödeme ekran görüntüsünü yükleyin.",
155
+ "vpaText": "Lütfen yukarıda belirtilen tutarı aşağıdaki UPI ID'sine ödeyin. Ödeme tamamlandıktan sonra, UPI işlem kimliğini girin veya ödeme ekran görüntüsünü yükleyin.",
156
+ "vpaText_other": "Lütfen yukarıda belirtilen tutarı aşağıdaki UPI ID'lerinden herhangi birine ödeyin. Ödeme tamamlandıktan sonra, UPI işlem kimliğini girin veya ödeme ekran görüntüsünü yükleyin.",
157
157
  "buttons": {
158
158
  "submit": "Gönder",
159
159
  "back": "Geri",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Ödeme ekran görüntüsü yükleyin",
166
166
  "alt": "Ödeme ekran görüntüsü",
167
- "uploadText": "Ödeme ekran görüntüsü yüklemek için tıklayın",
167
+ "uploadText": "Ödeme ekran görüntüsünü yüklemek için buraya tıklayın",
168
168
  "formatHint": "{{maxSize}}MB'a kadar PNG, JPG",
169
169
  "tooLarge": "Dosya boyutu {{maxSize}}MB'tan küçük olmalıdır"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "Ідентифікатор транзакції має містити 6 символів",
153
153
  "identifierOrScreenshot": "Будь ласка, введіть ID транзакції або завантажте скріншот платежу"
154
154
  },
155
- "vpaText": "Надішліть вказану вище суму на наступний UPI ID та введіть ID транзакції UPI або завантажте скріншот платежу.",
156
- "vpaText_other": "Надішліть вказану вище суму на будь-який із наступних UPI ID та введіть ID транзакції UPI або завантажте скріншот платежу.",
155
+ "vpaText": "Будь ласка, сплатіть зазначену вище суму за наступним ідентифікатором UPI. Після завершення платежу введіть ідентифікатор транзакції UPI або завантажте скріншот платежу.",
156
+ "vpaText_other": "Будь ласка, сплатіть зазначену вище суму за будь-яким з наступних ідентифікаторів UPI. Після завершення платежу введіть ідентифікатор транзакції UPI або завантажте скріншот платежу.",
157
157
  "buttons": {
158
158
  "submit": "Надіслати",
159
159
  "back": "Назад",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Завантажити скріншот платежу",
166
166
  "alt": "Скріншот платежу",
167
- "uploadText": "Натисніть, щоб завантажити скріншот платежу",
167
+ "uploadText": "Натисніть тут, щоб завантажити скріншот платежу",
168
168
  "formatHint": "PNG, JPG до {{maxSize}}МБ",
169
169
  "tooLarge": "Розмір файлу має бути менше {{maxSize}}МБ"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "ID giao dịch phải có 6 ký tự",
153
153
  "identifierOrScreenshot": "Vui lòng nhập ID giao dịch hoặc tải lên ảnh chụp màn hình thanh toán"
154
154
  },
155
- "vpaText": "Gửi số tiền đã đề cập ở trên đến ID UPI sau nhập ID giao dịch UPI hoặc tải lên ảnh chụp màn hình thanh toán.",
156
- "vpaText_other": "Gửi số tiền đã đề cập ở trên đến bất kỳ ID UPI nào dưới đây nhập ID giao dịch UPI hoặc tải lên ảnh chụp màn hình thanh toán.",
155
+ "vpaText": "Vui lòng thanh toán số tiền đã đề cập ở trên cho ID UPI sau. Sau khi thanh toán hoàn tất, hãy nhập ID giao dịch UPI hoặc tải lên ảnh chụp màn hình thanh toán.",
156
+ "vpaText_other": "Vui lòng thanh toán số tiền đã đề cập ở trên cho bất kỳ ID UPI nào trong số sau. Sau khi thanh toán hoàn tất, hãy nhập ID giao dịch UPI hoặc tải lên ảnh chụp màn hình thanh toán.",
157
157
  "buttons": {
158
158
  "submit": "Gửi",
159
159
  "back": "Quay lại",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "Tải lên ảnh chụp màn hình thanh toán",
166
166
  "alt": "Ảnh chụp màn hình thanh toán",
167
- "uploadText": "Nhấp để tải lên ảnh chụp màn hình thanh toán",
167
+ "uploadText": "Nhấn vào đây để tải lên ảnh chụp màn hình thanh toán",
168
168
  "formatHint": "PNG, JPG tối đa {{maxSize}}MB",
169
169
  "tooLarge": "Kích thước tệp phải nhỏ hơn {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "交易ID应为6个字符",
153
153
  "identifierOrScreenshot": "请输入交易ID或上传付款截图"
154
154
  },
155
- "vpaText": "将上述金额发送到以下UPI ID,并输入UPI交易ID或上传付款截图。",
156
- "vpaText_other": "将上述金额发送到以下任一UPI ID,并输入UPI交易ID或上传付款截图。",
155
+ "vpaText": "请将上述金额支付到以下 UPI ID。完成付款后,输入 UPI 交易 ID 或上传付款截图。",
156
+ "vpaText_other": "请将上述金额支付到以下任一 UPI ID。完成付款后,输入 UPI 交易 ID 或上传付款截图。",
157
157
  "buttons": {
158
158
  "submit": "提交",
159
159
  "back": "返回",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "上传付款截图",
166
166
  "alt": "付款截图",
167
- "uploadText": "点击上传付款截图",
167
+ "uploadText": "点击这里上传付款截图",
168
168
  "formatHint": "PNG, JPG 最大 {{maxSize}}MB",
169
169
  "tooLarge": "文件大小必须小于 {{maxSize}}MB"
170
170
  }
@@ -152,8 +152,8 @@
152
152
  "sixCharacters": "交易 ID 必須有 6 個字符",
153
153
  "identifierOrScreenshot": "請輸入交易 ID 或上傳付款截圖"
154
154
  },
155
- "vpaText": "將上述金額發送到以下 UPI ID,並輸入 UPI 交易 ID 或上傳付款截圖。",
156
- "vpaText_other": "將上述金額發送到以下任何 UPI ID,並輸入 UPI 交易 ID 或上傳付款截圖。",
155
+ "vpaText": "請將上述金額支付到以下的 UPI ID。付款完成後,輸入 UPI 交易 ID 或上傳付款截圖。",
156
+ "vpaText_other": "請將上述金額支付到以下任何 UPI ID。付款完成後,輸入 UPI 交易 ID 或上傳付款截圖。",
157
157
  "buttons": {
158
158
  "submit": "提交",
159
159
  "back": "返回",
@@ -164,7 +164,7 @@
164
164
  "screenshot": {
165
165
  "label": "上傳付款截圖",
166
166
  "alt": "付款截圖",
167
- "uploadText": "點擊上傳付款截圖",
167
+ "uploadText": "點擊這裡上傳付款截圖",
168
168
  "formatHint": "PNG, JPG 最大 {{maxSize}}MB",
169
169
  "tooLarge": "檔案大小必須小於 {{maxSize}}MB"
170
170
  }
@@ -2,16 +2,17 @@ import { useRef, useState, useMemo, useEffect } from 'react';
2
2
  import { DirectUpload } from '@rails/activestorage';
3
3
  import { isPresent, isNotPresent, noop } from 'neetocist';
4
4
  import { Close } from '@bigbinary/neeto-icons';
5
- import { Typography, Button, Toastr } from '@bigbinary/neetoui';
6
- import { Form, Input, ActionBlock } from '@bigbinary/neetoui/formik';
7
5
  import QRCodeImage from 'qrcode.react';
8
6
  import { pluck } from 'ramda';
9
7
  import { useTranslation } from 'react-i18next';
10
- import { u as useCreateUpiPayment } from './usePaymentApi-C8fRdHmK.js';
8
+ import { a as useCreateUpiPayment } from './usePaymentApi-CjtkL3IU.js';
9
+ import { Typography, Button, Toastr } from '@bigbinary/neetoui';
10
+ import { Form, ActionBlock } from '@bigbinary/neetoui/formik';
11
11
  import { k as getQrCodeValue } from './index-CajHy3NQ.js';
12
12
  import { t } from 'i18next';
13
13
  import * as yup from 'yup';
14
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
14
+ import { useField } from 'formik';
15
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
15
16
  import '@tanstack/react-query';
16
17
  import 'neetocommons/react-utils';
17
18
  import 'axios';
@@ -26,6 +27,7 @@ const DIRECT_UPLOAD_URL = "/rails/active_storage/direct_uploads";
26
27
  const INITIAL_VALUES = {
27
28
  identifier: ""
28
29
  };
30
+ const UPI_TRANSACTION_ID_LENGTH = 12;
29
31
  const buildValidationSchema = screenshotFile => yup.object({
30
32
  identifier: yup.number().typeError(t("neetoPayments.validations.invalidField", {
31
33
  entity: t("neetoPayments.common.transactionId")
@@ -36,6 +38,79 @@ const buildValidationSchema = screenshotFile => yup.object({
36
38
  }), value => isNotPresent(value) || value?.toString().length === 12)
37
39
  });
38
40
 
41
+ const toSlots = value => Array.from({
42
+ length: UPI_TRANSACTION_ID_LENGTH
43
+ }, (_, index) => value[index] ?? "");
44
+ const UpiTransactionIdInput = ({
45
+ name = "identifier"
46
+ }) => {
47
+ const {
48
+ t
49
+ } = useTranslation();
50
+ const [, meta, helpers] = useField(name);
51
+ const inputsRef = useRef([]);
52
+ const [slots, setSlots] = useState(() => toSlots((meta.initialValue ?? "").toString()));
53
+ const sync = nextSlots => {
54
+ setSlots(nextSlots);
55
+ helpers.setValue(nextSlots.join(""));
56
+ };
57
+ const setDigit = (index, digit) => sync(slots.map((slot, i) => i === index ? digit : slot));
58
+ const focusBox = index => inputsRef.current[index]?.focus();
59
+ const handleChange = (index, event) => {
60
+ const sanitized = event.target.value.replace(/\D/g, "");
61
+ setDigit(index, sanitized ? sanitized[sanitized.length - 1] : "");
62
+ if (sanitized && index < UPI_TRANSACTION_ID_LENGTH - 1) focusBox(index + 1);
63
+ };
64
+ const handleKeyDown = (index, event) => {
65
+ if (event.key === "Backspace" && !slots[index] && index > 0) {
66
+ event.preventDefault();
67
+ setDigit(index - 1, "");
68
+ focusBox(index - 1);
69
+ } else if (event.key === "ArrowLeft" && index > 0) {
70
+ focusBox(index - 1);
71
+ } else if (event.key === "ArrowRight" && index < UPI_TRANSACTION_ID_LENGTH - 1) {
72
+ focusBox(index + 1);
73
+ }
74
+ };
75
+ const handlePaste = event => {
76
+ event.preventDefault();
77
+ const pasted = event.clipboardData.getData("text").replace(/\D/g, "").slice(0, UPI_TRANSACTION_ID_LENGTH);
78
+ if (!pasted) return;
79
+ sync(toSlots(pasted));
80
+ focusBox(Math.min(pasted.length, UPI_TRANSACTION_ID_LENGTH - 1));
81
+ };
82
+ const showError = meta.touched && meta.error;
83
+ return /*#__PURE__*/jsxs("div", {
84
+ children: [/*#__PURE__*/jsx(Typography, {
85
+ className: "mb-2",
86
+ style: "body2",
87
+ weight: "medium",
88
+ children: t("neetoPayments.upi.payment.transaction.label")
89
+ }), /*#__PURE__*/jsx("div", {
90
+ className: "flex flex-wrap gap-2",
91
+ onPaste: handlePaste,
92
+ children: slots.map((slot, index) => /*#__PURE__*/jsx("input", {
93
+ autoComplete: "off",
94
+ className: "h-10 w-8 neeto-ui-rounded border neeto-ui-border-gray-300 text-center text-base focus:neeto-ui-border-gray-500 focus:outline-none",
95
+ "data-testid": `upi-transaction-id-box-${index}`,
96
+ inputMode: "numeric",
97
+ maxLength: 1,
98
+ ref: element => inputsRef.current[index] = element,
99
+ type: "text",
100
+ value: slot,
101
+ onBlur: () => helpers.setTouched(true),
102
+ onChange: event => handleChange(index, event),
103
+ onFocus: event => event.target.select(),
104
+ onKeyDown: event => handleKeyDown(index, event)
105
+ }, index))
106
+ }), showError && /*#__PURE__*/jsx(Typography, {
107
+ className: "neeto-ui-text-error-500 mt-1",
108
+ style: "body3",
109
+ children: meta.error
110
+ })]
111
+ });
112
+ };
113
+
39
114
  const ManualUpiPayment = ({
40
115
  fee,
41
116
  payableId,
@@ -125,42 +200,41 @@ const ManualUpiPayment = ({
125
200
  dirty
126
201
  }) => /*#__PURE__*/jsxs(Fragment, {
127
202
  children: [/*#__PURE__*/jsx(Typography, {
128
- style: "body1",
203
+ className: "neeto-ui-text-gray-600",
204
+ style: "body2",
129
205
  children: t("neetoPayments.upi.payment.vpaText", {
130
206
  count: vpaIds.length
131
207
  })
132
208
  }), isPresent(vpaIds) && /*#__PURE__*/jsx("div", {
133
- className: "grid grid-cols-1 gap-8 gap-y-4 sm:grid-cols-2",
209
+ className: "flex flex-wrap gap-8",
134
210
  children: vpaIds.map(vpaId => /*#__PURE__*/jsxs("div", {
135
211
  className: "flex flex-col items-center justify-center",
136
212
  children: [/*#__PURE__*/jsx(QRCodeImage, {
137
213
  size: 256,
138
214
  style: {
139
- width: 80,
140
- height: 80
215
+ width: 120,
216
+ height: 120
141
217
  },
142
218
  value: getQrCodeValue(vpaId, amountToUpi)
143
219
  }), /*#__PURE__*/jsx(Typography, {
144
220
  className: "w-full mt-2 text-center wrap-break-word",
145
221
  style: "body2",
222
+ weight: "medium",
146
223
  children: vpaId
147
224
  })]
148
225
  }, vpaId))
149
- }), /*#__PURE__*/jsx(Input, {
150
- label: t("neetoPayments.upi.payment.transaction.label"),
151
- name: "identifier",
152
- placeholder: t("neetoPayments.upi.payment.transaction.placeholder"),
153
- type: "number"
226
+ }), /*#__PURE__*/jsx(UpiTransactionIdInput, {
227
+ name: "identifier"
154
228
  }), /*#__PURE__*/jsxs("div", {
155
229
  className: "flex items-center gap-3",
156
230
  children: [/*#__PURE__*/jsx("hr", {
157
- className: "flex-1 border-gray-300"
231
+ className: "flex-1 neeto-ui-border-gray-300"
158
232
  }), /*#__PURE__*/jsx(Typography, {
159
- className: "text-gray-500 uppercase",
233
+ className: "neeto-ui-text-gray-500 uppercase",
160
234
  style: "body2",
161
235
  children: t("neetoPayments.common.or")
162
236
  }), /*#__PURE__*/jsx("hr", {
163
- className: "flex-1 border-gray-300"
237
+ className: "flex-1 neeto-ui-border-gray-300"
164
238
  })]
165
239
  }), /*#__PURE__*/jsxs("div", {
166
240
  children: [/*#__PURE__*/jsx(Typography, {
@@ -172,7 +246,7 @@ const ManualUpiPayment = ({
172
246
  className: "relative inline-block",
173
247
  children: [/*#__PURE__*/jsx("img", {
174
248
  alt: t("neetoPayments.upi.payment.screenshot.alt"),
175
- className: "max-h-40 rounded border border-gray-200",
249
+ className: "max-h-40 neeto-ui-rounded border neeto-ui-border-gray-200",
176
250
  src: screenshotPreview
177
251
  }), /*#__PURE__*/jsx(Button, {
178
252
  className: "absolute -right-2 -top-2 neeto-ui-rounded-full neeto-ui-bg-white neeto-ui-shadow-sm",
@@ -182,7 +256,7 @@ const ManualUpiPayment = ({
182
256
  onClick: handleRemoveScreenshot
183
257
  })]
184
258
  }) : /*#__PURE__*/jsxs("div", {
185
- className: "flex cursor-pointer flex-col items-center justify-center rounded border-2 border-dashed border-gray-300 p-6 transition-colors hover:border-gray-400",
259
+ className: "flex cursor-pointer flex-col items-center justify-center neeto-ui-rounded border-2 border-dashed neeto-ui-border-gray-300 p-6 transition-colors hover:neeto-ui-border-gray-400",
186
260
  role: "button",
187
261
  tabIndex: 0,
188
262
  onClick: () => fileInputRef.current?.click(),
@@ -192,13 +266,14 @@ const ManualUpiPayment = ({
192
266
  }
193
267
  },
194
268
  children: [/*#__PURE__*/jsx("i", {
195
- className: "ri-upload-2-line text-2xl text-gray-400"
269
+ className: "ri-upload-2-line text-2xl neeto-ui-text-gray-400"
196
270
  }), /*#__PURE__*/jsx(Typography, {
197
- className: "mt-1 text-gray-500",
271
+ className: "mt-1 text-blue-600 hover:underline",
198
272
  style: "body3",
273
+ weight: "medium",
199
274
  children: t("neetoPayments.upi.payment.screenshot.uploadText")
200
275
  }), /*#__PURE__*/jsx(Typography, {
201
- className: "text-gray-400",
276
+ className: "neeto-ui-text-gray-400",
202
277
  style: "nano",
203
278
  children: t("neetoPayments.upi.payment.screenshot.formatHint", {
204
279
  maxSize: MAX_SCREENSHOT_SIZE_MB
@@ -1 +1 @@
1
- {"version":3,"file":"ManualUpiPayment.js","sources":["../app/javascript/src/components/ManualUpiPayment/constants.js","../app/javascript/src/components/ManualUpiPayment/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { isPresent, isNotPresent } from \"neetocist\";\nimport * as yup from \"yup\";\n\nexport const ACCEPTED_SCREENSHOT_FORMATS = \"image/png,image/jpeg,image/jpg\";\n\nexport const MAX_SCREENSHOT_SIZE_MB = 5;\n\nexport const DIRECT_UPLOAD_URL = \"/rails/active_storage/direct_uploads\";\n\nexport const INITIAL_VALUES = { identifier: \"\" };\n\nexport const buildValidationSchema = screenshotFile =>\n yup.object({\n identifier: yup\n .number()\n .typeError(\n t(\"neetoPayments.validations.invalidField\", {\n entity: t(\"neetoPayments.common.transactionId\"),\n })\n )\n .nullable()\n .transform((value, originalValue) =>\n originalValue === \"\" ? null : value\n )\n .test(\n \"identifier-or-screenshot\",\n t(\"neetoPayments.upi.payment.transaction.identifierOrScreenshot\"),\n value => isPresent(value) || isPresent(screenshotFile)\n )\n .test(\n \"is-integer\",\n t(\"neetoPayments.validations.invalidField\", {\n entity: t(\"neetoPayments.common.transactionId\"),\n }),\n value => isNotPresent(value) || Number.isInteger(value)\n )\n .test(\n \"len\",\n t(\"neetoPayments.validations.length\", { length: 12 }),\n value => isNotPresent(value) || value?.toString().length === 12\n ),\n });\n","import { useRef, useState, useMemo, useEffect } from \"react\";\n\nimport { DirectUpload } from \"@rails/activestorage\";\nimport { noop, isPresent } from \"neetocist\";\nimport { Close } from \"neetoicons\";\nimport { Button, Toastr, Typography } from \"neetoui\";\nimport { ActionBlock, Form, Input } from \"neetoui/formik\";\nimport QRCodeImage from \"qrcode.react\";\nimport { pluck } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateUpiPayment } from \"hooks/reactQuery/manualUpi/usePaymentApi\";\nimport { getQrCodeValue } from \"utils\";\n\nimport {\n buildValidationSchema,\n ACCEPTED_SCREENSHOT_FORMATS,\n MAX_SCREENSHOT_SIZE_MB,\n DIRECT_UPLOAD_URL,\n INITIAL_VALUES,\n} from \"./constants\";\n\nconst ManualUpiPayment = ({\n fee,\n payableId,\n tip,\n amount,\n discountCode,\n customAmount,\n handleCancel,\n payableType = null,\n onBeforePayment = noop,\n onFailedPayment = noop,\n onSuccessfulPayment = noop,\n}) => {\n const { t } = useTranslation();\n const fileInputRef = useRef(null);\n const [screenshotFile, setScreenshotFile] = useState(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const screenshotPreview = useMemo(\n () => (screenshotFile ? URL.createObjectURL(screenshotFile) : null),\n [screenshotFile]\n );\n\n useEffect(\n () => () => {\n if (screenshotPreview) URL.revokeObjectURL(screenshotPreview);\n },\n [screenshotPreview]\n );\n\n const vpaIds = pluck(\"address\", fee?.vpas);\n const amountToUpi = customAmount || amount;\n\n const { isPending, mutate: createPayment } = useCreateUpiPayment({\n onSuccess: onSuccessfulPayment,\n onError: onFailedPayment,\n });\n\n const validationSchema = useMemo(\n () => buildValidationSchema(screenshotFile),\n [screenshotFile]\n );\n\n const handleScreenshotSelect = event => {\n const file = event.target.files[0];\n if (!file) return;\n\n if (file.size > MAX_SCREENSHOT_SIZE_MB * 1024 * 1024) {\n Toastr.error(\n t(\"neetoPayments.upi.payment.screenshot.tooLarge\", {\n maxSize: MAX_SCREENSHOT_SIZE_MB,\n })\n );\n\n return;\n }\n\n setScreenshotFile(file);\n };\n\n const handleRemoveScreenshot = () => {\n setScreenshotFile(null);\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const uploadScreenshot = file =>\n new Promise((resolve, reject) => {\n const upload = new DirectUpload(file, DIRECT_UPLOAD_URL);\n upload.create((error, blob) => {\n if (error) reject(error);\n else resolve(blob.signed_id);\n });\n });\n\n const handleSubmit = async values => {\n onBeforePayment();\n\n let paymentScreenshot = null;\n if (screenshotFile) {\n try {\n setIsUploading(true);\n paymentScreenshot = await uploadScreenshot(screenshotFile);\n } catch {\n onFailedPayment();\n\n return;\n } finally {\n setIsUploading(false);\n }\n }\n\n createPayment({\n ...values,\n payableId,\n customAmount,\n payableType,\n discountCode,\n tipAttributes: tip,\n paymentScreenshot,\n });\n };\n\n return (\n <Form\n className=\"space-y-4\"\n formikProps={{\n onSubmit: handleSubmit,\n initialValues: INITIAL_VALUES,\n validationSchema,\n }}\n >\n {({ dirty }) => (\n <>\n <Typography style=\"body1\">\n {t(\"neetoPayments.upi.payment.vpaText\", { count: vpaIds.length })}\n </Typography>\n {isPresent(vpaIds) && (\n <div className=\"grid grid-cols-1 gap-8 gap-y-4 sm:grid-cols-2\">\n {vpaIds.map(vpaId => (\n <div\n className=\"flex flex-col items-center justify-center\"\n key={vpaId}\n >\n <QRCodeImage\n size={256}\n style={{ width: 80, height: 80 }}\n value={getQrCodeValue(vpaId, amountToUpi)}\n />\n <Typography\n className=\"w-full mt-2 text-center wrap-break-word\"\n style=\"body2\"\n >\n {vpaId}\n </Typography>\n </div>\n ))}\n </div>\n )}\n <Input\n label={t(\"neetoPayments.upi.payment.transaction.label\")}\n name=\"identifier\"\n placeholder={t(\"neetoPayments.upi.payment.transaction.placeholder\")}\n type=\"number\"\n />\n <div className=\"flex items-center gap-3\">\n <hr className=\"flex-1 border-gray-300\" />\n <Typography className=\"text-gray-500 uppercase\" style=\"body2\">\n {t(\"neetoPayments.common.or\")}\n </Typography>\n <hr className=\"flex-1 border-gray-300\" />\n </div>\n <div>\n <Typography className=\"mb-2\" style=\"body2\" weight=\"medium\">\n {t(\"neetoPayments.upi.payment.screenshot.label\")}\n </Typography>\n {screenshotPreview ? (\n <div className=\"relative inline-block\">\n <img\n alt={t(\"neetoPayments.upi.payment.screenshot.alt\")}\n className=\"max-h-40 rounded border border-gray-200\"\n src={screenshotPreview}\n />\n <Button\n className=\"absolute -right-2 -top-2 neeto-ui-rounded-full neeto-ui-bg-white neeto-ui-shadow-sm\"\n icon={Close}\n size=\"small\"\n style=\"text\"\n onClick={handleRemoveScreenshot}\n />\n </div>\n ) : (\n <div\n className=\"flex cursor-pointer flex-col items-center justify-center rounded border-2 border-dashed border-gray-300 p-6 transition-colors hover:border-gray-400\"\n role=\"button\"\n tabIndex={0}\n onClick={() => fileInputRef.current?.click()}\n onKeyDown={e => {\n if (e.key === \"Enter\" || e.key === \" \") {\n fileInputRef.current?.click();\n }\n }}\n >\n <i className=\"ri-upload-2-line text-2xl text-gray-400\" />\n <Typography className=\"mt-1 text-gray-500\" style=\"body3\">\n {t(\"neetoPayments.upi.payment.screenshot.uploadText\")}\n </Typography>\n <Typography className=\"text-gray-400\" style=\"nano\">\n {t(\"neetoPayments.upi.payment.screenshot.formatHint\", {\n maxSize: MAX_SCREENSHOT_SIZE_MB,\n })}\n </Typography>\n </div>\n )}\n <input\n accept={ACCEPTED_SCREENSHOT_FORMATS}\n className=\"hidden\"\n data-testid=\"manual-upi-screenshot-upload-input-field\"\n ref={fileInputRef}\n type=\"file\"\n onChange={handleScreenshotSelect}\n />\n </div>\n <ActionBlock\n cancelButtonProps={{\n label: t(\"neetoPayments.upi.payment.buttons.back\"),\n onClick: handleCancel,\n disabled: isPending,\n }}\n submitButtonProps={{\n label: t(\"neetoPayments.upi.payment.buttons.submit\"),\n disabled: (!dirty && !screenshotFile) || isPending || isUploading,\n loading: isPending || isUploading,\n }}\n />\n </>\n )}\n </Form>\n );\n};\n\nexport default ManualUpiPayment;\n"],"names":["ACCEPTED_SCREENSHOT_FORMATS","MAX_SCREENSHOT_SIZE_MB","DIRECT_UPLOAD_URL","INITIAL_VALUES","identifier","buildValidationSchema","screenshotFile","yup","object","number","typeError","t","entity","nullable","transform","value","originalValue","test","isPresent","isNotPresent","Number","isInteger","length","toString","ManualUpiPayment","fee","payableId","tip","amount","discountCode","customAmount","handleCancel","payableType","onBeforePayment","noop","onFailedPayment","onSuccessfulPayment","useTranslation","fileInputRef","useRef","setScreenshotFile","useState","isUploading","setIsUploading","screenshotPreview","useMemo","URL","createObjectURL","useEffect","revokeObjectURL","vpaIds","pluck","vpas","amountToUpi","isPending","mutate","createPayment","useCreateUpiPayment","onSuccess","onError","validationSchema","handleScreenshotSelect","event","file","target","files","size","Toastr","error","maxSize","handleRemoveScreenshot","current","uploadScreenshot","Promise","resolve","reject","upload","DirectUpload","create","blob","signed_id","handleSubmit","values","paymentScreenshot","tipAttributes","_jsx","Form","className","formikProps","onSubmit","initialValues","children","dirty","_jsxs","_Fragment","Typography","style","count","map","vpaId","QRCodeImage","width","height","getQrCodeValue","Input","label","name","placeholder","type","weight","alt","src","Button","icon","Close","onClick","role","tabIndex","click","onKeyDown","e","key","accept","ref","onChange","ActionBlock","cancelButtonProps","disabled","submitButtonProps","loading"],"mappings":"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"}
1
+ {"version":3,"file":"ManualUpiPayment.js","sources":["../app/javascript/src/components/ManualUpiPayment/constants.js","../app/javascript/src/components/ManualUpiPayment/UpiTransactionIdInput.jsx","../app/javascript/src/components/ManualUpiPayment/index.jsx"],"sourcesContent":["import { t } from \"i18next\";\nimport { isPresent, isNotPresent } from \"neetocist\";\nimport * as yup from \"yup\";\n\nexport const ACCEPTED_SCREENSHOT_FORMATS = \"image/png,image/jpeg,image/jpg\";\n\nexport const MAX_SCREENSHOT_SIZE_MB = 5;\n\nexport const DIRECT_UPLOAD_URL = \"/rails/active_storage/direct_uploads\";\n\nexport const INITIAL_VALUES = { identifier: \"\" };\n\nexport const UPI_TRANSACTION_ID_LENGTH = 12;\n\nexport const buildValidationSchema = screenshotFile =>\n yup.object({\n identifier: yup\n .number()\n .typeError(\n t(\"neetoPayments.validations.invalidField\", {\n entity: t(\"neetoPayments.common.transactionId\"),\n })\n )\n .nullable()\n .transform((value, originalValue) =>\n originalValue === \"\" ? null : value\n )\n .test(\n \"identifier-or-screenshot\",\n t(\"neetoPayments.upi.payment.transaction.identifierOrScreenshot\"),\n value => isPresent(value) || isPresent(screenshotFile)\n )\n .test(\n \"is-integer\",\n t(\"neetoPayments.validations.invalidField\", {\n entity: t(\"neetoPayments.common.transactionId\"),\n }),\n value => isNotPresent(value) || Number.isInteger(value)\n )\n .test(\n \"len\",\n t(\"neetoPayments.validations.length\", { length: 12 }),\n value => isNotPresent(value) || value?.toString().length === 12\n ),\n });\n","import { useRef, useState } from \"react\";\n\nimport { useField } from \"formik\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Typography } from \"neetoui\";\n\nimport { UPI_TRANSACTION_ID_LENGTH as LENGTH } from \"./constants\";\n\nconst toSlots = value =>\n Array.from({ length: LENGTH }, (_, index) => value[index] ?? \"\");\n\nconst UpiTransactionIdInput = ({ name = \"identifier\" }) => {\n const { t } = useTranslation();\n const [, meta, helpers] = useField(name);\n const inputsRef = useRef([]);\n const [slots, setSlots] = useState(() =>\n toSlots((meta.initialValue ?? \"\").toString())\n );\n\n const sync = nextSlots => {\n setSlots(nextSlots);\n helpers.setValue(nextSlots.join(\"\"));\n };\n\n const setDigit = (index, digit) =>\n sync(slots.map((slot, i) => (i === index ? digit : slot)));\n\n const focusBox = index => inputsRef.current[index]?.focus();\n\n const handleChange = (index, event) => {\n const sanitized = event.target.value.replace(/\\D/g, \"\");\n setDigit(index, sanitized ? sanitized[sanitized.length - 1] : \"\");\n if (sanitized && index < LENGTH - 1) focusBox(index + 1);\n };\n\n const handleKeyDown = (index, event) => {\n if (event.key === \"Backspace\" && !slots[index] && index > 0) {\n event.preventDefault();\n setDigit(index - 1, \"\");\n focusBox(index - 1);\n } else if (event.key === \"ArrowLeft\" && index > 0) {\n focusBox(index - 1);\n } else if (event.key === \"ArrowRight\" && index < LENGTH - 1) {\n focusBox(index + 1);\n }\n };\n\n const handlePaste = event => {\n event.preventDefault();\n const pasted = event.clipboardData\n .getData(\"text\")\n .replace(/\\D/g, \"\")\n .slice(0, LENGTH);\n if (!pasted) return;\n\n sync(toSlots(pasted));\n focusBox(Math.min(pasted.length, LENGTH - 1));\n };\n\n const showError = meta.touched && meta.error;\n\n return (\n <div>\n <Typography className=\"mb-2\" style=\"body2\" weight=\"medium\">\n {t(\"neetoPayments.upi.payment.transaction.label\")}\n </Typography>\n <div className=\"flex flex-wrap gap-2\" onPaste={handlePaste}>\n {slots.map((slot, index) => (\n <input\n autoComplete=\"off\"\n className=\"h-10 w-8 neeto-ui-rounded border neeto-ui-border-gray-300 text-center text-base focus:neeto-ui-border-gray-500 focus:outline-none\"\n data-testid={`upi-transaction-id-box-${index}`}\n inputMode=\"numeric\"\n key={index}\n maxLength={1}\n ref={element => (inputsRef.current[index] = element)}\n type=\"text\"\n value={slot}\n onBlur={() => helpers.setTouched(true)}\n onChange={event => handleChange(index, event)}\n onFocus={event => event.target.select()}\n onKeyDown={event => handleKeyDown(index, event)}\n />\n ))}\n </div>\n {showError && (\n <Typography className=\"neeto-ui-text-error-500 mt-1\" style=\"body3\">\n {meta.error}\n </Typography>\n )}\n </div>\n );\n};\n\nexport default UpiTransactionIdInput;\n","import { useRef, useState, useMemo, useEffect } from \"react\";\n\nimport { DirectUpload } from \"@rails/activestorage\";\nimport { noop, isPresent } from \"neetocist\";\nimport { Close } from \"neetoicons\";\nimport QRCodeImage from \"qrcode.react\";\nimport { pluck } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateUpiPayment } from \"hooks/reactQuery/manualUpi/usePaymentApi\";\nimport { Button, Toastr, Typography } from \"neetoui\";\nimport { ActionBlock, Form } from \"neetoui/formik\";\nimport { getQrCodeValue } from \"utils\";\n\nimport {\n buildValidationSchema,\n ACCEPTED_SCREENSHOT_FORMATS,\n MAX_SCREENSHOT_SIZE_MB,\n DIRECT_UPLOAD_URL,\n INITIAL_VALUES,\n} from \"./constants\";\nimport UpiTransactionIdInput from \"./UpiTransactionIdInput\";\n\nconst ManualUpiPayment = ({\n fee,\n payableId,\n tip,\n amount,\n discountCode,\n customAmount,\n handleCancel,\n payableType = null,\n onBeforePayment = noop,\n onFailedPayment = noop,\n onSuccessfulPayment = noop,\n}) => {\n const { t } = useTranslation();\n const fileInputRef = useRef(null);\n const [screenshotFile, setScreenshotFile] = useState(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const screenshotPreview = useMemo(\n () => (screenshotFile ? URL.createObjectURL(screenshotFile) : null),\n [screenshotFile]\n );\n\n useEffect(\n () => () => {\n if (screenshotPreview) URL.revokeObjectURL(screenshotPreview);\n },\n [screenshotPreview]\n );\n\n const vpaIds = pluck(\"address\", fee?.vpas);\n const amountToUpi = customAmount || amount;\n\n const { isPending, mutate: createPayment } = useCreateUpiPayment({\n onSuccess: onSuccessfulPayment,\n onError: onFailedPayment,\n });\n\n const validationSchema = useMemo(\n () => buildValidationSchema(screenshotFile),\n [screenshotFile]\n );\n\n const handleScreenshotSelect = event => {\n const file = event.target.files[0];\n if (!file) return;\n\n if (file.size > MAX_SCREENSHOT_SIZE_MB * 1024 * 1024) {\n Toastr.error(\n t(\"neetoPayments.upi.payment.screenshot.tooLarge\", {\n maxSize: MAX_SCREENSHOT_SIZE_MB,\n })\n );\n\n return;\n }\n\n setScreenshotFile(file);\n };\n\n const handleRemoveScreenshot = () => {\n setScreenshotFile(null);\n if (fileInputRef.current) fileInputRef.current.value = \"\";\n };\n\n const uploadScreenshot = file =>\n new Promise((resolve, reject) => {\n const upload = new DirectUpload(file, DIRECT_UPLOAD_URL);\n upload.create((error, blob) => {\n if (error) reject(error);\n else resolve(blob.signed_id);\n });\n });\n\n const handleSubmit = async values => {\n onBeforePayment();\n\n let paymentScreenshot = null;\n if (screenshotFile) {\n try {\n setIsUploading(true);\n paymentScreenshot = await uploadScreenshot(screenshotFile);\n } catch {\n onFailedPayment();\n\n return;\n } finally {\n setIsUploading(false);\n }\n }\n\n createPayment({\n ...values,\n payableId,\n customAmount,\n payableType,\n discountCode,\n tipAttributes: tip,\n paymentScreenshot,\n });\n };\n\n return (\n <Form\n className=\"space-y-4\"\n formikProps={{\n onSubmit: handleSubmit,\n initialValues: INITIAL_VALUES,\n validationSchema,\n }}\n >\n {({ dirty }) => (\n <>\n <Typography className=\"neeto-ui-text-gray-600\" style=\"body2\">\n {t(\"neetoPayments.upi.payment.vpaText\", { count: vpaIds.length })}\n </Typography>\n {isPresent(vpaIds) && (\n <div className=\"flex flex-wrap gap-8\">\n {vpaIds.map(vpaId => (\n <div\n className=\"flex flex-col items-center justify-center\"\n key={vpaId}\n >\n <QRCodeImage\n size={256}\n style={{ width: 120, height: 120 }}\n value={getQrCodeValue(vpaId, amountToUpi)}\n />\n <Typography\n className=\"w-full mt-2 text-center wrap-break-word\"\n style=\"body2\"\n weight=\"medium\"\n >\n {vpaId}\n </Typography>\n </div>\n ))}\n </div>\n )}\n <UpiTransactionIdInput name=\"identifier\" />\n <div className=\"flex items-center gap-3\">\n <hr className=\"flex-1 neeto-ui-border-gray-300\" />\n <Typography\n className=\"neeto-ui-text-gray-500 uppercase\"\n style=\"body2\"\n >\n {t(\"neetoPayments.common.or\")}\n </Typography>\n <hr className=\"flex-1 neeto-ui-border-gray-300\" />\n </div>\n <div>\n <Typography className=\"mb-2\" style=\"body2\" weight=\"medium\">\n {t(\"neetoPayments.upi.payment.screenshot.label\")}\n </Typography>\n {screenshotPreview ? (\n <div className=\"relative inline-block\">\n <img\n alt={t(\"neetoPayments.upi.payment.screenshot.alt\")}\n className=\"max-h-40 neeto-ui-rounded border neeto-ui-border-gray-200\"\n src={screenshotPreview}\n />\n <Button\n className=\"absolute -right-2 -top-2 neeto-ui-rounded-full neeto-ui-bg-white neeto-ui-shadow-sm\"\n icon={Close}\n size=\"small\"\n style=\"text\"\n onClick={handleRemoveScreenshot}\n />\n </div>\n ) : (\n <div\n className=\"flex cursor-pointer flex-col items-center justify-center neeto-ui-rounded border-2 border-dashed neeto-ui-border-gray-300 p-6 transition-colors hover:neeto-ui-border-gray-400\"\n role=\"button\"\n tabIndex={0}\n onClick={() => fileInputRef.current?.click()}\n onKeyDown={e => {\n if (e.key === \"Enter\" || e.key === \" \") {\n fileInputRef.current?.click();\n }\n }}\n >\n <i className=\"ri-upload-2-line text-2xl neeto-ui-text-gray-400\" />\n <Typography\n className=\"mt-1 text-blue-600 hover:underline\"\n style=\"body3\"\n weight=\"medium\"\n >\n {t(\"neetoPayments.upi.payment.screenshot.uploadText\")}\n </Typography>\n <Typography className=\"neeto-ui-text-gray-400\" style=\"nano\">\n {t(\"neetoPayments.upi.payment.screenshot.formatHint\", {\n maxSize: MAX_SCREENSHOT_SIZE_MB,\n })}\n </Typography>\n </div>\n )}\n <input\n accept={ACCEPTED_SCREENSHOT_FORMATS}\n className=\"hidden\"\n data-testid=\"manual-upi-screenshot-upload-input-field\"\n ref={fileInputRef}\n type=\"file\"\n onChange={handleScreenshotSelect}\n />\n </div>\n <ActionBlock\n cancelButtonProps={{\n label: t(\"neetoPayments.upi.payment.buttons.back\"),\n onClick: handleCancel,\n disabled: isPending,\n }}\n submitButtonProps={{\n label: t(\"neetoPayments.upi.payment.buttons.submit\"),\n disabled: (!dirty && !screenshotFile) || isPending || isUploading,\n loading: isPending || isUploading,\n }}\n />\n </>\n )}\n </Form>\n );\n};\n\nexport default ManualUpiPayment;\n"],"names":["ACCEPTED_SCREENSHOT_FORMATS","MAX_SCREENSHOT_SIZE_MB","DIRECT_UPLOAD_URL","INITIAL_VALUES","identifier","UPI_TRANSACTION_ID_LENGTH","buildValidationSchema","screenshotFile","yup","object","number","typeError","t","entity","nullable","transform","value","originalValue","test","isPresent","isNotPresent","Number","isInteger","length","toString","toSlots","Array","from","LENGTH","_","index","UpiTransactionIdInput","name","useTranslation","meta","helpers","useField","inputsRef","useRef","slots","setSlots","useState","initialValue","sync","nextSlots","setValue","join","setDigit","digit","map","slot","i","focusBox","current","focus","handleChange","event","sanitized","target","replace","handleKeyDown","key","preventDefault","handlePaste","pasted","clipboardData","getData","slice","Math","min","showError","touched","error","_jsxs","children","_jsx","Typography","className","style","weight","onPaste","autoComplete","inputMode","maxLength","ref","element","type","onBlur","setTouched","onChange","onFocus","select","onKeyDown","ManualUpiPayment","fee","payableId","tip","amount","discountCode","customAmount","handleCancel","payableType","onBeforePayment","noop","onFailedPayment","onSuccessfulPayment","fileInputRef","setScreenshotFile","isUploading","setIsUploading","screenshotPreview","useMemo","URL","createObjectURL","useEffect","revokeObjectURL","vpaIds","pluck","vpas","amountToUpi","isPending","mutate","createPayment","useCreateUpiPayment","onSuccess","onError","validationSchema","handleScreenshotSelect","file","files","size","Toastr","maxSize","handleRemoveScreenshot","uploadScreenshot","Promise","resolve","reject","upload","DirectUpload","create","blob","signed_id","handleSubmit","values","paymentScreenshot","tipAttributes","Form","formikProps","onSubmit","initialValues","dirty","_Fragment","count","vpaId","QRCodeImage","width","height","getQrCodeValue","alt","src","Button","icon","Close","onClick","role","tabIndex","click","e","accept","ActionBlock","cancelButtonProps","label","disabled","submitButtonProps","loading"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { useState } from 'react';
2
2
  import { noop, findBy } from 'neetocist';
3
3
  import { mergeLeft } from 'ramda';
4
4
  import { useTranslation } from 'react-i18next';
5
- import { a as useUpdateUpiPayment } from './usePaymentApi-C8fRdHmK.js';
5
+ import { u as useUpdateUpiPayment } from './usePaymentApi-CjtkL3IU.js';
6
6
  import { Button, Modal, Typography } from '@bigbinary/neetoui';
7
7
  import { Form, Select, Textarea, ActionBlock } from '@bigbinary/neetoui/formik';
8
8
  import { t } from 'i18next';
@@ -1,7 +1,7 @@
1
1
  import { useState } from 'react';
2
2
  import { noop } from 'neetocist';
3
3
  import { useTranslation } from 'react-i18next';
4
- import { a as useUpdateUpiPayment } from './usePaymentApi-C8fRdHmK.js';
4
+ import { u as useUpdateUpiPayment } from './usePaymentApi-CjtkL3IU.js';
5
5
  import { Button, Modal, Typography } from '@bigbinary/neetoui';
6
6
  import { Form, Textarea, ActionBlock } from '@bigbinary/neetoui/formik';
7
7
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';