@cloud-ru/ds-uikit-product-fields-predefined 2.0.30-preview-e8fab9b7.0 → 2.0.30-preview-20b4671f.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -10
- package/dist/cjs/components/FieldPhone/FieldPhone.d.ts +2 -2
- package/dist/cjs/components/FieldPhone/hooks/useCountries.d.ts +1 -1
- package/dist/cjs/components/FieldPhone/hooks/useCountries.js +12 -28
- package/dist/cjs/components/FieldPhone/types.d.ts +6 -5
- package/dist/cjs/components/FieldPhone/utils.d.ts +0 -1
- package/dist/cjs/components/FieldPhone/utils.js +1 -3
- package/dist/esm/components/FieldPhone/FieldPhone.d.ts +2 -2
- package/dist/esm/components/FieldPhone/countries.js +1 -1
- package/dist/esm/components/FieldPhone/hooks/useCountries.d.ts +1 -1
- package/dist/esm/components/FieldPhone/hooks/useCountries.js +12 -28
- package/dist/esm/components/FieldPhone/types.d.ts +6 -5
- package/dist/esm/components/FieldPhone/utils.d.ts +0 -1
- package/dist/esm/components/FieldPhone/utils.js +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/src/components/FieldPhone/FieldPhone.tsx +2 -2
- package/src/components/FieldPhone/countries.tsx +1 -1
- package/src/components/FieldPhone/hooks/useCountries.ts +17 -32
- package/src/components/FieldPhone/types.ts +6 -5
- package/src/components/FieldPhone/utils.ts +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloud-ru/ds-uikit-product-fields-predefined",
|
|
3
|
-
"version": "2.0.30-preview-
|
|
3
|
+
"version": "2.0.30-preview-20b4671f.0",
|
|
4
4
|
"description": "Набор предопределённых полей формы поверх @ds/fields — телефон, маски, имя, описание, код и другие готовые сценарии ввода.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -45,20 +45,20 @@
|
|
|
45
45
|
"merge-refs": "^2.0.0",
|
|
46
46
|
"react-imask": "^7.6.1",
|
|
47
47
|
"@cloud-ru/ds-adaptive": "1.0.2",
|
|
48
|
-
"@cloud-ru/ds-
|
|
49
|
-
"@cloud-ru/ds-
|
|
50
|
-
"@cloud-ru/ds-
|
|
51
|
-
"@cloud-ru/ds-icons": "1.5.1-preview-
|
|
52
|
-
"@cloud-ru/ds-
|
|
48
|
+
"@cloud-ru/ds-dropzone": "1.0.3",
|
|
49
|
+
"@cloud-ru/ds-attachment": "1.1.19-preview-20b4671f.0",
|
|
50
|
+
"@cloud-ru/ds-list": "2.3.3-preview-20b4671f.0",
|
|
51
|
+
"@cloud-ru/ds-icons": "1.5.1-preview-20b4671f.0",
|
|
52
|
+
"@cloud-ru/ds-input-private": "1.0.11-preview-20b4671f.0",
|
|
53
53
|
"@cloud-ru/ds-locale": "1.0.0",
|
|
54
|
-
"@cloud-ru/ds-fields": "2.5.3-preview-
|
|
55
|
-
"@cloud-ru/ds-modal": "2.0.1-preview-
|
|
54
|
+
"@cloud-ru/ds-fields": "2.5.3-preview-20b4671f.0",
|
|
55
|
+
"@cloud-ru/ds-modal": "2.0.1-preview-20b4671f.0",
|
|
56
|
+
"@cloud-ru/ds-drawer": "2.0.1-preview-20b4671f.0",
|
|
56
57
|
"@cloud-ru/ds-scroll": "1.0.5",
|
|
57
|
-
"@cloud-ru/ds-
|
|
58
|
-
"@cloud-ru/ds-
|
|
58
|
+
"@cloud-ru/ds-field-decorator": "1.1.4-preview-20b4671f.0",
|
|
59
|
+
"@cloud-ru/ds-button": "1.0.4",
|
|
59
60
|
"@cloud-ru/ds-utils": "1.2.0",
|
|
60
|
-
"@cloud-ru/ds-
|
|
61
|
-
"@cloud-ru/ds-dropzone": "1.0.3"
|
|
61
|
+
"@cloud-ru/ds-tooltip": "1.0.12-preview-20b4671f.0"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"react-hook-form": "^7.79.0",
|
|
@@ -41,8 +41,8 @@ export type FieldPhoneProps = Omit<
|
|
|
41
41
|
/** Плейсхолдер поля поиска в выпадающем списке стран */
|
|
42
42
|
searchPlaceholder?: string;
|
|
43
43
|
onChangeCountry?(country: FieldPhoneOptionsProps): void;
|
|
44
|
-
/**
|
|
45
|
-
options
|
|
44
|
+
/** Список стран селектора: встроенные страны (`includedCountries`) или собственные элементы (`overriddenOptions`) */
|
|
45
|
+
options: CountrySettings;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
export const FieldPhone = forwardRef<HTMLInputElement, FieldPhoneProps>(function FieldPhone(
|
|
@@ -1752,4 +1752,4 @@ export const ALL_COUNTRY_CODES = [
|
|
|
1752
1752
|
JAPAN_COUNTRY_CODE,
|
|
1753
1753
|
] as const;
|
|
1754
1754
|
|
|
1755
|
-
export const ENABLED_COUNTRY_CODES = ALL_COUNTRY_CODES.filter(({ enabled }) => enabled);
|
|
1755
|
+
export const ENABLED_COUNTRY_CODES = /* @__PURE__ */ ALL_COUNTRY_CODES.filter(({ enabled }) => enabled);
|
|
@@ -1,40 +1,25 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { Country, CountrySettings, FieldPhoneOptionsProps } from '../types';
|
|
5
|
-
import { uniqueSet } from '../utils';
|
|
3
|
+
import { CountrySettings, FieldPhoneOptionsProps } from '../types';
|
|
6
4
|
import { useMapCountryToOptions } from './useMapCountryToOptions';
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const { includedCountries, excludedCountries } = optionsSettings;
|
|
17
|
-
const uniqueKey = 'value' satisfies keyof Country;
|
|
6
|
+
function getOptionsKey({ includedCountries, overriddenOptions }: CountrySettings): string {
|
|
7
|
+
if (overriddenOptions) {
|
|
8
|
+
return overriddenOptions
|
|
9
|
+
.map(({ id, iso2, mask, content }) => [id, iso2, mask, content.label, content.caption].join(':'))
|
|
10
|
+
.join();
|
|
11
|
+
}
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return (country: Country) => includedSet.has(country[uniqueKey]);
|
|
22
|
-
}
|
|
23
|
-
if (excludedCountries) {
|
|
24
|
-
const excludedSet = uniqueSet(excludedCountries, uniqueKey);
|
|
25
|
-
return (country: Country) => !excludedSet.has(country[uniqueKey]);
|
|
26
|
-
}
|
|
27
|
-
return () => true;
|
|
28
|
-
}, [optionsSettings]);
|
|
13
|
+
return includedCountries.map(({ value }) => value).join();
|
|
14
|
+
}
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
export function useCountries(optionsSettings: CountrySettings): FieldPhoneOptionsProps[] {
|
|
17
|
+
const mapCountryToOption = useMapCountryToOptions();
|
|
18
|
+
const optionsKey = getOptionsKey(optionsSettings);
|
|
32
19
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}, []);
|
|
39
|
-
}, [optionsSettings, filterCountries, mapCountryToOption]);
|
|
20
|
+
return useMemo(
|
|
21
|
+
() => optionsSettings.overriddenOptions ?? optionsSettings.includedCountries.map(mapCountryToOption),
|
|
22
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
+
[optionsKey, mapCountryToOption],
|
|
24
|
+
);
|
|
40
25
|
}
|
|
@@ -23,10 +23,11 @@ type OneOf<T extends object> = {
|
|
|
23
23
|
}[keyof T];
|
|
24
24
|
|
|
25
25
|
export type CountrySettings = OneOf<{
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Страны селектора в порядке передачи. В бандл попадают флаги только переданных стран;
|
|
28
|
+
* весь встроенный перечень — `ALL_COUNTRY_CODES`.
|
|
29
|
+
*/
|
|
30
|
+
includedCountries: readonly Country[];
|
|
31
|
+
/** Собственные элементы выпадающего списка вместо встроенных стран */
|
|
27
32
|
overriddenOptions: FieldPhoneOptionsProps[];
|
|
28
|
-
/** Список стран, которые должны отображаться в селекторе (из встроенного перечня пакета) */
|
|
29
|
-
includedCountries: Country[];
|
|
30
|
-
/** Список стран, которые будут исключены из встроенного перечня пакета */
|
|
31
|
-
excludedCountries: Country[];
|
|
32
33
|
}>;
|
|
@@ -3,8 +3,6 @@ import { parsePhoneNumber } from 'awesome-phonenumber';
|
|
|
3
3
|
import { ABKHAZIA_COUNTRY_CODE, RUSSIA_COUNTRY_CODE } from './countries';
|
|
4
4
|
import { FieldPhoneOptionsProps } from './types';
|
|
5
5
|
|
|
6
|
-
export const uniqueSet = <T, K extends keyof T>(arr: T[], key: K): Set<T[K]> => new Set(arr.map(obj => obj[key]));
|
|
7
|
-
|
|
8
6
|
/* Приходит +79878887879/+7987****875, на основании mask возвращается +7 987-888-78-79/+7 987-***-*8-75 */
|
|
9
7
|
export const formatPhoneNumber = <T extends { caption: string; mask: string }>(
|
|
10
8
|
phone: string,
|