@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.
Files changed (37) hide show
  1. package/cjs/components/Combobox/ComboboxNew/Combobox.js +15 -30
  2. package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  3. package/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +24 -0
  4. package/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js.map +1 -0
  5. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +26 -44
  6. package/emotion/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +25 -0
  7. package/emotion/cjs/components/Combobox/ComboboxNew/utils/index.js +4 -0
  8. package/emotion/cjs/examples/components/Chip/Chip.config.js +13 -14
  9. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +12 -30
  10. package/emotion/es/components/Combobox/ComboboxNew/utils/getTextValue.js +16 -0
  11. package/emotion/es/components/Combobox/ComboboxNew/utils/index.js +1 -0
  12. package/emotion/es/examples/components/Chip/Chip.config.js +13 -14
  13. package/es/components/Combobox/ComboboxNew/Combobox.js +15 -30
  14. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  15. package/es/components/Combobox/ComboboxNew/utils/getTextValue.js +20 -0
  16. package/es/components/Combobox/ComboboxNew/utils/getTextValue.js.map +1 -0
  17. package/package.json +2 -2
  18. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +26 -44
  19. package/styled-components/cjs/components/Combobox/ComboboxNew/utils/getTextValue.js +25 -0
  20. package/styled-components/cjs/components/Combobox/ComboboxNew/utils/index.js +4 -0
  21. package/styled-components/cjs/examples/components/Chip/Chip.config.js +0 -21
  22. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +12 -30
  23. package/styled-components/es/components/Combobox/ComboboxNew/utils/getTextValue.js +16 -0
  24. package/styled-components/es/components/Combobox/ComboboxNew/utils/index.js +1 -0
  25. package/styled-components/es/examples/components/Chip/Chip.config.js +0 -21
  26. package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
  27. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +1 -1
  28. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  29. package/types/components/Combobox/ComboboxNew/utils/getTextValue.d.ts +4 -0
  30. package/types/components/Combobox/ComboboxNew/utils/getTextValue.d.ts.map +1 -0
  31. package/types/components/Combobox/ComboboxNew/utils/index.d.ts +1 -0
  32. package/types/components/Combobox/ComboboxNew/utils/index.d.ts.map +1 -1
  33. package/types/examples/components/Chip/Chip.config.d.ts +0 -1
  34. package/types/examples/components/Chip/Chip.config.d.ts.map +1 -1
  35. package/types/examples/components/Chip/Chip.d.ts +0 -1
  36. package/types/examples/components/Chip/Chip.d.ts.map +1 -1
  37. 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 { isEmpty } from "../../../utils";
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 _valueToItemMap_get, _getItemByFocused;
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 || Array.isArray(outerValue) ? '' : ((_valueToItemMap_get = valueToItemMap.get(outerValue)) === null || _valueToItemMap_get === void 0 ? void 0 : _valueToItemMap_get.label) || (outerValue === null || outerValue === void 0 ? void 0 : outerValue.toString()) || ''), 2), textValue = _useState[0], setTextValue = _useState[1];
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
- var _valueToItemMap_get;
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
- // Проверяем, отличается ли значение в инпуте от выбранного value после закрытия дропдауна.
269
- // Если изменилось, то возвращаем label выбранного айтема.
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
- useLayoutEffect(function() {
541
- var _valueToItemMap_get;
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
+ };
@@ -6,3 +6,4 @@ export { sizeToIconSize } from "./sizeToIconSize";
6
6
  export { filterItems } from "./filterItems";
7
7
  export { getItemId } from "./getItemId";
8
8
  export { getRemovedElement } from "./getRemovedElement";
9
+ export { getTextValue } from "./getTextValue";