@eventlook/sdk 1.7.0 → 1.7.2-beta.0

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 (78) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.prettierignore +3 -0
  3. package/CLAUDE.md +33 -0
  4. package/dist/cjs/{index-0a8uUeDg.js → index-DmK9RPSa.js} +26553 -25757
  5. package/dist/cjs/index-DmK9RPSa.js.map +1 -0
  6. package/dist/cjs/index.js +3 -1
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/{index.umd-BvTBfvwB.js → index.umd-DUMMTVwU.js} +2 -2
  9. package/dist/cjs/{index.umd-BvTBfvwB.js.map → index.umd-DUMMTVwU.js.map} +1 -1
  10. package/dist/cjs/{mui-tel-input.es-Bjml407E.js → mui-tel-input.es-Dk9M_v4X.js} +6 -6
  11. package/dist/{esm/mui-tel-input.es-Bt2rE3An.js.map → cjs/mui-tel-input.es-Dk9M_v4X.js.map} +1 -1
  12. package/dist/esm/{index-ByLnhSXB.js → index-C0HcmMMr.js} +27111 -26333
  13. package/dist/esm/index-C0HcmMMr.js.map +1 -0
  14. package/dist/esm/index.js +3 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/{index.umd-DepuOxm3.js → index.umd-BqJOlKvJ.js} +4 -4
  17. package/dist/esm/{index.umd-DepuOxm3.js.map → index.umd-BqJOlKvJ.js.map} +1 -1
  18. package/dist/esm/{mui-tel-input.es-Bt2rE3An.js → mui-tel-input.es-Cb4Lpqx7.js} +21 -21
  19. package/dist/{cjs/mui-tel-input.es-Bjml407E.js.map → esm/mui-tel-input.es-Cb4Lpqx7.js.map} +1 -1
  20. package/dist/types/form/paydroid/PaydroidCashlessSection.d.ts +7 -0
  21. package/dist/types/form/paydroid/PaydroidError.d.ts +3 -0
  22. package/dist/types/form/paydroid/PaydroidErrorAccount.d.ts +3 -0
  23. package/dist/types/form/paydroid/PaydroidErrorTicket.d.ts +3 -0
  24. package/dist/types/form/paydroid/PaydroidPage.d.ts +6 -0
  25. package/dist/types/form/paydroid/PaydroidStatusCard.d.ts +10 -0
  26. package/dist/types/form/paydroid/PaydroidSuccess.d.ts +3 -0
  27. package/dist/types/form/paydroid/PaydroidSuccessTopup.d.ts +3 -0
  28. package/dist/types/form/tickets/PrimaryTicketDialog.d.ts +10 -0
  29. package/dist/types/locales/cs.d.ts +38 -0
  30. package/dist/types/locales/en.d.ts +40 -1
  31. package/dist/types/locales/es.d.ts +40 -1
  32. package/dist/types/locales/pl.d.ts +40 -1
  33. package/dist/types/locales/sk.d.ts +40 -1
  34. package/dist/types/locales/uk.d.ts +40 -1
  35. package/dist/types/modules/paydroid.d.ts +4 -0
  36. package/dist/types/modules/ticket.d.ts +1 -0
  37. package/dist/types/utils/data/page.d.ts +7 -0
  38. package/dist/types/utils/page.d.ts +1 -0
  39. package/dist/types/utils/paydroid.d.ts +6 -0
  40. package/dist/types/utils/types/global.type.d.ts +1 -0
  41. package/dist/types/utils/types/order.type.d.ts +2 -0
  42. package/dist/types/utils/types/paydroid.d.ts +23 -0
  43. package/dist/types/utils/types/release-category.type.d.ts +1 -0
  44. package/dist/types/utils/types/release.type.d.ts +2 -0
  45. package/dist/types/utils/types/ticket.type.d.ts +1 -0
  46. package/package.json +3 -1
  47. package/src/form/PaymentSuccess.tsx +6 -2
  48. package/src/form/TicketForm.tsx +28 -1
  49. package/src/form/paydroid/PaydroidCashlessSection.tsx +311 -0
  50. package/src/form/paydroid/PaydroidError.tsx +26 -0
  51. package/src/form/paydroid/PaydroidErrorAccount.tsx +26 -0
  52. package/src/form/paydroid/PaydroidErrorTicket.tsx +26 -0
  53. package/src/form/paydroid/PaydroidPage.tsx +22 -0
  54. package/src/form/paydroid/PaydroidStatusCard.tsx +91 -0
  55. package/src/form/paydroid/PaydroidSuccess.tsx +26 -0
  56. package/src/form/paydroid/PaydroidSuccessTopup.tsx +26 -0
  57. package/src/form/tickets/PrimaryTicketDialog.tsx +144 -0
  58. package/src/form/tickets/ReleaseWithMerchandise.tsx +89 -8
  59. package/src/form/tickets/TicketSelectionMobile.tsx +80 -12
  60. package/src/locales/cs.tsx +45 -0
  61. package/src/locales/en.tsx +47 -1
  62. package/src/locales/es.tsx +48 -1
  63. package/src/locales/pl.tsx +47 -1
  64. package/src/locales/sk.tsx +49 -1
  65. package/src/locales/uk.tsx +47 -2
  66. package/src/modules/paydroid.ts +33 -0
  67. package/src/modules/ticket.ts +13 -0
  68. package/src/utils/data/page.ts +7 -0
  69. package/src/utils/page.ts +4 -0
  70. package/src/utils/paydroid.ts +35 -0
  71. package/src/utils/types/global.type.ts +1 -0
  72. package/src/utils/types/order.type.ts +2 -0
  73. package/src/utils/types/paydroid.ts +26 -0
  74. package/src/utils/types/release-category.type.ts +1 -0
  75. package/src/utils/types/release.type.ts +2 -0
  76. package/src/utils/types/ticket.type.ts +1 -0
  77. package/dist/cjs/index-0a8uUeDg.js.map +0 -1
  78. package/dist/esm/index-ByLnhSXB.js.map +0 -1
@@ -59,6 +59,12 @@ const es = {
59
59
  payment_overview_close: 'Cerrar resumen de pago',
60
60
  ticket_quantity_decrease: 'Disminuir cantidad de entradas',
61
61
  ticket_quantity_increase: 'Aumentar cantidad de entradas',
62
+ primary_ticket_number: 'Número de la entrada principal #{{number}}',
63
+ primary_ticket_number_hint:
64
+ 'Esta es una categoría complementaria — introduzca el número de una entrada ya comprada.',
65
+ primary_ticket_dialog_title: 'Introduzca el número de la entrada principal',
66
+ primary_ticket_dialog_input_label: 'Número de la entrada principal',
67
+ amount: 'Cantidad',
62
68
  },
63
69
  validation: {
64
70
  required: 'Este campo es obligatorio.',
@@ -71,6 +77,11 @@ const es = {
71
77
  promo_code_cant_combine: 'Este código promocional no se puede combinar con otros códigos.',
72
78
  min_purchase_not_met: 'No se alcanzó el monto mínimo de compra: ',
73
79
  count_tickets_or_products: 'Debes seleccionar al menos 1 entrada o producto.',
80
+ insurance_terms_and_conditions:
81
+ 'Debes aceptar las condiciones del seguro y el documento de información sobre este producto de seguros (IPID).',
82
+ primary_ticket_required: 'Introduzca el número de la entrada principal.',
83
+ primary_ticket_numeric: 'El número de entrada solo puede contener dígitos.',
84
+ primary_ticket_duplicate: 'Ya ha introducido este número en este pedido.',
74
85
  },
75
86
  },
76
87
  event: {
@@ -120,9 +131,10 @@ const es = {
120
131
  'Estoy de acuerdo con los <0>Términos y Condiciones</0> de {{termsAndConditionsCompanies}} y la <1>Política de Privacidad</1>.',
121
132
  insurance: {
122
133
  label: 'Seguro de entrada',
134
+ checkbox:
135
+ 'Confirmo que he leído las <0>condiciones del seguro</0> y el <1>documento de información sobre este producto de seguros (IPID)</1>',
123
136
  per_ticket: 'pc',
124
137
  modal: {
125
- title: 'Seguro de entrada',
126
138
  description: [
127
139
  'El seguro de gastos de cancelación te ofrece protección en caso de eventos inesperados que te impidan asistir al evento. Gracias al seguro, puedes evitar pérdidas económicas. Recibirás un reembolso por la entrada si no puedes asistir al evento, especialmente por:',
128
140
  '- Tu lesión o enfermedad',
@@ -174,6 +186,41 @@ const es = {
174
186
  button: 'Descargar entrada',
175
187
  products: 'Tus productos',
176
188
  },
189
+ paydroid: {
190
+ label: 'Paydroid Cashless',
191
+ heading: '¡Evita las colas!',
192
+ heading_cta: 'Recarga ahora',
193
+ subtitle:
194
+ 'El evento solo acepta pagos sin efectivo a través de Paydroid Cashless. ¡Recarga tu saldo ahora y evita las colas!',
195
+ amount_label: '¿Cuánto deseas recargar?',
196
+ amount_placeholder: 'Ingresa el monto',
197
+ promo: '¡Recarga más de 1000 CZK y obtén una cerveza gratis!',
198
+ terms_prefix: 'Acepto los',
199
+ terms_conditions: 'Términos y condiciones',
200
+ terms_middle: 'de Paydroid Cashless y la',
201
+ terms_privacy: 'Política de privacidad',
202
+ terms: 'Acepto los T&C y GDPR de Paydroid Cashless',
203
+ skip: 'solo quiero la entrada en la app',
204
+ submit: 'recargar',
205
+ success_title: 'Añadimos la entrada a tu cuenta',
206
+ success_subtitle:
207
+ 'Solo inicia sesión en la app Paydroid Cashless. ¡Y si quieres saltarte las colas, recarga en la app!',
208
+ topup_success_title: '¡Gracias por recargar!',
209
+ topup_success_subtitle:
210
+ 'Hemos acreditado tu cuenta Paydroid Cashless. Solo inicia sesión en la app.',
211
+ error_title: 'La recarga falló',
212
+ error_subtitle: 'No se te ha cobrado nada. Contáctanos si tienes algún problema.',
213
+ error_account_title: 'No se pudo crear la cuenta',
214
+ error_account_subtitle:
215
+ 'Es posible que hayas introducido datos diferentes a los de nuestros registros.',
216
+ error_account_button: 'iniciar sesión en la app',
217
+ error_ticket_title: 'No se pudo añadir la entrada',
218
+ error_ticket_subtitle:
219
+ 'Lo sentimos, inténtalo más tarde. Contáctanos si el problema persiste.',
220
+ faq_button: 'preguntas frecuentes',
221
+ retry_button: 'intentar de nuevo',
222
+ missing_api_key: 'Falta la clave API de Paydroid',
223
+ },
177
224
  unpaid: 'El pago no se realizó.',
178
225
  unpaid_description: 'Por favor, inténtelo de nuevo haciendo clic en el botón Pagar.',
179
226
  },
@@ -59,6 +59,12 @@ const pl = {
59
59
  payment_overview_close: 'Zamknij podsumowanie płatności',
60
60
  ticket_quantity_decrease: 'Zmniejsz liczbę biletów',
61
61
  ticket_quantity_increase: 'Zwiększ liczbę biletów',
62
+ primary_ticket_number: 'Numer biletu głównego #{{number}}',
63
+ primary_ticket_number_hint:
64
+ 'To jest kategoria dodatkowa — wprowadź numer już zakupionego biletu.',
65
+ primary_ticket_dialog_title: 'Wprowadź numer biletu głównego',
66
+ primary_ticket_dialog_input_label: 'Numer biletu głównego',
67
+ amount: 'Kwota',
62
68
  },
63
69
  validation: {
64
70
  required: 'To pole jest wymagane.',
@@ -71,6 +77,11 @@ const pl = {
71
77
  promo_code_cant_combine: 'Ten kod promocyjny nie może być łączony z innymi kodami.',
72
78
  min_purchase_not_met: 'Minimalna kwota zakupu nie została osiągnięta: ',
73
79
  count_tickets_or_products: 'Musisz wybrać co najmniej 1 bilet lub produkt.',
80
+ insurance_terms_and_conditions:
81
+ 'Musisz zaakceptować warunki ubezpieczenia oraz dokument informacyjny o tym produkcie ubezpieczeniowym (IPID).',
82
+ primary_ticket_required: 'Wprowadź numer biletu głównego.',
83
+ primary_ticket_numeric: 'Numer biletu może zawierać tylko cyfry.',
84
+ primary_ticket_duplicate: 'Ten numer został już wpisany w tym zamówieniu.',
74
85
  },
75
86
  },
76
87
  event: {
@@ -120,9 +131,10 @@ const pl = {
120
131
  'Zgadzam się z <0>Regulaminem</0> {{termsAndConditionsCompanies}} i <1>Polityką prywatności</1>.',
121
132
  insurance: {
122
133
  label: 'Ubezpieczenie biletu',
134
+ checkbox:
135
+ 'Potwierdzam, że zapoznałem/am się z <0>warunkami ubezpieczenia</0> oraz <1>dokumentem informacyjnym o tym produkcie ubezpieczeniowym (IPID)</1>',
123
136
  per_ticket: 'pc',
124
137
  modal: {
125
- title: 'Ubezpieczenie biletów',
126
138
  description: [
127
139
  'Ubezpieczenie opłat za anulowanie zapewnia ochronę w przypadku nieoczekiwanych zdarzeń, które uniemożliwią Ci udział w wydarzeniu. Dzięki ubezpieczeniu możesz uniknąć strat finansowych. Otrzymasz zwrot pieniędzy za bilet, jeśli nie możesz wziąć udziału w wydarzeniu, szczególnie z powodu:',
128
140
  '- Twojego urazu lub choroby',
@@ -173,6 +185,40 @@ const pl = {
173
185
  button: 'Pobierz bilet',
174
186
  products: 'Twoje produkty',
175
187
  },
188
+ paydroid: {
189
+ label: 'Paydroid Cashless',
190
+ heading: 'Unikaj kolejek!',
191
+ heading_cta: 'Doładuj teraz',
192
+ subtitle:
193
+ 'Na imprezie płatności są wyłącznie bezgotówkowe za pomocą systemu Paydroid Cashless. Doładuj konto teraz i unikaj kolejek!',
194
+ amount_label: 'Jaką kwotę chcesz doładować?',
195
+ amount_placeholder: 'Wpisz kwotę',
196
+ promo: 'Doładuj kwotę wyższą niż 1000 CZK i otrzymaj piwo gratis!',
197
+ terms_prefix: 'Zgadzam się z',
198
+ terms_conditions: 'Regulaminem',
199
+ terms_middle: 'Paydroid Cashless oraz z',
200
+ terms_privacy: 'Zasadami przetwarzania danych osobowych',
201
+ terms: 'Zgoda na regulamin i RODO Paydroid Cashless',
202
+ skip: 'chcę tylko bilet w aplikacji',
203
+ submit: 'doładuj',
204
+ success_title: 'Dodaliśmy bilet do Twojego konta',
205
+ success_subtitle:
206
+ 'Zaloguj się do aplikacji Paydroid Cashless. Jeśli chcesz uniknąć kolejek, doładuj konto w aplikacji!',
207
+ topup_success_title: 'Dziękujemy za doładowanie!',
208
+ topup_success_subtitle:
209
+ 'Właśnie dodaliśmy środki na Twoje konto Paydroid Cashless. Zaloguj się do aplikacji.',
210
+ error_title: 'Doładowanie nie powiodło się',
211
+ error_subtitle: 'Nie zostałeś obciążony. Skontaktuj się z nami w razie problemów.',
212
+ error_account_title: 'Nie udało się utworzyć konta',
213
+ error_account_subtitle: 'Prawdopodobnie podałeś dane różniące się od naszych zapisów.',
214
+ error_account_button: 'zaloguj się do aplikacji',
215
+ error_ticket_title: 'Nie udało się dodać biletu',
216
+ error_ticket_subtitle:
217
+ 'Przepraszamy, spróbuj ponownie później. Skontaktuj się z nami jeśli problem się powtórzy.',
218
+ faq_button: 'najczęstsze pytania',
219
+ retry_button: 'spróbuj ponownie',
220
+ missing_api_key: 'Brak klucza API Paydroid',
221
+ },
176
222
  unpaid: 'Płatność nie powiodła się.',
177
223
  unpaid_description: 'Spróbuj ponownie, klikając przycisk Zapłać.',
178
224
  },
@@ -59,6 +59,12 @@ const sk = {
59
59
  payment_overview_close: 'Zavrieť prehľad platby',
60
60
  ticket_quantity_decrease: 'Znížiť počet vstupeniek',
61
61
  ticket_quantity_increase: 'Zvýšiť počet vstupeniek',
62
+ primary_ticket_number: 'Číslo primárnej vstupenky #{{number}}',
63
+ primary_ticket_number_hint:
64
+ 'Táto kategória je doplnková — zadajte číslo už zakúpenej vstupenky.',
65
+ primary_ticket_dialog_title: 'Zadajte číslo primárnej vstupenky',
66
+ primary_ticket_dialog_input_label: 'Číslo primárnej vstupenky',
67
+ amount: 'Čiastka',
62
68
  },
63
69
  validation: {
64
70
  required: 'Toto pole je povinné.',
@@ -71,6 +77,11 @@ const sk = {
71
77
  promo_code_cant_combine: 'Tento promo kód nemožno kombinovať s inými kódmi.',
72
78
  min_purchase_not_met: 'Minimálna suma nákupu nebola dosiahnutá: ',
73
79
  count_tickets_or_products: 'Musíte vybrať aspoň 1 vstupenku alebo produkt.',
80
+ insurance_terms_and_conditions:
81
+ 'Musíte súhlasiť s poistnými podmienkami poistenia a informačným dokumentom o tomto poistnom produkte (IPID).',
82
+ primary_ticket_required: 'Zadajte číslo primárnej vstupenky.',
83
+ primary_ticket_numeric: 'Číslo vstupenky môže obsahovať iba číslice.',
84
+ primary_ticket_duplicate: 'Toto číslo ste v tejto objednávke už použili.',
74
85
  },
75
86
  },
76
87
  event: {
@@ -120,9 +131,10 @@ const sk = {
120
131
  'Súhlasím s <0>Obchodnými podmienkami</0> {{termsAndConditionsCompanies}} a <1>Zásadami ochrany osobných údajov</1>.',
121
132
  insurance: {
122
133
  label: 'Poistenie vstupenky',
134
+ checkbox:
135
+ 'Potvrdzujem, že som sa oboznámil/a s <0>poistnými podmienkami poistenia</0> a <1>informačným dokumentom o tomto poistnom produkte (IPID)</1>',
123
136
  per_ticket: 'pc',
124
137
  modal: {
125
- title: 'Poistenie vstupenky',
126
138
  description: [
127
139
  'Poistenie stornopoplatkov Vám poskytuje ochranu v prípade nečakaných udalostí, ktoré Vám znemožnia účasť na akcii. Vďaka poisteniu môžete predísť peňažným stratám. Dostanete späť peniaze za vstupenku, ak sa nemôžete zúčastniť akcie, najmä z dôvodu:',
128
140
  '- Vášho úrazu alebo choroby',
@@ -174,6 +186,42 @@ const sk = {
174
186
  button: 'Stiahnuť vstupenku',
175
187
  products: 'Vaše produkty',
176
188
  },
189
+ paydroid: {
190
+ label: 'Paydroid Cashless',
191
+ heading: 'Vyhnite sa radom!',
192
+ heading_cta: 'Prednabite si',
193
+ subtitle:
194
+ 'Na akcii sa platí len bezhotovostne pomocou systému Paydroid Cashless. Prednabite si čiastku teraz a vyhnite sa radom!',
195
+ amount_label: 'Akú čiastku chcete prednabiť?',
196
+ amount_placeholder: 'Zadajte čiastku',
197
+ promo: 'Prednabite si na akciu čiastku vyššiu ako 1000 Kč a získajte pivo zadarmo!',
198
+ terms_prefix: 'Súhlasím s',
199
+ terms_conditions: 'Obchodnými podmienkami',
200
+ terms_middle: 'Paydroid Cashless a so',
201
+ terms_privacy: 'Zásadami spracovania osobných údajov',
202
+ terms: 'Súhlas VOP a GDPR Paydroid Cashless',
203
+ skip: 'chcem len vstupenku v aplikácii',
204
+ submit: 'prednabiť',
205
+ success_title: 'Vstupenku sme pridali k vášmu účtu',
206
+ success_subtitle:
207
+ 'Stačí sa prihlásiť do aplikácie Paydroid Cashless. A ak sa chcete vyhnúť radom, prednabite si v aplikácii!',
208
+ topup_success_title: 'Ďakujeme za prednabitie!',
209
+ topup_success_subtitle:
210
+ 'Práve sme pripísali kredit na Váš účet Paydroid Cashless, stačí sa prihlásiť v aplikácii.',
211
+ error_title: 'Prednabitie sa nepodarilo',
212
+ error_subtitle:
213
+ 'Neboli ste nijako spoplatnení, v prípade akýchkoľvek problémov nás prosím kontaktujte.',
214
+ error_account_title: 'Nepodarilo sa vytvoriť účet',
215
+ error_account_subtitle:
216
+ 'Pravdepodobne ste zadali údaje, ktoré sa líšia od záznamu v našej databáze.',
217
+ error_account_button: 'prihlásiť sa do aplikácie',
218
+ error_ticket_title: 'Pridanie vstupenky sa nepodarilo',
219
+ error_ticket_subtitle:
220
+ 'Ospravedlňujeme sa, skúste to neskôr. V prípade problémov nás prosím kontaktujte.',
221
+ faq_button: 'najčastejšie otázky',
222
+ retry_button: 'skúsiť znova',
223
+ missing_api_key: 'Paydroid API kľúč chýba',
224
+ },
177
225
  unpaid: 'Platba neprebehla.',
178
226
  unpaid_description: 'Skúste to prosím znova kliknutím na tlačidlo Zaplatiť.',
179
227
  },
@@ -59,6 +59,11 @@ const uk = {
59
59
  payment_overview_close: 'Закрити огляд платежу',
60
60
  ticket_quantity_decrease: 'Зменшити кількість квитків',
61
61
  ticket_quantity_increase: 'Збільшити кількість квитків',
62
+ primary_ticket_number: 'Номер основного квитка #{{number}}',
63
+ primary_ticket_number_hint: 'Це додаткова категорія — введіть номер уже придбаного квитка.',
64
+ primary_ticket_dialog_title: 'Введіть номер основного квитка',
65
+ primary_ticket_dialog_input_label: 'Номер основного квитка',
66
+ amount: 'Сума',
62
67
  },
63
68
  validation: {
64
69
  required: "Це поле обов'язкове.",
@@ -71,6 +76,11 @@ const uk = {
71
76
  promo_code_cant_combine: 'Цей промокод не можна комбінувати з іншими кодами.',
72
77
  min_purchase_not_met: 'Мінімальну суму покупки не досягнуто: ',
73
78
  count_tickets_or_products: 'Виберіть хоча б 1 квиток або продукт.',
79
+ insurance_terms_and_conditions:
80
+ 'Ви повинні погодитися зі страховими умовами та інформаційним документом про цей страховий продукт (IPID).',
81
+ primary_ticket_required: 'Введіть номер основного квитка.',
82
+ primary_ticket_numeric: 'Номер квитка може містити лише цифри.',
83
+ primary_ticket_duplicate: 'Ви вже ввели цей номер у цьому замовленні.',
74
84
  },
75
85
  },
76
86
  event: {
@@ -120,13 +130,14 @@ const uk = {
120
130
  'Я погоджуюся з <0>Правилами та умовами</0> {{termsAndConditionsCompanies}} та <1>Політикою конфіденційності</1>.',
121
131
  insurance: {
122
132
  label: 'Страхування квитка',
133
+ checkbox:
134
+ 'Я підтверджую, що ознайомився/лася зі <0>страховими умовами</0> та <1>інформаційним документом про цей страховий продукт (IPID)</1>',
123
135
  per_ticket: 'pc',
124
136
  modal: {
125
- title: 'Страхування квитка',
126
137
  description: [
127
138
  'Страхування від скасування забезпечує вам захист у разі несподіваних подій, які унеможливлюють вашу участь у заході. Завдяки страхуванню ви можете уникнути фінансових втрат. Ви отримаєте повернення коштів за квиток, якщо не зможете відвідати захід, зокрема через:',
128
139
  '- Вашу травму або хворобу',
129
- '- Травму або хворобу члена сім\'ї, за яким потрібно доглядати',
140
+ "- Травму або хворобу члена сім'ї, за яким потрібно доглядати",
130
141
  '- Призначений карантин',
131
142
  '- Зазначене у страхових умовах, коли друзі, з якими ви придбали квиток спільно, скасують участь, якщо вам довелося б відвідати захід на самоті.',
132
143
  'Огляд усіх подій, за яких виникає право на повернення вартості квитка, та повну інформацію про страхування можна знайти тут:',
@@ -174,6 +185,40 @@ const uk = {
174
185
  button: 'Завантажити квиток',
175
186
  products: 'Ваші продукти',
176
187
  },
188
+ paydroid: {
189
+ label: 'Paydroid Cashless',
190
+ heading: 'Уникайте черг!',
191
+ heading_cta: 'Поповніть баланс',
192
+ subtitle:
193
+ 'На заході оплата виключно безготівкова за допомогою системи Paydroid Cashless. Поповніть баланс зараз і уникайте черг!',
194
+ amount_label: 'Яку суму ви хочете поповнити?',
195
+ amount_placeholder: 'Введіть суму',
196
+ promo: 'Поповніть суму понад 1000 CZK та отримайте пиво безкоштовно!',
197
+ terms_prefix: 'Я погоджуюсь з',
198
+ terms_conditions: 'Умовами використання',
199
+ terms_middle: 'Paydroid Cashless та із',
200
+ terms_privacy: 'Правилами обробки персональних даних',
201
+ terms: 'Згода з умовами та GDPR Paydroid Cashless',
202
+ skip: 'лише квиток у додатку',
203
+ submit: 'поповнити',
204
+ success_title: 'Ми додали квиток до вашого облікового запису',
205
+ success_subtitle:
206
+ 'Просто увійдіть у додаток Paydroid Cashless. Якщо хочете уникнути черг — поповніть баланс у додатку!',
207
+ topup_success_title: 'Дякуємо за поповнення!',
208
+ topup_success_subtitle:
209
+ 'Ми щойно зарахували кошти на ваш рахунок Paydroid Cashless. Увійдіть у додаток.',
210
+ error_title: 'Поповнення не вдалося',
211
+ error_subtitle: 'З вас нічого не стягнуто. Зверніться до нас, якщо виникнуть проблеми.',
212
+ error_account_title: 'Не вдалося створити обліковий запис',
213
+ error_account_subtitle: 'Можливо, ви ввели дані, що відрізняються від наших записів.',
214
+ error_account_button: 'увійти в додаток',
215
+ error_ticket_title: 'Не вдалося додати квиток',
216
+ error_ticket_subtitle:
217
+ 'Вибачте, спробуйте пізніше. Зверніться до нас, якщо проблема повториться.',
218
+ faq_button: 'часті запитання',
219
+ retry_button: 'спробувати знову',
220
+ missing_api_key: 'API ключ Paydroid відсутній',
221
+ },
177
222
  unpaid: 'Платіж не здійснено.',
178
223
  unpaid_description: 'Спробуйте ще раз, натиснувши кнопку Оплатити.',
179
224
  },
@@ -0,0 +1,33 @@
1
+ import api from '@utils/axios';
2
+ import { IResponse } from '@utils/types/global.type';
3
+ import {
4
+ IPaydroidCreateAccountData,
5
+ IPaydroidTopupAccountData,
6
+ IPaydroidTopupAccountResponse,
7
+ } from '@utils/types/paydroid';
8
+
9
+ const domain = 'https://api.paydroid.cz';
10
+
11
+ export const postPaydroidCreateAccount = (
12
+ apiKey: string,
13
+ data: IPaydroidCreateAccountData
14
+ ): Promise<IResponse<null>> =>
15
+ api
16
+ .post(`${domain}/v1/requests/create-account`, data, {
17
+ headers: {
18
+ 'X-Api-Key': apiKey,
19
+ },
20
+ })
21
+ .then((res) => res.data.data);
22
+
23
+ export const postPaydroidTopupAccount = (
24
+ apiKey: string,
25
+ data: IPaydroidTopupAccountData
26
+ ): Promise<IResponse<IPaydroidTopupAccountResponse>> =>
27
+ api
28
+ .post(`${domain}/v1/requests/topup-account`, data, {
29
+ headers: {
30
+ 'X-Api-Key': apiKey,
31
+ },
32
+ })
33
+ .then((res) => res.data);
@@ -0,0 +1,13 @@
1
+ import api from '@utils/axios';
2
+
3
+ export const validatePrimaryTicketNumber = (
4
+ releaseCategoryId: number,
5
+ number: string
6
+ ): Promise<void> =>
7
+ api
8
+ .get(
9
+ `/v1/tickets/primary/validate?releaseCategoryId=${releaseCategoryId}&number=${encodeURIComponent(
10
+ number
11
+ )}`
12
+ )
13
+ .then(() => undefined);
@@ -0,0 +1,7 @@
1
+ export enum Page {
2
+ PAYDROID_SUCCESS = 'paydroid-success',
3
+ PAYDROID_TOPUP_SUCCESS = 'paydroid-topup-success',
4
+ PAYDROID_ERROR = 'paydroid-error',
5
+ PAYDROID_ERROR_ACCOUNT = 'paydroid-error-account',
6
+ PAYDROID_ERROR_TICKET = 'paydroid-error-ticket',
7
+ }
@@ -0,0 +1,4 @@
1
+ import { Page } from '@utils/data/page';
2
+
3
+ export const isPaydroidPage = (page: string | null): boolean =>
4
+ Object.values(Page).includes(page as Page);
@@ -0,0 +1,35 @@
1
+ import { Page } from '@utils/data/page';
2
+ import { IOrderPaid } from '@utils/types/order.type';
3
+ import { IPaydroidCreateAccountData, IPaydroidTopupAccountData } from '@utils/types/paydroid';
4
+ import dayjs from 'dayjs';
5
+
6
+ export const getRedirectUrl = (page: Page): string => {
7
+ const base = window.location.origin + window.location.pathname;
8
+ return `${base}?page=${page}`;
9
+ };
10
+
11
+ export const transformToCreateAccountData = (data: IOrderPaid): IPaydroidCreateAccountData => ({
12
+ first_name: data.customer.firstName,
13
+ last_name: data.customer.lastName,
14
+ email: data.customer.email,
15
+ phone_number: data.customer.phone,
16
+ event_id: data.paydroidEventId || '',
17
+ tickets: data.tickets.map((ticket) => ({
18
+ number: ticket.number.toString(),
19
+ category: ticket.releaseCategoryName,
20
+ })),
21
+ ...(data.customer.birthdate
22
+ ? { date_of_birth: dayjs(data.customer.birthdate).format('YYYY-MM-DD') }
23
+ : {}),
24
+ });
25
+
26
+ export const transformToTopupAccountData = (
27
+ amount: string,
28
+ data: IOrderPaid
29
+ ): IPaydroidTopupAccountData => ({
30
+ email: data.customer.email,
31
+ event_id: data.paydroidEventId || '',
32
+ amount: Number(amount),
33
+ success_url: getRedirectUrl(Page.PAYDROID_TOPUP_SUCCESS),
34
+ failure_url: getRedirectUrl(Page.PAYDROID_ERROR),
35
+ });
@@ -35,6 +35,7 @@ export interface IGlobalContextOptions {
35
35
  termsAndConditionsCompanies?: string[];
36
36
  autoscrollAfterViewChange?: boolean;
37
37
  hasGopayId?: boolean;
38
+ paydroidApiKey?: string;
38
39
  }
39
40
 
40
41
  export interface IBase {
@@ -40,9 +40,11 @@ export interface IOrderPaid {
40
40
  orderNumber: number;
41
41
  tickets: IPaidTicket[];
42
42
  products: IPaidProduct[];
43
+ customer: ICustomer;
43
44
  extraFee: number;
44
45
  currency: Currencies;
45
46
  promoCodes: IPromoCode[] | null;
47
+ paydroidEventId: string | null;
46
48
  }
47
49
 
48
50
  export interface IAllowedPaymentMethod {
@@ -0,0 +1,26 @@
1
+ export interface IPaydroidCreateAccountTicket {
2
+ number: string;
3
+ category?: string;
4
+ }
5
+
6
+ export interface IPaydroidCreateAccountData {
7
+ first_name: string;
8
+ last_name: string;
9
+ email: string;
10
+ phone_number: string;
11
+ event_id: string;
12
+ tickets: IPaydroidCreateAccountTicket[];
13
+ date_of_birth?: string;
14
+ }
15
+
16
+ export interface IPaydroidTopupAccountData {
17
+ email: string;
18
+ event_id: string;
19
+ amount: number;
20
+ success_url: string;
21
+ failure_url: string;
22
+ }
23
+
24
+ export interface IPaydroidTopupAccountResponse {
25
+ url: string;
26
+ }
@@ -10,6 +10,7 @@ export interface IReleaseCategory extends IBase {
10
10
  releases: IReleaseShort[];
11
11
  translation: IReleaseCategoryTranslation[];
12
12
  totalTickets: number;
13
+ requiresPrimaryTicket: boolean;
13
14
  }
14
15
 
15
16
  interface IReleaseCategoryTranslation extends IBaseLocale {
@@ -8,12 +8,14 @@ export interface IReleaseShort {
8
8
  name: string;
9
9
  price: number;
10
10
  availableTickets: number;
11
+ releaseCategoryId: number;
11
12
  releaseCategoryName: string;
12
13
  locked: boolean;
13
14
  order: number;
14
15
  description: string;
15
16
  product: IEventProduct | null;
16
17
  extraFields: IEventExtraField[] | null;
18
+ requiresPrimaryTicket: boolean;
17
19
  }
18
20
 
19
21
  export interface IRelease extends IBase {
@@ -35,6 +35,7 @@ export interface ITicketFormTicket {
35
35
  extraFields: IExtraFieldForm[][];
36
36
  eventTimeslotId?: number | null;
37
37
  location?: ITicketLocation | null;
38
+ primaryTicketNumbers?: string[];
38
39
  }
39
40
 
40
41
  export interface ITicketLocation {