@alfalab/core-components 44.7.0-beta.0 → 44.7.0-beta.1
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/confirmation/components/screens/initial/component.js +1 -1
- package/confirmation/components/screens/initial/countdown-section.js +1 -1
- package/confirmation/esm/component.responsive.js +1 -1
- package/confirmation/esm/components/base-confirmation/component.js +1 -1
- package/confirmation/esm/components/base-confirmation/index.js +1 -1
- package/confirmation/esm/components/index.js +1 -1
- package/confirmation/esm/components/screens/index.js +1 -1
- package/confirmation/esm/components/screens/initial/component.js +1 -1
- package/confirmation/esm/components/screens/initial/countdown-section.js +1 -1
- package/confirmation/esm/components/screens/initial/index.js +1 -1
- package/confirmation/esm/desktop/component.desktop.js +1 -1
- package/confirmation/esm/desktop/index.js +1 -1
- package/confirmation/esm/index.js +1 -1
- package/confirmation/esm/mobile/component.mobile.js +1 -1
- package/confirmation/esm/mobile/index.js +1 -1
- package/confirmation/esm/shared/index.js +1 -1
- package/confirmation/modern/component.responsive.js +1 -1
- package/confirmation/modern/components/base-confirmation/component.js +1 -1
- package/confirmation/modern/components/base-confirmation/index.js +1 -1
- package/confirmation/modern/components/index.js +1 -1
- package/confirmation/modern/components/screens/index.js +1 -1
- package/confirmation/modern/components/screens/initial/component.js +1 -1
- package/confirmation/modern/components/screens/initial/countdown-section.js +1 -1
- package/confirmation/modern/components/screens/initial/index.js +1 -1
- package/confirmation/modern/desktop/component.desktop.js +1 -1
- package/confirmation/modern/desktop/index.js +1 -1
- package/confirmation/modern/index.js +1 -1
- package/confirmation/modern/mobile/component.mobile.js +1 -1
- package/confirmation/modern/mobile/index.js +1 -1
- package/confirmation/modern/shared/index.js +1 -1
- package/gallery/components/header/Component.js +1 -1
- package/gallery/components/header/buttons.js +1 -1
- package/gallery/components/image-viewer/component.js +1 -1
- package/gallery/components/image-viewer/slide.js +1 -1
- package/gallery/esm/Component.js +2 -2
- package/gallery/esm/components/header/Component.js +1 -1
- package/gallery/esm/components/header/buttons.js +1 -1
- package/gallery/esm/components/header/index.js +1 -1
- package/gallery/esm/components/image-preview/Component.js +1 -1
- package/gallery/esm/components/image-preview/index.js +1 -1
- package/gallery/esm/components/image-viewer/component.js +1 -1
- package/gallery/esm/components/image-viewer/index.js +1 -1
- package/gallery/esm/components/image-viewer/slide.js +1 -1
- package/gallery/esm/components/index.js +2 -2
- package/gallery/esm/components/navigation-bar/Component.js +1 -1
- package/gallery/esm/components/navigation-bar/index.js +1 -1
- package/gallery/esm/index.js +2 -2
- package/gallery/modern/Component.js +2 -2
- package/gallery/modern/components/header/Component.js +1 -1
- package/gallery/modern/components/header/buttons.js +1 -1
- package/gallery/modern/components/header/index.js +1 -1
- package/gallery/modern/components/image-preview/Component.js +1 -1
- package/gallery/modern/components/image-preview/index.js +1 -1
- package/gallery/modern/components/image-viewer/component.js +1 -1
- package/gallery/modern/components/image-viewer/index.js +1 -1
- package/gallery/modern/components/image-viewer/slide.js +1 -1
- package/gallery/modern/components/index.js +2 -2
- package/gallery/modern/components/navigation-bar/Component.js +1 -1
- package/gallery/modern/components/navigation-bar/index.js +1 -1
- package/gallery/modern/index.js +2 -2
- package/input-autocomplete/autocomplete-field/Component.js +1 -2
- package/input-autocomplete/cssm/autocomplete-field/Component.js +1 -2
- package/input-autocomplete/cssm/mobile/Component.mobile.js +2 -2
- package/input-autocomplete/cssm/types.d.ts +4 -2
- package/input-autocomplete/esm/autocomplete-field/Component.js +1 -2
- package/input-autocomplete/esm/mobile/Component.mobile.js +2 -2
- package/input-autocomplete/esm/types.d.ts +4 -2
- package/input-autocomplete/mobile/Component.mobile.js +2 -2
- package/input-autocomplete/modern/autocomplete-field/Component.js +1 -2
- package/input-autocomplete/modern/mobile/Component.mobile.js +2 -2
- package/input-autocomplete/modern/types.d.ts +4 -2
- package/input-autocomplete/types.d.ts +4 -2
- package/international-phone-input/Component.responsive.d.ts +6 -2
- package/international-phone-input/components/base-international-phone-input/Component.d.ts +3 -1
- package/international-phone-input/components/base-international-phone-input/Component.js +13 -10
- package/international-phone-input/cssm/Component.responsive.d.ts +6 -2
- package/international-phone-input/cssm/components/base-international-phone-input/Component.d.ts +3 -1
- package/international-phone-input/cssm/components/base-international-phone-input/Component.js +13 -10
- package/international-phone-input/cssm/types.d.ts +4 -2
- package/international-phone-input/esm/Component.responsive.d.ts +6 -2
- package/international-phone-input/esm/components/base-international-phone-input/Component.d.ts +3 -1
- package/international-phone-input/esm/components/base-international-phone-input/Component.js +13 -10
- package/international-phone-input/esm/types.d.ts +4 -2
- package/international-phone-input/modern/Component.responsive.d.ts +6 -2
- package/international-phone-input/modern/components/base-international-phone-input/Component.d.ts +3 -1
- package/international-phone-input/modern/components/base-international-phone-input/Component.js +10 -10
- package/international-phone-input/modern/types.d.ts +4 -2
- package/international-phone-input/types.d.ts +4 -2
- package/intl-phone-input/component.js +3 -3
- package/intl-phone-input/cssm/component.js +3 -3
- package/intl-phone-input/esm/component.js +3 -3
- package/intl-phone-input/modern/component.js +3 -3
- package/package.json +2 -2
- package/pure-cell/component.js +1 -1
- package/pure-cell/components/addon/component.js +1 -1
- package/pure-cell/components/addon/index.d.ts +1 -1
- package/pure-cell/components/addon/index.js +1 -1
- package/pure-cell/components/amount/component.js +1 -1
- package/pure-cell/components/amount/index.d.ts +1 -1
- package/pure-cell/components/amount/index.js +1 -1
- package/pure-cell/components/amount-title/component.js +1 -1
- package/pure-cell/components/amount-title/index.d.ts +1 -1
- package/pure-cell/components/amount-title/index.js +1 -1
- package/pure-cell/components/category/component.js +1 -1
- package/pure-cell/components/category/index.d.ts +1 -1
- package/pure-cell/components/category/index.js +1 -1
- package/pure-cell/components/content/component.js +1 -1
- package/pure-cell/components/content/index.d.ts +1 -1
- package/pure-cell/components/content/index.js +1 -1
- package/pure-cell/components/footer/component.js +1 -1
- package/pure-cell/components/footer/index.d.ts +1 -1
- package/pure-cell/components/footer/index.js +1 -1
- package/pure-cell/components/footer-button/component.js +1 -1
- package/pure-cell/components/footer-button/index.d.ts +1 -1
- package/pure-cell/components/footer-button/index.js +1 -1
- package/pure-cell/components/footer-text/component.js +1 -1
- package/pure-cell/components/footer-text/index.d.ts +1 -1
- package/pure-cell/components/footer-text/index.js +1 -1
- package/pure-cell/components/graphics/component.js +1 -1
- package/pure-cell/components/graphics/index.d.ts +1 -1
- package/pure-cell/components/graphics/index.js +1 -1
- package/pure-cell/components/main/component.js +1 -1
- package/pure-cell/components/main/index.d.ts +1 -1
- package/pure-cell/components/main/index.js +1 -1
- package/pure-cell/components/text/component.js +1 -1
- package/pure-cell/components/text/index.d.ts +1 -1
- package/pure-cell/components/text/index.js +1 -1
- package/pure-cell/esm/component.js +1 -1
- package/pure-cell/esm/components/addon/component.js +1 -1
- package/pure-cell/esm/components/addon/index.d.ts +1 -1
- package/pure-cell/esm/components/addon/index.js +1 -1
- package/pure-cell/esm/components/amount/component.js +1 -1
- package/pure-cell/esm/components/amount/index.d.ts +1 -1
- package/pure-cell/esm/components/amount/index.js +1 -1
- package/pure-cell/esm/components/amount-title/component.js +1 -1
- package/pure-cell/esm/components/amount-title/index.d.ts +1 -1
- package/pure-cell/esm/components/amount-title/index.js +1 -1
- package/pure-cell/esm/components/category/component.js +1 -1
- package/pure-cell/esm/components/category/index.d.ts +1 -1
- package/pure-cell/esm/components/category/index.js +1 -1
- package/pure-cell/esm/components/content/component.js +1 -1
- package/pure-cell/esm/components/content/index.d.ts +1 -1
- package/pure-cell/esm/components/content/index.js +1 -1
- package/pure-cell/esm/components/footer/component.js +1 -1
- package/pure-cell/esm/components/footer/index.d.ts +1 -1
- package/pure-cell/esm/components/footer/index.js +1 -1
- package/pure-cell/esm/components/footer-button/component.js +1 -1
- package/pure-cell/esm/components/footer-button/index.d.ts +1 -1
- package/pure-cell/esm/components/footer-button/index.js +1 -1
- package/pure-cell/esm/components/footer-text/component.js +1 -1
- package/pure-cell/esm/components/footer-text/index.d.ts +1 -1
- package/pure-cell/esm/components/footer-text/index.js +1 -1
- package/pure-cell/esm/components/graphics/component.js +1 -1
- package/pure-cell/esm/components/graphics/index.d.ts +1 -1
- package/pure-cell/esm/components/graphics/index.js +1 -1
- package/pure-cell/esm/components/main/component.js +1 -1
- package/pure-cell/esm/components/main/index.d.ts +1 -1
- package/pure-cell/esm/components/main/index.js +1 -1
- package/pure-cell/esm/components/text/component.js +1 -1
- package/pure-cell/esm/components/text/index.d.ts +1 -1
- package/pure-cell/esm/components/text/index.js +1 -1
- package/pure-cell/esm/index.js +1 -1
- package/pure-cell/index.js +1 -1
- package/pure-cell/modern/component.js +1 -1
- package/pure-cell/modern/components/addon/component.js +1 -1
- package/pure-cell/modern/components/addon/index.d.ts +1 -1
- package/pure-cell/modern/components/addon/index.js +1 -1
- package/pure-cell/modern/components/amount/component.js +1 -1
- package/pure-cell/modern/components/amount/index.d.ts +1 -1
- package/pure-cell/modern/components/amount/index.js +1 -1
- package/pure-cell/modern/components/amount-title/component.js +1 -1
- package/pure-cell/modern/components/amount-title/index.d.ts +1 -1
- package/pure-cell/modern/components/amount-title/index.js +1 -1
- package/pure-cell/modern/components/category/component.js +1 -1
- package/pure-cell/modern/components/category/index.d.ts +1 -1
- package/pure-cell/modern/components/category/index.js +1 -1
- package/pure-cell/modern/components/content/component.js +1 -1
- package/pure-cell/modern/components/content/index.d.ts +1 -1
- package/pure-cell/modern/components/content/index.js +1 -1
- package/pure-cell/modern/components/footer/component.js +1 -1
- package/pure-cell/modern/components/footer/index.d.ts +1 -1
- package/pure-cell/modern/components/footer/index.js +1 -1
- package/pure-cell/modern/components/footer-button/component.js +1 -1
- package/pure-cell/modern/components/footer-button/index.d.ts +1 -1
- package/pure-cell/modern/components/footer-button/index.js +1 -1
- package/pure-cell/modern/components/footer-text/component.js +1 -1
- package/pure-cell/modern/components/footer-text/index.d.ts +1 -1
- package/pure-cell/modern/components/footer-text/index.js +1 -1
- package/pure-cell/modern/components/graphics/component.js +1 -1
- package/pure-cell/modern/components/graphics/index.d.ts +1 -1
- package/pure-cell/modern/components/graphics/index.js +1 -1
- package/pure-cell/modern/components/main/component.js +1 -1
- package/pure-cell/modern/components/main/index.d.ts +1 -1
- package/pure-cell/modern/components/main/index.js +1 -1
- package/pure-cell/modern/components/text/component.js +1 -1
- package/pure-cell/modern/components/text/index.d.ts +1 -1
- package/pure-cell/modern/components/text/index.js +1 -1
- package/pure-cell/modern/index.js +1 -1
- package/select/components/base-select/Component.js +41 -37
- package/select/cssm/components/base-select/Component.js +41 -37
- package/select/esm/Component.responsive.js +1 -1
- package/select/esm/components/base-select/Component.js +43 -39
- package/select/esm/index.js +1 -1
- package/select/esm/mobile/Component.mobile.js +1 -1
- package/select/esm/mobile/Component.modal.mobile.js +1 -1
- package/select/esm/mobile/index.js +1 -1
- package/select/esm/presets/index.js +1 -1
- package/select/esm/presets/useSelectWithApply/hook.js +1 -1
- package/select/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/select/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/select/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/select/esm/shared/index.js +1 -1
- package/select/mobile/Component.mobile.js +1 -1
- package/select/modern/Component.responsive.js +1 -1
- package/select/modern/components/base-select/Component.js +41 -36
- package/select/modern/index.js +1 -1
- package/select/modern/mobile/Component.mobile.js +1 -1
- package/select/modern/mobile/Component.modal.mobile.js +1 -1
- package/select/modern/mobile/index.js +1 -1
- package/select/modern/presets/index.js +1 -1
- package/select/modern/presets/useSelectWithApply/hook.js +1 -1
- package/select/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/select/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/select/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/select/modern/shared/index.js +1 -1
- package/select/presets/index.js +1 -1
- package/select/presets/useSelectWithApply/hook.js +1 -1
- package/select/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
- package/select/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/select/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
- package/select/shared/index.js +1 -1
- package/side-panel/components/controls/Component.js +1 -1
- package/side-panel/components/footer/Component.js +1 -1
- package/side-panel/esm/Component.responsive.js +1 -1
- package/side-panel/esm/components/controls/Component.js +1 -1
- package/side-panel/esm/components/controls/index.js +1 -1
- package/side-panel/esm/components/footer/Component.desktop.js +1 -1
- package/side-panel/esm/components/footer/Component.js +1 -1
- package/side-panel/esm/components/footer/Component.mobile.js +1 -1
- package/side-panel/esm/desktop/Component.desktop.js +1 -1
- package/side-panel/esm/desktop/index.js +1 -1
- package/side-panel/esm/index.js +1 -1
- package/side-panel/esm/mobile/Component.mobile.js +1 -1
- package/side-panel/esm/mobile/index.js +1 -1
- package/side-panel/modern/Component.responsive.js +1 -1
- package/side-panel/modern/components/controls/Component.js +1 -1
- package/side-panel/modern/components/controls/index.js +1 -1
- package/side-panel/modern/components/footer/Component.desktop.js +1 -1
- package/side-panel/modern/components/footer/Component.js +1 -1
- package/side-panel/modern/components/footer/Component.mobile.js +1 -1
- package/side-panel/modern/desktop/Component.desktop.js +1 -1
- package/side-panel/modern/desktop/index.js +1 -1
- package/side-panel/modern/index.js +1 -1
- package/side-panel/modern/mobile/Component.mobile.js +1 -1
- package/side-panel/modern/mobile/index.js +1 -1
- package/themes/compiled/mobile-dark-bluetint.css +21 -21
- package/themes/dist/compiled/mobile-dark-bluetint.css +357 -357
- /package/confirmation/{countdown-section-63d239b8.d.ts → countdown-section-16b088be.d.ts} +0 -0
- /package/confirmation/{countdown-section-63d239b8.js → countdown-section-16b088be.js} +0 -0
- /package/confirmation/esm/{countdown-section-f77f5daf.d.ts → countdown-section-c62fc39d.d.ts} +0 -0
- /package/confirmation/esm/{countdown-section-f77f5daf.js → countdown-section-c62fc39d.js} +0 -0
- /package/confirmation/modern/{countdown-section-7fbcd274.d.ts → countdown-section-abb09576.d.ts} +0 -0
- /package/confirmation/modern/{countdown-section-7fbcd274.js → countdown-section-abb09576.js} +0 -0
- /package/gallery/{buttons-708e8bc9.d.ts → buttons-9a016308.d.ts} +0 -0
- /package/gallery/{buttons-708e8bc9.js → buttons-9a016308.js} +0 -0
- /package/gallery/esm/{buttons-242116ea.d.ts → buttons-b1c05e73.d.ts} +0 -0
- /package/gallery/esm/{buttons-242116ea.js → buttons-b1c05e73.js} +0 -0
- /package/gallery/esm/{slide-9a45bdb6.d.ts → slide-da5bf337.d.ts} +0 -0
- /package/gallery/esm/{slide-9a45bdb6.js → slide-da5bf337.js} +0 -0
- /package/gallery/modern/{buttons-030cc857.d.ts → buttons-30fa8a5d.d.ts} +0 -0
- /package/gallery/modern/{buttons-030cc857.js → buttons-30fa8a5d.js} +0 -0
- /package/gallery/modern/{slide-4029172e.d.ts → slide-438e6913.d.ts} +0 -0
- /package/gallery/modern/{slide-4029172e.js → slide-438e6913.js} +0 -0
- /package/gallery/{slide-7e1cb2fc.d.ts → slide-456f8387.d.ts} +0 -0
- /package/gallery/{slide-7e1cb2fc.js → slide-456f8387.js} +0 -0
- /package/pure-cell/{component-8965c1f1.d.ts → component-ba329973.d.ts} +0 -0
- /package/pure-cell/{component-8965c1f1.js → component-ba329973.js} +0 -0
- /package/pure-cell/esm/{component-991fe90e.d.ts → component-8dcf2e94.d.ts} +0 -0
- /package/pure-cell/esm/{component-991fe90e.js → component-8dcf2e94.js} +0 -0
- /package/pure-cell/modern/{component-23ae9ab3.d.ts → component-4c3cdd38.d.ts} +0 -0
- /package/pure-cell/modern/{component-23ae9ab3.js → component-4c3cdd38.js} +0 -0
- /package/select/esm/{hook-65049d00.d.ts → hook-70d4d250.d.ts} +0 -0
- /package/select/esm/{hook-65049d00.js → hook-70d4d250.js} +0 -0
- /package/select/{hook-2784297a.d.ts → hook-6fc2190d.d.ts} +0 -0
- /package/select/{hook-2784297a.js → hook-6fc2190d.js} +0 -0
- /package/select/modern/{hook-23f60998.d.ts → hook-7bb88af2.d.ts} +0 -0
- /package/select/modern/{hook-23f60998.js → hook-7bb88af2.js} +0 -0
- /package/side-panel/esm/{layout.module-e6804822.js → layout.module-0a3a954f.js} +0 -0
- /package/side-panel/{layout.module-940702b4.js → layout.module-3700a35d.js} +0 -0
- /package/side-panel/modern/{layout.module-e5e92680.js → layout.module-63bb050d.js} +0 -0
|
@@ -35,7 +35,6 @@ function (_a, ref) {
|
|
|
35
35
|
var listRef = React.useRef(null);
|
|
36
36
|
var initiatorRef = React.useRef(null);
|
|
37
37
|
var searchRef = React.useRef(null);
|
|
38
|
-
var alreadyClickedRef = React.useRef(false);
|
|
39
38
|
var scrollableContainerRef = React.useRef(null);
|
|
40
39
|
var onOpenRef = React.useRef(onOpen);
|
|
41
40
|
var _3 = React__default.default.useState(''), searchState = _3[0], setSearchState = _3[1];
|
|
@@ -96,6 +95,24 @@ function (_a, ref) {
|
|
|
96
95
|
isItemDisabled: isItemDisabled,
|
|
97
96
|
defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
|
|
98
97
|
scrollIntoView: scrollIntoView,
|
|
98
|
+
onSelectedItemChange: function (changes) {
|
|
99
|
+
var selectedItem = changes.selectedItem || initiatorRef.current;
|
|
100
|
+
if (selectedItem && !selectedItem.disabled) {
|
|
101
|
+
var alreadySelected = selectedItems.includes(selectedItem);
|
|
102
|
+
var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
103
|
+
if (alreadySelected && allowRemove) {
|
|
104
|
+
removeSelectedItem(selectedItem);
|
|
105
|
+
}
|
|
106
|
+
if (!alreadySelected) {
|
|
107
|
+
if (multiple) {
|
|
108
|
+
addSelectedItem(selectedItem);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
setSelectedItems([selectedItem]);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
99
116
|
onIsOpenChange: function (changes) {
|
|
100
117
|
if (onOpenRef.current) {
|
|
101
118
|
/**
|
|
@@ -124,16 +141,9 @@ function (_a, ref) {
|
|
|
124
141
|
}
|
|
125
142
|
}
|
|
126
143
|
},
|
|
127
|
-
// eslint-disable-next-line complexity
|
|
128
144
|
stateReducer: function (state, actionAndChanges) {
|
|
129
145
|
var type = actionAndChanges.type, changes = actionAndChanges.changes;
|
|
130
|
-
var selectedItem = changes.selectedItem;
|
|
131
146
|
switch (type) {
|
|
132
|
-
case downshift.useCombobox.stateChangeTypes.InputBlur:
|
|
133
|
-
if (view === 'mobile') {
|
|
134
|
-
return state;
|
|
135
|
-
}
|
|
136
|
-
return changes;
|
|
137
147
|
case downshift.useCombobox.stateChangeTypes.InputKeyDownArrowDown:
|
|
138
148
|
if (!circularNavigation && state.highlightedIndex === options.length - 1) {
|
|
139
149
|
return tslib.__assign(tslib.__assign({}, changes), { highlightedIndex: state.highlightedIndex });
|
|
@@ -145,42 +155,36 @@ function (_a, ref) {
|
|
|
145
155
|
}
|
|
146
156
|
return changes;
|
|
147
157
|
case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
148
|
-
case downshift.useCombobox.stateChangeTypes.ItemClick:
|
|
158
|
+
case downshift.useCombobox.stateChangeTypes.ItemClick: {
|
|
159
|
+
var selectedItem = changes.selectedItem;
|
|
149
160
|
initiatorRef.current = selectedItem || null;
|
|
150
|
-
|
|
151
|
-
// TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
|
|
152
|
-
if (view === 'mobile' && React__default.default.version.indexOf('18') === 0) {
|
|
153
|
-
alreadyClickedRef.current = true;
|
|
154
|
-
setTimeout(function () {
|
|
155
|
-
alreadyClickedRef.current = false;
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
var alreadySelected = selectedItems.includes(selectedItem);
|
|
159
|
-
var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
160
|
-
if (alreadySelected && allowRemove) {
|
|
161
|
-
removeSelectedItem(selectedItem);
|
|
162
|
-
}
|
|
163
|
-
if (!alreadySelected) {
|
|
164
|
-
if (multiple) {
|
|
165
|
-
addSelectedItem(selectedItem);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
setSelectedItems([selectedItem]);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return tslib.__assign(tslib.__assign({}, changes), { isOpen: !closeOnSelect || (view === 'mobile' && multiple),
|
|
161
|
+
return tslib.__assign(tslib.__assign({}, changes), { selectedItem: state.selectedItem === selectedItem ? null : selectedItem, isOpen: !closeOnSelect || (view === 'mobile' && multiple),
|
|
173
162
|
// при closeOnSelect === false - сохраняем подсвеченный индекс
|
|
174
163
|
highlightedIndex: state.isOpen && !closeOnSelect
|
|
175
164
|
? state.highlightedIndex
|
|
176
165
|
: changes.highlightedIndex });
|
|
166
|
+
}
|
|
177
167
|
default:
|
|
178
168
|
return changes;
|
|
179
169
|
}
|
|
180
170
|
},
|
|
181
171
|
}), open = _7.isOpen, getMenuProps = _7.getMenuProps, getInputProps = _7.getInputProps, getItemProps = _7.getItemProps, getLabelProps = _7.getLabelProps, highlightedIndex = _7.highlightedIndex, toggleMenu = _7.toggleMenu, openMenu = _7.openMenu, closeMenu = _7.closeMenu, setHighlightedIndex = _7.setHighlightedIndex;
|
|
182
|
-
|
|
172
|
+
React.useEffect(function () {
|
|
173
|
+
/*
|
|
174
|
+
* При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
|
|
175
|
+
* Скорее всего это исправят в будущих версиях downshift
|
|
176
|
+
*/
|
|
177
|
+
if (openProp !== undefined) {
|
|
178
|
+
if (openProp) {
|
|
179
|
+
openMenu();
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
closeMenu();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}, [openProp, openMenu, closeMenu]);
|
|
183
186
|
var inputProps = getInputProps(getDropdownProps({ ref: mergeRefs__default.default([ref, fieldRef]) }));
|
|
187
|
+
var _8 = getMenuProps({ ref: listRef }, { suppressRefError: true }), menuRef = _8.ref, menuProps = tslib.__rest(_8, ["ref"]);
|
|
184
188
|
var handleEntered = function (node, isAppearing) {
|
|
185
189
|
var _a, _b, _c, _d, _e;
|
|
186
190
|
if (showSearch)
|
|
@@ -331,7 +335,7 @@ function (_a, ref) {
|
|
|
331
335
|
_a[mobileStyles__default.default.search] = view === 'mobile',
|
|
332
336
|
_a)), ref: mergeRefs__default.default([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]) })));
|
|
333
337
|
};
|
|
334
|
-
var
|
|
338
|
+
var _9 = optionsListProps, header = _9.header, emptyPlaceholder = _9.emptyPlaceholder;
|
|
335
339
|
var renderOptionsListHeader = function () {
|
|
336
340
|
if (header || (view === 'desktop' && showSearch)) {
|
|
337
341
|
return (React__default.default.createElement(React__default.default.Fragment, null,
|
|
@@ -354,7 +358,7 @@ function (_a, ref) {
|
|
|
354
358
|
if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
|
|
355
359
|
return null;
|
|
356
360
|
var listProps = optionsListProps;
|
|
357
|
-
return (React__default.default.createElement("div", tslib.__assign({}, menuProps, { className: cn__default.default(optionsListClassName, view === 'mobile' && mobileStyles__default.default.optionsListWrapper, view === 'desktop' && styles__default.default.optionsListWrapper) }),
|
|
361
|
+
return (React__default.default.createElement("div", tslib.__assign({}, menuProps, { ref: view === 'desktop' ? menuRef : undefined, className: cn__default.default(optionsListClassName, view === 'mobile' && mobileStyles__default.default.optionsListWrapper, view === 'desktop' && styles__default.default.optionsListWrapper) }),
|
|
358
362
|
React__default.default.createElement(OptionsList, tslib.__assign({}, listProps, { ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn__default.default((_a = {}, _a[mobileStyles__default.default.optionsList] = view === 'mobile', _a)), scrollbarClassName: cn__default.default((_b = {}, _b[mobileStyles__default.default.scrollbar] = view === 'mobile', _b)), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn__default.default(optionGroupClassName, (_c = {},
|
|
359
363
|
_c[mobileStyles__default.default.optionGroup] = view === 'mobile',
|
|
360
364
|
_c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll })),
|
|
@@ -368,7 +372,7 @@ function (_a, ref) {
|
|
|
368
372
|
};
|
|
369
373
|
var renderInBottomSheet = function () {
|
|
370
374
|
if (!nativeSelect && BottomSheet) {
|
|
371
|
-
return (React__default.default.createElement(BottomSheet, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles__default.default.sheet, contentClassName: mobileStyles__default.default.sheetContent, containerClassName: mobileStyles__default.default.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { scrollableContainerRef: scrollableContainerRef, onClose: function () {
|
|
375
|
+
return (React__default.default.createElement(BottomSheet, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles__default.default.sheet, contentClassName: mobileStyles__default.default.sheetContent, containerClassName: mobileStyles__default.default.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: function () {
|
|
372
376
|
var _a;
|
|
373
377
|
closeMenu();
|
|
374
378
|
(_a = bottomSheetProps === null || bottomSheetProps === void 0 ? void 0 : bottomSheetProps.onClose) === null || _a === void 0 ? void 0 : _a.call(bottomSheetProps);
|
|
@@ -380,7 +384,7 @@ function (_a, ref) {
|
|
|
380
384
|
};
|
|
381
385
|
var renderInModalMobile = function () {
|
|
382
386
|
if (!nativeSelect && ModalMobile) {
|
|
383
|
-
return (React__default.default.createElement(ModalMobile, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { onClose: function () {
|
|
387
|
+
return (React__default.default.createElement(ModalMobile, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { componentRef: menuRef, onClose: function () {
|
|
384
388
|
var _a;
|
|
385
389
|
var args = [];
|
|
386
390
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -41,7 +41,7 @@ import '../../base-modal/esm';
|
|
|
41
41
|
import '../../button/esm/mobile';
|
|
42
42
|
import './components/virtual-options-list/Component.js';
|
|
43
43
|
import 'react-virtual';
|
|
44
|
-
import './hook-
|
|
44
|
+
import './hook-70d4d250.js';
|
|
45
45
|
import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
46
46
|
import '../../button/esm/desktop';
|
|
47
47
|
import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { __assign, __spreadArray } from 'tslib';
|
|
2
|
-
import React, { forwardRef, useRef, useMemo,
|
|
1
|
+
import { __assign, __rest, __spreadArray } from 'tslib';
|
|
2
|
+
import React, { forwardRef, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
3
3
|
import mergeRefs from 'react-merge-refs';
|
|
4
4
|
import { ResizeObserver } from '@juggle/resize-observer';
|
|
5
5
|
import cn from 'classnames';
|
|
@@ -29,7 +29,6 @@ function (_a, ref) {
|
|
|
29
29
|
var listRef = useRef(null);
|
|
30
30
|
var initiatorRef = useRef(null);
|
|
31
31
|
var searchRef = useRef(null);
|
|
32
|
-
var alreadyClickedRef = useRef(false);
|
|
33
32
|
var scrollableContainerRef = useRef(null);
|
|
34
33
|
var onOpenRef = useRef(onOpen);
|
|
35
34
|
var _3 = React.useState(''), searchState = _3[0], setSearchState = _3[1];
|
|
@@ -90,6 +89,24 @@ function (_a, ref) {
|
|
|
90
89
|
isItemDisabled: isItemDisabled,
|
|
91
90
|
defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
|
|
92
91
|
scrollIntoView: scrollIntoView,
|
|
92
|
+
onSelectedItemChange: function (changes) {
|
|
93
|
+
var selectedItem = changes.selectedItem || initiatorRef.current;
|
|
94
|
+
if (selectedItem && !selectedItem.disabled) {
|
|
95
|
+
var alreadySelected = selectedItems.includes(selectedItem);
|
|
96
|
+
var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
97
|
+
if (alreadySelected && allowRemove) {
|
|
98
|
+
removeSelectedItem(selectedItem);
|
|
99
|
+
}
|
|
100
|
+
if (!alreadySelected) {
|
|
101
|
+
if (multiple) {
|
|
102
|
+
addSelectedItem(selectedItem);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
setSelectedItems([selectedItem]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
93
110
|
onIsOpenChange: function (changes) {
|
|
94
111
|
if (onOpenRef.current) {
|
|
95
112
|
/**
|
|
@@ -118,16 +135,9 @@ function (_a, ref) {
|
|
|
118
135
|
}
|
|
119
136
|
}
|
|
120
137
|
},
|
|
121
|
-
// eslint-disable-next-line complexity
|
|
122
138
|
stateReducer: function (state, actionAndChanges) {
|
|
123
139
|
var type = actionAndChanges.type, changes = actionAndChanges.changes;
|
|
124
|
-
var selectedItem = changes.selectedItem;
|
|
125
140
|
switch (type) {
|
|
126
|
-
case useCombobox.stateChangeTypes.InputBlur:
|
|
127
|
-
if (view === 'mobile') {
|
|
128
|
-
return state;
|
|
129
|
-
}
|
|
130
|
-
return changes;
|
|
131
141
|
case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
|
|
132
142
|
if (!circularNavigation && state.highlightedIndex === options.length - 1) {
|
|
133
143
|
return __assign(__assign({}, changes), { highlightedIndex: state.highlightedIndex });
|
|
@@ -139,42 +149,36 @@ function (_a, ref) {
|
|
|
139
149
|
}
|
|
140
150
|
return changes;
|
|
141
151
|
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
142
|
-
case useCombobox.stateChangeTypes.ItemClick:
|
|
152
|
+
case useCombobox.stateChangeTypes.ItemClick: {
|
|
153
|
+
var selectedItem = changes.selectedItem;
|
|
143
154
|
initiatorRef.current = selectedItem || null;
|
|
144
|
-
|
|
145
|
-
// TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
|
|
146
|
-
if (view === 'mobile' && React.version.indexOf('18') === 0) {
|
|
147
|
-
alreadyClickedRef.current = true;
|
|
148
|
-
setTimeout(function () {
|
|
149
|
-
alreadyClickedRef.current = false;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
var alreadySelected = selectedItems.includes(selectedItem);
|
|
153
|
-
var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
154
|
-
if (alreadySelected && allowRemove) {
|
|
155
|
-
removeSelectedItem(selectedItem);
|
|
156
|
-
}
|
|
157
|
-
if (!alreadySelected) {
|
|
158
|
-
if (multiple) {
|
|
159
|
-
addSelectedItem(selectedItem);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
setSelectedItems([selectedItem]);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return __assign(__assign({}, changes), { isOpen: !closeOnSelect || (view === 'mobile' && multiple),
|
|
155
|
+
return __assign(__assign({}, changes), { selectedItem: state.selectedItem === selectedItem ? null : selectedItem, isOpen: !closeOnSelect || (view === 'mobile' && multiple),
|
|
167
156
|
// при closeOnSelect === false - сохраняем подсвеченный индекс
|
|
168
157
|
highlightedIndex: state.isOpen && !closeOnSelect
|
|
169
158
|
? state.highlightedIndex
|
|
170
159
|
: changes.highlightedIndex });
|
|
160
|
+
}
|
|
171
161
|
default:
|
|
172
162
|
return changes;
|
|
173
163
|
}
|
|
174
164
|
},
|
|
175
165
|
}), open = _7.isOpen, getMenuProps = _7.getMenuProps, getInputProps = _7.getInputProps, getItemProps = _7.getItemProps, getLabelProps = _7.getLabelProps, highlightedIndex = _7.highlightedIndex, toggleMenu = _7.toggleMenu, openMenu = _7.openMenu, closeMenu = _7.closeMenu, setHighlightedIndex = _7.setHighlightedIndex;
|
|
176
|
-
|
|
166
|
+
useEffect(function () {
|
|
167
|
+
/*
|
|
168
|
+
* При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
|
|
169
|
+
* Скорее всего это исправят в будущих версиях downshift
|
|
170
|
+
*/
|
|
171
|
+
if (openProp !== undefined) {
|
|
172
|
+
if (openProp) {
|
|
173
|
+
openMenu();
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
closeMenu();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}, [openProp, openMenu, closeMenu]);
|
|
177
180
|
var inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
|
|
181
|
+
var _8 = getMenuProps({ ref: listRef }, { suppressRefError: true }), menuRef = _8.ref, menuProps = __rest(_8, ["ref"]);
|
|
178
182
|
var handleEntered = function (node, isAppearing) {
|
|
179
183
|
var _a, _b, _c, _d, _e;
|
|
180
184
|
if (showSearch)
|
|
@@ -325,7 +329,7 @@ function (_a, ref) {
|
|
|
325
329
|
_a[mobileStyles.search] = view === 'mobile',
|
|
326
330
|
_a)), ref: mergeRefs([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]) })));
|
|
327
331
|
};
|
|
328
|
-
var
|
|
332
|
+
var _9 = optionsListProps, header = _9.header, emptyPlaceholder = _9.emptyPlaceholder;
|
|
329
333
|
var renderOptionsListHeader = function () {
|
|
330
334
|
if (header || (view === 'desktop' && showSearch)) {
|
|
331
335
|
return (React.createElement(React.Fragment, null,
|
|
@@ -348,7 +352,7 @@ function (_a, ref) {
|
|
|
348
352
|
if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
|
|
349
353
|
return null;
|
|
350
354
|
var listProps = optionsListProps;
|
|
351
|
-
return (React.createElement("div", __assign({}, menuProps, { className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) }),
|
|
355
|
+
return (React.createElement("div", __assign({}, menuProps, { ref: view === 'desktop' ? menuRef : undefined, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) }),
|
|
352
356
|
React.createElement(OptionsList, __assign({}, listProps, { ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn((_a = {}, _a[mobileStyles.optionsList] = view === 'mobile', _a)), scrollbarClassName: cn((_b = {}, _b[mobileStyles.scrollbar] = view === 'mobile', _b)), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn(optionGroupClassName, (_c = {},
|
|
353
357
|
_c[mobileStyles.optionGroup] = view === 'mobile',
|
|
354
358
|
_c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll })),
|
|
@@ -362,7 +366,7 @@ function (_a, ref) {
|
|
|
362
366
|
};
|
|
363
367
|
var renderInBottomSheet = function () {
|
|
364
368
|
if (!nativeSelect && BottomSheet) {
|
|
365
|
-
return (React.createElement(BottomSheet, __assign({ dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { scrollableContainerRef: scrollableContainerRef, onClose: function () {
|
|
369
|
+
return (React.createElement(BottomSheet, __assign({ dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: function () {
|
|
366
370
|
var _a;
|
|
367
371
|
closeMenu();
|
|
368
372
|
(_a = bottomSheetProps === null || bottomSheetProps === void 0 ? void 0 : bottomSheetProps.onClose) === null || _a === void 0 ? void 0 : _a.call(bottomSheetProps);
|
|
@@ -374,7 +378,7 @@ function (_a, ref) {
|
|
|
374
378
|
};
|
|
375
379
|
var renderInModalMobile = function () {
|
|
376
380
|
if (!nativeSelect && ModalMobile) {
|
|
377
|
-
return (React.createElement(ModalMobile, __assign({ dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { onClose: function () {
|
|
381
|
+
return (React.createElement(ModalMobile, __assign({ dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { componentRef: menuRef, onClose: function () {
|
|
378
382
|
var _a;
|
|
379
383
|
var args = [];
|
|
380
384
|
for (var _i = 0; _i < arguments.length; _i++) {
|
package/select/esm/index.js
CHANGED
|
@@ -41,7 +41,7 @@ import '../../base-modal/esm';
|
|
|
41
41
|
import '../../button/esm/mobile';
|
|
42
42
|
import './components/virtual-options-list/Component.js';
|
|
43
43
|
import 'react-virtual';
|
|
44
|
-
import './hook-
|
|
44
|
+
import './hook-70d4d250.js';
|
|
45
45
|
import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
46
46
|
import '../../button/esm/desktop';
|
|
47
47
|
import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -12,7 +12,7 @@ import { Option } from '../components/option/Component.js';
|
|
|
12
12
|
import { OptionsList } from '../components/options-list/Component.js';
|
|
13
13
|
import { Search } from '../components/search/Component.js';
|
|
14
14
|
import { VirtualOptionsList } from '../components/virtual-options-list/Component.js';
|
|
15
|
-
import { u as useSelectWithApply } from '../hook-
|
|
15
|
+
import { u as useSelectWithApply } from '../hook-70d4d250.js';
|
|
16
16
|
import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
17
17
|
import 'classnames';
|
|
18
18
|
import '@alfalab/icons-glyph/ChevronDownMIcon';
|
|
@@ -37,7 +37,7 @@ import '../../../input/esm';
|
|
|
37
37
|
import '@alfalab/icons-glyph/MagnifierMIcon';
|
|
38
38
|
import '../components/virtual-options-list/Component.js';
|
|
39
39
|
import 'react-virtual';
|
|
40
|
-
import '../hook-
|
|
40
|
+
import '../hook-70d4d250.js';
|
|
41
41
|
import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
42
42
|
import '../../../button/esm/desktop';
|
|
43
43
|
import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -38,7 +38,7 @@ import '../../../input/esm';
|
|
|
38
38
|
import '@alfalab/icons-glyph/MagnifierMIcon';
|
|
39
39
|
import '../components/virtual-options-list/Component.js';
|
|
40
40
|
import 'react-virtual';
|
|
41
|
-
import '../hook-
|
|
41
|
+
import '../hook-70d4d250.js';
|
|
42
42
|
import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
43
43
|
import '../../../button/esm/desktop';
|
|
44
44
|
import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
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-70d4d250.js';
|
|
4
4
|
import 'tslib';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '../../../skeleton/esm';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'tslib';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../../../shared/esm';
|
|
4
|
-
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-
|
|
4
|
+
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-70d4d250.js';
|
|
5
5
|
import '../../utils.js';
|
|
6
6
|
import '../../components/options-list/Component.js';
|
|
7
7
|
import 'react-merge-refs';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'tslib';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '../../../components/options-list/Component.js';
|
|
4
|
-
export { O as OptionsListWithApply } from '../../../hook-
|
|
4
|
+
export { O as OptionsListWithApply } from '../../../hook-70d4d250.js';
|
|
5
5
|
import './footer/Component.js';
|
|
6
6
|
import './header/Component.js';
|
|
7
7
|
import 'react-merge-refs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "../../../hook-
|
|
1
|
+
export * from "../../../hook-70d4d250";
|
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
3
|
+
export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-70d4d250.js';
|
|
4
4
|
export { defaultAccessor, defaultFilterFn, 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';
|
|
@@ -14,7 +14,7 @@ var components_option_Component = require('../components/option/Component.js');
|
|
|
14
14
|
var components_optionsList_Component = require('../components/options-list/Component.js');
|
|
15
15
|
var components_search_Component = require('../components/search/Component.js');
|
|
16
16
|
var components_virtualOptionsList_Component = require('../components/virtual-options-list/Component.js');
|
|
17
|
-
var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-
|
|
17
|
+
var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-6fc2190d.js');
|
|
18
18
|
var presets_useSelectWithApply_optionsListWithApply_header_Component = require('../presets/useSelectWithApply/options-list-with-apply/header/Component.js');
|
|
19
19
|
|
|
20
20
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -40,7 +40,7 @@ import '../../base-modal/modern';
|
|
|
40
40
|
import '../../button/modern/mobile';
|
|
41
41
|
import './components/virtual-options-list/Component.js';
|
|
42
42
|
import 'react-virtual';
|
|
43
|
-
import './hook-
|
|
43
|
+
import './hook-7bb88af2.js';
|
|
44
44
|
import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
45
45
|
import '../../button/modern/desktop';
|
|
46
46
|
import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { forwardRef, useRef, useMemo,
|
|
1
|
+
import React, { forwardRef, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
2
2
|
import mergeRefs from 'react-merge-refs';
|
|
3
3
|
import { ResizeObserver } from '@juggle/resize-observer';
|
|
4
4
|
import cn from 'classnames';
|
|
@@ -27,7 +27,6 @@ const BaseSelect = forwardRef(
|
|
|
27
27
|
const listRef = useRef(null);
|
|
28
28
|
const initiatorRef = useRef(null);
|
|
29
29
|
const searchRef = useRef(null);
|
|
30
|
-
const alreadyClickedRef = useRef(false);
|
|
31
30
|
const scrollableContainerRef = useRef(null);
|
|
32
31
|
const onOpenRef = useRef(onOpen);
|
|
33
32
|
const [searchState, setSearchState] = React.useState('');
|
|
@@ -88,6 +87,24 @@ const BaseSelect = forwardRef(
|
|
|
88
87
|
isItemDisabled,
|
|
89
88
|
defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
|
|
90
89
|
scrollIntoView,
|
|
90
|
+
onSelectedItemChange: (changes) => {
|
|
91
|
+
const selectedItem = changes.selectedItem || initiatorRef.current;
|
|
92
|
+
if (selectedItem && !selectedItem.disabled) {
|
|
93
|
+
const alreadySelected = selectedItems.includes(selectedItem);
|
|
94
|
+
const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
95
|
+
if (alreadySelected && allowRemove) {
|
|
96
|
+
removeSelectedItem(selectedItem);
|
|
97
|
+
}
|
|
98
|
+
if (!alreadySelected) {
|
|
99
|
+
if (multiple) {
|
|
100
|
+
addSelectedItem(selectedItem);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
setSelectedItems([selectedItem]);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
91
108
|
onIsOpenChange: (changes) => {
|
|
92
109
|
if (onOpenRef.current) {
|
|
93
110
|
/**
|
|
@@ -114,16 +131,9 @@ const BaseSelect = forwardRef(
|
|
|
114
131
|
}
|
|
115
132
|
}
|
|
116
133
|
},
|
|
117
|
-
// eslint-disable-next-line complexity
|
|
118
134
|
stateReducer: (state, actionAndChanges) => {
|
|
119
135
|
const { type, changes } = actionAndChanges;
|
|
120
|
-
const { selectedItem } = changes;
|
|
121
136
|
switch (type) {
|
|
122
|
-
case useCombobox.stateChangeTypes.InputBlur:
|
|
123
|
-
if (view === 'mobile') {
|
|
124
|
-
return state;
|
|
125
|
-
}
|
|
126
|
-
return changes;
|
|
127
137
|
case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
|
|
128
138
|
if (!circularNavigation && state.highlightedIndex === options.length - 1) {
|
|
129
139
|
return { ...changes, highlightedIndex: state.highlightedIndex };
|
|
@@ -135,45 +145,40 @@ const BaseSelect = forwardRef(
|
|
|
135
145
|
}
|
|
136
146
|
return changes;
|
|
137
147
|
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
138
|
-
case useCombobox.stateChangeTypes.ItemClick:
|
|
148
|
+
case useCombobox.stateChangeTypes.ItemClick: {
|
|
149
|
+
const { selectedItem } = changes;
|
|
139
150
|
initiatorRef.current = selectedItem || null;
|
|
140
|
-
if (selectedItem && !selectedItem.disabled && !alreadyClickedRef.current) {
|
|
141
|
-
// TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
|
|
142
|
-
if (view === 'mobile' && React.version.indexOf('18') === 0) {
|
|
143
|
-
alreadyClickedRef.current = true;
|
|
144
|
-
setTimeout(() => {
|
|
145
|
-
alreadyClickedRef.current = false;
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
const alreadySelected = selectedItems.includes(selectedItem);
|
|
149
|
-
const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
150
|
-
if (alreadySelected && allowRemove) {
|
|
151
|
-
removeSelectedItem(selectedItem);
|
|
152
|
-
}
|
|
153
|
-
if (!alreadySelected) {
|
|
154
|
-
if (multiple) {
|
|
155
|
-
addSelectedItem(selectedItem);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
setSelectedItems([selectedItem]);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
151
|
return {
|
|
163
152
|
...changes,
|
|
153
|
+
selectedItem: state.selectedItem === selectedItem ? null : selectedItem,
|
|
164
154
|
isOpen: !closeOnSelect || (view === 'mobile' && multiple),
|
|
165
155
|
// при closeOnSelect === false - сохраняем подсвеченный индекс
|
|
166
156
|
highlightedIndex: state.isOpen && !closeOnSelect
|
|
167
157
|
? state.highlightedIndex
|
|
168
158
|
: changes.highlightedIndex,
|
|
169
159
|
};
|
|
160
|
+
}
|
|
170
161
|
default:
|
|
171
162
|
return changes;
|
|
172
163
|
}
|
|
173
164
|
},
|
|
174
165
|
});
|
|
175
|
-
|
|
166
|
+
useEffect(() => {
|
|
167
|
+
/*
|
|
168
|
+
* При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
|
|
169
|
+
* Скорее всего это исправят в будущих версиях downshift
|
|
170
|
+
*/
|
|
171
|
+
if (openProp !== undefined) {
|
|
172
|
+
if (openProp) {
|
|
173
|
+
openMenu();
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
closeMenu();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}, [openProp, openMenu, closeMenu]);
|
|
176
180
|
const inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
|
|
181
|
+
const { ref: menuRef, ...menuProps } = getMenuProps({ ref: listRef }, { suppressRefError: true });
|
|
177
182
|
const handleEntered = (node, isAppearing) => {
|
|
178
183
|
if (showSearch)
|
|
179
184
|
searchRef.current?.focus();
|
|
@@ -342,7 +347,7 @@ const BaseSelect = forwardRef(
|
|
|
342
347
|
if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
|
|
343
348
|
return null;
|
|
344
349
|
const listProps = optionsListProps;
|
|
345
|
-
return (React.createElement("div", { ...menuProps, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) },
|
|
350
|
+
return (React.createElement("div", { ...menuProps, ref: view === 'desktop' ? menuRef : undefined, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) },
|
|
346
351
|
React.createElement(OptionsList, { ...listProps, ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn({ [mobileStyles.optionsList]: view === 'mobile' }), scrollbarClassName: cn({ [mobileStyles.scrollbar]: view === 'mobile' }), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn(optionGroupClassName, {
|
|
347
352
|
[mobileStyles.optionGroup]: view === 'mobile',
|
|
348
353
|
}), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll }),
|
|
@@ -356,7 +361,7 @@ const BaseSelect = forwardRef(
|
|
|
356
361
|
};
|
|
357
362
|
const renderInBottomSheet = () => {
|
|
358
363
|
if (!nativeSelect && BottomSheet) {
|
|
359
|
-
return (React.createElement(BottomSheet, { dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default', ...bottomSheetProps, scrollableContainerRef: scrollableContainerRef, onClose: () => {
|
|
364
|
+
return (React.createElement(BottomSheet, { dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default', ...bottomSheetProps, sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: () => {
|
|
360
365
|
closeMenu();
|
|
361
366
|
bottomSheetProps?.onClose?.();
|
|
362
367
|
}, transitionProps: {
|
|
@@ -373,7 +378,7 @@ const BaseSelect = forwardRef(
|
|
|
373
378
|
};
|
|
374
379
|
const renderInModalMobile = () => {
|
|
375
380
|
if (!nativeSelect && ModalMobile) {
|
|
376
|
-
return (React.createElement(ModalMobile, { dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true, ...modalProps, onClose: (...args) => {
|
|
381
|
+
return (React.createElement(ModalMobile, { dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true, ...modalProps, componentRef: menuRef, onClose: (...args) => {
|
|
377
382
|
closeMenu();
|
|
378
383
|
modalProps?.onClose?.(...args);
|
|
379
384
|
}, contentClassName: cn(mobileStyles.sheetContent, modalProps?.contentClassName), ref: mergeRefs([
|
package/select/modern/index.js
CHANGED
|
@@ -40,7 +40,7 @@ import '../../base-modal/modern';
|
|
|
40
40
|
import '../../button/modern/mobile';
|
|
41
41
|
import './components/virtual-options-list/Component.js';
|
|
42
42
|
import 'react-virtual';
|
|
43
|
-
import './hook-
|
|
43
|
+
import './hook-7bb88af2.js';
|
|
44
44
|
import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
45
45
|
import '../../button/modern/desktop';
|
|
46
46
|
import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -11,7 +11,7 @@ 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-7bb88af2.js';
|
|
15
15
|
import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
16
16
|
import 'classnames';
|
|
17
17
|
import '@alfalab/icons-glyph/ChevronDownMIcon';
|
|
@@ -36,7 +36,7 @@ import '../../../input/modern';
|
|
|
36
36
|
import '@alfalab/icons-glyph/MagnifierMIcon';
|
|
37
37
|
import '../components/virtual-options-list/Component.js';
|
|
38
38
|
import 'react-virtual';
|
|
39
|
-
import '../hook-
|
|
39
|
+
import '../hook-7bb88af2.js';
|
|
40
40
|
import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
41
41
|
import '../../../button/modern/desktop';
|
|
42
42
|
import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -37,7 +37,7 @@ import '../../../input/modern';
|
|
|
37
37
|
import '@alfalab/icons-glyph/MagnifierMIcon';
|
|
38
38
|
import '../components/virtual-options-list/Component.js';
|
|
39
39
|
import 'react-virtual';
|
|
40
|
-
import '../hook-
|
|
40
|
+
import '../hook-7bb88af2.js';
|
|
41
41
|
import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
|
|
42
42
|
import '../../../button/modern/desktop';
|
|
43
43
|
import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
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-7bb88af2.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '../../../skeleton/modern';
|
|
6
6
|
import '../components/option/Component.js';
|