@expressms/smartapp-ui 3.0.0-alpha.14 → 3.0.0-alpha.140

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 (174) hide show
  1. package/build/main/assets/icons/accepted-invite-status.svg +4 -0
  2. package/build/main/assets/icons/calendar-arrow-next.svg +3 -0
  3. package/build/main/assets/icons/calendar-arrow-prev.svg +3 -0
  4. package/build/main/assets/icons/chevron.svg +3 -0
  5. package/build/main/assets/icons/close-modal.svg +1 -1
  6. package/build/main/assets/icons/declined-invite-status.svg +4 -0
  7. package/build/main/assets/icons/doc-small.svg +5 -5
  8. package/build/main/assets/icons/file-small.svg +5 -5
  9. package/build/main/assets/icons/file.svg +1 -1
  10. package/build/main/assets/icons/image-no-preview-small.svg +11 -0
  11. package/build/main/assets/icons/image-no-preview.svg +11 -0
  12. package/build/main/assets/icons/needs-action-invite-status.svg +4 -0
  13. package/build/main/assets/icons/notification-close.svg +1 -1
  14. package/build/main/assets/icons/notification-error.svg +5 -0
  15. package/build/main/assets/icons/notification-failure-filled.svg +3 -0
  16. package/build/main/assets/icons/notification-info-filled.svg +5 -0
  17. package/build/main/assets/icons/notification-success-filled.svg +4 -0
  18. package/build/main/assets/icons/pdf-small.svg +5 -5
  19. package/build/main/assets/icons/ppt-small.svg +5 -5
  20. package/build/main/assets/icons/search.svg +1 -1
  21. package/build/main/assets/icons/select-arrow-down.svg +3 -0
  22. package/build/main/assets/icons/select-arrow-up.svg +3 -0
  23. package/build/main/assets/icons/txt-small.svg +5 -5
  24. package/build/main/assets/icons/video-no-preview-small.svg +11 -0
  25. package/build/main/assets/icons/video-no-preview.svg +11 -0
  26. package/build/main/assets/icons/xls-small.svg +5 -5
  27. package/build/main/assets/storybook/index.d.ts +2 -0
  28. package/build/main/assets/storybook/index.js +2 -0
  29. package/build/main/assets/storybook/index.js.map +1 -1
  30. package/build/main/constants/constants.d.ts +86 -45
  31. package/build/main/constants/constants.js +123 -48
  32. package/build/main/constants/constants.js.map +1 -1
  33. package/build/main/constants/types.d.ts +11 -1
  34. package/build/main/helpers/index.d.ts +3 -1
  35. package/build/main/helpers/index.js +21 -2
  36. package/build/main/helpers/index.js.map +1 -1
  37. package/build/main/hooks/useCharHintDisplay.d.ts +9 -0
  38. package/build/main/hooks/useCharHintDisplay.js +35 -0
  39. package/build/main/hooks/useCharHintDisplay.js.map +1 -0
  40. package/build/main/hooks/useMobileLongTap.d.ts +17 -0
  41. package/build/main/hooks/useMobileLongTap.js +65 -0
  42. package/build/main/hooks/useMobileLongTap.js.map +1 -0
  43. package/build/main/hooks/useModal.d.ts +17 -10
  44. package/build/main/hooks/useModal.js +173 -12
  45. package/build/main/hooks/useModal.js.map +1 -1
  46. package/build/main/index.d.ts +2 -0
  47. package/build/main/index.js +2 -0
  48. package/build/main/index.js.map +1 -1
  49. package/build/main/styles/styles.scss +2 -2
  50. package/build/main//321/201omponents/AttachedFile/AttachedFile.js +37 -25
  51. package/build/main//321/201omponents/AttachedFile/AttachedFile.js.map +1 -1
  52. package/build/main//321/201omponents/Avatar/Avatar.d.ts +3 -2
  53. package/build/main//321/201omponents/Avatar/Avatar.js +52 -23
  54. package/build/main//321/201omponents/Avatar/Avatar.js.map +1 -1
  55. package/build/main//321/201omponents/Avatar/types.d.ts +9 -5
  56. package/build/main//321/201omponents/Avatar/types.js +5 -2
  57. package/build/main//321/201omponents/Avatar/types.js.map +1 -1
  58. package/build/main//321/201omponents/Button/Button.d.ts +1 -1
  59. package/build/main//321/201omponents/Button/Button.js +15 -8
  60. package/build/main//321/201omponents/Button/Button.js.map +1 -1
  61. package/build/main//321/201omponents/Button/types.d.ts +9 -2
  62. package/build/main//321/201omponents/Button/types.js +3 -0
  63. package/build/main//321/201omponents/Button/types.js.map +1 -1
  64. package/build/main//321/201omponents/Calendar/Calendar.d.ts +14 -2
  65. package/build/main//321/201omponents/Calendar/Calendar.js +203 -46
  66. package/build/main//321/201omponents/Calendar/Calendar.js.map +1 -1
  67. package/build/main//321/201omponents/Calendar/types.d.ts +20 -8
  68. package/build/main//321/201omponents/Charts/ChartBar/ChartBar.js +1 -1
  69. package/build/main//321/201omponents/Charts/ChartLine/ChartLine.js +1 -1
  70. package/build/main//321/201omponents/Charts/ChartPie/ChartPie.js +1 -1
  71. package/build/main//321/201omponents/Chip/Chip.d.ts +3 -2
  72. package/build/main//321/201omponents/Chip/Chip.js +198 -45
  73. package/build/main//321/201omponents/Chip/Chip.js.map +1 -1
  74. package/build/main//321/201omponents/Chip/types.d.ts +14 -4
  75. package/build/main//321/201omponents/ChipDndContext/ChipDndContext.d.ts +13 -0
  76. package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js +76 -0
  77. package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js.map +1 -0
  78. package/build/main//321/201omponents/ChipDndContext/index.d.ts +1 -0
  79. package/build/main//321/201omponents/ChipDndContext/index.js +2 -0
  80. package/build/main//321/201omponents/ChipDndContext/index.js.map +1 -0
  81. package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.d.ts +1 -1
  82. package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js +3 -2
  83. package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js.map +1 -1
  84. package/build/main//321/201omponents/ConfirmationModal/types.d.ts +5 -2
  85. package/build/main//321/201omponents/ContextMenu/ContextMenu.d.ts +1 -1
  86. package/build/main//321/201omponents/ContextMenu/ContextMenu.js +66 -26
  87. package/build/main//321/201omponents/ContextMenu/ContextMenu.js.map +1 -1
  88. package/build/main//321/201omponents/ContextMenu/types.d.ts +13 -7
  89. package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.d.ts +4 -0
  90. package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js +49 -0
  91. package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js.map +1 -0
  92. package/build/main//321/201omponents/ContextMenuItem/index.d.ts +1 -0
  93. package/build/main//321/201omponents/ContextMenuItem/index.js +2 -0
  94. package/build/main//321/201omponents/ContextMenuItem/index.js.map +1 -0
  95. package/build/main//321/201omponents/ContextMenuItem/types.d.ts +28 -0
  96. package/build/main//321/201omponents/ContextMenuItem/types.js +6 -0
  97. package/build/main//321/201omponents/ContextMenuItem/types.js.map +1 -0
  98. package/build/main//321/201omponents/CustomSelect/CustomSelect.d.ts +1 -1
  99. package/build/main//321/201omponents/CustomSelect/CustomSelect.js +9 -8
  100. package/build/main//321/201omponents/CustomSelect/CustomSelect.js.map +1 -1
  101. package/build/main//321/201omponents/CustomSelect/selectStyles.d.ts +1 -1
  102. package/build/main//321/201omponents/CustomSelect/selectStyles.js +21 -22
  103. package/build/main//321/201omponents/CustomSelect/selectStyles.js.map +1 -1
  104. package/build/main//321/201omponents/CustomSelect/types.d.ts +8 -2
  105. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.d.ts +1 -1
  106. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js +33 -24
  107. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js.map +1 -1
  108. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.d.ts +11 -0
  109. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js +38 -0
  110. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js.map +1 -0
  111. package/build/main//321/201omponents/CustomSelectProfiles/types.d.ts +4 -5
  112. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.d.ts +1 -1
  113. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js +24 -18
  114. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js.map +1 -1
  115. package/build/main//321/201omponents/DraggablePopup/types.d.ts +8 -8
  116. package/build/main//321/201omponents/Flex/Flex.d.ts +1 -1
  117. package/build/main//321/201omponents/Flex/Flex.js +2 -2
  118. package/build/main//321/201omponents/Flex/Flex.js.map +1 -1
  119. package/build/main//321/201omponents/Flex/types.d.ts +2 -0
  120. package/build/main//321/201omponents/Input/Input.d.ts +1 -1
  121. package/build/main//321/201omponents/Input/Input.js +75 -33
  122. package/build/main//321/201omponents/Input/Input.js.map +1 -1
  123. package/build/main//321/201omponents/Input/types.d.ts +10 -3
  124. package/build/main//321/201omponents/ListItem/ListItem.js +21 -10
  125. package/build/main//321/201omponents/ListItem/ListItem.js.map +1 -1
  126. package/build/main//321/201omponents/ListItem/types.d.ts +7 -2
  127. package/build/main//321/201omponents/Modal/Modal.d.ts +3 -2
  128. package/build/main//321/201omponents/Modal/Modal.js +167 -71
  129. package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
  130. package/build/main//321/201omponents/Modal/types.d.ts +34 -2
  131. package/build/main//321/201omponents/Notification/Notification.d.ts +4 -6
  132. package/build/main//321/201omponents/Notification/Notification.js +72 -25
  133. package/build/main//321/201omponents/Notification/Notification.js.map +1 -1
  134. package/build/main//321/201omponents/Notification/types.d.ts +17 -2
  135. package/build/main//321/201omponents/Skeleton/Skeleton.js +1 -1
  136. package/build/main//321/201omponents/Skeleton/Skeleton.js.map +1 -1
  137. package/build/main//321/201omponents/Stories/Stories.js +72 -4
  138. package/build/main//321/201omponents/Stories/Stories.js.map +1 -1
  139. package/build/main//321/201omponents/Textarea/Textarea.d.ts +1 -1
  140. package/build/main//321/201omponents/Textarea/Textarea.js +2 -2
  141. package/build/main//321/201omponents/Textarea/Textarea.js.map +1 -1
  142. package/build/main//321/201omponents/Textarea/types.d.ts +2 -2
  143. package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js +6 -0
  144. package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js.map +1 -1
  145. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.d.ts +2 -1
  146. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js +4 -3
  147. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js.map +1 -1
  148. package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js +34 -58
  149. package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js.map +1 -1
  150. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.d.ts +3 -2
  151. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js +34 -37
  152. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js.map +1 -1
  153. package/build/main//321/201omponents/UserDropdown/Option/Option.js +2 -2
  154. package/build/main//321/201omponents/UserDropdown/Option/Option.js.map +1 -1
  155. package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.d.ts +1 -1
  156. package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js +6 -9
  157. package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js.map +1 -1
  158. package/build/main//321/201omponents/UserDropdown/UserDropdown.d.ts +5 -3
  159. package/build/main//321/201omponents/UserDropdown/UserDropdown.js +268 -97
  160. package/build/main//321/201omponents/UserDropdown/UserDropdown.js.map +1 -1
  161. package/build/main//321/201omponents/UserDropdown/helpers.d.ts +10 -4
  162. package/build/main//321/201omponents/UserDropdown/helpers.js +6 -4
  163. package/build/main//321/201omponents/UserDropdown/helpers.js.map +1 -1
  164. package/build/main//321/201omponents/UserDropdown/selectStyles.d.ts +1 -1
  165. package/build/main//321/201omponents/UserDropdown/selectStyles.js +49 -26
  166. package/build/main//321/201omponents/UserDropdown/selectStyles.js.map +1 -1
  167. package/build/main//321/201omponents/UserDropdown/types.d.ts +100 -57
  168. package/build/main//321/201omponents/UserDropdown/types.js.map +1 -1
  169. package/package.json +11 -7
  170. package/build/main/assets/icons/avatar-arrow-down.svg +0 -3
  171. package/build/main/assets/icons/avatar-arrow-up.svg +0 -3
  172. package/build/main/hooks/useLongTap.d.ts +0 -12
  173. package/build/main/hooks/useLongTap.js +0 -29
  174. package/build/main/hooks/useLongTap.js.map +0 -1
@@ -20,12 +20,14 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
20
20
  };
21
21
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
22
22
  /* eslint-disable max-lines */
23
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
23
+ import { memo, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from 'react';
24
24
  import Select, { components } from 'react-select';
25
25
  import classNames from 'classnames';
26
26
  import { ru } from 'convert-layout';
27
27
  import { debounce, includes, isEmpty, isNil, isNull, isString, omit, uniq, uniqBy } from 'lodash';
28
28
  import { transliterate as tr } from 'transliteration';
29
+ import { useDroppable } from '@dnd-kit/core';
30
+ import { useCharHintDisplay } from '../../hooks/useCharHintDisplay';
29
31
  import Modal from '../Modal';
30
32
  import ContactBottomSheet from './ContactBottomSheet/ContactBottomSheet';
31
33
  import LoadingMessage from './LoadingMessage/LoadingMessage';
@@ -34,18 +36,37 @@ import MultiValueLabel from './MultiValueLabel/MultiValueLabel';
34
36
  import Option from './Option/Option';
35
37
  import SearchInCatalogButton from './SearchInCatalogButton/SearchInCatalogButton';
36
38
  import selectStyles from './selectStyles';
37
- import { generateFontFamilyStyle, generateId, isIosPlatform, isMobilePlatform } from '../../helpers';
39
+ import { checkIfContactTypeIsGroup, generateFontFamilyStyle, generateId, isIosPlatform, isMobilePlatform } from '../../helpers';
38
40
  import { DropdownIndicator, IndicatorSeparator, LoadingIndicator, MultiValueRemove, generateContactsOption, generateContactsOptionsToSelect, generateCorporateOption, generateCorporateOptionsToSelect, generateEnteredByUserOption, sortContacts, } from './helpers';
39
- import { BACKSPACE_KEY, DEFAULT_INPUT_PADDING, ENTER_KEY, EVENT_LISTENER_TYPES, LANGUAGES, LAYOUT_TYPE, MASK_INPUT_PL, MENU_POSITIONS, PLATFORM, SPACE, SPACE_KEY, } from '../../constants';
41
+ import { BACKSPACE_KEY, DEFAULT_INPUT_PADDING, EMAIL_FIELD, ENTER_KEY, EVENT_LISTENER_TYPES, LANGUAGES, LAYOUT_TYPE, MASK_INPUT_PL, MENU_POSITIONS, MIN_INPUT_SYMBOLS, PLATFORM, RENDER_DELAY, SEARCH_PLACEHOLDER, SPACE, SPACE_KEY, SUFFIX_INPUT_PR, } from '../../constants';
42
+ import { ReactComponent as ClearIcon } from '../../assets/icons/clear.svg';
40
43
  import '../../styles/styles.scss';
41
- var MIN_INPUT_SYMBOLS = 3;
42
44
  var THREE_DIGIT_NUMBER_WIDTH = 48;
43
45
  var TWO_DIGIT_NUMBER_WIDTH = 40;
44
46
  var SINGLE_DIGIT_NUMBER_WIDTH = 32;
45
47
  var INPUT_SPACE_WIDTH = 46;
46
48
  var GAP = 8;
47
49
  var USER_TYPING_TIMEOUT = 1000;
48
- export var EMAIL_FIELD = 'email';
50
+ var CLEAR_USER_TYPING_TIMEOUT = 500;
51
+ var INPUT = 'input';
52
+ var EMPTY_STRING = '';
53
+ var BUBBLES = { bubbles: true };
54
+ var PADDING_WITH_CLEAR_ICON = '40px';
55
+ var CTS_USER = 'cts_user';
56
+ export var DEFAULT_MENU_LIST_MAX_HEIGHT = 220;
57
+ export var DEFAULT_MAX_ROWS_COUNT_TO_COLLAPSE_CHIPS = 2;
58
+ var INITIAL_CORPORATE_CONTACTS = { corporateContacts: [], corporateContactsSet: new Set() };
59
+ var dispatchInputEvent = function (input) { return input.dispatchEvent(new Event(INPUT, BUBBLES)); };
60
+ var setCaretPosition = function (input, position) { return input.setSelectionRange(position, position); };
61
+ var setCaretInEmptyInput = function (input) {
62
+ input.value = SPACE;
63
+ dispatchInputEvent(input);
64
+ setTimeout(function () {
65
+ input.value = EMPTY_STRING;
66
+ dispatchInputEvent(input);
67
+ setCaretPosition(input, 0);
68
+ }, 0);
69
+ };
49
70
  var MENU_ACTIONS;
50
71
  (function (MENU_ACTIONS) {
51
72
  MENU_ACTIONS["close"] = "menu-close";
@@ -80,54 +101,93 @@ var EXCLUDED_FIELDS;
80
101
  EXCLUDED_FIELDS["fontFamily"] = "fontFamily";
81
102
  })(EXCLUDED_FIELDS || (EXCLUDED_FIELDS = {}));
82
103
  var COMMON_FIELDS_TO_OMIT = Object.keys(omit(EXCLUDED_FIELDS, [EXCLUDED_FIELDS.language, EXCLUDED_FIELDS.isMyContacts, EXCLUDED_FIELDS.isEnteredByUser]));
83
- var Input = function (props) { return _jsx(components.Input, __assign({}, props, { enterKeyHint: "done" })); };
104
+ var Input = function (props) {
105
+ var isClearable = props["data-is-clearable"], placeholder = props["data-placeholder"], value = props.value, suffix = props.suffix, suffixRef = props.suffixref, onInputChange = props.selectProps.onInputChange;
106
+ var handleClearInput = function () { return onInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: value }); };
107
+ return (_jsxs(_Fragment, { children: [_jsx(components.Input, __assign({}, props, { enterKeyHint: "done", placeholder: placeholder })), suffix && (_jsx("div", __assign({ ref: suffixRef, className: "smartapp-user-dropdown__suffix" }, { children: suffix }))), isClearable && !isEmpty(value) && (_jsx("div", __assign({ className: "smartapp-user-dropdown__clear-icon", onMouseDown: handleClearInput, onTouchEnd: handleClearInput }, { children: _jsx(ClearIcon, {}) })))] }));
108
+ };
84
109
  var UserDropdown = function (_a) {
85
- var _b = _a.platform, platform = _b === void 0 ? PLATFORM.web : _b, fontFamily = _a.fontFamily, _c = _a.isDisabled, isDisabled = _c === void 0 ? false : _c, _d = _a.isLoading, isLoading = _d === void 0 ? false : _d, _e = _a.isChipsOutline, isChipsOutline = _e === void 0 ? false : _e, _f = _a.isChipsVisible, isChipsVisible = _f === void 0 ? true : _f, _g = _a.isChipsCollapsable, isChipsCollapsable = _g === void 0 ? false : _g, _h = _a.isSelectedChipHasTooltip, isSelectedChipHasTooltip = _h === void 0 ? false : _h, _j = _a.isMenuCloseOnSelect, isMenuCloseOnSelect = _j === void 0 ? true : _j, _k = _a.isFilteringDisabled, isFilteringDisabled = _k === void 0 ? false : _k, _l = _a.hasNextPage, hasNextPage = _l === void 0 ? false : _l, _m = _a.isNextPageLoading, isNextPageLoading = _m === void 0 ? false : _m, _o = _a.isInputHidden, isInputHidden = _o === void 0 ? false : _o, _p = _a.isBackspaceChipToInput, isBackspaceChipToInput = _p === void 0 ? false : _p, _q = _a.isShowCatalogSearchButton, isShowCatalogSearchButton = _q === void 0 ? false : _q, _r = _a.isDisabledMenuOffsetAtFullscreen, isDisabledMenuOffsetAtFullscreen = _r === void 0 ? false : _r, _s = _a.language, language = _s === void 0 ? LANGUAGES.ru : _s, _t = _a.layoutType, layoutType = _t === void 0 ? LAYOUT_TYPE.minimal : _t, externalInputValue = _a.externalInputValue, title = _a.title, mask = _a.mask, placeholder = _a.placeholder, hint = _a.hint, onShowCatalogSearchButtonClick = _a.onShowCatalogSearchButtonClick, noOptionsMessage = _a.noOptionsMessage, maxMembersCount = _a.maxMembersCount, _u = _a.menuPosition, menuPosition = _u === void 0 ? MENU_POSITIONS.top : _u, _v = _a.autoFocus, autoFocus = _v === void 0 ? false : _v, containerClassName = _a.containerClassName, containerPadding = _a.containerPadding, containerStyles = _a.containerStyles, _w = _a.selectedEntries, selectedEntries = _w === void 0 ? [] : _w, corporateEntries = _a.corporateEntries, myContactsEntries = _a.myContactsEntries, _x = _a.emailsToExclude, emailsToExclude = _x === void 0 ? [] : _x, onInputChange = _a.onInputChange, onChange = _a.onChange, onMenuOpen = _a.onMenuOpen, onMenuClose = _a.onMenuClose, onLoadNextPage = _a.onLoadNextPage;
86
- var _y = useState(''), userDropdownId = _y[0], setUserDropdownId = _y[1];
87
- var _z = useState([]), selectedUsers = _z[0], setSelectedUsers = _z[1];
88
- var _0 = useState(''), paddingLeft = _0[0], setPaddingLeft = _0[1];
89
- var _1 = useState(0), maskWidth = _1[0], setMaskWidth = _1[1];
90
- var _2 = useState(false), isError = _2[0], setIsError = _2[1];
91
- var _3 = useState(true), isSearchable = _3[0], setIsSearchable = _3[1];
92
- var _4 = useState(false), isUserTyping = _4[0], setIsUserTyping = _4[1];
93
- var _5 = useState(null), modalData = _5[0], setModalData = _5[1];
94
- var _6 = useState(''), chipLabelWithMaxWidth = _6[0], setChipLabelWithMaxWidth = _6[1];
95
- var _7 = useState(''), inputValue = _7[0], setInputValue = _7[1];
110
+ var _b;
111
+ var _c = _a.platform, platform = _c === void 0 ? PLATFORM.web : _c, fontFamily = _a.fontFamily, _d = _a.isDisabled, isDisabled = _d === void 0 ? false : _d, _e = _a.isLoading, isLoading = _e === void 0 ? false : _e, _f = _a.isChipsOutline, isChipsOutline = _f === void 0 ? false : _f, _g = _a.isError, isError = _g === void 0 ? false : _g, _h = _a.isChipsVisible, isChipsVisible = _h === void 0 ? true : _h, _j = _a.isChipsCollapsable, isChipsCollapsable = _j === void 0 ? false : _j, _k = _a.isSelectedChipHasTooltip, isSelectedChipHasTooltip = _k === void 0 ? false : _k, _l = _a.isMenuCloseOnSelect, isMenuCloseOnSelect = _l === void 0 ? true : _l, _m = _a.isFilteringDisabled, isFilteringDisabled = _m === void 0 ? false : _m, _o = _a.hasNextPage, hasNextPage = _o === void 0 ? false : _o, _p = _a.isNextPageLoading, isNextPageLoading = _p === void 0 ? false : _p, _q = _a.isInputHidden, isInputHidden = _q === void 0 ? false : _q, _r = _a.isBackspaceChipToInput, isBackspaceChipToInput = _r === void 0 ? false : _r, _s = _a.isShowCatalogSearchButton, isShowCatalogSearchButton = _s === void 0 ? false : _s, _t = _a.isDisabledMenuOffsetAtFullscreen, isDisabledMenuOffsetAtFullscreen = _t === void 0 ? false : _t, _u = _a.isDisabledCheckUniqueEmails, isDisabledCheckUniqueEmails = _u === void 0 ? false : _u, _v = _a.isMenuShadowless, isMenuShadowless = _v === void 0 ? false : _v, _w = _a.language, language = _w === void 0 ? LANGUAGES.ru : _w, _x = _a.layoutType, layoutType = _x === void 0 ? LAYOUT_TYPE.minimal : _x, externalInputValue = _a.externalInputValue, title = _a.title, mask = _a.mask, suffix = _a.suffix, _y = _a.placeholder, placeholder = _y === void 0 ? EMPTY_STRING : _y, hint = _a.hint, onShowCatalogSearchButtonClick = _a.onShowCatalogSearchButtonClick, noOptionsMessage = _a.noOptionsMessage, maxMembersCount = _a.maxMembersCount, skeletonRowsCount = _a.skeletonRowsCount, _z = _a.maxRowsCountToCollapseChips, maxRowsCountToCollapseChips = _z === void 0 ? DEFAULT_MAX_ROWS_COUNT_TO_COLLAPSE_CHIPS : _z, _0 = _a.menuListMaxHeight, menuListMaxHeight = _0 === void 0 ? DEFAULT_MENU_LIST_MAX_HEIGHT : _0, _1 = _a.menuPosition, menuPosition = _1 === void 0 ? MENU_POSITIONS.top : _1, menuLocation = _a.menuLocation, menuPortalTarget = _a.menuPortalTarget, _2 = _a.autoFocus, autoFocus = _2 === void 0 ? false : _2, containerClassName = _a.containerClassName, containerPadding = _a.containerPadding, containerStyles = _a.containerStyles, _3 = _a.selectedEntries, selectedEntries = _3 === void 0 ? [] : _3, corporateEntries = _a.corporateEntries, myContactsEntries = _a.myContactsEntries, _4 = _a.emailsToExclude, emailsToExclude = _4 === void 0 ? [] : _4, _5 = _a.userDropdownId, initialUserDropdownId = _5 === void 0 ? EMPTY_STRING : _5, focusRef = _a.focusRef, onInputChange = _a.onInputChange, onImmediateInputChange = _a.onImmediateInputChange, onChange = _a.onChange, onMenuOpen = _a.onMenuOpen, onMenuClose = _a.onMenuClose, onLoadNextPage = _a.onLoadNextPage, onFocus = _a.onFocus;
112
+ var _6 = useState(initialUserDropdownId), userDropdownId = _6[0], setUserDropdownId = _6[1];
113
+ var _7 = useState([]), selectedUsers = _7[0], setSelectedUsers = _7[1];
114
+ var _8 = useState(EMPTY_STRING), paddingLeft = _8[0], setPaddingLeft = _8[1];
115
+ var _9 = useState(EMPTY_STRING), paddingRight = _9[0], setPaddingRight = _9[1];
116
+ var _10 = useState(0), maskWidth = _10[0], setMaskWidth = _10[1];
117
+ var _11 = useState(0), suffixWidth = _11[0], setSuffixWidth = _11[1];
118
+ var _12 = useState(true), isSearchable = _12[0], setIsSearchable = _12[1];
119
+ var _13 = useState(false), isUserTyping = _13[0], setIsUserTyping = _13[1];
120
+ var _14 = useState(null), modalData = _14[0], setModalData = _14[1];
121
+ var _15 = useState(EMPTY_STRING), chipLabelWithMaxWidth = _15[0], setChipLabelWithMaxWidth = _15[1];
122
+ var _16 = useState(EMPTY_STRING), inputValue = _16[0], setInputValue = _16[1];
123
+ var _17 = useState(placeholder), placeholderValue = _17[0], setPlaceholderValue = _17[1];
124
+ var _18 = useState(false), isDelimiterVisible = _18[0], setIsDelimiterVisible = _18[1];
125
+ var _19 = useState(0), delimiterOffset = _19[0], setDelimiterOffset = _19[1];
96
126
  var isInputFocused = useRef(false);
97
127
  var selectRef = useRef(null);
98
128
  var maskRef = useRef(null);
129
+ var suffixRef = useRef(null);
99
130
  var menuScrollFromTop = useRef(0);
100
131
  var collapsableChipsCount = useRef(0);
132
+ var visibleChipsCount = useRef(0);
133
+ var isNeedCheckChipCollapsableCount = useRef(false);
101
134
  var lastVisibleChipIndex = useRef(-1);
102
135
  var skipAddUserToChipsOnNextBlurRef = useRef(false);
136
+ var userTypingTimeoutRef = useRef(null);
137
+ var prevIsLoadingRef = useRef(isLoading);
103
138
  var selectedUsersLength = selectedUsers.length;
139
+ var _20 = useDroppable({ id: userDropdownId }), setNodeRef = _20.setNodeRef, over = _20.over;
140
+ var overId = (over || {}).id;
141
+ var isDraggable = overId === userDropdownId;
142
+ var isInputPlaceholderVisible = selectedUsersLength === 1 && isEmpty(inputValue) ? ((_b = selectedUsers[0].isNotRemovable) !== null && _b !== void 0 ? _b : false) : false;
143
+ // eslint-disable-next-line react-hooks/exhaustive-deps
144
+ useImperativeHandle(focusRef, function () { return ({ focus: handleFocus, blur: function () { return handleDragBlur(true); } }); }, []);
104
145
  var fontFamilyStyle = generateFontFamilyStyle(fontFamily);
146
+ var isCharHintVisible = useCharHintDisplay({ inputValue: inputValue }).isCharHintVisible;
105
147
  var checkIsValueIsEmail = function (inputValue) {
106
148
  var regex = new RegExp(/^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/);
107
149
  return regex.test(inputValue);
108
150
  };
109
- var checkIsEmailToExclude = function (email) { return includes(emailsToExclude, email); };
151
+ // TODO: emailsToExclude в массиве зависимостей вызывает бесконечный ререндер при драге
152
+ // eslint-disable-next-line react-hooks/exhaustive-deps
153
+ var checkIsEmailToExclude = useCallback(function (email) { return includes(emailsToExclude, email); }, []);
110
154
  var calculatePaddingLeft = function () {
111
155
  var _a, _b;
112
156
  var maskWidth = ((_b = (_a = maskRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
113
157
  maskWidth && setMaskWidth(maskWidth + GAP);
114
158
  return "".concat(maskWidth ? maskWidth + MASK_INPUT_PL : DEFAULT_INPUT_PADDING, "px");
115
159
  };
160
+ var calculatePaddingRight = function () {
161
+ var _a, _b;
162
+ var suffixWidth = ((_b = (_a = suffixRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
163
+ suffixWidth && setSuffixWidth(suffixWidth + GAP);
164
+ return "".concat(suffixWidth ? suffixWidth + SUFFIX_INPUT_PR : DEFAULT_INPUT_PADDING, "px");
165
+ };
116
166
  var generateStyles = function () {
117
167
  return selectStyles({
118
168
  isChipsVisible: isChipsVisible,
119
169
  isMaxMembersAdded: maxMembersCount && isChipsVisible ? selectedUsersLength === maxMembersCount : false,
120
170
  isDisabled: isDisabled,
121
- isError: isError,
171
+ isInputPlaceholderVisible: isInputPlaceholderVisible,
122
172
  lastRowNumber: isChipsVisible ? Math.ceil(selectedUsersLength / 2) + 1 : 1,
123
173
  paddingLeft: paddingLeft,
174
+ paddingRight: !isChipsVisible && !isEmpty(inputValue) ? PADDING_WITH_CLEAR_ICON : paddingRight,
124
175
  platform: platform,
125
176
  layoutType: layoutType,
126
177
  isInputHidden: isInputHidden,
127
178
  isDisabledMenuOffsetAtFullscreen: isDisabledMenuOffsetAtFullscreen,
179
+ isInputFocused: isInputFocused.current,
128
180
  isMaskRepresented: !isEmpty(mask),
181
+ isSuffixRepresented: !isNil(suffix),
182
+ isMenuShadowless: isMenuShadowless,
183
+ isShowCatalogSearchButton: isShowCatalogSearchButton,
129
184
  fontFamilyStyle: fontFamilyStyle,
130
185
  containerPadding: containerPadding,
186
+ isDraggable: isDraggable,
187
+ isChipsCollapsed: isChipsCollapsable && !isInputFocused.current,
188
+ menuListMaxHeight: menuListMaxHeight,
189
+ maxRowsCountToCollapseChips: maxRowsCountToCollapseChips,
190
+ isError: isError,
131
191
  });
132
192
  };
133
193
  var generateNoOptionsMessage = function (_a) {
@@ -152,71 +212,104 @@ var UserDropdown = function (_a) {
152
212
  collapsableChipsCount: collapsableChipsCount,
153
213
  lastVisibleChipIndex: lastVisibleChipIndex,
154
214
  };
155
- var corporateContacts = uniqBy(__spreadArray(__spreadArray([], ((corporateEntries === null || corporateEntries === void 0 ? void 0 : corporateEntries.corpPhonebookEntries) || []), true), ((corporateEntries === null || corporateEntries === void 0 ? void 0 : corporateEntries.trustSearchEntries) || []), true), function (_a) {
156
- var contacts = _a.contacts;
157
- return contacts.filter(function (_a) {
215
+ var _c = corporateEntries || {}, _d = _c.corpPhonebookEntries, corpPhonebookEntries = _d === void 0 ? [] : _d, _e = _c.trustSearchEntries, trustSearchEntries = _e === void 0 ? [] : _e, _f = _c.cachedSearchEntries, cachedSearchEntries = _f === void 0 ? [] : _f;
216
+ var _g = __spreadArray(__spreadArray(__spreadArray([], corpPhonebookEntries, true), trustSearchEntries, true), cachedSearchEntries.map(function (entity) { return (__assign(__assign({}, entity), { isCachedContact: true })); }), true).reduce(function (acc, entity) {
217
+ var _a;
218
+ var email = entity.email, contacts = entity.contacts;
219
+ var emailToCheck = email || ((_a = contacts === null || contacts === void 0 ? void 0 : contacts.find(function (_a) {
158
220
  var contactType = _a.contactType;
159
221
  return contactType === EMAIL_FIELD;
160
- })[0].contact;
161
- });
162
- var query = ((_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.inputValue) || '';
222
+ })) === null || _a === void 0 ? void 0 : _a.contact);
223
+ if (emailToCheck && !acc.corporateContactsSet.has(emailToCheck)) {
224
+ acc.corporateContacts.push(entity);
225
+ acc.corporateContactsSet.add(emailToCheck);
226
+ }
227
+ return acc;
228
+ }, INITIAL_CORPORATE_CONTACTS), corporateContacts = _g.corporateContacts, corporateContactsSet = _g.corporateContactsSet;
229
+ var query = ((_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.inputValue) || EMPTY_STRING;
163
230
  var sortedCorporateContacts = sortContacts(corporateContacts, query);
231
+ var sortedLocalContacts = sortContacts((corporateEntries === null || corporateEntries === void 0 ? void 0 : corporateEntries.localPhonebookEntries) || [], query);
164
232
  var sortedMyContacts = sortContacts(myContactsEntries || [], query);
165
233
  var filteredCorporateContacts = sortedCorporateContacts.filter(function (_a) {
166
234
  var email = _a.email, contacts = _a.contacts;
167
235
  return [email, contacts[0].contact].every(function (email) { return !checkIsEmailToExclude(email); });
168
236
  });
237
+ var filteredLocalContacts = sortedLocalContacts.filter(function (_a) {
238
+ var _b;
239
+ var email = _a.email, contacts = _a.contacts;
240
+ var contact = (_b = contacts[0]) === null || _b === void 0 ? void 0 : _b.contact;
241
+ var emailToCheck = email || contact;
242
+ return !checkIsEmailToExclude(email) && !checkIsEmailToExclude(contact) && !corporateContactsSet.has(emailToCheck);
243
+ });
169
244
  var filteredMyContacts = sortedMyContacts.filter(function (_a) {
170
245
  var email = _a.email;
171
- return !checkIsEmailToExclude(email);
246
+ return !checkIsEmailToExclude(email) && !corporateContactsSet.has(email);
172
247
  });
173
- return __spreadArray(__spreadArray([], generateCorporateOptionsToSelect(__assign({ options: filteredCorporateContacts }, commonFields)), true), generateContactsOptionsToSelect(__assign({ options: filteredMyContacts }, commonFields)), true);
248
+ return __spreadArray(__spreadArray(__spreadArray([], generateCorporateOptionsToSelect(__assign({ options: filteredCorporateContacts }, commonFields)), true), generateContactsOptionsToSelect(__assign({ options: filteredLocalContacts, isLocalContact: true }, commonFields)), true), generateContactsOptionsToSelect(__assign({ options: filteredMyContacts, isMyContacts: true }, commonFields)), true);
174
249
  };
250
+ var clearUserTypingTimeout = useCallback(function () {
251
+ var userTypingTimeoutRefCurrent = userTypingTimeoutRef.current;
252
+ if (userTypingTimeoutRefCurrent) {
253
+ clearTimeout(userTypingTimeoutRefCurrent);
254
+ userTypingTimeoutRef.current = null;
255
+ }
256
+ }, []);
257
+ useEffect(function () {
258
+ if (prevIsLoadingRef.current && !isLoading) {
259
+ setIsUserTyping(false);
260
+ clearUserTypingTimeout();
261
+ }
262
+ prevIsLoadingRef.current = isLoading;
263
+ }, [isLoading, clearUserTypingTimeout]);
175
264
  var requestInputChangeDebounce = useMemo(function () {
176
265
  return debounce(function (inputValue) {
177
266
  onInputChange(inputValue);
178
- setIsUserTyping(false);
267
+ clearUserTypingTimeout();
268
+ userTypingTimeoutRef.current = setTimeout(function () { return setIsUserTyping(false); }, CLEAR_USER_TYPING_TIMEOUT);
179
269
  }, USER_TYPING_TIMEOUT);
180
- }, [onInputChange]);
181
- var resetIsUserTypingDebounce = useMemo(function () { return debounce(function () { return setIsUserTyping(false); }, USER_TYPING_TIMEOUT); }, []);
182
- var handleResetError = function () { return isError && setIsError(false); };
270
+ }, [clearUserTypingTimeout, onInputChange]);
183
271
  var handleMenuClose = function () {
184
272
  menuScrollFromTop.current = 0;
185
- handleResetError();
186
- onMenuClose && onMenuClose();
273
+ setIsDelimiterVisible(false);
274
+ onMenuClose === null || onMenuClose === void 0 ? void 0 : onMenuClose();
187
275
  };
188
- var handleInputChange = function (inputValue, additionalInfo) {
276
+ var handleInputChange = useCallback(function (inputValue, additionalInfo) {
189
277
  if (additionalInfo) {
190
- var action = additionalInfo.action, prevInputValue = additionalInfo.prevInputValue;
278
+ var action = additionalInfo.action, _a = additionalInfo.prevInputValue, prevInputValue = _a === void 0 ? EMPTY_STRING : _a;
191
279
  var trimPrevInputValue_1 = prevInputValue.trim();
192
280
  var isInputBlurAction = action === INPUT_ACTIONS.blur;
193
281
  var isMenuCloseAction = action === MENU_ACTIONS.close;
194
- if (!isInputBlurAction && !isMenuCloseAction)
282
+ if (!isInputBlurAction && !isMenuCloseAction) {
195
283
  setInputValue(inputValue);
284
+ onImmediateInputChange === null || onImmediateInputChange === void 0 ? void 0 : onImmediateInputChange(inputValue);
285
+ }
196
286
  if ((isInputBlurAction || isMenuCloseAction) && checkIsValueIsEmail(trimPrevInputValue_1)) {
197
287
  var isUserAlreadySelected = selectedUsers.some(function (_a) {
198
288
  var email = _a.email;
199
289
  return email === trimPrevInputValue_1;
200
290
  });
201
- setInputValue(isUserAlreadySelected || checkIsEmailToExclude(trimPrevInputValue_1) ? trimPrevInputValue_1 : inputValue);
291
+ var nextInputValue = isUserAlreadySelected || checkIsEmailToExclude(trimPrevInputValue_1) ? trimPrevInputValue_1 : inputValue;
292
+ setInputValue(nextInputValue);
293
+ onImmediateInputChange === null || onImmediateInputChange === void 0 ? void 0 : onImmediateInputChange(nextInputValue);
202
294
  }
203
295
  }
204
- setIsUserTyping(!isEmpty(inputValue));
205
- handleResetError();
206
- inputValue.length >= MIN_INPUT_SYMBOLS ? requestInputChangeDebounce(inputValue) : resetIsUserTypingDebounce();
207
- };
296
+ if (!isEmpty(inputValue)) {
297
+ clearUserTypingTimeout();
298
+ setIsUserTyping(true);
299
+ }
300
+ inputValue.length >= MIN_INPUT_SYMBOLS && requestInputChangeDebounce(inputValue);
301
+ }, [onImmediateInputChange, requestInputChangeDebounce, selectedUsers, checkIsEmailToExclude, clearUserTypingTimeout]);
208
302
  var extractInputEmails = function (inputValue) {
209
303
  return inputValue
210
304
  .split(/[,;]+/)
211
305
  .map(function (inputStr) { return inputStr.trim(); })
212
306
  .filter(function (inputStr) { return !!inputStr.length; });
213
307
  };
214
- var handleAddUser = function (needToShowError) {
215
- if (needToShowError === void 0) { needToShowError = true; }
308
+ var handleAddUser = function () {
216
309
  var props = selectRef.current.props;
217
- var options = props.options, inputValue = props.inputValue, onChange = props.onChange;
310
+ var options = props.options, onChange = props.onChange;
218
311
  if (isEmpty(inputValue))
219
- return;
312
+ return Promise.resolve();
220
313
  var trimInputValue = inputValue.trim();
221
314
  var optionProps = {
222
315
  platform: platform,
@@ -248,10 +341,10 @@ var UserDropdown = function (_a) {
248
341
  return email === inputEmail;
249
342
  });
250
343
  enteredUsers.push(existingUser || generateEnteredByUserOption(__assign(__assign({}, optionProps), { email: inputEmail })));
251
- if (isUserAlreadySelected && needToShowError && isSingleEmailEntered)
252
- setIsError(true);
344
+ if (isUserAlreadySelected && isSingleEmailEntered)
345
+ return;
253
346
  else
254
- handleInputChange('', { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
347
+ handleInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
255
348
  }
256
349
  !isValueIsEmail && incorrectEmails.push(inputEmail);
257
350
  });
@@ -265,7 +358,7 @@ var UserDropdown = function (_a) {
265
358
  var isEnterPressed = code === ENTER_KEY || key === ENTER_KEY;
266
359
  var isBackspacePressed = code === BACKSPACE_KEY || key === BACKSPACE_KEY;
267
360
  var isSpacePressed = code === SPACE_KEY;
268
- var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === '' && !isEmpty(selectedUsers);
361
+ var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === EMPTY_STRING && !isEmpty(selectedUsers);
269
362
  if (isEnterPressed) {
270
363
  event.preventDefault();
271
364
  (_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { });
@@ -291,25 +384,29 @@ var UserDropdown = function (_a) {
291
384
  (_c = (_b = selectRef.current) === null || _b === void 0 ? void 0 : _b.onMenuOpen) === null || _c === void 0 ? void 0 : _c.call(_b);
292
385
  }
293
386
  };
294
- var transformCurrentChipToInputValue = function (label, email) {
387
+ var transformCurrentChipToInputValue = useCallback(function (label, value) {
295
388
  var _a, _b;
296
389
  skipAddUserToChipsOnNextBlurRef.current = true;
297
390
  setSelectedUsers(function (prevSelectedUsers) {
298
391
  var nextSelectedUsers = prevSelectedUsers.filter(function (_a) {
299
- var userEmail = _a.email;
300
- return userEmail !== email;
392
+ var userEmail = _a.email, userType = _a.userType, userUid = _a.uid;
393
+ return checkIfContactTypeIsGroup(userType) ? userUid !== value : userEmail !== value;
301
394
  });
302
395
  onChange === null || onChange === void 0 ? void 0 : onChange(nextSelectedUsers.map(function (userData) { return omit(userData, COMMON_FIELDS_TO_OMIT); }));
303
396
  return nextSelectedUsers;
304
397
  });
398
+ handleFocus();
305
399
  setInputValue(label);
306
400
  onInputChange(label);
307
401
  handleInputChange(label);
308
402
  onMenuOpen === null || onMenuOpen === void 0 ? void 0 : onMenuOpen();
309
403
  (_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.onMenuOpen) === null || _b === void 0 ? void 0 : _b.call(_a);
310
- };
404
+ setIsUserTyping(false);
405
+ },
406
+ // eslint-disable-next-line
407
+ [onInputChange, handleInputChange, onMenuOpen, onChange]);
311
408
  var handleChange = function (newSelectedUsers) {
312
- var uniqNewSelectedUsers = uniqBy(newSelectedUsers, EMAIL_FIELD);
409
+ var uniqNewSelectedUsers = isDisabledCheckUniqueEmails ? newSelectedUsers : uniqBy(newSelectedUsers, EMAIL_FIELD);
313
410
  var users = [];
314
411
  var deletedUser = selectedUsers.find(function (_a) {
315
412
  var value = _a.value;
@@ -333,9 +430,11 @@ var UserDropdown = function (_a) {
333
430
  if (!isInputFocused.current && isChipsCollapsable)
334
431
  handleFocus();
335
432
  };
336
- var isContainsValue = function (_a) {
433
+ var checkIsContainsValue = function (_a) {
337
434
  var label = _a.label, email = _a.email, value = _a.value;
338
- return label.toLowerCase().includes(value) || email.toLowerCase().includes(value);
435
+ var _b = label.split(SPACE), name = _b[0], surname = _b[1];
436
+ var reversedLabel = "".concat(surname).concat(SPACE).concat(name);
437
+ return label.toLowerCase().includes(value) || reversedLabel.toLowerCase().includes(value) || email.toLowerCase().includes(value);
339
438
  };
340
439
  var handleFilterOption = function (_a, inputValue) {
341
440
  var _b = _a.data, label = _b.label, optionEmail = _b.email;
@@ -348,7 +447,7 @@ var UserDropdown = function (_a) {
348
447
  return email === optionEmail;
349
448
  });
350
449
  var isContainsInputValue = [originInputValue, transliteratedInputValue, toEngInputValue, fromEngInputValue].some(function (value) {
351
- return isContainsValue({ label: label, email: optionEmail, value: value });
450
+ return checkIsContainsValue({ label: label, email: optionEmail, value: value });
352
451
  });
353
452
  if (isFilteringDisabled)
354
453
  return !isEmpty(selectedUsers) ? !isUserAlreadySelected : true;
@@ -365,46 +464,49 @@ var UserDropdown = function (_a) {
365
464
  var handleCollapseChips = function () {
366
465
  var _a, _b;
367
466
  var collapsableChips = 0;
368
- var chipLabelWithMaxWidth = '';
467
+ var chipLabelWithMaxWidth = EMPTY_STRING;
369
468
  var chipsNodes = ((_a = document.querySelector("#".concat(userDropdownId))) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.smartapp-chip')) || [];
370
469
  var chips = Array.from(chipsNodes);
371
470
  if (isEmpty(chips))
372
471
  return;
373
472
  var yRows = uniq(chips.map(function (chip) { return generateTruncatedElementY(chip); }));
374
- var ySecondRow = yRows[1];
375
- var rowsToHide = yRows.slice(2);
376
- var secondRow = [];
473
+ var yLastRow = yRows[maxRowsCountToCollapseChips - 1];
474
+ var rowsToHide = yRows.slice(maxRowsCountToCollapseChips);
475
+ var lastRow = [];
377
476
  chips.forEach(function (chip) {
378
477
  var y = generateTruncatedElementY(chip);
379
478
  if (rowsToHide.includes(y)) {
380
479
  collapsableChips += 1;
381
480
  }
382
481
  else {
383
- y === ySecondRow && secondRow.push(chip);
482
+ y === yLastRow && lastRow.push(chip);
384
483
  }
385
484
  });
386
485
  var counterWidth = calculateCounterWidth(collapsableChips);
387
486
  var rowWidth = counterWidth + INPUT_SPACE_WIDTH;
388
- var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth;
389
- secondRow.forEach(function (chip) {
487
+ var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth - suffixWidth;
488
+ lastRow.forEach(function (chip) {
390
489
  var _a;
391
490
  rowWidth += chip.getBoundingClientRect().width + GAP;
392
491
  if (rowWidth > dropdownWidth) {
393
- if (secondRow.length > 1) {
492
+ if (lastRow.length > 1) {
394
493
  collapsableChips += 1;
395
494
  }
396
495
  else {
397
496
  var emptySpaceWidth = collapsableChips > 0 ? counterWidth + INPUT_SPACE_WIDTH + GAP : INPUT_SPACE_WIDTH;
398
497
  chip.style.maxWidth = "".concat(dropdownWidth - emptySpaceWidth, "px");
399
- chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || '';
498
+ chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
400
499
  }
401
500
  }
402
501
  });
502
+ var visibleChipsCurrentCount = chips.length - collapsableChips;
503
+ isNeedCheckChipCollapsableCount.current = true;
504
+ visibleChipsCount.current = visibleChipsCurrentCount;
403
505
  collapsableChipsCount.current = collapsableChips;
404
- lastVisibleChipIndex.current = chips.length - collapsableChips;
506
+ lastVisibleChipIndex.current = visibleChipsCurrentCount;
405
507
  setChipLabelWithMaxWidth(chipLabelWithMaxWidth || generateId());
406
508
  };
407
- var handleUnCollapseChips = function () {
509
+ var handleUnCollapseChips = useCallback(function () {
408
510
  var _a;
409
511
  if (!userDropdownId)
410
512
  return;
@@ -412,16 +514,29 @@ var UserDropdown = function (_a) {
412
514
  var chips = Array.from(chipsNodes);
413
515
  chips.forEach(function (chip) {
414
516
  var _a;
415
- var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || '';
517
+ var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
416
518
  chipLabel === chipLabelWithMaxWidth && (chip.style.maxWidth = '100%');
417
519
  });
520
+ isNeedCheckChipCollapsableCount.current = false;
521
+ visibleChipsCount.current = chips.length;
418
522
  collapsableChipsCount.current = 0;
419
523
  lastVisibleChipIndex.current = -1;
420
- setChipLabelWithMaxWidth('');
524
+ setChipLabelWithMaxWidth(EMPTY_STRING);
525
+ }, [chipLabelWithMaxWidth, userDropdownId]);
526
+ var handleDragBlur = function (isDisableCheckFocused) {
527
+ var _a;
528
+ if (!isInputFocused.current && !isDisableCheckFocused)
529
+ return;
530
+ if (selectRef.current)
531
+ selectRef.current._preventBlur = false;
532
+ (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.blur();
421
533
  };
422
534
  var handleBlur = function () {
423
535
  var _a;
424
536
  var shouldSkipAddUserToChipsOnNextBlur = skipAddUserToChipsOnNextBlurRef.current;
537
+ var _b = selectRef.current || {}, _preventBlur = _b._preventBlur, _contextMenuOpen = _b._contextMenuOpen, _isDragging = _b._isDragging;
538
+ if (_preventBlur || _contextMenuOpen || _isDragging || skipAddUserToChipsOnNextBlurRef.current)
539
+ return;
425
540
  var onBlurComplete = function () {
426
541
  isChipsCollapsable && handleCollapseChips();
427
542
  isInputFocused.current = false;
@@ -431,19 +546,34 @@ var UserDropdown = function (_a) {
431
546
  return;
432
547
  }
433
548
  else
434
- (_a = handleAddUser(false)) === null || _a === void 0 ? void 0 : _a.then(onBlurComplete);
549
+ (_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { return requestAnimationFrame(function () { return requestAnimationFrame(function () { return onBlurComplete(); }); }); });
435
550
  skipAddUserToChipsOnNextBlurRef.current = false;
436
551
  };
437
- var handleFocus = function () {
438
- if (isIosPlatform(platform)) {
439
- new Promise(function (resolve) { return resolve(); }).then(function () { var _a; return (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.focus(); });
440
- }
441
- else {
442
- setTimeout(function () { var _a; return (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 100);
443
- }
552
+ var handleSelectBlur = function () {
553
+ setPlaceholderValue(placeholder);
554
+ setTimeout(handleBlur, RENDER_DELAY);
555
+ };
556
+ var focusInputIOS = useCallback(function (input) {
557
+ var length = input.value.length;
558
+ requestAnimationFrame(function () {
559
+ input.focus();
560
+ input.value === EMPTY_STRING ? setCaretInEmptyInput(input) : setCaretPosition(input, length);
561
+ });
562
+ }, []);
563
+ var handleFocus = useCallback(function (isDisableCheckFocused) {
564
+ setPlaceholderValue(SEARCH_PLACEHOLDER[language]);
565
+ if (isInputFocused.current && !isDisableCheckFocused)
566
+ return;
444
567
  isInputFocused.current = true;
568
+ var selectRefCurrent = selectRef.current;
569
+ var _a = selectRefCurrent || {}, _preventBlur = _a._preventBlur, inputRef = _a.inputRef;
570
+ setTimeout(function () {
571
+ if (selectRefCurrent && !_preventBlur)
572
+ isIosPlatform(platform) && inputRef ? focusInputIOS(inputRef) : selectRefCurrent.focus();
573
+ }, RENDER_DELAY);
445
574
  isChipsCollapsable && handleUnCollapseChips();
446
- };
575
+ }, [language, isChipsCollapsable, handleUnCollapseChips, platform, focusInputIOS]);
576
+ var handleForceFocus = useCallback(function () { return setTimeout(function () { return handleFocus(true); }, RENDER_DELAY); }, [handleFocus]);
447
577
  var handleCloseModal = function () {
448
578
  setModalData(null);
449
579
  setIsSearchable(true);
@@ -472,14 +602,16 @@ var UserDropdown = function (_a) {
472
602
  !userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
473
603
  }, [userDropdownId]);
474
604
  useLayoutEffect(function () {
475
- if (userDropdownId) {
476
- isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips();
477
- }
605
+ if (userDropdownId)
606
+ setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
478
607
  // eslint-disable-next-line
479
608
  }, [isChipsCollapsable, userDropdownId]);
480
609
  useEffect(function () {
481
610
  setPaddingLeft(calculatePaddingLeft());
482
611
  }, [mask]);
612
+ useEffect(function () {
613
+ setPaddingRight(calculatePaddingRight());
614
+ }, [suffix]);
483
615
  useEffect(function () {
484
616
  setSelectedUsers(function (prevSelectedUsers) {
485
617
  return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
@@ -488,7 +620,13 @@ var UserDropdown = function (_a) {
488
620
  useEffect(function () {
489
621
  if (!isEmpty(selectedEntries)) {
490
622
  setSelectedUsers(selectedEntries.map(function (entity) {
491
- var isOrganizer = entity.isOrganizer, isWarning = entity.isWarning, isLoading = entity.isLoading, uid = entity.uid, userType = entity.userType, contextMenuItems = entity.contextMenuItems, isResetChipsToInputValue = entity.isResetChipsToInputValue;
623
+ var _a;
624
+ var isWarning = entity.isWarning, isLoading = entity.isLoading, isOrganizerShort = entity.isOrganizerShort, isResetChipsToInputValue = entity.isResetChipsToInputValue, userType = entity.userType, currentContextItems = entity.contextMenuItems, uid = entity.uid, organizerName = entity.organizerName, email = entity.email;
625
+ var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
626
+ var _a;
627
+ (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
628
+ isMobilePlatform(platform) && handleFocus(true);
629
+ } })); });
492
630
  var commonFields = {
493
631
  platform: platform,
494
632
  layoutType: layoutType,
@@ -500,20 +638,28 @@ var UserDropdown = function (_a) {
500
638
  isSelectedChipHasTooltip: isSelectedChipHasTooltip,
501
639
  isLoading: isLoading,
502
640
  isWarning: isWarning,
503
- isOrganizer: isOrganizer,
641
+ isOrganizerShort: isOrganizerShort,
504
642
  userType: userType,
505
643
  uid: uid,
644
+ organizerName: organizerName,
506
645
  isInputFocused: isInputFocused,
507
646
  selectRef: selectRef,
508
647
  collapsableChipsCount: collapsableChipsCount,
509
648
  lastVisibleChipIndex: lastVisibleChipIndex,
510
649
  };
650
+ var isEntityContainsContacts = 'contacts' in entity;
511
651
  var generatedNotCorporateEntity = Object.keys(entity).length === 1
512
- ? generateEnteredByUserOption(__assign({ email: entity.email }, commonFields))
513
- : generateContactsOption(__assign({ option: entity }, commonFields));
514
- return 'contacts' in entity ? generateCorporateOption(__assign({ option: entity }, commonFields)) : generatedNotCorporateEntity;
652
+ ? generateEnteredByUserOption(__assign({ email: email }, commonFields))
653
+ : generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
654
+ if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
655
+ return generateCorporateOption(__assign({ option: entity }, commonFields));
656
+ return isEntityContainsContacts
657
+ ? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
658
+ : generatedNotCorporateEntity;
515
659
  }));
516
660
  }
661
+ else
662
+ setSelectedUsers([]);
517
663
  // eslint-disable-next-line
518
664
  }, [selectedEntries]);
519
665
  useEffect(function () {
@@ -526,15 +672,38 @@ var UserDropdown = function (_a) {
526
672
  useEffect(function () {
527
673
  return function () {
528
674
  requestInputChangeDebounce.cancel();
529
- resetIsUserTypingDebounce.cancel();
675
+ clearUserTypingTimeout();
530
676
  };
531
- }, [requestInputChangeDebounce, resetIsUserTypingDebounce]);
532
- var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { children: props.children })); }, []);
533
- var MenuListComponent = useCallback(function (props) { return (_jsx(MenuList, __assign({}, props, { children: props.children, selectRef: selectRef, scrollFromTop: menuScrollFromTop, language: language, hasNextPage: hasNextPage, isLoading: isLoading, isShowCatalogSearchButton: isShowCatalogSearchButton, onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick, isUserTyping: isUserTyping, isNextPageLoading: isNextPageLoading, onLoadNextPage: function (inputValue) { return onLoadNextPage && onLoadNextPage(inputValue); } }))); }, [language, hasNextPage, isLoading, isShowCatalogSearchButton, onShowCatalogSearchButtonClick, isUserTyping, isNextPageLoading, onLoadNextPage]);
534
- var NoOptionsButton = function (props) { return (_jsx(components.NoOptionsMessage, __assign({}, props, { children: _jsx(SearchInCatalogButton, { language: language, isOnlyButtonInList: true, onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick, noOptionText: isShowCatalogSearchButton ? undefined : generateNoOptionsMessage({ inputValue: inputValue }) }) }))); };
535
- var MultiValueLabelComponent = function (props) { return (_jsx(MultiValueLabel, __assign({}, props, { isChipsOutline: isChipsOutline, transformCurrentChipToInputValue: transformCurrentChipToInputValue }))); };
536
- return (_jsxs("div", __assign({ id: userDropdownId, className: classNames('smartapp-user-dropdown', containerClassName), style: __assign(__assign({}, fontFamilyStyle), containerStyles) }, { children: [renderTitle(), _jsxs("div", __assign({ className: "smartapp-user-dropdown__container" }, { children: [renderMask(), _jsx(Select, { ref: selectRef, menuIsOpen: isInputHidden ? !!externalInputValue : undefined, isMulti: true, openMenuOnFocus: true, blurInputOnSelect: false, captureMenuScroll: false, isSearchable: isSearchable, menuPlacement: menuPosition, controlShouldRenderValue: isChipsVisible, backspaceRemovesValue: isChipsVisible, isDisabled: isDisabled, closeMenuOnSelect: isMenuCloseOnSelect, isLoading: isLoading || isUserTyping, isClearable: false, styles: generateStyles(), placeholder: placeholder || '', noOptionsMessage: generateNoOptionsMessage, loadingMessage: function () { return _jsx(LoadingMessage, {}); }, value: selectedUsers, inputValue: inputValue, options: !isNull(corporateEntries) || !isNull(myContactsEntries) ? generateOptions() : undefined, filterOption: handleFilterOption, onInputChange: handleInputChange, onChange: handleChange, onMenuClose: handleMenuClose, onMenuOpen: onMenuOpen, onKeyDown: handleKeyDown, onBlur: handleBlur, autoFocus: autoFocus, onFocus: handleFocus, components: {
537
- Input: Input,
677
+ }, [clearUserTypingTimeout, requestInputChangeDebounce]);
678
+ useEffect(function () {
679
+ if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
680
+ collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
681
+ }, [isChipsCollapsable, selectedEntries]);
682
+ var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
683
+ var MenuListComponent = useCallback(function (props) { return (_jsx(MenuList, __assign({}, props, { children: props.children, selectRef: selectRef, scrollFromTop: menuScrollFromTop, language: language, platform: platform, menuListMaxHeight: menuListMaxHeight, hasNextPage: hasNextPage, isLoading: isLoading, isShowCatalogSearchButton: isShowCatalogSearchButton, onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick, isUserTyping: isUserTyping, isCharHintVisible: isCharHintVisible, isMenuShadowless: isMenuShadowless, isNextPageLoading: isNextPageLoading, onLoadNextPage: function (inputValue) { return onLoadNextPage === null || onLoadNextPage === void 0 ? void 0 : onLoadNextPage(inputValue); }, setIsDelimiterVisible: setIsDelimiterVisible }))); }, [
684
+ hasNextPage,
685
+ isCharHintVisible,
686
+ isLoading,
687
+ isMenuShadowless,
688
+ isNextPageLoading,
689
+ isShowCatalogSearchButton,
690
+ isUserTyping,
691
+ language,
692
+ menuListMaxHeight,
693
+ onLoadNextPage,
694
+ onShowCatalogSearchButtonClick,
695
+ platform,
696
+ ]);
697
+ var NoOptionsButton = function (props) { return (_jsx(components.NoOptionsMessage, __assign({}, props, { children: _jsx(SearchInCatalogButton, { language: language, isOnlyButtonInList: true, isMenuShadowless: isMenuShadowless, noOptionText: isShowCatalogSearchButton ? undefined : generateNoOptionsMessage({ inputValue: inputValue }), onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick }) }))); };
698
+ var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
699
+ var MultiValueLabelComponent = useCallback(function (props) { return (_jsx(MultiValueLabel, __assign({}, props, { platform: platform, isChipsOutline: isChipsOutline, transformCurrentChipToInputValue: transformCurrentChipToInputValue, handleBlurDropdown: function () { return handleDragBlur(true); }, handleRequestFocus: handleForceFocus }))); }, [platform, isChipsOutline, transformCurrentChipToInputValue, handleForceFocus]);
700
+ var setContainerNodeRef = function (ref) {
701
+ var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
702
+ setNodeRef(ref);
703
+ setDelimiterOffset(isShowCatalogSearchButton ? 0 : left);
704
+ };
705
+ return (_jsxs("div", __assign({ id: userDropdownId, className: classNames('smartapp-user-dropdown', containerClassName), style: __assign(__assign({}, fontFamilyStyle), containerStyles) }, { children: [renderTitle(), _jsxs("div", __assign({ className: "smartapp-user-dropdown__container", ref: setContainerNodeRef }, { children: [renderMask(), _jsx(Select, { ref: selectRef, menuIsOpen: isInputHidden ? !!externalInputValue : undefined, menuPortalTarget: menuPortalTarget === null || menuPortalTarget === void 0 ? void 0 : menuPortalTarget.current, isMulti: true, openMenuOnFocus: true, blurInputOnSelect: false, captureMenuScroll: false, isSearchable: isSearchable, menuPlacement: menuPosition, menuPosition: menuLocation, controlShouldRenderValue: isChipsVisible, backspaceRemovesValue: isChipsVisible, isDisabled: isDisabled, closeMenuOnSelect: isMenuCloseOnSelect, isLoading: isLoading || isUserTyping, isClearable: false, styles: generateStyles(), placeholder: placeholderValue, noOptionsMessage: generateNoOptionsMessage, loadingMessage: function () { return _jsx(LoadingMessage, { isMenuShadowless: isMenuShadowless, skeletonRowsCount: skeletonRowsCount }); }, value: selectedUsers, inputValue: inputValue, options: !isNull(corporateEntries) || !isNull(myContactsEntries) ? generateOptions() : undefined, filterOption: handleFilterOption, onInputChange: handleInputChange, onChange: handleChange, onMenuClose: handleMenuClose, onMenuOpen: onMenuOpen, onKeyDown: handleKeyDown, onBlur: handleSelectBlur, autoFocus: autoFocus, onFocus: function () { return (onFocus ? onFocus() : handleFocus()); }, instanceId: userDropdownId, components: {
706
+ Input: InputComponent,
538
707
  MultiValueLabel: MultiValueLabelComponent,
539
708
  MultiValueRemove: MultiValueRemove,
540
709
  Option: OptionComponent,
@@ -543,7 +712,9 @@ var UserDropdown = function (_a) {
543
712
  LoadingIndicator: LoadingIndicator,
544
713
  MenuList: MenuListComponent,
545
714
  NoOptionsMessage: NoOptionsButton,
546
- } })] })), renderHint(), _jsx(Modal, { isModalOpen: !isNull(modalData), platform: platform, fontFamily: fontFamily, content: modalContent, isBottomSheet: isMobilePlatform(platform), backgroundColor: "var(--color-bg-blackout-transparent)", handleCloseModal: handleCloseModal })] })));
715
+ } }), isMenuShadowless && isDelimiterVisible && (_jsx("div", { className: classNames('smartapp-user-dropdown__container--delimiter', {
716
+ 'smartapp-user-dropdown__container--delimiter__with-catalog-search-btn': isShowCatalogSearchButton,
717
+ }), style: { '--delimiter-offset': "-".concat(delimiterOffset, "px") } }))] })), renderHint(), _jsx(Modal, { isModalOpen: !isNull(modalData), platform: platform, fontFamily: fontFamily, content: modalContent, isBottomSheet: isMobilePlatform(platform), backgroundColor: "var(--color-bg-blackout-transparent)", handleCloseModal: handleCloseModal })] })));
547
718
  };
548
- export default UserDropdown;
719
+ export default memo(UserDropdown);
549
720
  //# sourceMappingURL=UserDropdown.js.map