@redneckz/wildless-cms-uni-blocks 0.14.575 → 0.14.576
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/LeadServiceAPI.d.ts +0 -12
- package/bundle/api/dadataHints/dadataHints.d.ts +2 -0
- package/bundle/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/bundle/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/bundle/blocks.schema.json +1 -1
- package/bundle/bundle.umd.js +151 -38
- package/bundle/bundle.umd.min.js +1 -1
- package/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/bundle/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/bundle/index.d.ts +0 -1
- package/bundle/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/bundle/ui-kit/Input/InputPopup.d.ts +7 -0
- package/bundle/ui-kit/Input/InputProps.d.ts +1 -0
- package/bundle/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/dist/api/LeadServiceAPI.d.ts +0 -12
- package/dist/api/LeadServiceAPI.js.map +1 -1
- package/dist/api/dadataHints/dadataHints.d.ts +2 -0
- package/dist/api/dadataHints/dadataHints.js +30 -0
- package/dist/api/dadataHints/dadataHints.js.map +1 -0
- package/dist/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/dist/api/dadataHints/dadataHintsType.js +2 -0
- package/dist/api/dadataHints/dadataHintsType.js.map +1 -0
- package/dist/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/dist/api/dadataHints/hintsListsOptions.js +33 -0
- package/dist/api/dadataHints/hintsListsOptions.js.map +1 -0
- package/dist/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/dist/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/dist/ui-kit/FormField/Fields/EmailField.js +12 -0
- package/dist/ui-kit/FormField/Fields/EmailField.js.map +1 -0
- package/dist/ui-kit/FormField/Fields/MiddleNameField.js +1 -1
- package/dist/ui-kit/FormField/Fields/MiddleNameField.js.map +1 -1
- package/dist/ui-kit/FormField/Fields/SurnameField.js +1 -1
- package/dist/ui-kit/FormField/Fields/SurnameField.js.map +1 -1
- package/dist/ui-kit/FormField/getField.js +3 -2
- package/dist/ui-kit/FormField/getField.js.map +1 -1
- package/dist/ui-kit/Input/InputControl.js +17 -1
- package/dist/ui-kit/Input/InputControl.js.map +1 -1
- package/dist/ui-kit/Input/InputPopup.d.ts +7 -0
- package/dist/ui-kit/Input/InputPopup.js +6 -0
- package/dist/ui-kit/Input/InputPopup.js.map +1 -0
- package/dist/ui-kit/Input/InputProps.d.ts +1 -0
- package/dist/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/dist/ui-kit/Input/useInputPopup.js +62 -0
- package/dist/ui-kit/Input/useInputPopup.js.map +1 -0
- package/lib/api/LeadServiceAPI.d.ts +0 -12
- package/lib/api/LeadServiceAPI.js.map +1 -1
- package/lib/api/dadataHints/dadataHints.d.ts +2 -0
- package/lib/api/dadataHints/dadataHints.js +27 -0
- package/lib/api/dadataHints/dadataHints.js.map +1 -0
- package/lib/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/lib/api/dadataHints/dadataHintsType.js +2 -0
- package/lib/api/dadataHints/dadataHintsType.js.map +1 -0
- package/lib/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/lib/api/dadataHints/hintsListsOptions.js +31 -0
- package/lib/api/dadataHints/hintsListsOptions.js.map +1 -0
- package/lib/common.css +1 -1
- package/lib/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/lib/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/lib/ui-kit/FormField/Fields/EmailField.js +10 -0
- package/lib/ui-kit/FormField/Fields/EmailField.js.map +1 -0
- package/lib/ui-kit/FormField/Fields/MiddleNameField.js +1 -1
- package/lib/ui-kit/FormField/Fields/MiddleNameField.js.map +1 -1
- package/lib/ui-kit/FormField/Fields/SurnameField.js +1 -1
- package/lib/ui-kit/FormField/Fields/SurnameField.js.map +1 -1
- package/lib/ui-kit/FormField/getField.js +3 -2
- package/lib/ui-kit/FormField/getField.js.map +1 -1
- package/lib/ui-kit/Input/InputControl.js +17 -1
- package/lib/ui-kit/Input/InputControl.js.map +1 -1
- package/lib/ui-kit/Input/InputPopup.d.ts +7 -0
- package/lib/ui-kit/Input/InputPopup.js +4 -0
- package/lib/ui-kit/Input/InputPopup.js.map +1 -0
- package/lib/ui-kit/Input/InputProps.d.ts +1 -0
- package/lib/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/lib/ui-kit/Input/useInputPopup.js +59 -0
- package/lib/ui-kit/Input/useInputPopup.js.map +1 -0
- package/mobile/bundle/api/LeadServiceAPI.d.ts +0 -12
- package/mobile/bundle/api/dadataHints/dadataHints.d.ts +2 -0
- package/mobile/bundle/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/mobile/bundle/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/mobile/bundle/bundle.umd.js +151 -38
- package/mobile/bundle/bundle.umd.min.js +1 -1
- package/mobile/bundle/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/mobile/bundle/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/mobile/bundle/index.d.ts +0 -1
- package/mobile/bundle/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/mobile/bundle/ui-kit/Input/InputPopup.d.ts +7 -0
- package/mobile/bundle/ui-kit/Input/InputProps.d.ts +1 -0
- package/mobile/bundle/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/mobile/dist/api/LeadServiceAPI.d.ts +0 -12
- package/mobile/dist/api/LeadServiceAPI.js.map +1 -1
- package/mobile/dist/api/dadataHints/dadataHints.d.ts +2 -0
- package/mobile/dist/api/dadataHints/dadataHints.js +30 -0
- package/mobile/dist/api/dadataHints/dadataHints.js.map +1 -0
- package/mobile/dist/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/mobile/dist/api/dadataHints/dadataHintsType.js +2 -0
- package/mobile/dist/api/dadataHints/dadataHintsType.js.map +1 -0
- package/mobile/dist/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/mobile/dist/api/dadataHints/hintsListsOptions.js +33 -0
- package/mobile/dist/api/dadataHints/hintsListsOptions.js.map +1 -0
- package/mobile/dist/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/mobile/dist/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/mobile/dist/index.d.ts +0 -1
- package/mobile/dist/index.js +1 -3
- package/mobile/dist/index.js.map +1 -1
- package/mobile/dist/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/mobile/dist/ui-kit/FormField/Fields/EmailField.js +12 -0
- package/mobile/dist/ui-kit/FormField/Fields/EmailField.js.map +1 -0
- package/mobile/dist/ui-kit/FormField/Fields/MiddleNameField.js +1 -1
- package/mobile/dist/ui-kit/FormField/Fields/MiddleNameField.js.map +1 -1
- package/mobile/dist/ui-kit/FormField/Fields/SurnameField.js +1 -1
- package/mobile/dist/ui-kit/FormField/Fields/SurnameField.js.map +1 -1
- package/mobile/dist/ui-kit/FormField/getField.js +3 -2
- package/mobile/dist/ui-kit/FormField/getField.js.map +1 -1
- package/mobile/dist/ui-kit/Input/InputControl.js +17 -1
- package/mobile/dist/ui-kit/Input/InputControl.js.map +1 -1
- package/mobile/dist/ui-kit/Input/InputPopup.d.ts +7 -0
- package/mobile/dist/ui-kit/Input/InputPopup.js +6 -0
- package/mobile/dist/ui-kit/Input/InputPopup.js.map +1 -0
- package/mobile/dist/ui-kit/Input/InputProps.d.ts +1 -0
- package/mobile/dist/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/mobile/dist/ui-kit/Input/useInputPopup.js +62 -0
- package/mobile/dist/ui-kit/Input/useInputPopup.js.map +1 -0
- package/mobile/lib/api/LeadServiceAPI.d.ts +0 -12
- package/mobile/lib/api/LeadServiceAPI.js.map +1 -1
- package/mobile/lib/api/dadataHints/dadataHints.d.ts +2 -0
- package/mobile/lib/api/dadataHints/dadataHints.js +27 -0
- package/mobile/lib/api/dadataHints/dadataHints.js.map +1 -0
- package/mobile/lib/api/dadataHints/dadataHintsType.d.ts +27 -0
- package/mobile/lib/api/dadataHints/dadataHintsType.js +2 -0
- package/mobile/lib/api/dadataHints/dadataHintsType.js.map +1 -0
- package/mobile/lib/api/dadataHints/hintsListsOptions.d.ts +33 -0
- package/mobile/lib/api/dadataHints/hintsListsOptions.js +31 -0
- package/mobile/lib/api/dadataHints/hintsListsOptions.js.map +1 -0
- package/mobile/lib/common.css +1 -1
- package/mobile/lib/components/ApplicationForm/ApplicationFormContent.d.ts +1 -0
- package/mobile/lib/components/ApplicationLeadForm/ApplicationLeadFormContent.d.ts +1 -0
- package/mobile/lib/index.d.ts +0 -1
- package/mobile/lib/index.js +0 -1
- package/mobile/lib/index.js.map +1 -1
- package/mobile/lib/ui-kit/FormField/Fields/EmailField.d.ts +2 -0
- package/mobile/lib/ui-kit/FormField/Fields/EmailField.js +10 -0
- package/mobile/lib/ui-kit/FormField/Fields/EmailField.js.map +1 -0
- package/mobile/lib/ui-kit/FormField/Fields/MiddleNameField.js +1 -1
- package/mobile/lib/ui-kit/FormField/Fields/MiddleNameField.js.map +1 -1
- package/mobile/lib/ui-kit/FormField/Fields/SurnameField.js +1 -1
- package/mobile/lib/ui-kit/FormField/Fields/SurnameField.js.map +1 -1
- package/mobile/lib/ui-kit/FormField/getField.js +3 -2
- package/mobile/lib/ui-kit/FormField/getField.js.map +1 -1
- package/mobile/lib/ui-kit/Input/InputControl.js +17 -1
- package/mobile/lib/ui-kit/Input/InputControl.js.map +1 -1
- package/mobile/lib/ui-kit/Input/InputPopup.d.ts +7 -0
- package/mobile/lib/ui-kit/Input/InputPopup.js +4 -0
- package/mobile/lib/ui-kit/Input/InputPopup.js.map +1 -0
- package/mobile/lib/ui-kit/Input/InputProps.d.ts +1 -0
- package/mobile/lib/ui-kit/Input/useInputPopup.d.ts +10 -0
- package/mobile/lib/ui-kit/Input/useInputPopup.js +59 -0
- package/mobile/lib/ui-kit/Input/useInputPopup.js.map +1 -0
- package/mobile/src/api/LeadServiceAPI.ts +0 -14
- package/mobile/src/api/dadataHints/dadataHints.ts +33 -0
- package/mobile/src/api/dadataHints/dadataHintsType.ts +33 -0
- package/mobile/src/api/dadataHints/hintsListsOptions.ts +44 -0
- package/mobile/src/components/ApplicationForm/ApplicationFormContent.ts +1 -0
- package/mobile/src/components/ApplicationLeadForm/ApplicationLeadFormContent.ts +1 -0
- package/mobile/src/index.ts +0 -1
- package/mobile/src/ui-kit/FormField/Fields/EmailField.tsx +18 -0
- package/mobile/src/ui-kit/FormField/Fields/MiddleNameField.tsx +2 -2
- package/mobile/src/ui-kit/FormField/Fields/SurnameField.tsx +1 -0
- package/mobile/src/ui-kit/FormField/getField.tsx +3 -8
- package/mobile/src/ui-kit/Input/InputControl.tsx +48 -18
- package/mobile/src/ui-kit/Input/InputPopup.tsx +26 -0
- package/mobile/src/ui-kit/Input/InputProps.ts +1 -0
- package/mobile/src/ui-kit/Input/useInputPopup.tsx +85 -0
- package/package.json +2 -2
- package/src/api/LeadServiceAPI.ts +0 -14
- package/src/api/dadataHints/dadataHints.ts +33 -0
- package/src/api/dadataHints/dadataHintsType.ts +33 -0
- package/src/api/dadataHints/hintsListsOptions.ts +44 -0
- package/src/components/ApplicationForm/ApplicationFormContent.ts +1 -0
- package/src/components/ApplicationLeadForm/ApplicationLeadForm.fixture.tsx +4 -4
- package/src/components/ApplicationLeadForm/ApplicationLeadFormContent.ts +1 -0
- package/src/index.ts +0 -1
- package/src/ui-kit/FormField/Fields/EmailField.tsx +18 -0
- package/src/ui-kit/FormField/Fields/MiddleNameField.tsx +2 -2
- package/src/ui-kit/FormField/Fields/SurnameField.tsx +1 -0
- package/src/ui-kit/FormField/getField.tsx +3 -8
- package/src/ui-kit/Input/InputControl.tsx +48 -18
- package/src/ui-kit/Input/InputPopup.tsx +26 -0
- package/src/ui-kit/Input/InputProps.ts +1 -0
- package/src/ui-kit/Input/useInputPopup.tsx +85 -0
- package/bundle/api/DaDataAPI.d.ts +0 -15
- package/dist/api/DaDataAPI.d.ts +0 -15
- package/dist/api/DaDataAPI.js +0 -33
- package/dist/api/DaDataAPI.js.map +0 -1
- package/lib/api/DaDataAPI.d.ts +0 -15
- package/lib/api/DaDataAPI.js +0 -30
- package/lib/api/DaDataAPI.js.map +0 -1
- package/mobile/bundle/api/DaDataAPI.d.ts +0 -15
- package/mobile/dist/api/DaDataAPI.d.ts +0 -15
- package/mobile/dist/api/DaDataAPI.js +0 -33
- package/mobile/dist/api/DaDataAPI.js.map +0 -1
- package/mobile/lib/api/DaDataAPI.d.ts +0 -15
- package/mobile/lib/api/DaDataAPI.js +0 -30
- package/mobile/lib/api/DaDataAPI.js.map +0 -1
- package/mobile/src/api/DaDataAPI.ts +0 -48
- package/src/api/DaDataAPI.ts +0 -48
package/src/index.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { setupHooks } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
2
|
export { setup } from '@redneckz/uni-jsx/lib/setup';
|
|
3
|
-
export { DaDataAPI } from './api/DaDataAPI';
|
|
4
3
|
export { Blocks } from './components/Blocks';
|
|
5
4
|
export { ContentPage } from './components/ContentPage/ContentPage';
|
|
6
5
|
export { handlerDecorator } from './hooks/handlerDecorator';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { type FieldDef } from '../../../components/ApplicationForm/ApplicationFormContent';
|
|
3
|
+
import { InputControl } from '../../Input/InputControl';
|
|
4
|
+
import { type CustomFieldProps } from '../CustomFieldProps';
|
|
5
|
+
import { validatorObj } from '../getObjectValidator';
|
|
6
|
+
import { getValidation } from '../getValidation';
|
|
7
|
+
|
|
8
|
+
export const EmailField = JSX<CustomFieldProps>(({ field, input }) => {
|
|
9
|
+
const { required, ...rest } = input as FieldDef;
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<InputControl
|
|
13
|
+
label="Электронная почта"
|
|
14
|
+
{...getValidation(field('email'), validatorObj.email, required)}
|
|
15
|
+
{...rest}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
});
|
|
@@ -2,6 +2,6 @@ import { JSX } from '@redneckz/uni-jsx';
|
|
|
2
2
|
import { InputControl } from '../../Input/InputControl';
|
|
3
3
|
import { type CustomFieldProps } from '../CustomFieldProps';
|
|
4
4
|
|
|
5
|
-
export const MiddleNameField = JSX<CustomFieldProps>(({ field }) => (
|
|
6
|
-
<InputControl label="Отчество (Обязательно, при наличии)" {...field('middleName')} />
|
|
5
|
+
export const MiddleNameField = JSX<CustomFieldProps>(({ field, input }) => (
|
|
6
|
+
<InputControl label="Отчество (Обязательно, при наличии)" {...field('middleName')} {...input} />
|
|
7
7
|
));
|
|
@@ -14,6 +14,7 @@ import { ConsentInformField } from './Fields/ConsentInformField';
|
|
|
14
14
|
import { ConsentPhotoFlg } from './Fields/ConsentPhotoField';
|
|
15
15
|
import { ConsentProviderField } from './Fields/ConsentProviderField';
|
|
16
16
|
import { ConsentToReceiveMaterialsField } from './Fields/ConsentToReceiveMaterialsField';
|
|
17
|
+
import { EmailField } from './Fields/EmailField';
|
|
17
18
|
import { FeedbackMethodField } from './Fields/FeedbackMethodField';
|
|
18
19
|
import { FeedbackTypeField } from './Fields/FeedbackTypeField';
|
|
19
20
|
import { IsClientField } from './Fields/IsClientField';
|
|
@@ -51,15 +52,9 @@ export const getField =
|
|
|
51
52
|
const InputsMap = {
|
|
52
53
|
surname: <SurnameField field={field} input={input} />,
|
|
53
54
|
name: <NameField field={field} input={input} />,
|
|
54
|
-
middleName: <MiddleNameField field={field} />,
|
|
55
|
+
middleName: <MiddleNameField field={field} input={input} />,
|
|
55
56
|
phone: <PhoneField field={field} input={input} />,
|
|
56
|
-
email:
|
|
57
|
-
<InputControl
|
|
58
|
-
label="Электронная почта"
|
|
59
|
-
{...getValidation(field('email'), validatorObj.email, required)}
|
|
60
|
-
{...rest}
|
|
61
|
-
/>
|
|
62
|
-
),
|
|
57
|
+
email: <EmailField field={field} input={input} />,
|
|
63
58
|
fullName: (
|
|
64
59
|
<InputControl
|
|
65
60
|
label="ФИО"
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { useBool } from '@redneckz/uni-jsx/lib/hooks/useBool';
|
|
3
|
+
import { useOutsideClick } from '@redneckz/uni-jsx/lib/hooks/useOutsideClick';
|
|
4
|
+
import { noop } from '../../utils/noop';
|
|
2
5
|
import { style } from '../../utils/style';
|
|
3
6
|
import { Input } from './Input';
|
|
4
7
|
import { type InputProps } from './InputProps';
|
|
5
8
|
import { renderErrorText } from './renderErrorText';
|
|
9
|
+
import { useInputPopup } from './useInputPopup';
|
|
6
10
|
|
|
7
11
|
export const InputControl = JSX<InputProps>(
|
|
8
12
|
({
|
|
@@ -11,25 +15,51 @@ export const InputControl = JSX<InputProps>(
|
|
|
11
15
|
value = '',
|
|
12
16
|
placeholder,
|
|
13
17
|
error,
|
|
14
|
-
|
|
18
|
+
errors,
|
|
19
|
+
onChange = noop,
|
|
15
20
|
onBlur,
|
|
16
21
|
isTextarea,
|
|
17
22
|
type,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
name = '',
|
|
24
|
+
dadata = false,
|
|
25
|
+
}) => {
|
|
26
|
+
const [isOpen, { setFalse: close, setTrue: open }] = useBool();
|
|
27
|
+
const popupRef = useOutsideClick<HTMLDivElement>(close);
|
|
28
|
+
|
|
29
|
+
const inputRef = useInputPopup({
|
|
30
|
+
isOpen: isOpen && dadata,
|
|
31
|
+
name,
|
|
32
|
+
value,
|
|
33
|
+
onChange,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<div
|
|
38
|
+
className={style('shrink-0 w-full', className)}
|
|
39
|
+
ref={popupRef}
|
|
40
|
+
onBlur={close}
|
|
41
|
+
onFocus={open}
|
|
42
|
+
>
|
|
43
|
+
<div ref={inputRef}>
|
|
44
|
+
<Input
|
|
45
|
+
type={type || 'text'}
|
|
46
|
+
aria-label={label}
|
|
47
|
+
label={getLabel(errors, label)}
|
|
48
|
+
valid={Boolean(!error)}
|
|
49
|
+
value={value}
|
|
50
|
+
onChange={onChange}
|
|
51
|
+
onBlur={onBlur}
|
|
52
|
+
isTextarea={isTextarea}
|
|
53
|
+
placeholder={getPlaceholder(placeholder, errors, label)}
|
|
54
|
+
/>
|
|
55
|
+
</div>
|
|
56
|
+
{renderErrorText(error)}
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
},
|
|
35
60
|
);
|
|
61
|
+
|
|
62
|
+
const getLabel = (errors?: string[], label?: string) => (label && errors ? `${label}*` : label);
|
|
63
|
+
|
|
64
|
+
const getPlaceholder = (placeholder?: string, errors?: string[], label?: string) =>
|
|
65
|
+
errors && !label ? `${placeholder}*` : placeholder;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { JSX } from '@redneckz/uni-jsx';
|
|
2
|
+
import { type DaDataSuggestion } from '../../api/dadataHints/dadataHintsType';
|
|
3
|
+
|
|
4
|
+
export interface InputPopupProps {
|
|
5
|
+
options?: Array<DaDataSuggestion>;
|
|
6
|
+
onChange: (e: string) => void;
|
|
7
|
+
value?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const InputPopup = JSX<InputPopupProps>(({ options, onChange }) => (
|
|
11
|
+
<div
|
|
12
|
+
className="bg-white text-l max-h-64 overflow-y-auto overflow-x-hidden rounded-md shadow-2xl"
|
|
13
|
+
role="list"
|
|
14
|
+
>
|
|
15
|
+
{options?.map((item, key) => (
|
|
16
|
+
<div
|
|
17
|
+
key={key.toString()}
|
|
18
|
+
className="flex px-m py-s cursor-pointer hover:bg-main-divider pr-5xl relative"
|
|
19
|
+
role="listitem"
|
|
20
|
+
onMouseDown={() => onChange(item.processedValue)}
|
|
21
|
+
>
|
|
22
|
+
<span className="min-h-6">{item.processedValue}</span>
|
|
23
|
+
</div>
|
|
24
|
+
))}
|
|
25
|
+
</div>
|
|
26
|
+
));
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from '@redneckz/uni-jsx/lib/hooks';
|
|
2
|
+
import { getDaDataHints } from '../../api/dadataHints/dadataHints';
|
|
3
|
+
import { type DaDataSuggestion } from '../../api/dadataHints/dadataHintsType';
|
|
4
|
+
import { hintsListsOptions } from '../../api/dadataHints/hintsListsOptions';
|
|
5
|
+
import { debounce } from '../../utils/debounce';
|
|
6
|
+
import { usePopupManager } from '../PopupManager/usePopupManager';
|
|
7
|
+
import { InputPopup } from './InputPopup';
|
|
8
|
+
|
|
9
|
+
interface InputPopupOptions {
|
|
10
|
+
isOpen?: boolean;
|
|
11
|
+
name: string;
|
|
12
|
+
value?: string;
|
|
13
|
+
onChange: (e: string) => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function useInputPopup({ isOpen, value, name, onChange }: InputPopupOptions) {
|
|
17
|
+
const prevInputValue = useRef(value);
|
|
18
|
+
const currentInputValue = useRef(value);
|
|
19
|
+
const [hintsList, setHintsList] = useState<Array<DaDataSuggestion>>([]);
|
|
20
|
+
const popup = usePopupManager();
|
|
21
|
+
|
|
22
|
+
const defaultHintsListOptions = hintsListsOptions[name];
|
|
23
|
+
|
|
24
|
+
const close = useCallback(() => {
|
|
25
|
+
currentInputValue.current = value;
|
|
26
|
+
popup.close();
|
|
27
|
+
}, [value]);
|
|
28
|
+
|
|
29
|
+
const handleChange = useCallback(
|
|
30
|
+
(option: string) => {
|
|
31
|
+
close();
|
|
32
|
+
currentInputValue.current = option;
|
|
33
|
+
onChange && onChange(option);
|
|
34
|
+
},
|
|
35
|
+
[close, onChange],
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const inputRef = useRef<HTMLDivElement | null>(null);
|
|
39
|
+
|
|
40
|
+
const getHintsList = useMemo(
|
|
41
|
+
() => async (searchValue: string) => {
|
|
42
|
+
if (!defaultHintsListOptions) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const result = await getDaDataHints({
|
|
46
|
+
url: defaultHintsListOptions.url,
|
|
47
|
+
requestData: {
|
|
48
|
+
...defaultHintsListOptions?.requestData,
|
|
49
|
+
},
|
|
50
|
+
query: searchValue,
|
|
51
|
+
});
|
|
52
|
+
if (result?.length) {
|
|
53
|
+
setHintsList(result);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
[],
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const debouncedGetHintsList = useMemo(() => debounce(getHintsList, 300), [getHintsList]);
|
|
60
|
+
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (!isOpen || !inputRef.current || currentInputValue.current === value) {
|
|
63
|
+
close();
|
|
64
|
+
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const inputElement = inputRef.current;
|
|
69
|
+
const { top, left, width, height } = inputElement.getBoundingClientRect();
|
|
70
|
+
|
|
71
|
+
if (value && prevInputValue.current !== value) {
|
|
72
|
+
debouncedGetHintsList(value);
|
|
73
|
+
|
|
74
|
+
prevInputValue.current = value;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
popup.update(<InputPopup options={hintsList} value={value} onChange={handleChange} />, {
|
|
78
|
+
top: top + globalThis.scrollY + height,
|
|
79
|
+
left,
|
|
80
|
+
width,
|
|
81
|
+
});
|
|
82
|
+
}, [isOpen, hintsList, value, handleChange]);
|
|
83
|
+
|
|
84
|
+
return inputRef;
|
|
85
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
package/dist/api/DaDataAPI.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
package/dist/api/DaDataAPI.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.DaDataAPI = void 0;
|
|
3
|
-
const getGeolocation_1 = require("../utils/getGeolocation");
|
|
4
|
-
function DaDataAPI(baseURL = '') {
|
|
5
|
-
async function getFetcherAddress() {
|
|
6
|
-
if (!('geolocation' in navigator)) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
try {
|
|
10
|
-
const coords = await (0, getGeolocation_1.getGeolocation)();
|
|
11
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
12
|
-
method: 'POST',
|
|
13
|
-
mode: 'cors',
|
|
14
|
-
body: JSON.stringify({
|
|
15
|
-
lat: coords.latitude,
|
|
16
|
-
lon: coords.longitude,
|
|
17
|
-
count: 1,
|
|
18
|
-
}),
|
|
19
|
-
});
|
|
20
|
-
const data = (await response.json());
|
|
21
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
console.error(e);
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
getFetcherAddress,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
exports.DaDataAPI = DaDataAPI;
|
|
33
|
-
//# sourceMappingURL=DaDataAPI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaDataAPI.js","sourceRoot":"","sources":["../../src/api/DaDataAPI.ts"],"names":[],"mappings":";;AAAA,4DAAyD;AAgBzD,SAAgB,SAAS,CAAC,OAAO,GAAG,EAAE;IACpC,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACb;QAED,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAc,GAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,EAAE,MAAM,CAAC,QAAQ;oBACpB,GAAG,EAAE,MAAM,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC;iBACT,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YAErD,OAAO,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjB,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,OAAO;QACL,iBAAiB;KAClB,CAAC;AACJ,CAAC;AA/BD,8BA+BC"}
|
package/lib/api/DaDataAPI.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
package/lib/api/DaDataAPI.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { getGeolocation } from '../utils/getGeolocation.js';
|
|
2
|
-
export function DaDataAPI(baseURL = '') {
|
|
3
|
-
async function getFetcherAddress() {
|
|
4
|
-
if (!('geolocation' in navigator)) {
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
try {
|
|
8
|
-
const coords = await getGeolocation();
|
|
9
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
10
|
-
method: 'POST',
|
|
11
|
-
mode: 'cors',
|
|
12
|
-
body: JSON.stringify({
|
|
13
|
-
lat: coords.latitude,
|
|
14
|
-
lon: coords.longitude,
|
|
15
|
-
count: 1,
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
const data = (await response.json());
|
|
19
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
console.error(e);
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
getFetcherAddress,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=DaDataAPI.js.map
|
package/lib/api/DaDataAPI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaDataAPI.js","sourceRoot":"","sources":["../../src/api/DaDataAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAgBzD,MAAM,UAAU,SAAS,CAAC,OAAO,GAAG,EAAE;IACpC,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACb;QAED,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,EAAE,MAAM,CAAC,QAAQ;oBACpB,GAAG,EAAE,MAAM,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC;iBACT,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YAErD,OAAO,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjB,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,OAAO;QACL,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
2
|
-
exports.DaDataAPI = void 0;
|
|
3
|
-
const getGeolocation_1 = require("../utils/getGeolocation");
|
|
4
|
-
function DaDataAPI(baseURL = '') {
|
|
5
|
-
async function getFetcherAddress() {
|
|
6
|
-
if (!('geolocation' in navigator)) {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
try {
|
|
10
|
-
const coords = await (0, getGeolocation_1.getGeolocation)();
|
|
11
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
12
|
-
method: 'POST',
|
|
13
|
-
mode: 'cors',
|
|
14
|
-
body: JSON.stringify({
|
|
15
|
-
lat: coords.latitude,
|
|
16
|
-
lon: coords.longitude,
|
|
17
|
-
count: 1,
|
|
18
|
-
}),
|
|
19
|
-
});
|
|
20
|
-
const data = (await response.json());
|
|
21
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
console.error(e);
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
getFetcherAddress,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
exports.DaDataAPI = DaDataAPI;
|
|
33
|
-
//# sourceMappingURL=DaDataAPI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaDataAPI.js","sourceRoot":"","sources":["../../src/api/DaDataAPI.ts"],"names":[],"mappings":";;AAAA,4DAAyD;AAgBzD,SAAgB,SAAS,CAAC,OAAO,GAAG,EAAE;IACpC,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACb;QAED,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAc,GAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,EAAE,MAAM,CAAC,QAAQ;oBACpB,GAAG,EAAE,MAAM,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC;iBACT,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YAErD,OAAO,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjB,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,OAAO;QACL,iBAAiB;KAClB,CAAC;AACJ,CAAC;AA/BD,8BA+BC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
interface DaDataSuggestion<T> {
|
|
2
|
-
value?: string;
|
|
3
|
-
unrestricted_value?: string;
|
|
4
|
-
data?: T;
|
|
5
|
-
}
|
|
6
|
-
interface DaDataAddress {
|
|
7
|
-
city?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface DaDataResult {
|
|
10
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
11
|
-
}
|
|
12
|
-
export declare function DaDataAPI(baseURL?: string): {
|
|
13
|
-
getFetcherAddress: () => Promise<string | null | undefined>;
|
|
14
|
-
};
|
|
15
|
-
export {};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { getGeolocation } from '../utils/getGeolocation.js';
|
|
2
|
-
export function DaDataAPI(baseURL = '') {
|
|
3
|
-
async function getFetcherAddress() {
|
|
4
|
-
if (!('geolocation' in navigator)) {
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
try {
|
|
8
|
-
const coords = await getGeolocation();
|
|
9
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
10
|
-
method: 'POST',
|
|
11
|
-
mode: 'cors',
|
|
12
|
-
body: JSON.stringify({
|
|
13
|
-
lat: coords.latitude,
|
|
14
|
-
lon: coords.longitude,
|
|
15
|
-
count: 1,
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
const data = (await response.json());
|
|
19
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
console.error(e);
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
getFetcherAddress,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=DaDataAPI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DaDataAPI.js","sourceRoot":"","sources":["../../src/api/DaDataAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAgBzD,MAAM,UAAU,SAAS,CAAC,OAAO,GAAG,EAAE;IACpC,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC;SACb;QAED,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,GAAG,EAAE,MAAM,CAAC,QAAQ;oBACpB,GAAG,EAAE,MAAM,CAAC,SAAS;oBACrB,KAAK,EAAE,CAAC;iBACT,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YAErD,OAAO,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;SAC3C;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjB,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,OAAO;QACL,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { getGeolocation } from '../utils/getGeolocation';
|
|
2
|
-
|
|
3
|
-
interface DaDataSuggestion<T> {
|
|
4
|
-
value?: string;
|
|
5
|
-
unrestricted_value?: string;
|
|
6
|
-
data?: T;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface DaDataAddress {
|
|
10
|
-
city?: string | null;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface DaDataResult {
|
|
14
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function DaDataAPI(baseURL = '') {
|
|
18
|
-
async function getFetcherAddress() {
|
|
19
|
-
if (!('geolocation' in navigator)) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
const coords = await getGeolocation();
|
|
25
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
26
|
-
method: 'POST',
|
|
27
|
-
mode: 'cors',
|
|
28
|
-
body: JSON.stringify({
|
|
29
|
-
lat: coords.latitude,
|
|
30
|
-
lon: coords.longitude,
|
|
31
|
-
count: 1,
|
|
32
|
-
}),
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const data = (await response.json()) as DaDataResult;
|
|
36
|
-
|
|
37
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
38
|
-
} catch (e) {
|
|
39
|
-
console.error(e);
|
|
40
|
-
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
getFetcherAddress,
|
|
47
|
-
};
|
|
48
|
-
}
|
package/src/api/DaDataAPI.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { getGeolocation } from '../utils/getGeolocation';
|
|
2
|
-
|
|
3
|
-
interface DaDataSuggestion<T> {
|
|
4
|
-
value?: string;
|
|
5
|
-
unrestricted_value?: string;
|
|
6
|
-
data?: T;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface DaDataAddress {
|
|
10
|
-
city?: string | null;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface DaDataResult {
|
|
14
|
-
suggestions?: DaDataSuggestion<DaDataAddress>[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function DaDataAPI(baseURL = '') {
|
|
18
|
-
async function getFetcherAddress() {
|
|
19
|
-
if (!('geolocation' in navigator)) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
const coords = await getGeolocation();
|
|
25
|
-
const response = await fetch(`${baseURL}/geolocate`, {
|
|
26
|
-
method: 'POST',
|
|
27
|
-
mode: 'cors',
|
|
28
|
-
body: JSON.stringify({
|
|
29
|
-
lat: coords.latitude,
|
|
30
|
-
lon: coords.longitude,
|
|
31
|
-
count: 1,
|
|
32
|
-
}),
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const data = (await response.json()) as DaDataResult;
|
|
36
|
-
|
|
37
|
-
return data?.suggestions?.[0]?.data?.city;
|
|
38
|
-
} catch (e) {
|
|
39
|
-
console.error(e);
|
|
40
|
-
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {
|
|
46
|
-
getFetcherAddress,
|
|
47
|
-
};
|
|
48
|
-
}
|