@expressms/smartapp-ui 3.0.0-alpha.13 → 3.0.0-alpha.131

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