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

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 (153) 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 +82 -44
  18. package/build/main/constants/constants.js +120 -48
  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 +9 -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 +170 -33
  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 +13 -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.d.ts +1 -1
  86. package/build/main//321/201omponents/CustomSelect/CustomSelect.js +9 -8
  87. package/build/main//321/201omponents/CustomSelect/CustomSelect.js.map +1 -1
  88. package/build/main//321/201omponents/CustomSelect/selectStyles.js +20 -21
  89. package/build/main//321/201omponents/CustomSelect/selectStyles.js.map +1 -1
  90. package/build/main//321/201omponents/CustomSelect/types.d.ts +8 -2
  91. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.d.ts +1 -1
  92. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js +33 -24
  93. package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js.map +1 -1
  94. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.d.ts +11 -0
  95. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js +38 -0
  96. package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js.map +1 -0
  97. package/build/main//321/201omponents/CustomSelectProfiles/types.d.ts +4 -5
  98. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.d.ts +1 -1
  99. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js +24 -18
  100. package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js.map +1 -1
  101. package/build/main//321/201omponents/DraggablePopup/types.d.ts +8 -8
  102. package/build/main//321/201omponents/Flex/Flex.d.ts +1 -1
  103. package/build/main//321/201omponents/Flex/Flex.js +2 -2
  104. package/build/main//321/201omponents/Flex/Flex.js.map +1 -1
  105. package/build/main//321/201omponents/Flex/types.d.ts +2 -0
  106. package/build/main//321/201omponents/Input/Input.d.ts +1 -1
  107. package/build/main//321/201omponents/Input/Input.js +75 -33
  108. package/build/main//321/201omponents/Input/Input.js.map +1 -1
  109. package/build/main//321/201omponents/Input/types.d.ts +10 -3
  110. package/build/main//321/201omponents/ListItem/ListItem.js +26 -20
  111. package/build/main//321/201omponents/ListItem/ListItem.js.map +1 -1
  112. package/build/main//321/201omponents/ListItem/types.d.ts +8 -4
  113. package/build/main//321/201omponents/Modal/Modal.d.ts +3 -2
  114. package/build/main//321/201omponents/Modal/Modal.js +116 -48
  115. package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
  116. package/build/main//321/201omponents/Modal/types.d.ts +36 -2
  117. package/build/main//321/201omponents/Notification/Notification.d.ts +4 -6
  118. package/build/main//321/201omponents/Notification/Notification.js +72 -25
  119. package/build/main//321/201omponents/Notification/Notification.js.map +1 -1
  120. package/build/main//321/201omponents/Notification/types.d.ts +17 -2
  121. package/build/main//321/201omponents/Stories/Stories.js +72 -4
  122. package/build/main//321/201omponents/Stories/Stories.js.map +1 -1
  123. package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js +6 -0
  124. package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js.map +1 -1
  125. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.d.ts +2 -1
  126. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js +4 -3
  127. package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js.map +1 -1
  128. package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js +21 -50
  129. package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js.map +1 -1
  130. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.d.ts +3 -2
  131. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js +34 -37
  132. package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js.map +1 -1
  133. package/build/main//321/201omponents/UserDropdown/Option/Option.js +2 -2
  134. package/build/main//321/201omponents/UserDropdown/Option/Option.js.map +1 -1
  135. package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js +1 -0
  136. package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js.map +1 -1
  137. package/build/main//321/201omponents/UserDropdown/UserDropdown.d.ts +4 -3
  138. package/build/main//321/201omponents/UserDropdown/UserDropdown.js +229 -79
  139. package/build/main//321/201omponents/UserDropdown/UserDropdown.js.map +1 -1
  140. package/build/main//321/201omponents/UserDropdown/helpers.d.ts +7 -3
  141. package/build/main//321/201omponents/UserDropdown/helpers.js +4 -2
  142. package/build/main//321/201omponents/UserDropdown/helpers.js.map +1 -1
  143. package/build/main//321/201omponents/UserDropdown/selectStyles.d.ts +1 -1
  144. package/build/main//321/201omponents/UserDropdown/selectStyles.js +36 -21
  145. package/build/main//321/201omponents/UserDropdown/selectStyles.js.map +1 -1
  146. package/build/main//321/201omponents/UserDropdown/types.d.ts +91 -58
  147. package/build/main//321/201omponents/UserDropdown/types.js.map +1 -1
  148. package/package.json +10 -7
  149. package/build/main/assets/icons/avatar-arrow-down.svg +0 -3
  150. package/build/main/assets/icons/avatar-arrow-up.svg +0 -3
  151. package/build/main/hooks/useLongTap.d.ts +0 -12
  152. package/build/main/hooks/useLongTap.js +0 -29
  153. 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,90 @@ 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);
135
+ var prevIsLoadingRef = useRef(isLoading);
103
136
  var selectedUsersLength = selectedUsers.length;
137
+ var _18 = useDroppable({ id: userDropdownId }), setNodeRef = _18.setNodeRef, over = _18.over;
138
+ var overId = (over || {}).id;
139
+ var isDraggable = overId === userDropdownId;
140
+ var isInputPlaceholderVisible = selectedUsersLength === 1 ? ((_b = selectedUsers[0].isNotRemovable) !== null && _b !== void 0 ? _b : false) : false;
141
+ // eslint-disable-next-line react-hooks/exhaustive-deps
142
+ useImperativeHandle(focusRef, function () { return ({ focus: handleFocus, blur: function () { return handleDragBlur(true); } }); }, []);
104
143
  var fontFamilyStyle = generateFontFamilyStyle(fontFamily);
144
+ var isCharHintVisible = useCharHintDisplay({ inputValue: inputValue }).isCharHintVisible;
105
145
  var checkIsValueIsEmail = function (inputValue) {
106
146
  var regex = new RegExp(/^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/);
107
147
  return regex.test(inputValue);
108
148
  };
109
- var checkIsEmailToExclude = function (email) { return includes(emailsToExclude, email); };
149
+ // TODO: emailsToExclude в массиве зависимостей вызывает бесконечный ререндер при драге
150
+ // eslint-disable-next-line react-hooks/exhaustive-deps
151
+ var checkIsEmailToExclude = useCallback(function (email) { return includes(emailsToExclude, email); }, []);
110
152
  var calculatePaddingLeft = function () {
111
153
  var _a, _b;
112
154
  var maskWidth = ((_b = (_a = maskRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
113
155
  maskWidth && setMaskWidth(maskWidth + GAP);
114
156
  return "".concat(maskWidth ? maskWidth + MASK_INPUT_PL : DEFAULT_INPUT_PADDING, "px");
115
157
  };
158
+ var calculatePaddingRight = function () {
159
+ var _a, _b;
160
+ var suffixWidth = ((_b = (_a = suffixRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
161
+ suffixWidth && setSuffixWidth(suffixWidth + GAP);
162
+ return "".concat(suffixWidth ? suffixWidth + SUFFIX_INPUT_PR : DEFAULT_INPUT_PADDING, "px");
163
+ };
116
164
  var generateStyles = function () {
117
165
  return selectStyles({
118
166
  isChipsVisible: isChipsVisible,
119
167
  isMaxMembersAdded: maxMembersCount && isChipsVisible ? selectedUsersLength === maxMembersCount : false,
120
168
  isDisabled: isDisabled,
121
- isError: isError,
169
+ isInputPlaceholderVisible: isInputPlaceholderVisible,
122
170
  lastRowNumber: isChipsVisible ? Math.ceil(selectedUsersLength / 2) + 1 : 1,
123
171
  paddingLeft: paddingLeft,
172
+ paddingRight: !isChipsVisible && !isEmpty(inputValue) ? PADDING_WITH_CLEAR_ICON : paddingRight,
124
173
  platform: platform,
125
174
  layoutType: layoutType,
126
175
  isInputHidden: isInputHidden,
127
176
  isDisabledMenuOffsetAtFullscreen: isDisabledMenuOffsetAtFullscreen,
177
+ isInputFocused: isInputFocused.current,
128
178
  isMaskRepresented: !isEmpty(mask),
179
+ isSuffixRepresented: !isNil(suffix),
180
+ isMenuShadowless: isMenuShadowless,
129
181
  fontFamilyStyle: fontFamilyStyle,
130
182
  containerPadding: containerPadding,
183
+ isDraggable: isDraggable,
184
+ isChipsCollapsed: isChipsCollapsable && !isInputFocused.current,
185
+ menuListMaxHeight: menuListMaxHeight,
131
186
  });
132
187
  };
133
188
  var generateNoOptionsMessage = function (_a) {
@@ -159,35 +214,55 @@ var UserDropdown = function (_a) {
159
214
  return contactType === EMAIL_FIELD;
160
215
  })[0].contact;
161
216
  });
162
- var query = ((_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.inputValue) || '';
217
+ 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
218
  var sortedCorporateContacts = sortContacts(corporateContacts, query);
219
+ var sortedLocalContacts = sortContacts((corporateEntries === null || corporateEntries === void 0 ? void 0 : corporateEntries.localPhonebookEntries) || [], query);
164
220
  var sortedMyContacts = sortContacts(myContactsEntries || [], query);
165
221
  var filteredCorporateContacts = sortedCorporateContacts.filter(function (_a) {
166
222
  var email = _a.email, contacts = _a.contacts;
167
223
  return [email, contacts[0].contact].every(function (email) { return !checkIsEmailToExclude(email); });
168
224
  });
225
+ var filteredLocalContacts = sortedLocalContacts.filter(function (_a) {
226
+ var _b;
227
+ var email = _a.email, contacts = _a.contacts;
228
+ var contact = (_b = contacts[0]) === null || _b === void 0 ? void 0 : _b.contact;
229
+ return !checkIsEmailToExclude(email) && !checkIsEmailToExclude(contact);
230
+ });
169
231
  var filteredMyContacts = sortedMyContacts.filter(function (_a) {
170
232
  var email = _a.email;
171
233
  return !checkIsEmailToExclude(email);
172
234
  });
173
- return __spreadArray(__spreadArray([], generateCorporateOptionsToSelect(__assign({ options: filteredCorporateContacts }, commonFields)), true), generateContactsOptionsToSelect(__assign({ options: filteredMyContacts }, commonFields)), true);
235
+ 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
236
  };
237
+ var clearUserTypingTimeout = useCallback(function () {
238
+ var userTypingTimeoutRefCurrent = userTypingTimeoutRef.current;
239
+ if (userTypingTimeoutRefCurrent) {
240
+ clearTimeout(userTypingTimeoutRefCurrent);
241
+ userTypingTimeoutRef.current = null;
242
+ }
243
+ }, []);
244
+ useEffect(function () {
245
+ if (prevIsLoadingRef.current && !isLoading) {
246
+ setIsUserTyping(false);
247
+ clearUserTypingTimeout();
248
+ }
249
+ prevIsLoadingRef.current = isLoading;
250
+ }, [isLoading, clearUserTypingTimeout]);
175
251
  var requestInputChangeDebounce = useMemo(function () {
176
252
  return debounce(function (inputValue) {
177
253
  onInputChange(inputValue);
178
- setIsUserTyping(false);
254
+ clearUserTypingTimeout();
255
+ userTypingTimeoutRef.current = setTimeout(function () { return setIsUserTyping(false); }, CLEAR_USER_TYPING_TIMEOUT);
179
256
  }, 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); };
257
+ }, [clearUserTypingTimeout, onInputChange]);
183
258
  var handleMenuClose = function () {
184
259
  menuScrollFromTop.current = 0;
185
- handleResetError();
186
- onMenuClose && onMenuClose();
260
+ setIsDelimiterVisible(false);
261
+ onMenuClose === null || onMenuClose === void 0 ? void 0 : onMenuClose();
187
262
  };
188
- var handleInputChange = function (inputValue, additionalInfo) {
263
+ var handleInputChange = useCallback(function (inputValue, additionalInfo) {
189
264
  if (additionalInfo) {
190
- var action = additionalInfo.action, prevInputValue = additionalInfo.prevInputValue;
265
+ var action = additionalInfo.action, _a = additionalInfo.prevInputValue, prevInputValue = _a === void 0 ? EMPTY_STRING : _a;
191
266
  var trimPrevInputValue_1 = prevInputValue.trim();
192
267
  var isInputBlurAction = action === INPUT_ACTIONS.blur;
193
268
  var isMenuCloseAction = action === MENU_ACTIONS.close;
@@ -201,22 +276,24 @@ var UserDropdown = function (_a) {
201
276
  setInputValue(isUserAlreadySelected || checkIsEmailToExclude(trimPrevInputValue_1) ? trimPrevInputValue_1 : inputValue);
202
277
  }
203
278
  }
204
- setIsUserTyping(!isEmpty(inputValue));
205
- handleResetError();
206
- inputValue.length >= MIN_INPUT_SYMBOLS ? requestInputChangeDebounce(inputValue) : resetIsUserTypingDebounce();
207
- };
279
+ if (!isEmpty(inputValue)) {
280
+ clearUserTypingTimeout();
281
+ setIsUserTyping(true);
282
+ }
283
+ onImmediateInputChange === null || onImmediateInputChange === void 0 ? void 0 : onImmediateInputChange(inputValue);
284
+ inputValue.length >= MIN_INPUT_SYMBOLS && requestInputChangeDebounce(inputValue);
285
+ }, [onImmediateInputChange, requestInputChangeDebounce, selectedUsers, checkIsEmailToExclude, clearUserTypingTimeout]);
208
286
  var extractInputEmails = function (inputValue) {
209
287
  return inputValue
210
288
  .split(/[,;]+/)
211
289
  .map(function (inputStr) { return inputStr.trim(); })
212
290
  .filter(function (inputStr) { return !!inputStr.length; });
213
291
  };
214
- var handleAddUser = function (needToShowError) {
215
- if (needToShowError === void 0) { needToShowError = true; }
292
+ var handleAddUser = function () {
216
293
  var props = selectRef.current.props;
217
- var options = props.options, inputValue = props.inputValue, onChange = props.onChange;
294
+ var options = props.options, onChange = props.onChange;
218
295
  if (isEmpty(inputValue))
219
- return;
296
+ return Promise.resolve();
220
297
  var trimInputValue = inputValue.trim();
221
298
  var optionProps = {
222
299
  platform: platform,
@@ -248,10 +325,10 @@ var UserDropdown = function (_a) {
248
325
  return email === inputEmail;
249
326
  });
250
327
  enteredUsers.push(existingUser || generateEnteredByUserOption(__assign(__assign({}, optionProps), { email: inputEmail })));
251
- if (isUserAlreadySelected && needToShowError && isSingleEmailEntered)
252
- setIsError(true);
328
+ if (isUserAlreadySelected && isSingleEmailEntered)
329
+ return;
253
330
  else
254
- handleInputChange('', { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
331
+ handleInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
255
332
  }
256
333
  !isValueIsEmail && incorrectEmails.push(inputEmail);
257
334
  });
@@ -265,7 +342,7 @@ var UserDropdown = function (_a) {
265
342
  var isEnterPressed = code === ENTER_KEY || key === ENTER_KEY;
266
343
  var isBackspacePressed = code === BACKSPACE_KEY || key === BACKSPACE_KEY;
267
344
  var isSpacePressed = code === SPACE_KEY;
268
- var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === '' && !isEmpty(selectedUsers);
345
+ var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === EMPTY_STRING && !isEmpty(selectedUsers);
269
346
  if (isEnterPressed) {
270
347
  event.preventDefault();
271
348
  (_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { });
@@ -291,25 +368,29 @@ var UserDropdown = function (_a) {
291
368
  (_c = (_b = selectRef.current) === null || _b === void 0 ? void 0 : _b.onMenuOpen) === null || _c === void 0 ? void 0 : _c.call(_b);
292
369
  }
293
370
  };
294
- var transformCurrentChipToInputValue = function (label, email) {
371
+ var transformCurrentChipToInputValue = useCallback(function (label, value) {
295
372
  var _a, _b;
296
373
  skipAddUserToChipsOnNextBlurRef.current = true;
297
374
  setSelectedUsers(function (prevSelectedUsers) {
298
375
  var nextSelectedUsers = prevSelectedUsers.filter(function (_a) {
299
- var userEmail = _a.email;
300
- return userEmail !== email;
376
+ var userEmail = _a.email, userType = _a.userType, userUid = _a.uid;
377
+ return checkIfContactTypeIsGroup(userType) ? userUid !== value : userEmail !== value;
301
378
  });
302
379
  onChange === null || onChange === void 0 ? void 0 : onChange(nextSelectedUsers.map(function (userData) { return omit(userData, COMMON_FIELDS_TO_OMIT); }));
303
380
  return nextSelectedUsers;
304
381
  });
382
+ handleFocus();
305
383
  setInputValue(label);
306
384
  onInputChange(label);
307
385
  handleInputChange(label);
308
386
  onMenuOpen === null || onMenuOpen === void 0 ? void 0 : onMenuOpen();
309
387
  (_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.onMenuOpen) === null || _b === void 0 ? void 0 : _b.call(_a);
310
- };
388
+ setIsUserTyping(false);
389
+ },
390
+ // eslint-disable-next-line
391
+ [onInputChange, handleInputChange, onMenuOpen, onChange]);
311
392
  var handleChange = function (newSelectedUsers) {
312
- var uniqNewSelectedUsers = uniqBy(newSelectedUsers, EMAIL_FIELD);
393
+ var uniqNewSelectedUsers = isDisabledCheckUniqueEmails ? newSelectedUsers : uniqBy(newSelectedUsers, EMAIL_FIELD);
313
394
  var users = [];
314
395
  var deletedUser = selectedUsers.find(function (_a) {
315
396
  var value = _a.value;
@@ -365,7 +446,7 @@ var UserDropdown = function (_a) {
365
446
  var handleCollapseChips = function () {
366
447
  var _a, _b;
367
448
  var collapsableChips = 0;
368
- var chipLabelWithMaxWidth = '';
449
+ var chipLabelWithMaxWidth = EMPTY_STRING;
369
450
  var chipsNodes = ((_a = document.querySelector("#".concat(userDropdownId))) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.smartapp-chip')) || [];
370
451
  var chips = Array.from(chipsNodes);
371
452
  if (isEmpty(chips))
@@ -385,7 +466,7 @@ var UserDropdown = function (_a) {
385
466
  });
386
467
  var counterWidth = calculateCounterWidth(collapsableChips);
387
468
  var rowWidth = counterWidth + INPUT_SPACE_WIDTH;
388
- var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth;
469
+ var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth - suffixWidth;
389
470
  secondRow.forEach(function (chip) {
390
471
  var _a;
391
472
  rowWidth += chip.getBoundingClientRect().width + GAP;
@@ -396,15 +477,18 @@ var UserDropdown = function (_a) {
396
477
  else {
397
478
  var emptySpaceWidth = collapsableChips > 0 ? counterWidth + INPUT_SPACE_WIDTH + GAP : INPUT_SPACE_WIDTH;
398
479
  chip.style.maxWidth = "".concat(dropdownWidth - emptySpaceWidth, "px");
399
- chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || '';
480
+ chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
400
481
  }
401
482
  }
402
483
  });
484
+ var visibleChipsCurrentCount = chips.length - collapsableChips;
485
+ isNeedCheckChipCollapsableCount.current = true;
486
+ visibleChipsCount.current = visibleChipsCurrentCount;
403
487
  collapsableChipsCount.current = collapsableChips;
404
- lastVisibleChipIndex.current = chips.length - collapsableChips;
488
+ lastVisibleChipIndex.current = visibleChipsCurrentCount;
405
489
  setChipLabelWithMaxWidth(chipLabelWithMaxWidth || generateId());
406
490
  };
407
- var handleUnCollapseChips = function () {
491
+ var handleUnCollapseChips = useCallback(function () {
408
492
  var _a;
409
493
  if (!userDropdownId)
410
494
  return;
@@ -412,16 +496,29 @@ var UserDropdown = function (_a) {
412
496
  var chips = Array.from(chipsNodes);
413
497
  chips.forEach(function (chip) {
414
498
  var _a;
415
- var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || '';
499
+ var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
416
500
  chipLabel === chipLabelWithMaxWidth && (chip.style.maxWidth = '100%');
417
501
  });
502
+ isNeedCheckChipCollapsableCount.current = false;
503
+ visibleChipsCount.current = chips.length;
418
504
  collapsableChipsCount.current = 0;
419
505
  lastVisibleChipIndex.current = -1;
420
- setChipLabelWithMaxWidth('');
506
+ setChipLabelWithMaxWidth(EMPTY_STRING);
507
+ }, [chipLabelWithMaxWidth, userDropdownId]);
508
+ var handleDragBlur = function (isDisableCheckFocused) {
509
+ var _a;
510
+ if (!isInputFocused.current && !isDisableCheckFocused)
511
+ return;
512
+ if (selectRef.current)
513
+ selectRef.current._preventBlur = false;
514
+ (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.blur();
421
515
  };
422
516
  var handleBlur = function () {
423
517
  var _a;
424
518
  var shouldSkipAddUserToChipsOnNextBlur = skipAddUserToChipsOnNextBlurRef.current;
519
+ var _b = selectRef.current || {}, _preventBlur = _b._preventBlur, _contextMenuOpen = _b._contextMenuOpen, _isDragging = _b._isDragging;
520
+ if (_preventBlur || _contextMenuOpen || _isDragging || skipAddUserToChipsOnNextBlurRef.current)
521
+ return;
425
522
  var onBlurComplete = function () {
426
523
  isChipsCollapsable && handleCollapseChips();
427
524
  isInputFocused.current = false;
@@ -431,19 +528,34 @@ var UserDropdown = function (_a) {
431
528
  return;
432
529
  }
433
530
  else
434
- (_a = handleAddUser(false)) === null || _a === void 0 ? void 0 : _a.then(onBlurComplete);
531
+ (_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(onBlurComplete);
435
532
  skipAddUserToChipsOnNextBlurRef.current = false;
436
533
  };
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
- }
534
+ var handleSelectBlur = function () {
535
+ setPlaceholderValue(placeholder);
536
+ setTimeout(handleBlur, RENDER_DELAY);
537
+ };
538
+ var focusInputIOS = useCallback(function (input) {
539
+ var length = input.value.length;
540
+ requestAnimationFrame(function () {
541
+ input.focus();
542
+ input.value === EMPTY_STRING ? setCaretInEmptyInput(input) : setCaretPosition(input, length);
543
+ });
544
+ }, []);
545
+ var handleFocus = useCallback(function (isDisableCheckFocused) {
546
+ setPlaceholderValue(SEARCH_PLACEHOLDER[language]);
547
+ if (isInputFocused.current && !isDisableCheckFocused)
548
+ return;
444
549
  isInputFocused.current = true;
550
+ var selectRefCurrent = selectRef.current;
551
+ var _a = selectRefCurrent || {}, _preventBlur = _a._preventBlur, inputRef = _a.inputRef;
552
+ setTimeout(function () {
553
+ if (selectRefCurrent && !_preventBlur)
554
+ isIosPlatform(platform) && inputRef ? focusInputIOS(inputRef) : selectRefCurrent.focus();
555
+ }, RENDER_DELAY);
445
556
  isChipsCollapsable && handleUnCollapseChips();
446
- };
557
+ }, [language, isChipsCollapsable, handleUnCollapseChips, platform, focusInputIOS]);
558
+ var handleForceFocus = useCallback(function () { return setTimeout(function () { return handleFocus(true); }, RENDER_DELAY); }, [handleFocus]);
447
559
  var handleCloseModal = function () {
448
560
  setModalData(null);
449
561
  setIsSearchable(true);
@@ -472,14 +584,16 @@ var UserDropdown = function (_a) {
472
584
  !userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
473
585
  }, [userDropdownId]);
474
586
  useLayoutEffect(function () {
475
- if (userDropdownId) {
476
- isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips();
477
- }
587
+ if (userDropdownId)
588
+ setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
478
589
  // eslint-disable-next-line
479
590
  }, [isChipsCollapsable, userDropdownId]);
480
591
  useEffect(function () {
481
592
  setPaddingLeft(calculatePaddingLeft());
482
593
  }, [mask]);
594
+ useEffect(function () {
595
+ setPaddingRight(calculatePaddingRight());
596
+ }, [suffix]);
483
597
  useEffect(function () {
484
598
  setSelectedUsers(function (prevSelectedUsers) {
485
599
  return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
@@ -488,7 +602,13 @@ var UserDropdown = function (_a) {
488
602
  useEffect(function () {
489
603
  if (!isEmpty(selectedEntries)) {
490
604
  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;
605
+ var _a;
606
+ 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;
607
+ var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
608
+ var _a;
609
+ (_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
610
+ isMobilePlatform(platform) && handleFocus(true);
611
+ } })); });
492
612
  var commonFields = {
493
613
  platform: platform,
494
614
  layoutType: layoutType,
@@ -500,20 +620,28 @@ var UserDropdown = function (_a) {
500
620
  isSelectedChipHasTooltip: isSelectedChipHasTooltip,
501
621
  isLoading: isLoading,
502
622
  isWarning: isWarning,
503
- isOrganizer: isOrganizer,
623
+ isOrganizerShort: isOrganizerShort,
504
624
  userType: userType,
505
625
  uid: uid,
626
+ organizerName: organizerName,
506
627
  isInputFocused: isInputFocused,
507
628
  selectRef: selectRef,
508
629
  collapsableChipsCount: collapsableChipsCount,
509
630
  lastVisibleChipIndex: lastVisibleChipIndex,
510
631
  };
632
+ var isEntityContainsContacts = 'contacts' in entity;
511
633
  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;
634
+ ? generateEnteredByUserOption(__assign({ email: email }, commonFields))
635
+ : generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
636
+ if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
637
+ return generateCorporateOption(__assign({ option: entity }, commonFields));
638
+ return isEntityContainsContacts
639
+ ? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
640
+ : generatedNotCorporateEntity;
515
641
  }));
516
642
  }
643
+ else
644
+ setSelectedUsers([]);
517
645
  // eslint-disable-next-line
518
646
  }, [selectedEntries]);
519
647
  useEffect(function () {
@@ -526,15 +654,37 @@ var UserDropdown = function (_a) {
526
654
  useEffect(function () {
527
655
  return function () {
528
656
  requestInputChangeDebounce.cancel();
529
- resetIsUserTypingDebounce.cancel();
657
+ clearUserTypingTimeout();
530
658
  };
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]);
659
+ }, [clearUserTypingTimeout, requestInputChangeDebounce]);
660
+ useEffect(function () {
661
+ if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
662
+ collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
663
+ }, [isChipsCollapsable, selectedEntries]);
664
+ var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
665
+ 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 }))); }, [
666
+ hasNextPage,
667
+ isCharHintVisible,
668
+ isLoading,
669
+ isMenuShadowless,
670
+ isNextPageLoading,
671
+ isShowCatalogSearchButton,
672
+ isUserTyping,
673
+ language,
674
+ menuListMaxHeight,
675
+ onLoadNextPage,
676
+ onShowCatalogSearchButtonClick,
677
+ ]);
534
678
  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,
679
+ var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
680
+ 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]);
681
+ var setContainerNodeRef = function (ref) {
682
+ var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
683
+ setNodeRef(ref);
684
+ setDelimiterOffset(left);
685
+ };
686
+ 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: {
687
+ Input: InputComponent,
538
688
  MultiValueLabel: MultiValueLabelComponent,
539
689
  MultiValueRemove: MultiValueRemove,
540
690
  Option: OptionComponent,
@@ -543,7 +693,7 @@ var UserDropdown = function (_a) {
543
693
  LoadingIndicator: LoadingIndicator,
544
694
  MenuList: MenuListComponent,
545
695
  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 })] })));
696
+ } }), 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
697
  };
548
- export default UserDropdown;
698
+ export default memo(UserDropdown);
549
699
  //# sourceMappingURL=UserDropdown.js.map