@alfalab/core-components-select 17.5.1 → 17.6.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/components/arrow/Component.js +1 -1
- package/components/arrow/index.css +3 -3
- package/components/base-checkmark/Component.js +1 -1
- package/components/base-checkmark/index.css +4 -4
- package/components/base-option/Component.js +1 -1
- package/components/base-option/index.css +15 -15
- package/components/base-select/Component.js +24 -12
- package/components/base-select/index.css +11 -11
- package/components/base-select/mobile.css +12 -12
- package/components/checkmark/Component.js +1 -1
- package/components/checkmark/index.css +10 -10
- package/components/checkmark-mobile/Component.js +1 -1
- package/components/checkmark-mobile/index.css +6 -6
- package/components/field/Component.js +1 -1
- package/components/field/index.css +12 -12
- package/components/footer/Component.js +1 -1
- package/components/footer/index.css +5 -5
- package/components/optgroup/Component.js +1 -1
- package/components/optgroup/index.css +6 -6
- package/components/option/Component.js +1 -1
- package/components/option/index.css +19 -19
- package/components/options-list/Component.js +1 -1
- package/components/options-list/index.css +10 -10
- package/components/search/Component.js +1 -1
- package/components/search/index.css +2 -2
- package/components/virtual-options-list/Component.js +1 -1
- package/components/virtual-options-list/index.css +15 -15
- package/cssm/components/base-select/Component.js +22 -10
- package/cssm/{hook-546b2479.js → hook-052c1a2e.js} +20 -8
- package/{hook-64a8061f.d.ts → cssm/hook-2f4e96b2.d.ts} +9 -7
- package/cssm/mobile/Component.mobile.js +7 -9
- package/cssm/presets/index.d.ts +1 -1
- package/cssm/presets/index.js +1 -1
- package/cssm/presets/useSelectWithApply/hook.js +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +2 -2
- package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/cssm/shared/index.js +2 -1
- package/cssm/typings.d.ts +3 -1
- package/cssm/utils.d.ts +3 -2
- package/cssm/utils.js +24 -9
- package/esm/components/arrow/Component.js +1 -1
- package/esm/components/arrow/index.css +3 -3
- package/esm/components/base-checkmark/Component.js +1 -1
- package/esm/components/base-checkmark/index.css +4 -4
- package/esm/components/base-option/Component.js +1 -1
- package/esm/components/base-option/index.css +15 -15
- package/esm/components/base-select/Component.js +25 -13
- package/esm/components/base-select/index.css +11 -11
- package/esm/components/base-select/mobile.css +12 -12
- package/esm/components/checkmark/Component.js +1 -1
- package/esm/components/checkmark/index.css +10 -10
- package/esm/components/checkmark-mobile/Component.js +1 -1
- package/esm/components/checkmark-mobile/index.css +6 -6
- package/esm/components/field/Component.js +1 -1
- package/esm/components/field/index.css +12 -12
- package/esm/components/footer/Component.js +1 -1
- package/esm/components/footer/index.css +5 -5
- package/esm/components/optgroup/Component.js +1 -1
- package/esm/components/optgroup/index.css +6 -6
- package/esm/components/option/Component.js +1 -1
- package/esm/components/option/index.css +19 -19
- package/esm/components/options-list/Component.js +1 -1
- package/esm/components/options-list/index.css +10 -10
- package/esm/components/search/Component.js +1 -1
- package/esm/components/search/index.css +2 -2
- package/esm/components/virtual-options-list/Component.js +1 -1
- package/esm/components/virtual-options-list/index.css +15 -15
- package/{modern/hook-64a8061f.d.ts → esm/hook-2f4e96b2.d.ts} +9 -7
- package/esm/{hook-699ea205.js → hook-8bbe812b.js} +21 -9
- package/esm/mobile/Component.mobile.js +7 -9
- package/esm/presets/index.d.ts +1 -1
- package/esm/presets/index.js +1 -1
- package/esm/presets/useSelectWithApply/hook.js +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/esm/presets/useSelectWithLoading/hook.js +1 -1
- package/esm/presets/useSelectWithLoading/index.css +2 -2
- package/esm/shared/index.js +2 -2
- package/esm/typings.d.ts +3 -1
- package/esm/utils.d.ts +3 -2
- package/esm/utils.js +24 -10
- package/{cssm/hook-64a8061f.d.ts → hook-2f4e96b2.d.ts} +9 -7
- package/{hook-23a1acb8.js → hook-4d5fa450.js} +20 -8
- package/mobile/Component.mobile.js +7 -9
- package/modern/components/arrow/Component.js +1 -1
- package/modern/components/arrow/index.css +3 -3
- package/modern/components/base-checkmark/Component.js +1 -1
- package/modern/components/base-checkmark/index.css +4 -4
- package/modern/components/base-option/Component.js +1 -1
- package/modern/components/base-option/index.css +15 -15
- package/modern/components/base-select/Component.js +13 -4
- package/modern/components/base-select/index.css +11 -11
- package/modern/components/base-select/mobile.css +12 -12
- package/modern/components/checkmark/Component.js +1 -1
- package/modern/components/checkmark/index.css +10 -10
- package/modern/components/checkmark-mobile/Component.js +1 -1
- package/modern/components/checkmark-mobile/index.css +6 -6
- package/modern/components/field/Component.js +1 -1
- package/modern/components/field/index.css +12 -12
- package/modern/components/footer/Component.js +1 -1
- package/modern/components/footer/index.css +5 -5
- package/modern/components/optgroup/Component.js +1 -1
- package/modern/components/optgroup/index.css +6 -6
- package/modern/components/option/Component.js +1 -1
- package/modern/components/option/index.css +19 -19
- package/modern/components/options-list/Component.js +1 -1
- package/modern/components/options-list/index.css +10 -10
- package/modern/components/search/Component.js +1 -1
- package/modern/components/search/index.css +2 -2
- package/modern/components/virtual-options-list/Component.js +1 -1
- package/modern/components/virtual-options-list/index.css +15 -15
- package/{esm/hook-64a8061f.d.ts → modern/hook-2f4e96b2.d.ts} +9 -7
- package/modern/{hook-b0f48fdd.js → hook-6a076c91.js} +14 -3
- package/modern/mobile/Component.mobile.js +8 -10
- package/modern/presets/index.d.ts +1 -1
- package/modern/presets/index.js +1 -1
- package/modern/presets/useSelectWithApply/hook.js +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/modern/presets/useSelectWithLoading/hook.js +1 -1
- package/modern/presets/useSelectWithLoading/index.css +2 -2
- package/modern/shared/index.js +2 -2
- package/modern/typings.d.ts +3 -1
- package/modern/utils.d.ts +3 -2
- package/modern/utils.js +23 -10
- package/package.json +1 -1
- package/presets/index.d.ts +1 -1
- package/presets/index.js +1 -1
- package/presets/useSelectWithApply/hook.js +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
- package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/presets/useSelectWithLoading/hook.js +1 -1
- package/presets/useSelectWithLoading/index.css +2 -2
- package/shared/index.js +2 -1
- package/src/components/base-select/Component.tsx +28 -3
- package/src/mobile/Component.mobile.tsx +8 -18
- package/src/presets/useSelectWithApply/hook.tsx +26 -4
- package/src/presets/useSelectWithApply/options-list-with-apply/footer/Component.tsx +2 -0
- package/src/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +1 -1
- package/src/typings.ts +2 -0
- package/src/utils.ts +26 -8
- package/typings.d.ts +3 -1
- package/utils.d.ts +3 -2
- package/utils.js +24 -9
- /package/cssm/{hook-546b2479.d.ts → hook-052c1a2e.d.ts} +0 -0
- /package/esm/{hook-699ea205.d.ts → hook-8bbe812b.d.ts} +0 -0
- /package/{hook-23a1acb8.d.ts → hook-4d5fa450.d.ts} +0 -0
- /package/modern/{hook-b0f48fdd.d.ts → hook-6a076c91.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: 1wp5b */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root {
|
|
4
4
|
--color-light-neutral-300: #e7e8eb;
|
|
@@ -29,32 +29,32 @@
|
|
|
29
29
|
/* checkmark */
|
|
30
30
|
|
|
31
31
|
/* optgroup */
|
|
32
|
-
} .
|
|
32
|
+
} .select__optionsList_14c2k {
|
|
33
33
|
width: 100%;
|
|
34
34
|
outline: none;
|
|
35
35
|
box-sizing: border-box;
|
|
36
36
|
position: relative;
|
|
37
|
-
} .
|
|
37
|
+
} .select__optionsListHeader_14c2k {
|
|
38
38
|
box-sizing: border-box;
|
|
39
39
|
border-bottom: 1px solid transparent;
|
|
40
40
|
transition: border-color 0.2s ease
|
|
41
|
-
} .
|
|
41
|
+
} .select__optionsListHeader_14c2k.select__headerHighlighted_14c2k {
|
|
42
42
|
border-bottom-color: var(--color-light-neutral-300);
|
|
43
|
-
} .
|
|
43
|
+
} .select__optionsListFooter_14c2k {
|
|
44
44
|
position: sticky;
|
|
45
45
|
bottom: 0;
|
|
46
46
|
box-sizing: border-box;
|
|
47
47
|
border-top: 1px solid transparent;
|
|
48
48
|
transition: border-color 0.2s ease
|
|
49
|
-
} .
|
|
49
|
+
} .select__optionsListFooter_14c2k.select__withBorder_14c2k {
|
|
50
50
|
border-top-color: var(--color-light-neutral-300);
|
|
51
|
-
} .
|
|
51
|
+
} .select__scrollable_14c2k {
|
|
52
52
|
overflow: auto;
|
|
53
53
|
width: 100%;
|
|
54
|
-
} .
|
|
54
|
+
} .select__emptyPlaceholder_14c2k {
|
|
55
55
|
padding: var(--gap-m) var(--gap-s);
|
|
56
56
|
color: var(--select-options-list-empty-placeholder-color);
|
|
57
|
-
} .select__size-
|
|
58
|
-
.select__size-
|
|
57
|
+
} .select__size-64_14c2k .select__emptyPlaceholder_14c2k,
|
|
58
|
+
.select__size-72_14c2k .select__emptyPlaceholder_14c2k {
|
|
59
59
|
padding: var(--gap-xl) var(--gap-m);
|
|
60
60
|
}
|
|
@@ -3,7 +3,7 @@ import cn from 'classnames';
|
|
|
3
3
|
import { Input } from '@alfalab/core-components-input/modern';
|
|
4
4
|
import { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';
|
|
5
5
|
|
|
6
|
-
const styles = {"component":"
|
|
6
|
+
const styles = {"component":"select__component_14dac"};
|
|
7
7
|
require('./index.css')
|
|
8
8
|
|
|
9
9
|
const Search = forwardRef(({ clear = true, placeholder = 'Поиск', className, leftAddons = React.createElement(MagnifierMIcon, { color: '#86868A' }), ...restProps }, ref) => (React.createElement(Input, { ref: ref, className: cn(styles.component, className), placeholder: placeholder, leftAddons: leftAddons, clear: clear, ...restProps })));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: 4r7qu */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
4
|
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
@@ -23,6 +23,6 @@
|
|
|
23
23
|
/* checkmark */
|
|
24
24
|
|
|
25
25
|
/* optgroup */
|
|
26
|
-
} .
|
|
26
|
+
} .select__component_14dac.select__component_14dac {
|
|
27
27
|
width: auto;
|
|
28
28
|
}
|
|
@@ -9,7 +9,7 @@ import { SIZE_TO_CLASSNAME_MAP, DEFAULT_VISIBLE_OPTIONS } from '../../consts.js'
|
|
|
9
9
|
import { usePrevious, lastIndexOf, useVisibleOptions, isGroup } from '../../utils.js';
|
|
10
10
|
import { Optgroup } from '../optgroup/Component.js';
|
|
11
11
|
|
|
12
|
-
const styles = {"virtualOptionsList":"
|
|
12
|
+
const styles = {"virtualOptionsList":"select__virtualOptionsList_p181u","virtualOptionsListHeader":"select__virtualOptionsListHeader_p181u","virtualOptionsListFooter":"select__virtualOptionsListFooter_p181u","withBorder":"select__withBorder_p181u","scrollable":"select__scrollable_p181u","inner":"select__inner_p181u","virtualRow":"select__virtualRow_p181u","highlighted":"select__highlighted_p181u","emptyPlaceholder":"select__emptyPlaceholder_p181u","size-64":"select__size-64_p181u","size-72":"select__size-72_p181u"};
|
|
13
13
|
require('./index.css')
|
|
14
14
|
|
|
15
15
|
const VirtualOptionsList = forwardRef(({ size = 48, flatOptions = [], highlightedIndex = -1, optionGroupClassName, className, getOptionProps, Option, open, options = [], Optgroup: Optgroup$1 = Optgroup, dataTestId, emptyPlaceholder, visibleOptions = DEFAULT_VISIBLE_OPTIONS, header, footer, showFooter = true, optionsListWidth, onScroll, nativeScrollbar: nativeScrollbarProp, setHighlightedIndex, selectedItems, setSelectedItems, search, multiple, }, ref) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: 1a2lv */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root {
|
|
4
4
|
--color-light-border-primary: #d5d6dc;
|
|
@@ -35,35 +35,35 @@
|
|
|
35
35
|
/* checkmark */
|
|
36
36
|
|
|
37
37
|
/* optgroup */
|
|
38
|
-
} .
|
|
38
|
+
} .select__virtualOptionsList_p181u {
|
|
39
39
|
width: 100%;
|
|
40
40
|
outline: none;
|
|
41
41
|
box-sizing: border-box;
|
|
42
42
|
position: sticky;
|
|
43
43
|
justify-content: space-between;
|
|
44
|
-
} .
|
|
44
|
+
} .select__virtualOptionsListHeader_p181u {
|
|
45
45
|
box-sizing: border-box;
|
|
46
46
|
border-bottom: 1px solid var(--color-light-neutral-300);
|
|
47
|
-
} .
|
|
47
|
+
} .select__virtualOptionsListFooter_p181u {
|
|
48
48
|
position: sticky;
|
|
49
49
|
bottom: 0;
|
|
50
50
|
box-sizing: border-box;
|
|
51
51
|
border-top: 1px solid transparent
|
|
52
|
-
} .
|
|
52
|
+
} .select__virtualOptionsListFooter_p181u.select__withBorder_p181u {
|
|
53
53
|
border-top: 1px solid var(--color-light-neutral-300);
|
|
54
|
-
} .
|
|
54
|
+
} .select__scrollable_p181u {
|
|
55
55
|
position: relative;
|
|
56
56
|
overflow: auto;
|
|
57
57
|
width: 100%;
|
|
58
|
-
} .
|
|
58
|
+
} .select__inner_p181u {
|
|
59
59
|
position: relative;
|
|
60
60
|
width: 100%;
|
|
61
|
-
} .
|
|
61
|
+
} .select__virtualRow_p181u {
|
|
62
62
|
position: absolute;
|
|
63
63
|
top: 0;
|
|
64
64
|
left: 0;
|
|
65
65
|
width: 100%
|
|
66
|
-
} .
|
|
66
|
+
} .select__virtualRow_p181u:before {
|
|
67
67
|
content: '';
|
|
68
68
|
position: absolute;
|
|
69
69
|
z-index: 1;
|
|
@@ -73,16 +73,16 @@
|
|
|
73
73
|
height: 1px;
|
|
74
74
|
background: var(--select-option-divider-background);
|
|
75
75
|
display: var(--select-option-divider-display);
|
|
76
|
-
} .
|
|
76
|
+
} .select__virtualRow_p181u:first-child:before {
|
|
77
77
|
display: none;
|
|
78
|
-
} .
|
|
79
|
-
.
|
|
78
|
+
} .select__highlighted_p181u:before,
|
|
79
|
+
.select__highlighted_p181u + .select__virtualRow_p181u:before {
|
|
80
80
|
display: none;
|
|
81
|
-
} .
|
|
81
|
+
} .select__emptyPlaceholder_p181u {
|
|
82
82
|
padding: var(--gap-m) var(--gap-s);
|
|
83
83
|
color: var(--select-options-list-empty-placeholder-color);
|
|
84
84
|
flex: 1;
|
|
85
|
-
} .select__size-
|
|
86
|
-
.select__size-
|
|
85
|
+
} .select__size-64_p181u .select__emptyPlaceholder_p181u,
|
|
86
|
+
.select__size-72_p181u .select__emptyPlaceholder_p181u {
|
|
87
87
|
padding: var(--gap-xl) var(--gap-m);
|
|
88
88
|
}
|
|
@@ -45,14 +45,12 @@ type UseSelectWithApplyProps = {
|
|
|
45
45
|
declare const SELECT_ALL_KEY = "select_all";
|
|
46
46
|
declare function useSelectWithApply({ options, selected, onChange, OptionsList, optionsListProps, showClear, showSelectAll, showHeaderWithSelectAll, showSearch, searchProps, }: UseSelectWithApplyProps): {
|
|
47
47
|
OptionsList: import("react").ForwardRefExoticComponent<import("./typings").OptionsListProps & {
|
|
48
|
-
/**
|
|
49
|
-
* Обработчик выбора
|
|
50
|
-
*/
|
|
51
48
|
showClear?: boolean | undefined;
|
|
52
49
|
onClose?: (() => void) | undefined;
|
|
53
|
-
|
|
54
|
-
*
|
|
50
|
+
/**
|
|
51
|
+
* Обработчик выбора
|
|
55
52
|
*/
|
|
53
|
+
selectedDraft?: OptionShape[] | undefined;
|
|
56
54
|
OptionsList?: import("react").FC<import("./typings").OptionsListProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
|
|
57
55
|
Footer?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/footer/Component").FooterProps> | undefined;
|
|
58
56
|
Header?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/header/Component").HeaderProps> | undefined;
|
|
@@ -83,13 +81,15 @@ declare function useSelectWithApply({ options, selected, onChange, OptionsList,
|
|
|
83
81
|
})[];
|
|
84
82
|
onChange: (payload: import("./typings").BaseSelectChangePayload) => void;
|
|
85
83
|
selected: string | OptionShape | (string | OptionShape)[] | null | undefined;
|
|
86
|
-
showSearch: boolean
|
|
84
|
+
showSearch: boolean;
|
|
87
85
|
searchProps: {
|
|
88
86
|
value: string;
|
|
89
87
|
onChange: ((value: string) => void) | undefined;
|
|
90
88
|
componentProps?: import("./typings").SearchProps | undefined;
|
|
91
89
|
accessor?: ((option: OptionShape) => string) | undefined;
|
|
92
90
|
filterFn?: ((optionText: string, search: string) => boolean) | undefined;
|
|
91
|
+
filterGroup?: boolean | undefined;
|
|
92
|
+
groupAccessor?: ((group: import("./typings").GroupShape) => string | undefined) | undefined;
|
|
93
93
|
} | undefined;
|
|
94
94
|
originalProps: {
|
|
95
95
|
options: (OptionShape | import("./typings").GroupShape)[];
|
|
@@ -100,13 +100,15 @@ declare function useSelectWithApply({ options, selected, onChange, OptionsList,
|
|
|
100
100
|
showClear: boolean;
|
|
101
101
|
showSelectAll: boolean;
|
|
102
102
|
showHeaderWithSelectAll: boolean;
|
|
103
|
-
showSearch: boolean
|
|
103
|
+
showSearch: boolean;
|
|
104
104
|
searchProps: {
|
|
105
105
|
componentProps?: import("./typings").SearchProps | undefined;
|
|
106
106
|
accessor?: ((option: OptionShape) => string) | undefined;
|
|
107
107
|
filterFn?: ((optionText: string, search: string) => boolean) | undefined;
|
|
108
108
|
value?: string | undefined;
|
|
109
109
|
onChange?: ((value: string) => void) | undefined;
|
|
110
|
+
filterGroup?: boolean | undefined;
|
|
111
|
+
groupAccessor?: ((group: import("./typings").GroupShape) => string | undefined) | undefined;
|
|
110
112
|
};
|
|
111
113
|
};
|
|
112
114
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { forwardRef, useCallback, useEffect, useState, useMemo, useRef } from 'react';
|
|
2
2
|
import deepEqual from 'deep-equal';
|
|
3
|
-
import { defaultAccessor, defaultFilterFn, processOptions } from './utils.js';
|
|
3
|
+
import { defaultAccessor, defaultFilterFn, defaultGroupAccessor, processOptions, isGroup } from './utils.js';
|
|
4
4
|
import { OptionsList } from './components/options-list/Component.js';
|
|
5
5
|
import { DEFAULT_VISIBLE_OPTIONS } from './consts.js';
|
|
6
6
|
import { Footer } from './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
@@ -50,14 +50,25 @@ const OptionsListWithApply = forwardRef(({ toggleMenu, getOptionProps: defaultGe
|
|
|
50
50
|
|
|
51
51
|
const SELECT_ALL_KEY = 'select_all';
|
|
52
52
|
const selectAllOption = { key: SELECT_ALL_KEY, content: 'Выбрать все' };
|
|
53
|
-
function useSelectWithApply({ options, selected, onChange = () => null, OptionsList, optionsListProps = {}, showClear = true, showSelectAll = false, showHeaderWithSelectAll = false, showSearch, searchProps = {}, }) {
|
|
53
|
+
function useSelectWithApply({ options, selected, onChange = () => null, OptionsList, optionsListProps = {}, showClear = true, showSelectAll = false, showHeaderWithSelectAll = false, showSearch = false, searchProps = {}, }) {
|
|
54
54
|
const [searchState, setSearchState] = useState('');
|
|
55
55
|
const [search, setSearch] = typeof searchProps?.value === 'string'
|
|
56
56
|
? [searchProps.value, searchProps.onChange]
|
|
57
57
|
: [searchState, setSearchState];
|
|
58
58
|
const accessor = searchProps.accessor || defaultAccessor;
|
|
59
59
|
const filterFn = searchProps.filterFn || defaultFilterFn;
|
|
60
|
-
const
|
|
60
|
+
const groupAccessor = searchProps.groupAccessor ?? defaultGroupAccessor;
|
|
61
|
+
const filterGroup = searchProps.filterGroup ?? false;
|
|
62
|
+
const { flatOptions, selectedOptions } = useMemo(() => processOptions(options, selected, showSearch
|
|
63
|
+
? (option) => {
|
|
64
|
+
if (isGroup(option)) {
|
|
65
|
+
const groupAccessorValue = groupAccessor(option);
|
|
66
|
+
return (typeof groupAccessorValue === 'string' &&
|
|
67
|
+
filterFn(groupAccessorValue, search));
|
|
68
|
+
}
|
|
69
|
+
return filterFn(accessor(option), search);
|
|
70
|
+
}
|
|
71
|
+
: undefined, filterGroup), [options, selected, showSearch, filterGroup, filterFn, accessor, search, groupAccessor]);
|
|
61
72
|
const [selectedDraft, setSelectedDraft] = useState(selectedOptions);
|
|
62
73
|
const selectedOptionsRef = useRef(selectedOptions);
|
|
63
74
|
const handleApply = () => {
|
|
@@ -11,15 +11,13 @@ import { Option } from '../components/option/Component.js';
|
|
|
11
11
|
import { OptionsList } from '../components/options-list/Component.js';
|
|
12
12
|
import { Search } from '../components/search/Component.js';
|
|
13
13
|
import { VirtualOptionsList } from '../components/virtual-options-list/Component.js';
|
|
14
|
-
import { u as useSelectWithApply } from '../hook-
|
|
14
|
+
import { u as useSelectWithApply } from '../hook-6a076c91.js';
|
|
15
15
|
import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
16
16
|
|
|
17
17
|
const VIRTUAL_OPTIONS_LIST_THRESHOLD = 30;
|
|
18
|
-
const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, defaultOpen = false, open: openProp, size = 56, optionsSize = 56, fieldProps = {}, optionProps = {}, optionsListProps = {}, Arrow: Arrow$1 = Arrow, Field: Field$1 = Field, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, Search: Search$1 = Search, selected,
|
|
18
|
+
const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, defaultOpen = false, open: openProp, size = 56, optionsSize = 56, fieldProps = {}, optionProps = {}, optionsListProps = {}, Arrow: Arrow$1 = Arrow, Field: Field$1 = Field, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, Search: Search$1 = Search, selected, options, OptionsList: OptionsList$1 = options.length > VIRTUAL_OPTIONS_LIST_THRESHOLD
|
|
19
19
|
? VirtualOptionsList
|
|
20
20
|
: OptionsList, onChange, showClear = true, showSelectAll, showHeaderWithSelectAll, useWithApplyHook = multiple, showSearch, searchProps, ...restProps }, ref) => {
|
|
21
|
-
const typedRestBottomSheetProps = restProps;
|
|
22
|
-
const typedRestModalProps = restProps;
|
|
23
21
|
const applyProps = useSelectWithApply({
|
|
24
22
|
optionsListProps: {
|
|
25
23
|
...optionsListProps,
|
|
@@ -38,19 +36,19 @@ const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allow
|
|
|
38
36
|
return (React.createElement(BaseSelect, { ref: ref, view: 'mobile', autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: {
|
|
39
37
|
FormControlComponent: FormControlMobile,
|
|
40
38
|
...fieldProps,
|
|
41
|
-
}, optionProps: optionProps, Arrow: Arrow$1, Field: Field$1, Optgroup: Optgroup$1, Option: Option$1, Search: Search$1,
|
|
39
|
+
}, optionProps: optionProps, Arrow: Arrow$1, Field: Field$1, Optgroup: Optgroup$1, Option: Option$1, Search: Search$1, options: options, selected: selected, onChange: onChange, OptionsList: OptionsList$1, showSearch: showSearch, searchProps: searchProps, BottomSheet: BottomSheet, ModalMobile: ModalMobile, optionsListProps: optionsListProps, ...restProps, ...(restProps.isBottomSheet === false
|
|
42
40
|
? {
|
|
43
|
-
|
|
41
|
+
modalHeaderProps: {
|
|
44
42
|
bottomAddons,
|
|
45
|
-
...
|
|
43
|
+
...restProps.modalHeaderProps,
|
|
46
44
|
},
|
|
47
45
|
}
|
|
48
46
|
: {
|
|
49
|
-
|
|
47
|
+
bottomSheetProps: {
|
|
50
48
|
bottomAddons,
|
|
51
|
-
...
|
|
49
|
+
...restProps.bottomSheetProps,
|
|
52
50
|
},
|
|
53
|
-
}),
|
|
51
|
+
}), ...(useWithApplyHook && applyProps) }));
|
|
54
52
|
});
|
|
55
53
|
|
|
56
54
|
export { SelectMobile };
|
package/modern/presets/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { useSelectWithLoading } from './useSelectWithLoading/hook.js';
|
|
2
2
|
export { useLazyLoading } from './useLazyLoading/hook.js';
|
|
3
|
-
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-
|
|
3
|
+
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-6a076c91.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '../../../components/options-list/Component.js';
|
|
3
3
|
import '../../../consts.js';
|
|
4
|
-
export { O as OptionsListWithApply } from '../../../hook-
|
|
4
|
+
export { O as OptionsListWithApply } from '../../../hook-6a076c91.js';
|
|
5
5
|
import './footer/Component.js';
|
|
6
6
|
import './header/Component.js';
|
|
@@ -2,13 +2,13 @@ import React from 'react';
|
|
|
2
2
|
import { ButtonDesktop } from '@alfalab/core-components-button/modern/desktop';
|
|
3
3
|
import { getDataTestId } from '@alfalab/core-components-shared/modern';
|
|
4
4
|
|
|
5
|
-
const styles = {"footer":"
|
|
5
|
+
const styles = {"footer":"select__footer_1i5y0","button":"select__button_1i5y0"};
|
|
6
6
|
require('./index.css')
|
|
7
7
|
|
|
8
8
|
const Footer = ({ handleApply, handleClear, showClear, selectedDraft = [], dataTestId, }) => (React.createElement("div", {
|
|
9
9
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
10
10
|
tabIndex: 0, className: styles.footer },
|
|
11
|
-
React.createElement(ButtonDesktop, { size: 32, view: 'primary', onClick: handleApply, dataTestId: getDataTestId(dataTestId, 'apply') }, "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C"),
|
|
12
|
-
showClear && selectedDraft.length > 0 && (React.createElement(ButtonDesktop, { size: 32, view: 'secondary', onClick: handleClear, dataTestId: getDataTestId(dataTestId, 'clear') }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C"))));
|
|
11
|
+
React.createElement(ButtonDesktop, { size: 32, view: 'primary', onClick: handleApply, dataTestId: getDataTestId(dataTestId, 'apply'), className: styles.button }, "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C"),
|
|
12
|
+
showClear && selectedDraft.length > 0 && (React.createElement(ButtonDesktop, { size: 32, view: 'secondary', onClick: handleClear, dataTestId: getDataTestId(dataTestId, 'clear'), className: styles.button }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C"))));
|
|
13
13
|
|
|
14
14
|
export { Footer };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: 467s1 */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root {
|
|
4
4
|
--color-light-bg-primary: #fff; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
--gap-s: 12px;
|
|
18
18
|
} :root {
|
|
19
19
|
} :root {
|
|
20
|
-
} .
|
|
20
|
+
} .select__footer_1i5y0 {
|
|
21
21
|
background-color: var(--color-light-bg-primary);
|
|
22
22
|
padding: var(--gap-s);
|
|
23
23
|
outline: none
|
|
24
|
-
} .
|
|
24
|
+
} .select__footer_1i5y0 > .select__button_1i5y0 + .select__button_1i5y0 {
|
|
25
25
|
margin-left: var(--gap-xs);
|
|
26
26
|
}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import cn from 'classnames';
|
|
3
3
|
import { Checkbox } from '@alfalab/core-components-checkbox/modern';
|
|
4
4
|
|
|
5
|
-
const styles = {"desktop":"
|
|
5
|
+
const styles = {"desktop":"select__desktop_14hbg","mobile":"select__mobile_14hbg"};
|
|
6
6
|
require('./index.css')
|
|
7
7
|
|
|
8
8
|
const Header = ({ onChange, checked, indeterminate, mobile }) => (React.createElement("div", { className: cn({ [styles.desktop]: !mobile, [styles.mobile]: mobile }) },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: 7p34l */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
4
|
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
--gap-s: 12px;
|
|
17
17
|
} :root {
|
|
18
18
|
} :root {
|
|
19
|
-
} .
|
|
19
|
+
} .select__desktop_14hbg {
|
|
20
20
|
padding: var(--gap-s);
|
|
21
|
-
} .
|
|
21
|
+
} .select__mobile_14hbg {
|
|
22
22
|
padding: var(--gap-s) var(--gap-xs);
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "../../../hook-
|
|
1
|
+
export * from "../../../hook-6a076c91";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { O as OptionsListWithApply } from '../../../hook-
|
|
1
|
+
export { O as OptionsListWithApply } from '../../../hook-6a076c91.js';
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { Skeleton } from '@alfalab/core-components-skeleton/modern';
|
|
3
3
|
import { Option } from '../../components/option/Component.js';
|
|
4
4
|
|
|
5
|
-
const styles = {"skeleton":"
|
|
5
|
+
const styles = {"skeleton":"select__skeleton_170xy"};
|
|
6
6
|
require('./index.css')
|
|
7
7
|
|
|
8
8
|
function useSelectWithLoading({ loading = false, visibleOptions = 6, Option: Option$1 = Option, }) {
|
package/modern/shared/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { useSelectWithLoading } from '../presets/useSelectWithLoading/hook.js';
|
|
2
2
|
export { useLazyLoading } from '../presets/useLazyLoading/hook.js';
|
|
3
|
-
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-
|
|
4
|
-
export { defaultAccessor, defaultFilterFn, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions } from '../utils.js';
|
|
3
|
+
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-6a076c91.js';
|
|
4
|
+
export { defaultAccessor, defaultFilterFn, defaultGroupAccessor, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions } from '../utils.js';
|
|
5
5
|
export { Option } from '../components/option/Component.js';
|
|
6
6
|
export { BaseOption } from '../components/base-option/Component.js';
|
|
7
7
|
export { OptionsList } from '../components/options-list/Component.js';
|
package/modern/typings.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { InputProps } from "@alfalab/core-components-input";
|
|
|
5
5
|
import { ModalProps } from "@alfalab/core-components-modal";
|
|
6
6
|
import { ModalFooterProps, ModalHeaderProps } from "@alfalab/core-components-modal/shared";
|
|
7
7
|
import { PopoverProps } from "@alfalab/core-components-popover";
|
|
8
|
-
import { UseSelectWithApplyProps } from "./hook-
|
|
8
|
+
import { UseSelectWithApplyProps } from "./hook-2f4e96b2";
|
|
9
9
|
type AnyObject = Record<string, any>;
|
|
10
10
|
type OptionShape = {
|
|
11
11
|
/**
|
|
@@ -237,6 +237,8 @@ type BaseSelectProps = {
|
|
|
237
237
|
filterFn?: (optionText: string, search: string) => boolean;
|
|
238
238
|
value?: string;
|
|
239
239
|
onChange?: (value: string) => void;
|
|
240
|
+
filterGroup?: boolean;
|
|
241
|
+
groupAccessor?: (group: GroupShape) => string | undefined;
|
|
240
242
|
};
|
|
241
243
|
/**
|
|
242
244
|
* Обработчик выбора
|
package/modern/utils.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ declare const joinOptions: ({ selected, selectedMultiple, }: {
|
|
|
6
6
|
selected?: OptionShape | undefined;
|
|
7
7
|
selectedMultiple?: OptionShape[] | undefined;
|
|
8
8
|
}) => ReactNode[] | null;
|
|
9
|
-
declare function processOptions(options: BaseSelectProps['options'], selected?: BaseSelectProps['selected'], filterFn?: (option: OptionShape) => boolean): {
|
|
9
|
+
declare function processOptions(options: BaseSelectProps['options'], selected?: BaseSelectProps['selected'], filterFn?: (option: OptionShape | GroupShape) => boolean, filterGroup?: boolean): {
|
|
10
10
|
filteredOptions: (OptionShape | GroupShape)[];
|
|
11
11
|
flatOptions: OptionShape[];
|
|
12
12
|
selectedOptions: OptionShape[];
|
|
@@ -35,6 +35,7 @@ type useVisibleOptionsArgs = {
|
|
|
35
35
|
};
|
|
36
36
|
declare function useVisibleOptions({ visibleOptions, listRef, styleTargetRef, open, invalidate, }: useVisibleOptionsArgs): void;
|
|
37
37
|
declare function defaultFilterFn(optionText: string, search: string): boolean;
|
|
38
|
+
declare function defaultGroupAccessor(option: GroupShape): string | undefined;
|
|
38
39
|
declare function defaultAccessor(option: OptionShape): string;
|
|
39
40
|
declare function usePrevious<T>(value: T): T | undefined;
|
|
40
41
|
declare const lastIndexOf: <T>(array: T[], predicate: (item: T) => boolean) => number;
|
|
@@ -64,4 +65,4 @@ declare function getSelectTestIds(dataTestId: string): {
|
|
|
64
65
|
modalHeader: string;
|
|
65
66
|
modalContent: string;
|
|
66
67
|
};
|
|
67
|
-
export { isGroup, isOptionShape, joinOptions, processOptions, useVisibleOptions, defaultFilterFn, defaultAccessor, usePrevious, lastIndexOf, getSelectTestIds };
|
|
68
|
+
export { isGroup, isOptionShape, joinOptions, processOptions, useVisibleOptions, defaultFilterFn, defaultGroupAccessor, defaultAccessor, usePrevious, lastIndexOf, getSelectTestIds };
|
package/modern/utils.js
CHANGED
|
@@ -20,7 +20,7 @@ const joinOptions = ({ selected, selectedMultiple, }) => {
|
|
|
20
20
|
}, []);
|
|
21
21
|
};
|
|
22
22
|
// За один проход делает список пунктов меню плоским и находит выбранные пункты по ключу
|
|
23
|
-
function processOptions(options, selected = [], filterFn = () => true) {
|
|
23
|
+
function processOptions(options, selected = [], filterFn = () => true, filterGroup = false) {
|
|
24
24
|
const flatOptions = [];
|
|
25
25
|
const filteredOptions = [];
|
|
26
26
|
const selectedArray = Array.isArray(selected) ? selected : [selected];
|
|
@@ -28,12 +28,20 @@ function processOptions(options, selected = [], filterFn = () => true) {
|
|
|
28
28
|
const selectedKeys = selectedArray.filter((option) => typeof option === 'string');
|
|
29
29
|
const isSelected = (option) => selectedKeys.includes(option.key);
|
|
30
30
|
const process = (option) => {
|
|
31
|
-
|
|
31
|
+
const isGroupOption = isGroup(option);
|
|
32
|
+
if (!isGroupOption && isSelected(option)) {
|
|
32
33
|
selectedOptions.push(option);
|
|
33
34
|
}
|
|
34
35
|
if (!filterFn(option))
|
|
35
36
|
return false;
|
|
36
|
-
|
|
37
|
+
if (isGroupOption) {
|
|
38
|
+
if (filterGroup) {
|
|
39
|
+
Array.prototype.push.apply(flatOptions, option.options);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
flatOptions.push(option);
|
|
44
|
+
}
|
|
37
45
|
return true;
|
|
38
46
|
};
|
|
39
47
|
options.forEach((option) => {
|
|
@@ -47,14 +55,16 @@ function processOptions(options, selected = [], filterFn = () => true) {
|
|
|
47
55
|
if (matched)
|
|
48
56
|
group.options.push(groupOption);
|
|
49
57
|
});
|
|
50
|
-
if (group.options.length)
|
|
58
|
+
if (group.options.length) {
|
|
51
59
|
filteredOptions.push(group);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (!filterGroup)
|
|
63
|
+
return;
|
|
52
64
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
filteredOptions.push(option);
|
|
57
|
-
}
|
|
65
|
+
const matched = process(option);
|
|
66
|
+
if (matched)
|
|
67
|
+
filteredOptions.push(option);
|
|
58
68
|
});
|
|
59
69
|
return { filteredOptions, flatOptions, selectedOptions };
|
|
60
70
|
}
|
|
@@ -84,6 +94,9 @@ function defaultFilterFn(optionText, search) {
|
|
|
84
94
|
return true;
|
|
85
95
|
return optionText.toLowerCase().includes(search.toLowerCase());
|
|
86
96
|
}
|
|
97
|
+
function defaultGroupAccessor(option) {
|
|
98
|
+
return option.label;
|
|
99
|
+
}
|
|
87
100
|
function defaultAccessor(option) {
|
|
88
101
|
if (typeof option.content === 'string')
|
|
89
102
|
return option.content;
|
|
@@ -136,4 +149,4 @@ function getSelectTestIds(dataTestId) {
|
|
|
136
149
|
};
|
|
137
150
|
}
|
|
138
151
|
|
|
139
|
-
export { defaultAccessor, defaultFilterFn, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions };
|
|
152
|
+
export { defaultAccessor, defaultFilterFn, defaultGroupAccessor, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions };
|
package/package.json
CHANGED
package/presets/index.d.ts
CHANGED
package/presets/index.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var presets_useSelectWithLoading_hook = require('./useSelectWithLoading/hook.js');
|
|
6
6
|
var presets_useLazyLoading_hook = require('./useLazyLoading/hook.js');
|
|
7
|
-
var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-
|
|
7
|
+
var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-4d5fa450.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
@@ -6,7 +6,7 @@ require('tslib');
|
|
|
6
6
|
require('react');
|
|
7
7
|
require('deep-equal');
|
|
8
8
|
require('../../utils.js');
|
|
9
|
-
var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-
|
|
9
|
+
var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-4d5fa450.js');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
@@ -6,7 +6,7 @@ require('tslib');
|
|
|
6
6
|
require('react');
|
|
7
7
|
require('../../../components/options-list/Component.js');
|
|
8
8
|
require('../../../consts.js');
|
|
9
|
-
var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-
|
|
9
|
+
var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-4d5fa450.js');
|
|
10
10
|
require('./footer/Component.js');
|
|
11
11
|
require('./header/Component.js');
|
|
12
12
|
|