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

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