@salutejs/plasma-new-hope 0.335.0-canary.2194.17367251959.0 → 0.335.0-canary.2196.17375511532.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/cjs/components/Combobox/ComboboxNew/Combobox.js +15 -30
- package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
- package/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +24 -0
- package/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js.map +1 -0
- package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +26 -44
- package/emotion/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +25 -0
- package/emotion/cjs/components/Combobox/ComboboxNew/utils/index.js +4 -0
- package/emotion/cjs/examples/components/Chip/Chip.config.js +13 -14
- package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +12 -30
- package/emotion/es/components/Combobox/ComboboxNew/utils/getTextValue.js +16 -0
- package/emotion/es/components/Combobox/ComboboxNew/utils/index.js +1 -0
- package/emotion/es/examples/components/Chip/Chip.config.js +13 -14
- package/es/components/Combobox/ComboboxNew/Combobox.js +15 -30
- package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
- package/es/components/Combobox/ComboboxNew/utils/getTextValue.js +20 -0
- package/es/components/Combobox/ComboboxNew/utils/getTextValue.js.map +1 -0
- package/package.json +2 -2
- package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +26 -44
- package/styled-components/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +25 -0
- package/styled-components/cjs/components/Combobox/ComboboxNew/utils/index.js +4 -0
- package/styled-components/cjs/examples/components/Chip/Chip.config.js +0 -21
- package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +12 -30
- package/styled-components/es/components/Combobox/ComboboxNew/utils/getTextValue.js +16 -0
- package/styled-components/es/components/Combobox/ComboboxNew/utils/index.js +1 -0
- package/styled-components/es/examples/components/Chip/Chip.config.js +0 -21
- package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +1 -1
- package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
- package/types/components/Combobox/ComboboxNew/utils/getTextValue.d.ts +4 -0
- package/types/components/Combobox/ComboboxNew/utils/getTextValue.d.ts.map +1 -0
- package/types/components/Combobox/ComboboxNew/utils/index.d.ts +1 -0
- package/types/components/Combobox/ComboboxNew/utils/index.d.ts.map +1 -1
- package/types/examples/components/Chip/Chip.config.d.ts +0 -1
- package/types/examples/components/Chip/Chip.config.d.ts.map +1 -1
- package/types/examples/components/Chip/Chip.d.ts +0 -1
- package/types/examples/components/Chip/Chip.d.ts.map +1 -1
- package/types/examples/components/Combobox/Combobox.d.ts.map +1 -1
@@ -141,14 +141,13 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
141
141
|
}
|
142
142
|
import React, { forwardRef, useState, useReducer, useMemo, useLayoutEffect, useRef } from "react";
|
143
143
|
import { useForkRef } from "@salutejs/plasma-core";
|
144
|
-
import { safeUseId } from "../../../utils";
|
145
|
-
import {
|
146
|
-
import { useOutsideClick } from "../../../hooks";
|
144
|
+
import { safeUseId, isEmpty } from "../../../utils";
|
145
|
+
import { useOutsideClick, useDidMountLayoutEffect } from "../../../hooks";
|
147
146
|
import { sizeToIconSize } from "../../Select/utils";
|
148
147
|
import { classes } from "./Combobox.tokens";
|
149
148
|
import { FloatingPopover } from "./FloatingPopover";
|
150
149
|
import { useKeyNavigation, getItemByFocused } from "./hooks/useKeyboardNavigation";
|
151
|
-
import { initialItemsTransform, updateAncestors, updateDescendants, updateSingleAncestors, filterItems, getItemId, getRemovedElement } from "./utils";
|
150
|
+
import { initialItemsTransform, updateAncestors, updateDescendants, updateSingleAncestors, filterItems, getItemId, getRemovedElement, getTextValue } from "./utils";
|
152
151
|
import { Inner, StyledTextField, VirtualList, SelectAll } from "./ui";
|
153
152
|
import { pathReducer, focusedPathReducer } from "./reducers";
|
154
153
|
import { getPathMap, getTreeMaps } from "./hooks/getPathMaps";
|
@@ -161,7 +160,7 @@ import { Context } from "./Combobox.context";
|
|
161
160
|
* Поле ввода с выпадающим списком и возможностью фильтрации и выбора элементов.
|
162
161
|
*/ export var comboboxRoot = function(Root) {
|
163
162
|
return /*#__PURE__*/ forwardRef(function(props, ref) {
|
164
|
-
var
|
163
|
+
var _getItemByFocused;
|
165
164
|
var name = props.name, multiple = props.multiple, outerValue = props.value, outerOnChange = props.onChange, defaultValue = props.defaultValue, isTargetAmount = props.isTargetAmount, targetAmount = props.targetAmount, items = props.items, _props_placement = props.placement, placement = _props_placement === void 0 ? 'bottom-start' : _props_placement, label = props.label, placeholder = props.placeholder, helperText = props.helperText, contentLeft = props.contentLeft, textBefore = props.textBefore, textAfter = props.textAfter, _props_variant = props.variant, variant = _props_variant === void 0 ? 'normal' : _props_variant, listOverflow = props.listOverflow, listHeight = props.listHeight, listMaxHeight = props.listMaxHeight, listWidth = props.listWidth, portal = props.portal, renderItem = props.renderItem, view = props.view, size = props.size, labelPlacement = props.labelPlacement, keepPlaceholder = props.keepPlaceholder, _props_readOnly = props.readOnly, readOnly = _props_readOnly === void 0 ? false : _props_readOnly, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, _props_alwaysOpened = props.alwaysOpened, alwaysOpened = _props_alwaysOpened === void 0 ? false : _props_alwaysOpened, filter = props.filter, outerCloseAfterSelect = props.closeAfterSelect, renderValue = props.renderValue, zIndex = props.zIndex, beforeList = props.beforeList, afterList = props.afterList, _props_virtual = props.virtual, virtual = _props_virtual === void 0 ? false : _props_virtual, hintView = props.hintView, hintSize = props.hintSize, emptyStateDescription = props.emptyStateDescription, onChangeValue = props.onChangeValue, onScroll = props.onScroll, onToggle = props.onToggle, // @ts-ignore
|
166
165
|
_offset = props._offset, rest = _object_without_properties(props, [
|
167
166
|
"name",
|
@@ -219,7 +218,7 @@ import { Context } from "./Combobox.context";
|
|
219
218
|
}, [
|
220
219
|
items
|
221
220
|
]), 3), valueToCheckedMap = _useMemo[0], valueToItemMap = _useMemo[1], labelToItemMap = _useMemo[2];
|
222
|
-
var _useState = _sliced_to_array(useState(multiple
|
221
|
+
var _useState = _sliced_to_array(useState(getTextValue(multiple, outerValue, valueToItemMap, renderValue)), 2), textValue = _useState[0], setTextValue = _useState[1];
|
223
222
|
var _useState1 = _sliced_to_array(useState(multiple ? [] : ''), 2), internalValue = _useState1[0], setInternalValue = _useState1[1];
|
224
223
|
var value = outerValue !== null && outerValue !== undefined ? outerValue : internalValue;
|
225
224
|
var inputRef = useRef(null);
|
@@ -227,8 +226,7 @@ import { Context } from "./Combobox.context";
|
|
227
226
|
var inputForkRef = useForkRef(inputRef, ref);
|
228
227
|
var treeId = safeUseId();
|
229
228
|
var filteredItems = useMemo(function() {
|
230
|
-
|
231
|
-
return filterItems(transformedItems, textValue, ((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || value, filter);
|
229
|
+
return filterItems(transformedItems, textValue, getTextValue(multiple, value, valueToItemMap, renderValue), filter);
|
232
230
|
}, [
|
233
231
|
transformedItems,
|
234
232
|
textValue,
|
@@ -265,30 +263,19 @@ import { Context } from "./Combobox.context";
|
|
265
263
|
if (onToggle) {
|
266
264
|
onToggle(false);
|
267
265
|
}
|
268
|
-
//
|
269
|
-
|
270
|
-
// Если нет выбранного элемента, то стираем значение инпута.
|
271
|
-
if (textValue !== value) {
|
272
|
-
if (isEmpty(value)) {
|
273
|
-
setTextValue('');
|
274
|
-
} else if (multiple) {
|
275
|
-
setTextValue('');
|
276
|
-
} else {
|
277
|
-
var _valueToItemMap_get;
|
278
|
-
setTextValue(((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || value || '');
|
279
|
-
}
|
280
|
-
}
|
266
|
+
// Возвращаем актуальное значение поля ввода после закрытия выпадающего списка.
|
267
|
+
setTextValue(getTextValue(multiple, value, valueToItemMap, renderValue));
|
281
268
|
}, floatingPopoverRef);
|
282
269
|
// Эта функция срабатывает при изменении Combobox и
|
283
270
|
// при изменении нативного Select для формы (срабатывает только после изменения internalValue и рендера).
|
284
271
|
var onChange = function(newValue, item) {
|
285
272
|
// Условие для отправки изменений наружу
|
286
273
|
if (props.onChange) {
|
287
|
-
// Условие для
|
274
|
+
// Условие для отправки, если комбобокс используется без формы.
|
288
275
|
if (!props.name && (typeof newValue === 'string' || Array.isArray(newValue))) {
|
289
276
|
props.onChange(newValue, item || null);
|
290
277
|
}
|
291
|
-
// Условие для
|
278
|
+
// Условие для отправки, если комбобокс используется с формой.
|
292
279
|
if (props.name && (typeof newValue === "undefined" ? "undefined" : _type_of(newValue)) === 'object' && !Array.isArray(newValue)) {
|
293
280
|
props.onChange(newValue);
|
294
281
|
}
|
@@ -524,10 +511,6 @@ import { Context } from "./Combobox.context";
|
|
524
511
|
}
|
525
512
|
}
|
526
513
|
setChecked(checkedCopy);
|
527
|
-
if (!multiple && textValue === value && valueToItemMap.has(value)) {
|
528
|
-
var _valueToItemMap_get;
|
529
|
-
setTextValue(((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || '');
|
530
|
-
}
|
531
514
|
// В deps мы кладем именно outerValue и internalValue, а не просто value.
|
532
515
|
// Т.к. вначале нужно отфильтровать и провалидировать outerValue и результат положить в переменную.
|
533
516
|
// А переменную, содержащую сложные типы данных, нельзя помещать в deps.
|
@@ -537,9 +520,8 @@ import { Context } from "./Combobox.context";
|
|
537
520
|
items
|
538
521
|
]);
|
539
522
|
// При изменении value нужно возвращать значение в инпуте к исходному.
|
540
|
-
|
541
|
-
|
542
|
-
setTextValue(multiple ? '' : ((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || (value === null || value === void 0 ? void 0 : value.toString()) || '');
|
523
|
+
useDidMountLayoutEffect(function() {
|
524
|
+
setTextValue(getTextValue(multiple, value, valueToItemMap, renderValue));
|
543
525
|
}, [
|
544
526
|
outerValue,
|
545
527
|
internalValue
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// Type Guard для multiple.
|
2
|
+
// @ts-ignore
|
3
|
+
function isMultiple(multiple, value) {
|
4
|
+
return Boolean(multiple);
|
5
|
+
}
|
6
|
+
// Хелпер для генерации начального состояния поля ввода.
|
7
|
+
export var getTextValue = function(multiple, value, valueToItemMap, renderValue) {
|
8
|
+
var _valueToItemMap_get;
|
9
|
+
if (isMultiple(multiple, value) || !value) {
|
10
|
+
return '';
|
11
|
+
}
|
12
|
+
return (renderValue === null || renderValue === void 0 ? void 0 : renderValue({
|
13
|
+
value: value,
|
14
|
+
label: ''
|
15
|
+
})) || ((_valueToItemMap_get = valueToItemMap.get(value)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || value.toString();
|
16
|
+
};
|