@redneckz/wildless-cms-uni-blocks 0.14.588 → 0.14.590

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 (230) hide show
  1. package/bundle/api/RetailApi/RetailApi.d.ts +3 -1
  2. package/bundle/api/RetailApi/RetailApiTypes.d.ts +3 -0
  3. package/bundle/blocks.schema.json +1 -1
  4. package/bundle/bundle.umd.js +187 -59
  5. package/bundle/bundle.umd.min.js +1 -1
  6. package/bundle/hooks/useElementSpace.d.ts +2 -0
  7. package/bundle/icons/IconName.d.ts +4 -2
  8. package/bundle/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  9. package/bundle/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  10. package/bundle/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  11. package/bundle/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  12. package/bundle/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  13. package/bundle/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  14. package/bundle/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  15. package/bundle/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  16. package/cosmos-static/icons/RefreshIcon.svg +1 -0
  17. package/cosmos-static/icons/sprites.svg +1 -0
  18. package/dist/api/RetailApi/RetailApi.d.ts +3 -1
  19. package/dist/api/RetailApi/RetailApi.js +15 -1
  20. package/dist/api/RetailApi/RetailApi.js.map +1 -1
  21. package/dist/api/RetailApi/RetailApiTypes.d.ts +3 -0
  22. package/dist/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
  23. package/dist/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
  24. package/dist/hooks/useElementSpace.d.ts +2 -0
  25. package/dist/hooks/useElementSpace.js +21 -0
  26. package/dist/hooks/useElementSpace.js.map +1 -0
  27. package/dist/icons/IconName.d.ts +4 -2
  28. package/dist/icons/IconName.js +3 -1
  29. package/dist/icons/IconName.js.map +1 -1
  30. package/dist/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  31. package/dist/ui-kit/CaptchaDialog/CaptchaDialog.js +22 -0
  32. package/dist/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
  33. package/dist/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  34. package/dist/ui-kit/CaptchaDialog/checkCaptcha.js +16 -0
  35. package/dist/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
  36. package/dist/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  37. package/dist/ui-kit/CaptchaDialog/createCaptcha.js +9 -0
  38. package/dist/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
  39. package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  40. package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js +15 -0
  41. package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
  42. package/dist/ui-kit/DatePicker/DatePicker.js +5 -1
  43. package/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
  44. package/dist/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  45. package/dist/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
  46. package/dist/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
  47. package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  48. package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +20 -29
  49. package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
  50. package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  51. package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js +21 -0
  52. package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
  53. package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
  54. package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
  55. package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  56. package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +59 -0
  57. package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
  58. package/lib/api/RetailApi/RetailApi.d.ts +3 -1
  59. package/lib/api/RetailApi/RetailApi.js +15 -1
  60. package/lib/api/RetailApi/RetailApi.js.map +1 -1
  61. package/lib/api/RetailApi/RetailApiTypes.d.ts +3 -0
  62. package/lib/common.css +1 -1
  63. package/lib/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
  64. package/lib/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
  65. package/lib/components/OfficesAtmsMap/OfficesAtmsMapLayout.d.ts +1 -1
  66. package/lib/hooks/useElementSpace.d.ts +2 -0
  67. package/lib/hooks/useElementSpace.js +18 -0
  68. package/lib/hooks/useElementSpace.js.map +1 -0
  69. package/lib/icons/IconName.d.ts +4 -2
  70. package/lib/icons/IconName.js +3 -1
  71. package/lib/icons/IconName.js.map +1 -1
  72. package/lib/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  73. package/lib/ui-kit/CaptchaDialog/CaptchaDialog.fixture.d.ts +6 -0
  74. package/lib/ui-kit/CaptchaDialog/CaptchaDialog.js +20 -0
  75. package/lib/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
  76. package/lib/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  77. package/lib/ui-kit/CaptchaDialog/checkCaptcha.js +13 -0
  78. package/lib/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
  79. package/lib/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  80. package/lib/ui-kit/CaptchaDialog/createCaptcha.js +6 -0
  81. package/lib/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
  82. package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  83. package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js +12 -0
  84. package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
  85. package/lib/ui-kit/DatePicker/DatePicker.js +5 -1
  86. package/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
  87. package/lib/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  88. package/lib/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
  89. package/lib/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
  90. package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  91. package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +21 -30
  92. package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
  93. package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  94. package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js +18 -0
  95. package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
  96. package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
  97. package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
  98. package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  99. package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +56 -0
  100. package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
  101. package/mobile/bundle/api/RetailApi/RetailApi.d.ts +3 -1
  102. package/mobile/bundle/api/RetailApi/RetailApiTypes.d.ts +3 -0
  103. package/mobile/bundle/bundle.umd.js +187 -59
  104. package/mobile/bundle/bundle.umd.min.js +1 -1
  105. package/mobile/bundle/hooks/useElementSpace.d.ts +2 -0
  106. package/mobile/bundle/icons/IconName.d.ts +4 -2
  107. package/mobile/bundle/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  108. package/mobile/bundle/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  109. package/mobile/bundle/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  110. package/mobile/bundle/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  111. package/mobile/bundle/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  112. package/mobile/bundle/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  113. package/mobile/bundle/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  114. package/mobile/bundle/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  115. package/mobile/dist/api/RetailApi/RetailApi.d.ts +3 -1
  116. package/mobile/dist/api/RetailApi/RetailApi.js +15 -1
  117. package/mobile/dist/api/RetailApi/RetailApi.js.map +1 -1
  118. package/mobile/dist/api/RetailApi/RetailApiTypes.d.ts +3 -0
  119. package/mobile/dist/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
  120. package/mobile/dist/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
  121. package/mobile/dist/hooks/useElementSpace.d.ts +2 -0
  122. package/mobile/dist/hooks/useElementSpace.js +21 -0
  123. package/mobile/dist/hooks/useElementSpace.js.map +1 -0
  124. package/mobile/dist/icons/IconName.d.ts +4 -2
  125. package/mobile/dist/icons/IconName.js +3 -1
  126. package/mobile/dist/icons/IconName.js.map +1 -1
  127. package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  128. package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.js +22 -0
  129. package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
  130. package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  131. package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.js +16 -0
  132. package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
  133. package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  134. package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.js +9 -0
  135. package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
  136. package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  137. package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js +15 -0
  138. package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
  139. package/mobile/dist/ui-kit/DatePicker/DatePicker.js +5 -1
  140. package/mobile/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
  141. package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  142. package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
  143. package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
  144. package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  145. package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +20 -29
  146. package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
  147. package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  148. package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js +21 -0
  149. package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
  150. package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
  151. package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
  152. package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  153. package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +59 -0
  154. package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
  155. package/mobile/lib/api/RetailApi/RetailApi.d.ts +3 -1
  156. package/mobile/lib/api/RetailApi/RetailApi.js +15 -1
  157. package/mobile/lib/api/RetailApi/RetailApi.js.map +1 -1
  158. package/mobile/lib/api/RetailApi/RetailApiTypes.d.ts +3 -0
  159. package/mobile/lib/common.css +1 -1
  160. package/mobile/lib/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
  161. package/mobile/lib/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
  162. package/mobile/lib/hooks/useElementSpace.d.ts +2 -0
  163. package/mobile/lib/hooks/useElementSpace.js +18 -0
  164. package/mobile/lib/hooks/useElementSpace.js.map +1 -0
  165. package/mobile/lib/icons/IconName.d.ts +4 -2
  166. package/mobile/lib/icons/IconName.js +3 -1
  167. package/mobile/lib/icons/IconName.js.map +1 -1
  168. package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
  169. package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.js +20 -0
  170. package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
  171. package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
  172. package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.js +13 -0
  173. package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
  174. package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
  175. package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.js +6 -0
  176. package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
  177. package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
  178. package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js +12 -0
  179. package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
  180. package/mobile/lib/ui-kit/DatePicker/DatePicker.js +5 -1
  181. package/mobile/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
  182. package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
  183. package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
  184. package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
  185. package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
  186. package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +21 -30
  187. package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
  188. package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
  189. package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js +18 -0
  190. package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
  191. package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
  192. package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
  193. package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
  194. package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +56 -0
  195. package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
  196. package/mobile/src/api/RetailApi/RetailApi.ts +18 -1
  197. package/mobile/src/api/RetailApi/RetailApiTypes.ts +4 -0
  198. package/mobile/src/components/ApplicationLeadForm/useApplicationLeadApi.ts +3 -4
  199. package/mobile/src/hooks/useElementSpace.ts +25 -0
  200. package/mobile/src/icons/IconName.ts +5 -5
  201. package/mobile/src/icons/RefreshIcon.svg +3 -0
  202. package/mobile/src/ui-kit/CaptchaDialog/CaptchaDialog.tsx +68 -0
  203. package/mobile/src/ui-kit/CaptchaDialog/checkCaptcha.ts +25 -0
  204. package/mobile/src/ui-kit/CaptchaDialog/createCaptcha.ts +6 -0
  205. package/mobile/src/ui-kit/CaptchaDialog/useCaptchaDialog.tsx +12 -0
  206. package/mobile/src/ui-kit/DatePicker/DatePicker.tsx +9 -1
  207. package/mobile/src/ui-kit/VerifyPhoneDialog/InputCode.tsx +3 -2
  208. package/mobile/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.tsx +66 -51
  209. package/mobile/src/ui-kit/VerifyPhoneDialog/handleSendCode.ts +37 -0
  210. package/mobile/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.tsx +2 -1
  211. package/mobile/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.tsx +71 -0
  212. package/package.json +2 -2
  213. package/src/api/RetailApi/RetailApi.ts +18 -1
  214. package/src/api/RetailApi/RetailApiTypes.ts +4 -0
  215. package/src/components/ApplicationLeadForm/useApplicationLeadApi.ts +3 -4
  216. package/src/hooks/useElementSpace.ts +25 -0
  217. package/src/icons/IconName.ts +353 -6
  218. package/src/icons/RefreshIcon.svg +3 -0
  219. package/src/ui-kit/CaptchaDialog/CaptchaDialog.fixture.tsx +11 -0
  220. package/src/ui-kit/CaptchaDialog/CaptchaDialog.tsx +68 -0
  221. package/src/ui-kit/CaptchaDialog/checkCaptcha.ts +25 -0
  222. package/src/ui-kit/CaptchaDialog/createCaptcha.ts +6 -0
  223. package/src/ui-kit/CaptchaDialog/useCaptchaDialog.tsx +12 -0
  224. package/src/ui-kit/DatePicker/DatePicker.tsx +9 -1
  225. package/src/ui-kit/VerifyPhoneDialog/InputCode.tsx +3 -2
  226. package/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.fixture.tsx +11 -8
  227. package/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.tsx +66 -51
  228. package/src/ui-kit/VerifyPhoneDialog/handleSendCode.ts +37 -0
  229. package/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.tsx +2 -1
  230. package/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.tsx +71 -0
@@ -0,0 +1,68 @@
1
+ import { JSX } from '@redneckz/uni-jsx';
2
+ import { useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
3
+ import { Button } from '../Button/Button';
4
+ import { Dialog } from '../DialogManager/Dialog';
5
+ import { Icon } from '../Icon/Icon';
6
+ import { Input } from '../Input/Input';
7
+ import { Logo } from '../Logo/Logo';
8
+ import { checkCaptcha } from './checkCaptcha';
9
+ import { createCaptcha } from './createCaptcha';
10
+
11
+ export interface CaptchaDialogProps {
12
+ phoneNumber: string;
13
+ sendCode?: () => void;
14
+ close?: () => void;
15
+ onClose?: () => void;
16
+ }
17
+
18
+ export const CaptchaDialog = JSX<CaptchaDialogProps>(
19
+ ({ phoneNumber, close, sendCode, onClose }) => {
20
+ const [captcha, setCaptcha] = useState('');
21
+ const [code, setCode] = useState('');
22
+ const [hasError, setHasError] = useState(false);
23
+
24
+ useEffect(() => {
25
+ createCaptcha(setCaptcha, phoneNumber);
26
+ }, []);
27
+
28
+ return (
29
+ <Dialog
30
+ head={<Logo />}
31
+ onClose={onClose}
32
+ className="my-6xl max-w-lg w-full min-h-fit mx-auto rounded-lg"
33
+ >
34
+ <div className="flex flex-col gap-lg items-center rounded-md">
35
+ <div className="flex h-[140px] w-[300px]">
36
+ <img className="grow" src={captcha}></img>
37
+ <div
38
+ onClick={() => createCaptcha(setCaptcha, phoneNumber)}
39
+ className="flex w-8 items-center justify-center cursor-pointer"
40
+ >
41
+ <Icon iconVersion="normal" name="RefreshIcon" />
42
+ </div>
43
+ </div>
44
+ <Input
45
+ className="w-[300px]"
46
+ onChange={setCode}
47
+ value={code}
48
+ placeholder="Введите код с картинки"
49
+ />
50
+ {hasError ? <div className="text-error">Неверный код</div> : null}
51
+ <div className="flex w-[310px] justify-between">
52
+ <Button onClick={close} version="secondary">
53
+ Вернуться
54
+ </Button>
55
+ <Button
56
+ type="submit"
57
+ disabled={!code}
58
+ onClick={() => checkCaptcha({ code, setHasError, close, sendCode })}
59
+ version="secondary"
60
+ >
61
+ Отправить
62
+ </Button>
63
+ </div>
64
+ </div>
65
+ </Dialog>
66
+ );
67
+ },
68
+ );
@@ -0,0 +1,25 @@
1
+ import { RETAIL_API } from '../../api/RetailApi/RetailApi';
2
+ import { noop } from '../../utils/noop';
3
+
4
+ interface CheckCaptchaProps {
5
+ code: string;
6
+ setHasError: (hasError: boolean) => void;
7
+ sendCode?: () => void;
8
+ close?: () => void;
9
+ }
10
+
11
+ export const checkCaptcha = async ({
12
+ code,
13
+ setHasError,
14
+ close,
15
+ sendCode = noop,
16
+ }: CheckCaptchaProps) => {
17
+ const response = await RETAIL_API.CheckCaptcha({ captchaText: code });
18
+
19
+ if ((await response.text()) === 'ERROR') {
20
+ setHasError(true);
21
+ } else {
22
+ sendCode();
23
+ close?.();
24
+ }
25
+ };
@@ -0,0 +1,6 @@
1
+ import { RETAIL_API } from '../../api/RetailApi/RetailApi';
2
+
3
+ export const createCaptcha = async (setCaptcha: (captcha: string) => void, phoneNumber: string) => {
4
+ const response = await RETAIL_API.CreateCaptcha(phoneNumber);
5
+ setCaptcha(URL.createObjectURL(await response.blob()));
6
+ };
@@ -0,0 +1,12 @@
1
+ import { useDialogManager } from '../DialogManager/useDialogManager';
2
+ import { CaptchaDialog, type CaptchaDialogProps } from './CaptchaDialog';
3
+
4
+ export const useCaptchaDialog = (initialProps: CaptchaDialogProps, onClose: () => void) => {
5
+ const { open, close, closeAll } = useDialogManager();
6
+
7
+ return {
8
+ open: () => open(<CaptchaDialog close={close} onClose={onClose} {...initialProps} />),
9
+ close,
10
+ closeAll,
11
+ };
12
+ };
@@ -1,6 +1,7 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
2
  import { useState } from '@redneckz/uni-jsx/lib/hooks';
3
3
  import { useBool } from '@redneckz/uni-jsx/lib/hooks/useBool';
4
+ import { useElementSpace } from '../../hooks/useElementSpace';
4
5
  import { type LabelProps } from '../../model/HeadlineType';
5
6
  import { type IconVersion } from '../../model/IconVersion';
6
7
  import { formatDate } from '../../utils/formatDate';
@@ -65,13 +66,19 @@ export const DatePicker = JSX<DatePickerProps>(
65
66
  showCalendar,
66
67
  });
67
68
 
69
+ const spaceAbove = useElementSpace(ref, 370);
70
+
68
71
  return (
69
72
  <div className={style('space-y-xs', className)} ref={ref}>
70
73
  {renderLabel(label)}
71
74
  <div className="relative">
72
75
  {renderDatePickerForm(handleChangeVisibleCalendar, value, valid)}
73
76
  {showCalendar ? (
74
- <div className="absolute bg-white z-20 select-none bottom-full">
77
+ <div
78
+ className={style('absolute bg-white z-20 select-none', {
79
+ 'bottom-full': spaceAbove,
80
+ })}
81
+ >
75
82
  <div className="flex gap-s">
76
83
  <div className="my-auto" onClick={handlePrevMonth}>
77
84
  <Icon {...ICON_PROPS} className="-rotate-90 cursor-pointer" />
@@ -99,6 +106,7 @@ export const DatePicker = JSX<DatePickerProps>(
99
106
  onDateSelect={onChange}
100
107
  min={minDate}
101
108
  max={maxDate}
109
+ setValue={setValue}
102
110
  />
103
111
  </div>
104
112
  ) : null}
@@ -5,9 +5,10 @@ type InputCodeProps = {
5
5
  values: string[];
6
6
  setValues: React.Dispatch<React.SetStateAction<string[]>>;
7
7
  hasError?: boolean;
8
+ errorText?: string;
8
9
  };
9
10
 
10
- export const InputCode = JSX<InputCodeProps>(({ values, setValues, hasError }) => {
11
+ export const InputCode = JSX<InputCodeProps>(({ values, setValues, hasError, errorText }) => {
11
12
  const [activeIndex, setActiveIndex] = useState(0);
12
13
  const inputRefs = useRef<HTMLInputElement[]>([]);
13
14
 
@@ -76,7 +77,7 @@ export const InputCode = JSX<InputCodeProps>(({ values, setValues, hasError }) =
76
77
  />
77
78
  ))}
78
79
  </div>
79
- {hasError ? <div className="text-error">Неверный код</div> : null}
80
+ {hasError ? <div className="text-error">{errorText}</div> : null}
80
81
  </div>
81
82
  );
82
83
  });
@@ -1,10 +1,11 @@
1
1
  import '../../setup-fixture';
2
2
 
3
+ import { DialogManager } from '../../ui-kit/DialogManager/DialogManager';
3
4
  import { VerifyPhoneDialog } from './VerifyPhoneDialog';
4
5
 
5
6
  const title = 'Подтвердите номер телефона';
6
7
 
7
- const description = 'Мы отправили код на +7 (999) 999-99-99';
8
+ const description = 'Мы отправили код на';
8
9
 
9
10
  const __html = `Вводя код, я подтверждаю, что ознакомлен и подписываю:
10
11
  <ul><li>соглашение о порядке использования простой электронной подписи,
@@ -14,12 +15,14 @@ const __html = `Вводя код, я подтверждаю, что ознак
14
15
 
15
16
  export default {
16
17
  default: (
17
- <VerifyPhoneDialog
18
- title={title}
19
- description={description}
20
- phone="+79999999999"
21
- __html={__html}
22
- textButton="Отправить"
23
- />
18
+ <div>
19
+ <VerifyPhoneDialog
20
+ title={title}
21
+ description={description}
22
+ __html={__html}
23
+ textButton="Отправить"
24
+ />
25
+ <DialogManager />
26
+ </div>
24
27
  ),
25
28
  };
@@ -1,71 +1,70 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
- import { useCallback, useEffect, useMemo, useState } from '@redneckz/uni-jsx/lib/hooks';
3
- import { RETAIL_API } from '../../api/RetailApi/RetailApi';
2
+ import { useCallback, useEffect, useState } from '@redneckz/uni-jsx/lib/hooks';
4
3
  import { Headline } from '../../components/Headline/Headline';
4
+ import { noop } from '../../utils/noop';
5
+ import { useCaptchaDialog } from '../CaptchaDialog/useCaptchaDialog';
5
6
  import { Dialog } from '../DialogManager/Dialog';
6
- import { useDialogManager } from '../DialogManager/useDialogManager';
7
7
  import { LinkButton } from '../LinkButton/LinkButton';
8
8
  import { Loader } from '../Loader/Loader';
9
9
  import { RichText } from '../RichText/RichText';
10
10
  import { Timer } from '../TimerCircle/Timer';
11
+ import { handleSendCode } from './handleSendCode';
11
12
  import { InputCode } from './InputCode';
12
13
  import { SubmitButton } from './SubmitButton';
14
+ import { useVerifyPhoneDialogSubmit } from './useVerifyPhoneDialogSubmit';
13
15
 
14
16
  export interface VerifyPhoneDialogProps {
15
- phone: string;
17
+ close?: () => void;
18
+ onClose?: () => void;
16
19
  title?: string;
17
20
  description?: string;
18
21
  code?: boolean;
19
22
  __html?: string;
20
23
  codeLength?: number;
21
24
  textButton?: string;
22
- onClose?: () => Promise<void>;
23
- href?: string;
25
+ phoneNumber?: string;
24
26
  }
25
27
 
26
28
  export const VerifyPhoneDialog = JSX<VerifyPhoneDialogProps>(
27
29
  ({
30
+ close = noop,
31
+ onClose = noop,
28
32
  title,
29
- phone,
30
33
  description,
31
34
  __html,
32
35
  code = true,
33
36
  codeLength = 4,
34
37
  textButton = '',
35
- onClose,
36
- href = '',
38
+ phoneNumber = '+79999999999',
37
39
  }) => {
38
- const { close } = useDialogManager();
40
+ const [values, setValues] = useState(Array(codeLength).fill(''));
39
41
 
40
- const [values, setValues] = useState<string[]>(Array(codeLength).fill('') as string[]);
41
- const [hasError, setHasError] = useState(false);
42
- const [isLoading, setIsLoading] = useState(false);
43
- const [timeNextReq, setTimeNextReq] = useState<number>(180);
42
+ const {
43
+ handleSubmit,
44
+ hasError,
45
+ errorText,
46
+ isLoading,
47
+ timeNextReq,
48
+ isSubmitButtonDisabled,
49
+ setTimeNextReq,
50
+ setIsTimerStarted,
51
+ setAttemps,
52
+ } = useVerifyPhoneDialogSubmit({ values, close });
44
53
 
45
- const isValidCode = useMemo(() => values.every(Boolean), [values]);
46
-
47
- useEffect(() => {
48
- RETAIL_API.SendCode({
49
- phoneNumber: phone,
50
- smsCodesSetName: { key: 'AUTHENTICATION' },
54
+ const sendCode = useCallback(() => {
55
+ handleSendCode({
56
+ phoneNumber,
57
+ captchaDialog,
58
+ setTimeNextReq,
59
+ setIsTimerStarted,
60
+ setAttemps,
51
61
  });
52
62
  }, []);
63
+ const captchaDialog = useCaptchaDialog({ phoneNumber, sendCode }, onClose);
53
64
 
54
- const handleSubmit = useCallback(async () => {
55
- try {
56
- setIsLoading(true);
57
- await RETAIL_API.CheckCode({
58
- smsText: values.join(''),
59
- smsCodesSetName: { key: 'AUTHENTICATION' },
60
- });
61
- globalThis.location.href = href;
62
- close();
63
- onClose && onClose();
64
- } catch {
65
- setIsLoading(false);
66
- setHasError(true);
67
- }
68
- }, [values]);
65
+ useEffect(() => {
66
+ sendCode();
67
+ }, []);
69
68
 
70
69
  return (
71
70
  <Dialog className="my-6xl max-w-3xl w-full min-h-fit mx-auto rounded-lg">
@@ -77,24 +76,19 @@ export const VerifyPhoneDialog = JSX<VerifyPhoneDialogProps>(
77
76
  headlineVersion="S"
78
77
  isEmbedded={true}
79
78
  />
80
- {code ? <InputCode values={values} setValues={setValues} hasError={hasError} /> : null}
81
- {timeNextReq ? (
82
- <div className="flex flex-row text-l font-light text-primary-main">
83
- Получить новый код можно через
84
- <Timer
85
- className="text-primary-main ml-1"
86
- time={timeNextReq}
87
- setTime={setTimeNextReq}
88
- />
89
- </div>
90
- ) : (
91
- <LinkButton className="text-primary-main">Получить новый код</LinkButton>
92
- )}
79
+ {code ? (
80
+ <InputCode
81
+ values={values}
82
+ setValues={setValues}
83
+ errorText={errorText}
84
+ hasError={hasError}
85
+ />
86
+ ) : null}
87
+ {renderText(timeNextReq, setTimeNextReq, sendCode)}
93
88
 
94
89
  <RichText itemSize="list-s" __html={__html} />
95
- {textButton ? (
96
- <SubmitButton isDisabled={!isValidCode} onClick={handleSubmit} text={textButton} />
97
- ) : null}
90
+
91
+ {renderTextButton(textButton, isSubmitButtonDisabled, handleSubmit)}
98
92
 
99
93
  {isLoading ? <Loader blur={false} /> : null}
100
94
  </div>
@@ -102,3 +96,24 @@ export const VerifyPhoneDialog = JSX<VerifyPhoneDialogProps>(
102
96
  );
103
97
  },
104
98
  );
99
+
100
+ const renderTextButton = (textButton: string, isDisabled: boolean, handleSubmit: () => void) =>
101
+ textButton ? (
102
+ <SubmitButton isDisabled={isDisabled} onClick={handleSubmit} text={textButton} />
103
+ ) : null;
104
+
105
+ const renderText = (
106
+ timeNextReq: number,
107
+ setTimeNextReq: React.Dispatch<React.SetStateAction<number>>,
108
+ sendCode: () => void,
109
+ ) =>
110
+ timeNextReq ? (
111
+ <div className="flex flex-row text-l font-light text-primary-main">
112
+ Получить новый код можно через
113
+ <Timer className="text-primary-main ml-1" time={timeNextReq} setTime={setTimeNextReq} />
114
+ </div>
115
+ ) : (
116
+ <LinkButton onClick={sendCode} className="text-primary-main">
117
+ Получить новый код
118
+ </LinkButton>
119
+ );
@@ -0,0 +1,37 @@
1
+ import { RETAIL_API } from '../../api/RetailApi/RetailApi';
2
+ import { type CaptchaDialogProps } from '../CaptchaDialog/CaptchaDialog';
3
+ import { type DialogOptions } from '../DialogManager/useDialogManager';
4
+
5
+ interface HandleSendCodeProps {
6
+ phoneNumber: string;
7
+ captchaDialog: {
8
+ open: (props?: CaptchaDialogProps, options?: DialogOptions) => void;
9
+ close: () => void;
10
+ closeAll: () => void;
11
+ };
12
+ setTimeNextReq: (timeNextReq: number) => void;
13
+ setIsTimerStarted: (isTimerStarted: boolean) => void;
14
+ setAttemps: (attemps: number) => void;
15
+ }
16
+
17
+ export const handleSendCode = async ({
18
+ phoneNumber,
19
+ captchaDialog,
20
+ setTimeNextReq,
21
+ setIsTimerStarted,
22
+ setAttemps,
23
+ }: HandleSendCodeProps) => {
24
+ try {
25
+ await RETAIL_API.SendCode({
26
+ phoneNumber: phoneNumber,
27
+ smsCodesSetName: { key: 'AUTHENTICATION' },
28
+ });
29
+ setAttemps(0);
30
+ setTimeNextReq(180);
31
+ setIsTimerStarted(true);
32
+ } catch (e: any) {
33
+ if (e?.status === 429) {
34
+ captchaDialog.open();
35
+ }
36
+ }
37
+ };
@@ -5,7 +5,8 @@ export const useVerifyPhoneDialog = (props: VerifyPhoneDialogProps) => {
5
5
  const { open, close } = useDialogManager();
6
6
 
7
7
  return {
8
- open: (options: DialogOptions = {}) => open(<VerifyPhoneDialog {...props} />, options),
8
+ open: (options: DialogOptions = {}) =>
9
+ open(<VerifyPhoneDialog onClose={close} {...props} />, options),
9
10
  close,
10
11
  };
11
12
  };
@@ -0,0 +1,71 @@
1
+ import { useCallback, useEffect, useMemo, useState } from '@redneckz/uni-jsx/lib/hooks';
2
+ import { RETAIL_API } from '../../api/RetailApi/RetailApi';
3
+
4
+ type useVerifyPhoneDialogSubmitProps = {
5
+ values: string[];
6
+ close?: () => void;
7
+ };
8
+
9
+ export const useVerifyPhoneDialogSubmit = ({ close, values }: useVerifyPhoneDialogSubmitProps) => {
10
+ const [hasError, setHasError] = useState(false);
11
+ const [errorText, setErrorText] = useState('');
12
+ const [isLoading, setIsLoading] = useState(false);
13
+ const [timeNextReq, setTimeNextReq] = useState<number>(0);
14
+ const [isTimerStarted, setIsTimerStarted] = useState(false);
15
+ const [attemps, setAttemps] = useState(0);
16
+
17
+ const resetError = useCallback(() => {
18
+ setHasError(false);
19
+ setErrorText('');
20
+ }, []);
21
+
22
+ const isTimeExpired = useMemo(
23
+ () => timeNextReq === 0 && isTimerStarted,
24
+ [timeNextReq, isTimerStarted],
25
+ );
26
+
27
+ const isSubmitButtonDisabled = useMemo(
28
+ () => attemps > 2 || !values.every(Boolean) || isTimeExpired,
29
+ [values],
30
+ );
31
+
32
+ const handleSubmit = useCallback(async () => {
33
+ try {
34
+ setIsTimerStarted(false);
35
+ setTimeNextReq(0);
36
+ setAttemps(attemps + 1);
37
+ setIsLoading(true);
38
+ await RETAIL_API.CheckCode({
39
+ smsText: values.join(''),
40
+ smsCodesSetName: { key: 'AUTHENTICATION' },
41
+ });
42
+ resetError();
43
+ close && close();
44
+ } catch {
45
+ setIsLoading(false);
46
+ attemps > 1 ? setErrorText('Исчерпан лимит ввода смс-кода') : setErrorText('Неверный код');
47
+ setHasError(true);
48
+ }
49
+ }, [values, attemps]);
50
+
51
+ useEffect(() => {
52
+ if (isTimeExpired) {
53
+ setHasError(true);
54
+ setErrorText('Код просрочен');
55
+ } else {
56
+ setHasError(false);
57
+ }
58
+ }, [isTimeExpired]);
59
+
60
+ return {
61
+ handleSubmit,
62
+ hasError,
63
+ errorText,
64
+ isLoading,
65
+ timeNextReq,
66
+ isSubmitButtonDisabled,
67
+ setTimeNextReq,
68
+ setIsTimerStarted,
69
+ setAttemps,
70
+ };
71
+ };