@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,56 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
|
+
import { RETAIL_API } from '../../api/RetailApi/RetailApi.js';
|
|
3
|
+
export const useVerifyPhoneDialogSubmit = ({ close, values }) => {
|
|
4
|
+
const [hasError, setHasError] = useState(false);
|
|
5
|
+
const [errorText, setErrorText] = useState('');
|
|
6
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
7
|
+
const [timeNextReq, setTimeNextReq] = useState(0);
|
|
8
|
+
const [isTimerStarted, setIsTimerStarted] = useState(false);
|
|
9
|
+
const [attemps, setAttemps] = useState(0);
|
|
10
|
+
const resetError = useCallback(() => {
|
|
11
|
+
setHasError(false);
|
|
12
|
+
setErrorText('');
|
|
13
|
+
}, []);
|
|
14
|
+
const isTimeExpired = useMemo(() => timeNextReq === 0 && isTimerStarted, [timeNextReq, isTimerStarted]);
|
|
15
|
+
const isSubmitButtonDisabled = useMemo(() => attemps > 2 || !values.every(Boolean) || isTimeExpired, [values]);
|
|
16
|
+
const handleSubmit = useCallback(async () => {
|
|
17
|
+
try {
|
|
18
|
+
setIsTimerStarted(false);
|
|
19
|
+
setTimeNextReq(0);
|
|
20
|
+
setAttemps(attemps + 1);
|
|
21
|
+
setIsLoading(true);
|
|
22
|
+
await RETAIL_API.CheckCode({
|
|
23
|
+
smsText: values.join(''),
|
|
24
|
+
smsCodesSetName: { key: 'AUTHENTICATION' },
|
|
25
|
+
});
|
|
26
|
+
resetError();
|
|
27
|
+
close && close();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
setIsLoading(false);
|
|
31
|
+
attemps > 1 ? setErrorText('Исчерпан лимит ввода смс-кода') : setErrorText('Неверный код');
|
|
32
|
+
setHasError(true);
|
|
33
|
+
}
|
|
34
|
+
}, [values, attemps]);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (isTimeExpired) {
|
|
37
|
+
setHasError(true);
|
|
38
|
+
setErrorText('Код просрочен');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
setHasError(false);
|
|
42
|
+
}
|
|
43
|
+
}, [isTimeExpired]);
|
|
44
|
+
return {
|
|
45
|
+
handleSubmit,
|
|
46
|
+
hasError,
|
|
47
|
+
errorText,
|
|
48
|
+
isLoading,
|
|
49
|
+
timeNextReq,
|
|
50
|
+
isSubmitButtonDisabled,
|
|
51
|
+
setTimeNextReq,
|
|
52
|
+
setIsTimerStarted,
|
|
53
|
+
setAttemps,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=useVerifyPhoneDialogSubmit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVerifyPhoneDialogSubmit.js","sourceRoot":"","sources":["../../../src/ui-kit/VerifyPhoneDialog/useVerifyPhoneDialogSubmit.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAO3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAmC,EAAE,EAAE;IAC/F,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,WAAW,KAAK,CAAC,IAAI,cAAc,EACzC,CAAC,WAAW,EAAE,cAAc,CAAC,CAC9B,CAAC;IAEF,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,aAAa,EAC5D,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI;YACF,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,cAAc,CAAC,CAAC,CAAC,CAAC;YAClB,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,UAAU,CAAC,SAAS,CAAC;gBACzB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,eAAe,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE;aAC3C,CAAC,CAAC;YACH,UAAU,EAAE,CAAC;YACb,KAAK,IAAI,KAAK,EAAE,CAAC;SAClB;QAAC,MAAM;YACN,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAC3F,WAAW,CAAC,IAAI,CAAC,CAAC;SACnB;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,YAAY,CAAC,eAAe,CAAC,CAAC;SAC/B;aAAM;YACL,WAAW,CAAC,KAAK,CAAC,CAAC;SACpB;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,OAAO;QACL,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,SAAS;QACT,WAAW;QACX,sBAAsB;QACtB,cAAc;QACd,iBAAiB;QACjB,UAAU;KACX,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CheckCodeBody, type CreateDraftTaskBody, type CreateDraftTaskResponse, type CreateUserProfileBody, type CreateUserProfileResponse, type SendCodeBody, type UpdateUserProfileBody, type UpdateUserTaskBody } from './RetailApiTypes';
|
|
1
|
+
import { type CapchaTextType, type CheckCodeBody, type CreateDraftTaskBody, type CreateDraftTaskResponse, type CreateUserProfileBody, type CreateUserProfileResponse, type SendCodeBody, type UpdateUserProfileBody, type UpdateUserTaskBody } from './RetailApiTypes';
|
|
2
2
|
export declare const RETAIL_API: {
|
|
3
3
|
CreateUserProfile: (body: CreateUserProfileBody) => Promise<CreateUserProfileResponse>;
|
|
4
4
|
UpdateUserProfile: (body: UpdateUserProfileBody) => Promise<unknown>;
|
|
@@ -6,4 +6,6 @@ export declare const RETAIL_API: {
|
|
|
6
6
|
UpdateUserTask: (body: UpdateUserTaskBody) => Promise<unknown>;
|
|
7
7
|
SendCode: (body: SendCodeBody) => Promise<unknown>;
|
|
8
8
|
CheckCode: (body: CheckCodeBody) => Promise<void>;
|
|
9
|
+
CreateCaptcha: (phoneNumber: string) => Promise<Response>;
|
|
10
|
+
CheckCaptcha: (body: CapchaTextType) => Promise<Response>;
|
|
9
11
|
};
|
|
@@ -1130,9 +1130,9 @@
|
|
|
1130
1130
|
onChange && onChange(!value);
|
|
1131
1131
|
}, [onChange, disabled, value]);
|
|
1132
1132
|
const icon = isRadio ? (jsx("div", { className: "absolute left-1 w-3 h-3 rounded-full bg-primary-main" })) : (jsx(SVG, { paths: CHECK_PATHS, className: "absolute left-1 ml-px block", width: "11", height: "9", fill: "white", viewBox: "0 0 11 9" }));
|
|
1133
|
-
return (jsx("div", { className: className, children: jsxs("label", { className: style('flex items-center relative group/box', getCursorStyle(disabled)), onClick: handleChange, children: [jsx("div", { className: style(defaultCheckStyle, 'm-0', isRadio ? 'rounded-full border-2' : checkboxStyle(value), !disabled && value ? 'border-primary-main' : 'border-gray', disabled ? 'bg-main-disabled' : 'group-hover/box:border-primary-hover'), role: role(isRadio), "aria-checked": Boolean(value), "aria-disabled": Boolean(disabled), "aria-label": text }), value ? icon : null, renderText$
|
|
1133
|
+
return (jsx("div", { className: className, children: jsxs("label", { className: style('flex items-center relative group/box', getCursorStyle(disabled)), onClick: handleChange, children: [jsx("div", { className: style(defaultCheckStyle, 'm-0', isRadio ? 'rounded-full border-2' : checkboxStyle(value), !disabled && value ? 'border-primary-main' : 'border-gray', disabled ? 'bg-main-disabled' : 'group-hover/box:border-primary-hover'), role: role(isRadio), "aria-checked": Boolean(value), "aria-disabled": Boolean(disabled), "aria-label": text }), value ? icon : null, renderText$3(text)] }) }));
|
|
1134
1134
|
});
|
|
1135
|
-
const renderText$
|
|
1135
|
+
const renderText$3 = (text) => text ? (jsx("div", { className: "ml-s", children: jsx(Text, { size: "text-l", font: "font-light", children: text }) })) : null;
|
|
1136
1136
|
const getCursorStyle = (disabled = false) => (disabled ? 'cursor-not-allowed' : 'cursor-pointer');
|
|
1137
1137
|
const role = (isRadio = false) => (isRadio ? 'radio' : 'checkbox');
|
|
1138
1138
|
const checkboxStyle = (value = false) => style('rounded border', { 'bg-primary-main': value });
|
|
@@ -1750,6 +1750,23 @@
|
|
|
1750
1750
|
|
|
1751
1751
|
const BankEmpoleeField = JSX(({ field }) => (jsx(InputControl, { label: "\u0424\u0418\u041E \u0438\u043B\u0438 \u0434\u043E\u043B\u0436\u043D\u043E\u0441\u0442\u044C \u043E\u0431\u0441\u043B\u0443\u0436\u0438\u0432\u0430\u0432\u0448\u0435\u0433\u043E \u0412\u0430\u0441 \u0441\u043E\u0442\u0440\u0443\u0434\u043D\u0438\u043A\u0430 \u0411\u0430\u043D\u043A\u0430", ...field('bankEmpolee') })));
|
|
1752
1752
|
|
|
1753
|
+
const useElementSpace = (ref, heightEl) => {
|
|
1754
|
+
const [spaceAbove, setSpaceAbove] = useState(false);
|
|
1755
|
+
useEffect(() => {
|
|
1756
|
+
const handleResize = () => {
|
|
1757
|
+
if (ref?.current) {
|
|
1758
|
+
const { top } = ref.current.getBoundingClientRect();
|
|
1759
|
+
const hasSpaceAbove = top > heightEl;
|
|
1760
|
+
setSpaceAbove(hasSpaceAbove);
|
|
1761
|
+
}
|
|
1762
|
+
};
|
|
1763
|
+
handleResize();
|
|
1764
|
+
window.addEventListener('resize', handleResize);
|
|
1765
|
+
return () => window.removeEventListener('resize', handleResize);
|
|
1766
|
+
}, [ref]);
|
|
1767
|
+
return spaceAbove;
|
|
1768
|
+
};
|
|
1769
|
+
|
|
1753
1770
|
const DAY_COUNT = 6;
|
|
1754
1771
|
const WEEK_COUNT = 7;
|
|
1755
1772
|
const renderCalendarCells = ({ today, firstDayOfWeek, totalDays, currentMonth, currentYear, min, max, onDateClick, }) => {
|
|
@@ -1888,7 +1905,10 @@
|
|
|
1888
1905
|
selectedMonth,
|
|
1889
1906
|
showCalendar,
|
|
1890
1907
|
});
|
|
1891
|
-
|
|
1908
|
+
const spaceAbove = useElementSpace(ref, 370);
|
|
1909
|
+
return (jsxs("div", { className: style('space-y-xs', className), ref: ref, children: [renderLabel(label), jsxs("div", { className: "relative", children: [renderDatePickerForm(handleChangeVisibleCalendar, value, valid), showCalendar ? (jsxs("div", { className: style('absolute bg-white z-20 select-none', {
|
|
1910
|
+
'bottom-full': spaceAbove,
|
|
1911
|
+
}), children: [jsxs("div", { className: "flex gap-s", children: [jsx("div", { className: "my-auto", onClick: handlePrevMonth, children: jsx(Icon, { ...ICON_PROPS, className: "-rotate-90 cursor-pointer" }) }), jsx(Select, { onChange: handleSelectMonth, value: { key: months[selectedMonth] }, options: monthsOptions, ...SELECT_PROPS }), jsx(Select, { onChange: handleSelectYear, value: { key: String(selectedYear) }, options: yearsOptions, ...SELECT_PROPS }), jsx("div", { className: "my-auto", onClick: handleNextMonth, children: jsx(Icon, { ...ICON_PROPS, className: "rotate-90 cursor-pointer" }) })] }), jsx(Calendar, { today: value, currentMonth: selectedMonth, currentYear: selectedYear, onDateSelect: onChange, min: minDate, max: maxDate, setValue: setValue })] })) : null] })] }));
|
|
1892
1912
|
});
|
|
1893
1913
|
const renderDatePickerForm = (handleChangeVisibleCalendar, value, valid) => (jsxs("div", { onClick: handleChangeVisibleCalendar, className: style(formStyle, valid ? 'border-gray' : 'border-error'), children: [jsx(Paragraph, { children: value && formatDate(value) }), jsx(Icon, { ...ICON_PROPS, name: "CalendarIcon" })] }));
|
|
1894
1914
|
|
|
@@ -2558,6 +2578,7 @@
|
|
|
2558
2578
|
|
|
2559
2579
|
const renderSubmitButton = (button, className) => (jsx(Button, { className: style('w-full @xl:w-auto', className), type: "submit", children: button?.text ? button.text : 'Отправить заявку' }));
|
|
2560
2580
|
|
|
2581
|
+
const getResponse = (response) => (isJSON(response) ? response.json() : response);
|
|
2561
2582
|
const getAthorizationHeaders = () => {
|
|
2562
2583
|
const token = sessionStorage.getItem('accessToken');
|
|
2563
2584
|
return token ? { Authorization: `Bearer ${token}` } : null;
|
|
@@ -2571,7 +2592,18 @@
|
|
|
2571
2592
|
},
|
|
2572
2593
|
credentials: 'include',
|
|
2573
2594
|
body: body ? JSON.stringify(body) : null,
|
|
2574
|
-
})
|
|
2595
|
+
})
|
|
2596
|
+
.then((response) => {
|
|
2597
|
+
if (response.ok) {
|
|
2598
|
+
return getResponse(response);
|
|
2599
|
+
}
|
|
2600
|
+
else {
|
|
2601
|
+
throw response;
|
|
2602
|
+
}
|
|
2603
|
+
})
|
|
2604
|
+
.catch((error) => {
|
|
2605
|
+
throw error;
|
|
2606
|
+
});
|
|
2575
2607
|
const saveToken = (data) => {
|
|
2576
2608
|
sessionStorage.setItem('accessToken', data.access_token);
|
|
2577
2609
|
sessionStorage.setItem('refreshToken', data.refresh_token);
|
|
@@ -2583,6 +2615,8 @@
|
|
|
2583
2615
|
UpdateUserTask: async (body) => await request('/user-data/updateUserTask', 'PUT', body),
|
|
2584
2616
|
SendCode: async (body) => await request('/sms/sendCode', 'POST', body),
|
|
2585
2617
|
CheckCode: async (body) => await request('/sms/checkCode', 'POST', body).then(saveToken),
|
|
2618
|
+
CreateCaptcha: async (phoneNumber) => await request(`/sms/createCaptcha?phoneNumber=${phoneNumber}`, 'GET'),
|
|
2619
|
+
CheckCaptcha: async (body) => await request('/sms/checkCaptcha', 'POST', body),
|
|
2586
2620
|
};
|
|
2587
2621
|
|
|
2588
2622
|
const getUpdateUserProfileData = (profileId, formData) => {
|
|
@@ -2647,6 +2681,71 @@
|
|
|
2647
2681
|
},
|
|
2648
2682
|
});
|
|
2649
2683
|
|
|
2684
|
+
const ICON_SIZE$1 = { width: '103', height: '21' };
|
|
2685
|
+
|
|
2686
|
+
const logoTitleSizeStyle = 'text-s';
|
|
2687
|
+
|
|
2688
|
+
const ICON_VERSION_MAP = {
|
|
2689
|
+
'bg-white': 'color',
|
|
2690
|
+
transparent: 'white',
|
|
2691
|
+
};
|
|
2692
|
+
const SVG_COLOR = {
|
|
2693
|
+
'bg-white': 'text-primary-main',
|
|
2694
|
+
transparent: 'text-white',
|
|
2695
|
+
};
|
|
2696
|
+
const renderImage = (bgColor, image, size) => {
|
|
2697
|
+
const img = image?.src
|
|
2698
|
+
? image
|
|
2699
|
+
: {
|
|
2700
|
+
icon: image?.icon || 'LogoIcon',
|
|
2701
|
+
iconVersion: ICON_VERSION_MAP[bgColor],
|
|
2702
|
+
};
|
|
2703
|
+
return (jsx(Img, { image: img, className: SVG_COLOR[bgColor], width: size?.width, height: size?.height }));
|
|
2704
|
+
};
|
|
2705
|
+
|
|
2706
|
+
const TEXT_COLOR = {
|
|
2707
|
+
'bg-white': 'text-primary-text',
|
|
2708
|
+
transparent: 'text-white',
|
|
2709
|
+
};
|
|
2710
|
+
const Logo = JSX(({ className, href = '/', logo, children, targetBlank, bgColor = 'bg-white', showTitle = true, data, }) => (jsxs("a", { className: style('inline-flex items-center font-sans no-underline', className), href: logo?.href ?? href, target: targetBlank ? '_blank' : '_self', "aria-label": logo?.title ?? 'Россельхозбанк', ...getAspectsAttributes(data), children: [renderImage(bgColor, logo?.image, ICON_SIZE$1), showTitle
|
|
2711
|
+
? children ?? (jsx("div", { className: "ml-s", children: jsx(Text, { font: "font-medium", color: TEXT_COLOR[bgColor], size: logoTitleSizeStyle, children: logo?.title ?? 'Россельхозбанк' }) }))
|
|
2712
|
+
: null] })));
|
|
2713
|
+
|
|
2714
|
+
const checkCaptcha = async ({ code, setHasError, close, sendCode = noop, }) => {
|
|
2715
|
+
const response = await RETAIL_API.CheckCaptcha({ captchaText: code });
|
|
2716
|
+
if ((await response.text()) === 'ERROR') {
|
|
2717
|
+
setHasError(true);
|
|
2718
|
+
}
|
|
2719
|
+
else {
|
|
2720
|
+
sendCode();
|
|
2721
|
+
close?.();
|
|
2722
|
+
}
|
|
2723
|
+
};
|
|
2724
|
+
|
|
2725
|
+
const createCaptcha = async (setCaptcha, phoneNumber) => {
|
|
2726
|
+
const response = await RETAIL_API.CreateCaptcha(phoneNumber);
|
|
2727
|
+
setCaptcha(URL.createObjectURL(await response.blob()));
|
|
2728
|
+
};
|
|
2729
|
+
|
|
2730
|
+
const CaptchaDialog = JSX(({ phoneNumber, close, sendCode, onClose }) => {
|
|
2731
|
+
const [captcha, setCaptcha] = useState('');
|
|
2732
|
+
const [code, setCode] = useState('');
|
|
2733
|
+
const [hasError, setHasError] = useState(false);
|
|
2734
|
+
useEffect(() => {
|
|
2735
|
+
createCaptcha(setCaptcha, phoneNumber);
|
|
2736
|
+
}, []);
|
|
2737
|
+
return (jsx(Dialog, { head: jsx(Logo, {}), onClose: onClose, className: "my-6xl max-w-lg w-full min-h-fit mx-auto rounded-lg", children: jsxs("div", { className: "flex flex-col gap-lg items-center rounded-md", children: [jsxs("div", { className: "flex h-[140px] w-[300px]", children: [jsx("img", { className: "grow", src: captcha }), jsx("div", { onClick: () => createCaptcha(setCaptcha, phoneNumber), className: "flex w-8 items-center justify-center cursor-pointer", children: jsx(Icon, { iconVersion: "normal", name: "RefreshIcon" }) })] }), jsx(Input, { className: "w-[300px]", onChange: setCode, value: code, placeholder: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043A\u043E\u0434 \u0441 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438" }), hasError ? jsx("div", { className: "text-error", children: "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043E\u0434" }) : null, jsxs("div", { className: "flex w-[310px] justify-between", children: [jsx(Button, { onClick: close, version: "secondary", children: "\u0412\u0435\u0440\u043D\u0443\u0442\u044C\u0441\u044F" }), jsx(Button, { type: "submit", disabled: !code, onClick: () => checkCaptcha({ code, setHasError, close, sendCode }), version: "secondary", children: "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C" })] })] }) }));
|
|
2738
|
+
});
|
|
2739
|
+
|
|
2740
|
+
const useCaptchaDialog = (initialProps, onClose) => {
|
|
2741
|
+
const { open, close, closeAll } = useDialogManager();
|
|
2742
|
+
return {
|
|
2743
|
+
open: () => open(jsx(CaptchaDialog, { close: close, onClose: onClose, ...initialProps })),
|
|
2744
|
+
close,
|
|
2745
|
+
closeAll,
|
|
2746
|
+
};
|
|
2747
|
+
};
|
|
2748
|
+
|
|
2650
2749
|
const Loader = JSX(({ color = 'text-primary-main', position = 'absolute', blur = true }) => (jsx("div", { className: style('flex justify-center items-center h-full w-full z-50', position, {
|
|
2651
2750
|
'backdrop-blur': blur,
|
|
2652
2751
|
}), children: jsx("div", { className: style('inline-block h-28 w-28', 'animate-spin rounded-full', 'border-8 border-solid border-current', 'border-r-transparent', color), role: "status" }) })));
|
|
@@ -2671,7 +2770,24 @@
|
|
|
2671
2770
|
return `${minutes}:${seconds}`;
|
|
2672
2771
|
};
|
|
2673
2772
|
|
|
2674
|
-
const
|
|
2773
|
+
const handleSendCode = async ({ phoneNumber, captchaDialog, setTimeNextReq, setIsTimerStarted, setAttemps, }) => {
|
|
2774
|
+
try {
|
|
2775
|
+
await RETAIL_API.SendCode({
|
|
2776
|
+
phoneNumber: phoneNumber,
|
|
2777
|
+
smsCodesSetName: { key: 'AUTHENTICATION' },
|
|
2778
|
+
});
|
|
2779
|
+
setAttemps(0);
|
|
2780
|
+
setTimeNextReq(180);
|
|
2781
|
+
setIsTimerStarted(true);
|
|
2782
|
+
}
|
|
2783
|
+
catch (e) {
|
|
2784
|
+
if (e?.status === 429) {
|
|
2785
|
+
captchaDialog.open();
|
|
2786
|
+
}
|
|
2787
|
+
}
|
|
2788
|
+
};
|
|
2789
|
+
|
|
2790
|
+
const InputCode = JSX(({ values, setValues, hasError, errorText }) => {
|
|
2675
2791
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
2676
2792
|
const inputRefs = useRef([]);
|
|
2677
2793
|
useEffect(() => {
|
|
@@ -2708,7 +2824,7 @@
|
|
|
2708
2824
|
inputRefs.current = [];
|
|
2709
2825
|
}
|
|
2710
2826
|
inputRefs.current[index] = ref;
|
|
2711
|
-
}, onFocus: (event) => event.target.select(), onKeyDown: handleKeyDown(index), className: getInputStyle(index, values, hasError) }, index))) }), hasError ? jsx("div", { className: "text-error", children:
|
|
2827
|
+
}, onFocus: (event) => event.target.select(), onKeyDown: handleKeyDown(index), className: getInputStyle(index, values, hasError) }, index))) }), hasError ? jsx("div", { className: "text-error", children: errorText }) : null] }));
|
|
2712
2828
|
});
|
|
2713
2829
|
const getInputStyle = (index, values, hasError = false) => {
|
|
2714
2830
|
const isInputEmpty = !values[index];
|
|
@@ -2719,42 +2835,85 @@
|
|
|
2719
2835
|
return (jsx(Button, { type: "button", onClick: onClick, disabled: isDisabled, children: jsx(Text, { font: "font-medium", children: text }) }));
|
|
2720
2836
|
});
|
|
2721
2837
|
|
|
2722
|
-
const
|
|
2723
|
-
const { close } = useDialogManager();
|
|
2724
|
-
const [values, setValues] = useState(Array(codeLength).fill(''));
|
|
2838
|
+
const useVerifyPhoneDialogSubmit = ({ close, values }) => {
|
|
2725
2839
|
const [hasError, setHasError] = useState(false);
|
|
2840
|
+
const [errorText, setErrorText] = useState('');
|
|
2726
2841
|
const [isLoading, setIsLoading] = useState(false);
|
|
2727
|
-
const [timeNextReq, setTimeNextReq] = useState(
|
|
2728
|
-
const
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
});
|
|
2842
|
+
const [timeNextReq, setTimeNextReq] = useState(0);
|
|
2843
|
+
const [isTimerStarted, setIsTimerStarted] = useState(false);
|
|
2844
|
+
const [attemps, setAttemps] = useState(0);
|
|
2845
|
+
const resetError = useCallback(() => {
|
|
2846
|
+
setHasError(false);
|
|
2847
|
+
setErrorText('');
|
|
2734
2848
|
}, []);
|
|
2849
|
+
const isTimeExpired = useMemo(() => timeNextReq === 0 && isTimerStarted, [timeNextReq, isTimerStarted]);
|
|
2850
|
+
const isSubmitButtonDisabled = useMemo(() => attemps > 2 || !values.every(Boolean) || isTimeExpired, [values]);
|
|
2735
2851
|
const handleSubmit = useCallback(async () => {
|
|
2736
2852
|
try {
|
|
2853
|
+
setIsTimerStarted(false);
|
|
2854
|
+
setTimeNextReq(0);
|
|
2855
|
+
setAttemps(attemps + 1);
|
|
2737
2856
|
setIsLoading(true);
|
|
2738
2857
|
await RETAIL_API.CheckCode({
|
|
2739
2858
|
smsText: values.join(''),
|
|
2740
2859
|
smsCodesSetName: { key: 'AUTHENTICATION' },
|
|
2741
2860
|
});
|
|
2742
|
-
|
|
2743
|
-
close();
|
|
2744
|
-
onClose && onClose();
|
|
2861
|
+
resetError();
|
|
2862
|
+
close && close();
|
|
2745
2863
|
}
|
|
2746
2864
|
catch {
|
|
2747
2865
|
setIsLoading(false);
|
|
2866
|
+
attemps > 1 ? setErrorText('Исчерпан лимит ввода смс-кода') : setErrorText('Неверный код');
|
|
2748
2867
|
setHasError(true);
|
|
2749
2868
|
}
|
|
2750
|
-
}, [values]);
|
|
2751
|
-
|
|
2869
|
+
}, [values, attemps]);
|
|
2870
|
+
useEffect(() => {
|
|
2871
|
+
if (isTimeExpired) {
|
|
2872
|
+
setHasError(true);
|
|
2873
|
+
setErrorText('Код просрочен');
|
|
2874
|
+
}
|
|
2875
|
+
else {
|
|
2876
|
+
setHasError(false);
|
|
2877
|
+
}
|
|
2878
|
+
}, [isTimeExpired]);
|
|
2879
|
+
return {
|
|
2880
|
+
handleSubmit,
|
|
2881
|
+
hasError,
|
|
2882
|
+
errorText,
|
|
2883
|
+
isLoading,
|
|
2884
|
+
timeNextReq,
|
|
2885
|
+
isSubmitButtonDisabled,
|
|
2886
|
+
setTimeNextReq,
|
|
2887
|
+
setIsTimerStarted,
|
|
2888
|
+
setAttemps,
|
|
2889
|
+
};
|
|
2890
|
+
};
|
|
2891
|
+
|
|
2892
|
+
const VerifyPhoneDialog = JSX(({ close = noop, onClose = noop, title, description, __html, code = true, codeLength = 4, textButton = '', phoneNumber = '+79999999999', }) => {
|
|
2893
|
+
const [values, setValues] = useState(Array(codeLength).fill(''));
|
|
2894
|
+
const { handleSubmit, hasError, errorText, isLoading, timeNextReq, isSubmitButtonDisabled, setTimeNextReq, setIsTimerStarted, setAttemps, } = useVerifyPhoneDialogSubmit({ values, close });
|
|
2895
|
+
const sendCode = useCallback(() => {
|
|
2896
|
+
handleSendCode({
|
|
2897
|
+
phoneNumber,
|
|
2898
|
+
captchaDialog,
|
|
2899
|
+
setTimeNextReq,
|
|
2900
|
+
setIsTimerStarted,
|
|
2901
|
+
setAttemps,
|
|
2902
|
+
});
|
|
2903
|
+
}, []);
|
|
2904
|
+
const captchaDialog = useCaptchaDialog({ phoneNumber, sendCode }, onClose);
|
|
2905
|
+
useEffect(() => {
|
|
2906
|
+
sendCode();
|
|
2907
|
+
}, []);
|
|
2908
|
+
return (jsx(Dialog, { className: "my-6xl max-w-3xl w-full min-h-fit mx-auto rounded-lg", children: jsxs("div", { className: "flex flex-col gap-lg items-center rounded-md", children: [jsx(Headline, { className: "w-full", title: title, description: description, headlineVersion: "S", isEmbedded: true }), code ? (jsx(InputCode, { values: values, setValues: setValues, errorText: errorText, hasError: hasError })) : null, renderText$2(timeNextReq, setTimeNextReq, sendCode), jsx(RichText, { itemSize: "list-s", __html: __html }), renderTextButton(textButton, isSubmitButtonDisabled, handleSubmit), isLoading ? jsx(Loader, { blur: false }) : null] }) }));
|
|
2752
2909
|
});
|
|
2910
|
+
const renderTextButton = (textButton, isDisabled, handleSubmit) => textButton ? (jsx(SubmitButton, { isDisabled: isDisabled, onClick: handleSubmit, text: textButton })) : null;
|
|
2911
|
+
const renderText$2 = (timeNextReq, setTimeNextReq, sendCode) => timeNextReq ? (jsxs("div", { className: "flex flex-row text-l font-light text-primary-main", children: ["\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u043A\u043E\u0434 \u043C\u043E\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437", jsx(Timer, { className: "text-primary-main ml-1", time: timeNextReq, setTime: setTimeNextReq })] })) : (jsx(LinkButton, { onClick: sendCode, className: "text-primary-main", children: "\u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u043A\u043E\u0434" }));
|
|
2753
2912
|
|
|
2754
2913
|
const useVerifyPhoneDialog = (props) => {
|
|
2755
2914
|
const { open, close } = useDialogManager();
|
|
2756
2915
|
return {
|
|
2757
|
-
open: (options = {}) => open(jsx(VerifyPhoneDialog, { ...props }), options),
|
|
2916
|
+
open: (options = {}) => open(jsx(VerifyPhoneDialog, { onClose: close, ...props }), options),
|
|
2758
2917
|
close,
|
|
2759
2918
|
};
|
|
2760
2919
|
};
|
|
@@ -2781,7 +2940,7 @@
|
|
|
2781
2940
|
programId,
|
|
2782
2941
|
});
|
|
2783
2942
|
await RETAIL_API.UpdateUserTask(getUpdateUserTaskData(participantId, taskId, profileId, formData));
|
|
2784
|
-
|
|
2943
|
+
globalThis.location.href = '/credit-lead';
|
|
2785
2944
|
}
|
|
2786
2945
|
catch {
|
|
2787
2946
|
setResponseStatus('Fail');
|
|
@@ -2789,7 +2948,7 @@
|
|
|
2789
2948
|
};
|
|
2790
2949
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
2791
2950
|
const verifyPhoneDialog = useVerifyPhoneDialog({
|
|
2792
|
-
|
|
2951
|
+
close: handleSuccessVerify,
|
|
2793
2952
|
...verifyPhoneContent(formData?.phone),
|
|
2794
2953
|
});
|
|
2795
2954
|
verifyPhoneDialog.open();
|
|
@@ -2807,14 +2966,13 @@
|
|
|
2807
2966
|
const verifyPhoneContent = (phone) => ({
|
|
2808
2967
|
title: 'Подтвердите номер телефона',
|
|
2809
2968
|
description: `Мы отправили код на ${phone}`,
|
|
2810
|
-
|
|
2969
|
+
phoneNumber: formatPhone(phone),
|
|
2811
2970
|
textButton: 'Оформить',
|
|
2812
2971
|
__html: `<span>Вводя код, я подтверждаю, что ознакомлен и подписываю:</span>
|
|
2813
2972
|
<ul><li>соглашение о порядке использования простой электронной подписи,
|
|
2814
2973
|
</li><li>согласие на обработку персональных данных,
|
|
2815
2974
|
</li><li>предоставление и подписание прочих согласий Банка,
|
|
2816
2975
|
</li><li>согласие на запрос в ПФР</li></ul>`,
|
|
2817
|
-
href: '/credit-lead',
|
|
2818
2976
|
});
|
|
2819
2977
|
|
|
2820
2978
|
const useInitApplicationLead = () => {
|
|
@@ -4547,7 +4705,7 @@
|
|
|
4547
4705
|
return null;
|
|
4548
4706
|
};
|
|
4549
4707
|
|
|
4550
|
-
const ICON_SIZE
|
|
4708
|
+
const ICON_SIZE = { width: '24', height: '24' };
|
|
4551
4709
|
const PaginationContainer = ({ currentPage, onPageChange, totalPages, }) => {
|
|
4552
4710
|
const pages = useMemo(() => Array.from({ length: totalPages }).fill({
|
|
4553
4711
|
currentPage,
|
|
@@ -4566,7 +4724,7 @@
|
|
|
4566
4724
|
}, [currentPage, totalPages]);
|
|
4567
4725
|
const handleFirstPage = useCallback(() => onPageChange(1), []);
|
|
4568
4726
|
const handleLastPage = useCallback(() => onPageChange(totalPages), [totalPages]);
|
|
4569
|
-
return (jsxs("div", { className: "flex gap-m items-center", children: [jsx("div", { onClick: handlePrevPage, children: jsx(Icon, { name: "ArrowLeftIcon", iconVersion: "black", imageClassName: getIconStyle(currentPage === 1), ...ICON_SIZE
|
|
4727
|
+
return (jsxs("div", { className: "flex gap-m items-center", children: [jsx("div", { onClick: handlePrevPage, children: jsx(Icon, { name: "ArrowLeftIcon", iconVersion: "black", imageClassName: getIconStyle(currentPage === 1), ...ICON_SIZE }) }), jsxs("div", { className: "flex @lg:gap-2xs", children: [currentPage > 1 ? (jsx("div", { onClick: handleFirstPage, className: paginationBlockStyle, "aria-label": "\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0430 1", children: "1" })) : null, currentPage > 3 ? jsx("div", { className: "py-m @lg:px-s", children: "..." }) : null, pages.map(renderPages), currentPage < totalPages - 2 ? jsx("div", { className: "py-m @lg:px-s", children: "..." }) : null, currentPage < totalPages ? (jsx("div", { onClick: handleLastPage, className: paginationBlockStyle, "aria-label": `Страница ${totalPages}`, children: totalPages })) : null] }), jsx("div", { onClick: handleNextPage, children: jsx(Icon, { className: "rotate-180", name: "ArrowLeftIcon", iconVersion: "black", imageClassName: getIconStyle(currentPage === totalPages), ...ICON_SIZE }) })] }));
|
|
4570
4728
|
};
|
|
4571
4729
|
const getIconStyle = (condition) => condition ? 'opacity-20' : 'cursor-pointer hover:opacity-60';
|
|
4572
4730
|
|
|
@@ -4942,36 +5100,6 @@
|
|
|
4942
5100
|
return (jsx(BlockWrapper, { className: className, defaultPadding: "p-6xl", ...rest, children: jsxs("div", { className: "container max-w-[978px] space-y-m", children: [title ? jsx(Heading, { headingType: "h3", title: title, className: "@xl:text-center" }) : null, regions ? (jsx(SelectControl, { label: "\u0412\u0430\u0448 \u0440\u0435\u0433\u0438\u043E\u043D", placeholder: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0435\u0433\u0438\u043E\u043D", isSearch: true, options: regions.map(({ name = '' }) => ({ key: name, text: name })), value: region, onChange: setRegion })) : null, regionHref ? (jsx("div", { className: "text-center", children: jsx(LinkButton, { href: regionHref, target: "_blank", className: style('p-m w-full @xl:w-auto', buttonStyle), data: getAspectsWithInclude(data, region?.key), children: buttonText }) })) : null] }) }));
|
|
4943
5101
|
});
|
|
4944
5102
|
|
|
4945
|
-
const ICON_SIZE = { width: '103', height: '21' };
|
|
4946
|
-
|
|
4947
|
-
const logoTitleSizeStyle = 'text-s';
|
|
4948
|
-
|
|
4949
|
-
const ICON_VERSION_MAP = {
|
|
4950
|
-
'bg-white': 'color',
|
|
4951
|
-
transparent: 'white',
|
|
4952
|
-
};
|
|
4953
|
-
const SVG_COLOR = {
|
|
4954
|
-
'bg-white': 'text-primary-main',
|
|
4955
|
-
transparent: 'text-white',
|
|
4956
|
-
};
|
|
4957
|
-
const renderImage = (bgColor, image, size) => {
|
|
4958
|
-
const img = image?.src
|
|
4959
|
-
? image
|
|
4960
|
-
: {
|
|
4961
|
-
icon: image?.icon || 'LogoIcon',
|
|
4962
|
-
iconVersion: ICON_VERSION_MAP[bgColor],
|
|
4963
|
-
};
|
|
4964
|
-
return (jsx(Img, { image: img, className: SVG_COLOR[bgColor], width: size?.width, height: size?.height }));
|
|
4965
|
-
};
|
|
4966
|
-
|
|
4967
|
-
const TEXT_COLOR = {
|
|
4968
|
-
'bg-white': 'text-primary-text',
|
|
4969
|
-
transparent: 'text-white',
|
|
4970
|
-
};
|
|
4971
|
-
const Logo = JSX(({ className, href = '/', logo, children, targetBlank, bgColor = 'bg-white', showTitle = true, data, }) => (jsxs("a", { className: style('inline-flex items-center font-sans no-underline', className), href: logo?.href ?? href, target: targetBlank ? '_blank' : '_self', "aria-label": logo?.title ?? 'Россельхозбанк', ...getAspectsAttributes(data), children: [renderImage(bgColor, logo?.image, ICON_SIZE), showTitle
|
|
4972
|
-
? children ?? (jsx("div", { className: "ml-s", children: jsx(Text, { font: "font-medium", color: TEXT_COLOR[bgColor], size: logoTitleSizeStyle, children: logo?.title ?? 'Россельхозбанк' }) }))
|
|
4973
|
-
: null] })));
|
|
4974
|
-
|
|
4975
5103
|
const BUTTON_STYLE = {
|
|
4976
5104
|
default: 'bg-main-divider text-primary-main rounded hover:text-primary-main',
|
|
4977
5105
|
transparent: 'backdrop-opacity-30 bg-white/30 hover:text-primary-hover text-white',
|
|
@@ -6930,7 +7058,7 @@
|
|
|
6930
7058
|
slots: () => [HEADER_SLOT, FOOTER_SLOT, STICKY_FOOTER_SLOT],
|
|
6931
7059
|
});
|
|
6932
7060
|
|
|
6933
|
-
const packageVersion = "0.14.
|
|
7061
|
+
const packageVersion = "0.14.589";
|
|
6934
7062
|
|
|
6935
7063
|
exports.Blocks = Blocks;
|
|
6936
7064
|
exports.ContentPage = ContentPage;
|