@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.
- package/bundle/api/RetailApi/RetailApi.d.ts +3 -1
- package/bundle/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/bundle/blocks.schema.json +1 -1
- package/bundle/bundle.umd.js +187 -59
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/hooks/useElementSpace.d.ts +2 -0
- package/bundle/icons/IconName.d.ts +4 -2
- package/bundle/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/bundle/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/bundle/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/bundle/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/bundle/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/bundle/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/bundle/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/bundle/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/cosmos-static/icons/RefreshIcon.svg +1 -0
- package/cosmos-static/icons/sprites.svg +1 -0
- package/dist/api/RetailApi/RetailApi.d.ts +3 -1
- package/dist/api/RetailApi/RetailApi.js +15 -1
- package/dist/api/RetailApi/RetailApi.js.map +1 -1
- package/dist/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/dist/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
- package/dist/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
- package/dist/hooks/useElementSpace.d.ts +2 -0
- package/dist/hooks/useElementSpace.js +21 -0
- package/dist/hooks/useElementSpace.js.map +1 -0
- package/dist/icons/IconName.d.ts +4 -2
- package/dist/icons/IconName.js +3 -1
- package/dist/icons/IconName.js.map +1 -1
- package/dist/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/dist/ui-kit/CaptchaDialog/CaptchaDialog.js +22 -0
- package/dist/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
- package/dist/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/dist/ui-kit/CaptchaDialog/checkCaptcha.js +16 -0
- package/dist/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
- package/dist/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/dist/ui-kit/CaptchaDialog/createCaptcha.js +9 -0
- package/dist/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
- package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js +15 -0
- package/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
- package/dist/ui-kit/DatePicker/DatePicker.js +5 -1
- package/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
- package/dist/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/dist/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
- package/dist/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
- package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +20 -29
- package/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
- package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js +21 -0
- package/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
- package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
- package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
- package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +59 -0
- package/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
- package/lib/api/RetailApi/RetailApi.d.ts +3 -1
- package/lib/api/RetailApi/RetailApi.js +15 -1
- package/lib/api/RetailApi/RetailApi.js.map +1 -1
- package/lib/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/lib/common.css +1 -1
- package/lib/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
- package/lib/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
- package/lib/components/OfficesAtmsMap/OfficesAtmsMapLayout.d.ts +1 -1
- package/lib/hooks/useElementSpace.d.ts +2 -0
- package/lib/hooks/useElementSpace.js +18 -0
- package/lib/hooks/useElementSpace.js.map +1 -0
- package/lib/icons/IconName.d.ts +4 -2
- package/lib/icons/IconName.js +3 -1
- package/lib/icons/IconName.js.map +1 -1
- package/lib/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/lib/ui-kit/CaptchaDialog/CaptchaDialog.fixture.d.ts +6 -0
- package/lib/ui-kit/CaptchaDialog/CaptchaDialog.js +20 -0
- package/lib/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
- package/lib/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/lib/ui-kit/CaptchaDialog/checkCaptcha.js +13 -0
- package/lib/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
- package/lib/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/lib/ui-kit/CaptchaDialog/createCaptcha.js +6 -0
- package/lib/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
- package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js +12 -0
- package/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
- package/lib/ui-kit/DatePicker/DatePicker.js +5 -1
- package/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
- package/lib/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/lib/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
- package/lib/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
- package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +21 -30
- package/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
- package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js +18 -0
- package/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
- package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
- package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
- package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +56 -0
- package/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
- package/mobile/bundle/api/RetailApi/RetailApi.d.ts +3 -1
- package/mobile/bundle/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/mobile/bundle/bundle.umd.js +187 -59
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/hooks/useElementSpace.d.ts +2 -0
- package/mobile/bundle/icons/IconName.d.ts +4 -2
- package/mobile/bundle/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/mobile/bundle/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/mobile/bundle/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/mobile/bundle/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/mobile/bundle/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/mobile/bundle/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/mobile/bundle/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/mobile/bundle/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/mobile/dist/api/RetailApi/RetailApi.d.ts +3 -1
- package/mobile/dist/api/RetailApi/RetailApi.js +15 -1
- package/mobile/dist/api/RetailApi/RetailApi.js.map +1 -1
- package/mobile/dist/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/mobile/dist/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
- package/mobile/dist/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
- package/mobile/dist/hooks/useElementSpace.d.ts +2 -0
- package/mobile/dist/hooks/useElementSpace.js +21 -0
- package/mobile/dist/hooks/useElementSpace.js.map +1 -0
- package/mobile/dist/icons/IconName.d.ts +4 -2
- package/mobile/dist/icons/IconName.js +3 -1
- package/mobile/dist/icons/IconName.js.map +1 -1
- package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.js +22 -0
- package/mobile/dist/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
- package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.js +16 -0
- package/mobile/dist/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
- package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.js +9 -0
- package/mobile/dist/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
- package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js +15 -0
- package/mobile/dist/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
- package/mobile/dist/ui-kit/DatePicker/DatePicker.js +5 -1
- package/mobile/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
- package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
- package/mobile/dist/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
- package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +20 -29
- package/mobile/dist/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
- package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js +21 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
- package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
- package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +59 -0
- package/mobile/dist/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
- package/mobile/lib/api/RetailApi/RetailApi.d.ts +3 -1
- package/mobile/lib/api/RetailApi/RetailApi.js +15 -1
- package/mobile/lib/api/RetailApi/RetailApi.js.map +1 -1
- package/mobile/lib/api/RetailApi/RetailApiTypes.d.ts +3 -0
- package/mobile/lib/common.css +1 -1
- package/mobile/lib/components/ApplicationLeadForm/useApplicationLeadApi.js +3 -4
- package/mobile/lib/components/ApplicationLeadForm/useApplicationLeadApi.js.map +1 -1
- package/mobile/lib/hooks/useElementSpace.d.ts +2 -0
- package/mobile/lib/hooks/useElementSpace.js +18 -0
- package/mobile/lib/hooks/useElementSpace.js.map +1 -0
- package/mobile/lib/icons/IconName.d.ts +4 -2
- package/mobile/lib/icons/IconName.js +3 -1
- package/mobile/lib/icons/IconName.js.map +1 -1
- package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.d.ts +7 -0
- package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.js +20 -0
- package/mobile/lib/ui-kit/CaptchaDialog/CaptchaDialog.js.map +1 -0
- package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.d.ts +8 -0
- package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.js +13 -0
- package/mobile/lib/ui-kit/CaptchaDialog/checkCaptcha.js.map +1 -0
- package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.d.ts +1 -0
- package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.js +6 -0
- package/mobile/lib/ui-kit/CaptchaDialog/createCaptcha.js.map +1 -0
- package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.d.ts +6 -0
- package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js +12 -0
- package/mobile/lib/ui-kit/CaptchaDialog/useCaptchaDialog.js.map +1 -0
- package/mobile/lib/ui-kit/DatePicker/DatePicker.js +5 -1
- package/mobile/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
- package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.d.ts +1 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.js +2 -2
- package/mobile/lib/ui-kit/VerifyPhoneDialog/InputCode.js.map +1 -1
- package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.d.ts +3 -3
- package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js +21 -30
- package/mobile/lib/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.js.map +1 -1
- package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.d.ts +15 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js +18 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/handleSendCode.js.map +1 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js +1 -1
- package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.js.map +1 -1
- package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.d.ts +16 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js +56 -0
- package/mobile/lib/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.js.map +1 -0
- package/mobile/src/api/RetailApi/RetailApi.ts +18 -1
- package/mobile/src/api/RetailApi/RetailApiTypes.ts +4 -0
- package/mobile/src/components/ApplicationLeadForm/useApplicationLeadApi.ts +3 -4
- package/mobile/src/hooks/useElementSpace.ts +25 -0
- package/mobile/src/icons/IconName.ts +5 -5
- package/mobile/src/icons/RefreshIcon.svg +3 -0
- package/mobile/src/ui-kit/CaptchaDialog/CaptchaDialog.tsx +68 -0
- package/mobile/src/ui-kit/CaptchaDialog/checkCaptcha.ts +25 -0
- package/mobile/src/ui-kit/CaptchaDialog/createCaptcha.ts +6 -0
- package/mobile/src/ui-kit/CaptchaDialog/useCaptchaDialog.tsx +12 -0
- package/mobile/src/ui-kit/DatePicker/DatePicker.tsx +9 -1
- package/mobile/src/ui-kit/VerifyPhoneDialog/InputCode.tsx +3 -2
- package/mobile/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.tsx +66 -51
- package/mobile/src/ui-kit/VerifyPhoneDialog/handleSendCode.ts +37 -0
- package/mobile/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.tsx +2 -1
- package/mobile/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.tsx +71 -0
- package/package.json +2 -2
- package/src/api/RetailApi/RetailApi.ts +18 -1
- package/src/api/RetailApi/RetailApiTypes.ts +4 -0
- package/src/components/ApplicationLeadForm/useApplicationLeadApi.ts +3 -4
- package/src/hooks/useElementSpace.ts +25 -0
- package/src/icons/IconName.ts +353 -6
- package/src/icons/RefreshIcon.svg +3 -0
- package/src/ui-kit/CaptchaDialog/CaptchaDialog.fixture.tsx +11 -0
- package/src/ui-kit/CaptchaDialog/CaptchaDialog.tsx +68 -0
- package/src/ui-kit/CaptchaDialog/checkCaptcha.ts +25 -0
- package/src/ui-kit/CaptchaDialog/createCaptcha.ts +6 -0
- package/src/ui-kit/CaptchaDialog/useCaptchaDialog.tsx +12 -0
- package/src/ui-kit/DatePicker/DatePicker.tsx +9 -1
- package/src/ui-kit/VerifyPhoneDialog/InputCode.tsx +3 -2
- package/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.fixture.tsx +11 -8
- package/src/ui-kit/VerifyPhoneDialog/VerifyPhoneDialog.tsx +66 -51
- package/src/ui-kit/VerifyPhoneDialog/handleSendCode.ts +37 -0
- package/src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialog.tsx +2 -1
- 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
|
|
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"
|
|
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 = 'Мы отправили код на
|
|
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
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
36
|
-
href = '',
|
|
38
|
+
phoneNumber = '+79999999999',
|
|
37
39
|
}) => {
|
|
38
|
-
const
|
|
40
|
+
const [values, setValues] = useState(Array(codeLength).fill(''));
|
|
39
41
|
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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 ?
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
96
|
-
|
|
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 = {}) =>
|
|
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
|
+
};
|