@expressms/smartapp-ui 3.0.0-alpha.12 → 3.0.0-alpha.120

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