@expressms/smartapp-ui 3.0.0-alpha.14 → 3.0.0-alpha.140
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/main/assets/icons/accepted-invite-status.svg +4 -0
- package/build/main/assets/icons/calendar-arrow-next.svg +3 -0
- package/build/main/assets/icons/calendar-arrow-prev.svg +3 -0
- package/build/main/assets/icons/chevron.svg +3 -0
- package/build/main/assets/icons/close-modal.svg +1 -1
- package/build/main/assets/icons/declined-invite-status.svg +4 -0
- package/build/main/assets/icons/doc-small.svg +5 -5
- package/build/main/assets/icons/file-small.svg +5 -5
- package/build/main/assets/icons/file.svg +1 -1
- package/build/main/assets/icons/image-no-preview-small.svg +11 -0
- package/build/main/assets/icons/image-no-preview.svg +11 -0
- package/build/main/assets/icons/needs-action-invite-status.svg +4 -0
- package/build/main/assets/icons/notification-close.svg +1 -1
- package/build/main/assets/icons/notification-error.svg +5 -0
- package/build/main/assets/icons/notification-failure-filled.svg +3 -0
- package/build/main/assets/icons/notification-info-filled.svg +5 -0
- package/build/main/assets/icons/notification-success-filled.svg +4 -0
- package/build/main/assets/icons/pdf-small.svg +5 -5
- package/build/main/assets/icons/ppt-small.svg +5 -5
- package/build/main/assets/icons/search.svg +1 -1
- package/build/main/assets/icons/select-arrow-down.svg +3 -0
- package/build/main/assets/icons/select-arrow-up.svg +3 -0
- package/build/main/assets/icons/txt-small.svg +5 -5
- package/build/main/assets/icons/video-no-preview-small.svg +11 -0
- package/build/main/assets/icons/video-no-preview.svg +11 -0
- package/build/main/assets/icons/xls-small.svg +5 -5
- package/build/main/assets/storybook/index.d.ts +2 -0
- package/build/main/assets/storybook/index.js +2 -0
- package/build/main/assets/storybook/index.js.map +1 -1
- package/build/main/constants/constants.d.ts +86 -45
- package/build/main/constants/constants.js +123 -48
- package/build/main/constants/constants.js.map +1 -1
- package/build/main/constants/types.d.ts +11 -1
- package/build/main/helpers/index.d.ts +3 -1
- package/build/main/helpers/index.js +21 -2
- package/build/main/helpers/index.js.map +1 -1
- package/build/main/hooks/useCharHintDisplay.d.ts +9 -0
- package/build/main/hooks/useCharHintDisplay.js +35 -0
- package/build/main/hooks/useCharHintDisplay.js.map +1 -0
- package/build/main/hooks/useMobileLongTap.d.ts +17 -0
- package/build/main/hooks/useMobileLongTap.js +65 -0
- package/build/main/hooks/useMobileLongTap.js.map +1 -0
- package/build/main/hooks/useModal.d.ts +17 -10
- package/build/main/hooks/useModal.js +173 -12
- package/build/main/hooks/useModal.js.map +1 -1
- package/build/main/index.d.ts +2 -0
- package/build/main/index.js +2 -0
- package/build/main/index.js.map +1 -1
- package/build/main/styles/styles.scss +2 -2
- package/build/main//321/201omponents/AttachedFile/AttachedFile.js +37 -25
- package/build/main//321/201omponents/AttachedFile/AttachedFile.js.map +1 -1
- package/build/main//321/201omponents/Avatar/Avatar.d.ts +3 -2
- package/build/main//321/201omponents/Avatar/Avatar.js +52 -23
- package/build/main//321/201omponents/Avatar/Avatar.js.map +1 -1
- package/build/main//321/201omponents/Avatar/types.d.ts +9 -5
- package/build/main//321/201omponents/Avatar/types.js +5 -2
- package/build/main//321/201omponents/Avatar/types.js.map +1 -1
- package/build/main//321/201omponents/Button/Button.d.ts +1 -1
- package/build/main//321/201omponents/Button/Button.js +15 -8
- package/build/main//321/201omponents/Button/Button.js.map +1 -1
- package/build/main//321/201omponents/Button/types.d.ts +9 -2
- package/build/main//321/201omponents/Button/types.js +3 -0
- package/build/main//321/201omponents/Button/types.js.map +1 -1
- package/build/main//321/201omponents/Calendar/Calendar.d.ts +14 -2
- package/build/main//321/201omponents/Calendar/Calendar.js +203 -46
- package/build/main//321/201omponents/Calendar/Calendar.js.map +1 -1
- package/build/main//321/201omponents/Calendar/types.d.ts +20 -8
- package/build/main//321/201omponents/Charts/ChartBar/ChartBar.js +1 -1
- package/build/main//321/201omponents/Charts/ChartLine/ChartLine.js +1 -1
- package/build/main//321/201omponents/Charts/ChartPie/ChartPie.js +1 -1
- package/build/main//321/201omponents/Chip/Chip.d.ts +3 -2
- package/build/main//321/201omponents/Chip/Chip.js +198 -45
- package/build/main//321/201omponents/Chip/Chip.js.map +1 -1
- package/build/main//321/201omponents/Chip/types.d.ts +14 -4
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.d.ts +13 -0
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js +76 -0
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js.map +1 -0
- package/build/main//321/201omponents/ChipDndContext/index.d.ts +1 -0
- package/build/main//321/201omponents/ChipDndContext/index.js +2 -0
- package/build/main//321/201omponents/ChipDndContext/index.js.map +1 -0
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.d.ts +1 -1
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js +3 -2
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js.map +1 -1
- package/build/main//321/201omponents/ConfirmationModal/types.d.ts +5 -2
- package/build/main//321/201omponents/ContextMenu/ContextMenu.d.ts +1 -1
- package/build/main//321/201omponents/ContextMenu/ContextMenu.js +66 -26
- package/build/main//321/201omponents/ContextMenu/ContextMenu.js.map +1 -1
- package/build/main//321/201omponents/ContextMenu/types.d.ts +13 -7
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.d.ts +4 -0
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js +49 -0
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js.map +1 -0
- package/build/main//321/201omponents/ContextMenuItem/index.d.ts +1 -0
- package/build/main//321/201omponents/ContextMenuItem/index.js +2 -0
- package/build/main//321/201omponents/ContextMenuItem/index.js.map +1 -0
- package/build/main//321/201omponents/ContextMenuItem/types.d.ts +28 -0
- package/build/main//321/201omponents/ContextMenuItem/types.js +6 -0
- package/build/main//321/201omponents/ContextMenuItem/types.js.map +1 -0
- package/build/main//321/201omponents/CustomSelect/CustomSelect.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelect/CustomSelect.js +9 -8
- package/build/main//321/201omponents/CustomSelect/CustomSelect.js.map +1 -1
- package/build/main//321/201omponents/CustomSelect/selectStyles.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelect/selectStyles.js +21 -22
- package/build/main//321/201omponents/CustomSelect/selectStyles.js.map +1 -1
- package/build/main//321/201omponents/CustomSelect/types.d.ts +8 -2
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js +33 -24
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js.map +1 -1
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.d.ts +11 -0
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js +38 -0
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js.map +1 -0
- package/build/main//321/201omponents/CustomSelectProfiles/types.d.ts +4 -5
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.d.ts +1 -1
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js +24 -18
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js.map +1 -1
- package/build/main//321/201omponents/DraggablePopup/types.d.ts +8 -8
- package/build/main//321/201omponents/Flex/Flex.d.ts +1 -1
- package/build/main//321/201omponents/Flex/Flex.js +2 -2
- package/build/main//321/201omponents/Flex/Flex.js.map +1 -1
- package/build/main//321/201omponents/Flex/types.d.ts +2 -0
- package/build/main//321/201omponents/Input/Input.d.ts +1 -1
- package/build/main//321/201omponents/Input/Input.js +75 -33
- package/build/main//321/201omponents/Input/Input.js.map +1 -1
- package/build/main//321/201omponents/Input/types.d.ts +10 -3
- package/build/main//321/201omponents/ListItem/ListItem.js +21 -10
- package/build/main//321/201omponents/ListItem/ListItem.js.map +1 -1
- package/build/main//321/201omponents/ListItem/types.d.ts +7 -2
- package/build/main//321/201omponents/Modal/Modal.d.ts +3 -2
- package/build/main//321/201omponents/Modal/Modal.js +167 -71
- package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
- package/build/main//321/201omponents/Modal/types.d.ts +34 -2
- package/build/main//321/201omponents/Notification/Notification.d.ts +4 -6
- package/build/main//321/201omponents/Notification/Notification.js +72 -25
- package/build/main//321/201omponents/Notification/Notification.js.map +1 -1
- package/build/main//321/201omponents/Notification/types.d.ts +17 -2
- package/build/main//321/201omponents/Skeleton/Skeleton.js +1 -1
- package/build/main//321/201omponents/Skeleton/Skeleton.js.map +1 -1
- package/build/main//321/201omponents/Stories/Stories.js +72 -4
- package/build/main//321/201omponents/Stories/Stories.js.map +1 -1
- package/build/main//321/201omponents/Textarea/Textarea.d.ts +1 -1
- package/build/main//321/201omponents/Textarea/Textarea.js +2 -2
- package/build/main//321/201omponents/Textarea/Textarea.js.map +1 -1
- package/build/main//321/201omponents/Textarea/types.d.ts +2 -2
- package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js +6 -0
- package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.d.ts +2 -1
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js +4 -3
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js +34 -58
- package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.d.ts +3 -2
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js +34 -37
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/Option/Option.js +2 -2
- package/build/main//321/201omponents/UserDropdown/Option/Option.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.d.ts +1 -1
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js +6 -9
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/UserDropdown.d.ts +5 -3
- package/build/main//321/201omponents/UserDropdown/UserDropdown.js +268 -97
- package/build/main//321/201omponents/UserDropdown/UserDropdown.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/helpers.d.ts +10 -4
- package/build/main//321/201omponents/UserDropdown/helpers.js +6 -4
- package/build/main//321/201omponents/UserDropdown/helpers.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/selectStyles.d.ts +1 -1
- package/build/main//321/201omponents/UserDropdown/selectStyles.js +49 -26
- package/build/main//321/201omponents/UserDropdown/selectStyles.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/types.d.ts +100 -57
- package/build/main//321/201omponents/UserDropdown/types.js.map +1 -1
- package/package.json +11 -7
- package/build/main/assets/icons/avatar-arrow-down.svg +0 -3
- package/build/main/assets/icons/avatar-arrow-up.svg +0 -3
- package/build/main/hooks/useLongTap.d.ts +0 -12
- package/build/main/hooks/useLongTap.js +0 -29
- 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
|
-
|
|
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) {
|
|
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
|
|
86
|
-
var _y =
|
|
87
|
-
var
|
|
88
|
-
var
|
|
89
|
-
var
|
|
90
|
-
var
|
|
91
|
-
var
|
|
92
|
-
var
|
|
93
|
-
var
|
|
94
|
-
var
|
|
95
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
171
|
+
isInputPlaceholderVisible: isInputPlaceholderVisible,
|
|
122
172
|
lastRowNumber: isChipsVisible ? Math.ceil(selectedUsersLength / 2) + 1 : 1,
|
|
123
173
|
paddingLeft: paddingLeft,
|
|
174
|
+
paddingRight: !isChipsVisible && !isEmpty(inputValue) ? PADDING_WITH_CLEAR_ICON : paddingRight,
|
|
124
175
|
platform: platform,
|
|
125
176
|
layoutType: layoutType,
|
|
126
177
|
isInputHidden: isInputHidden,
|
|
127
178
|
isDisabledMenuOffsetAtFullscreen: isDisabledMenuOffsetAtFullscreen,
|
|
179
|
+
isInputFocused: isInputFocused.current,
|
|
128
180
|
isMaskRepresented: !isEmpty(mask),
|
|
181
|
+
isSuffixRepresented: !isNil(suffix),
|
|
182
|
+
isMenuShadowless: isMenuShadowless,
|
|
183
|
+
isShowCatalogSearchButton: isShowCatalogSearchButton,
|
|
129
184
|
fontFamilyStyle: fontFamilyStyle,
|
|
130
185
|
containerPadding: containerPadding,
|
|
186
|
+
isDraggable: isDraggable,
|
|
187
|
+
isChipsCollapsed: isChipsCollapsable && !isInputFocused.current,
|
|
188
|
+
menuListMaxHeight: menuListMaxHeight,
|
|
189
|
+
maxRowsCountToCollapseChips: maxRowsCountToCollapseChips,
|
|
190
|
+
isError: isError,
|
|
131
191
|
});
|
|
132
192
|
};
|
|
133
193
|
var generateNoOptionsMessage = function (_a) {
|
|
@@ -152,71 +212,104 @@ var UserDropdown = function (_a) {
|
|
|
152
212
|
collapsableChipsCount: collapsableChipsCount,
|
|
153
213
|
lastVisibleChipIndex: lastVisibleChipIndex,
|
|
154
214
|
};
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
})
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
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
|
-
|
|
186
|
-
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,
|
|
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
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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 (
|
|
215
|
-
if (needToShowError === void 0) { needToShowError = true; }
|
|
308
|
+
var handleAddUser = function () {
|
|
216
309
|
var props = selectRef.current.props;
|
|
217
|
-
var options = props.options,
|
|
310
|
+
var options = props.options, onChange = props.onChange;
|
|
218
311
|
if (isEmpty(inputValue))
|
|
219
|
-
return;
|
|
312
|
+
return Promise.resolve();
|
|
220
313
|
var trimInputValue = inputValue.trim();
|
|
221
314
|
var optionProps = {
|
|
222
315
|
platform: platform,
|
|
@@ -248,10 +341,10 @@ var UserDropdown = function (_a) {
|
|
|
248
341
|
return email === inputEmail;
|
|
249
342
|
});
|
|
250
343
|
enteredUsers.push(existingUser || generateEnteredByUserOption(__assign(__assign({}, optionProps), { email: inputEmail })));
|
|
251
|
-
if (isUserAlreadySelected &&
|
|
252
|
-
|
|
344
|
+
if (isUserAlreadySelected && isSingleEmailEntered)
|
|
345
|
+
return;
|
|
253
346
|
else
|
|
254
|
-
handleInputChange(
|
|
347
|
+
handleInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
|
|
255
348
|
}
|
|
256
349
|
!isValueIsEmail && incorrectEmails.push(inputEmail);
|
|
257
350
|
});
|
|
@@ -265,7 +358,7 @@ var UserDropdown = function (_a) {
|
|
|
265
358
|
var isEnterPressed = code === ENTER_KEY || key === ENTER_KEY;
|
|
266
359
|
var isBackspacePressed = code === BACKSPACE_KEY || key === BACKSPACE_KEY;
|
|
267
360
|
var isSpacePressed = code === SPACE_KEY;
|
|
268
|
-
var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue ===
|
|
361
|
+
var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === EMPTY_STRING && !isEmpty(selectedUsers);
|
|
269
362
|
if (isEnterPressed) {
|
|
270
363
|
event.preventDefault();
|
|
271
364
|
(_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { });
|
|
@@ -291,25 +384,29 @@ var UserDropdown = function (_a) {
|
|
|
291
384
|
(_c = (_b = selectRef.current) === null || _b === void 0 ? void 0 : _b.onMenuOpen) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
292
385
|
}
|
|
293
386
|
};
|
|
294
|
-
var transformCurrentChipToInputValue = function (label,
|
|
387
|
+
var transformCurrentChipToInputValue = useCallback(function (label, value) {
|
|
295
388
|
var _a, _b;
|
|
296
389
|
skipAddUserToChipsOnNextBlurRef.current = true;
|
|
297
390
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
298
391
|
var nextSelectedUsers = prevSelectedUsers.filter(function (_a) {
|
|
299
|
-
var userEmail = _a.email;
|
|
300
|
-
return userEmail !==
|
|
392
|
+
var userEmail = _a.email, userType = _a.userType, userUid = _a.uid;
|
|
393
|
+
return checkIfContactTypeIsGroup(userType) ? userUid !== value : userEmail !== value;
|
|
301
394
|
});
|
|
302
395
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextSelectedUsers.map(function (userData) { return omit(userData, COMMON_FIELDS_TO_OMIT); }));
|
|
303
396
|
return nextSelectedUsers;
|
|
304
397
|
});
|
|
398
|
+
handleFocus();
|
|
305
399
|
setInputValue(label);
|
|
306
400
|
onInputChange(label);
|
|
307
401
|
handleInputChange(label);
|
|
308
402
|
onMenuOpen === null || onMenuOpen === void 0 ? void 0 : onMenuOpen();
|
|
309
403
|
(_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.onMenuOpen) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
310
|
-
|
|
404
|
+
setIsUserTyping(false);
|
|
405
|
+
},
|
|
406
|
+
// eslint-disable-next-line
|
|
407
|
+
[onInputChange, handleInputChange, onMenuOpen, onChange]);
|
|
311
408
|
var handleChange = function (newSelectedUsers) {
|
|
312
|
-
var uniqNewSelectedUsers = uniqBy(newSelectedUsers, EMAIL_FIELD);
|
|
409
|
+
var uniqNewSelectedUsers = isDisabledCheckUniqueEmails ? newSelectedUsers : uniqBy(newSelectedUsers, EMAIL_FIELD);
|
|
313
410
|
var users = [];
|
|
314
411
|
var deletedUser = selectedUsers.find(function (_a) {
|
|
315
412
|
var value = _a.value;
|
|
@@ -333,9 +430,11 @@ var UserDropdown = function (_a) {
|
|
|
333
430
|
if (!isInputFocused.current && isChipsCollapsable)
|
|
334
431
|
handleFocus();
|
|
335
432
|
};
|
|
336
|
-
var
|
|
433
|
+
var checkIsContainsValue = function (_a) {
|
|
337
434
|
var label = _a.label, email = _a.email, value = _a.value;
|
|
338
|
-
|
|
435
|
+
var _b = label.split(SPACE), name = _b[0], surname = _b[1];
|
|
436
|
+
var reversedLabel = "".concat(surname).concat(SPACE).concat(name);
|
|
437
|
+
return label.toLowerCase().includes(value) || reversedLabel.toLowerCase().includes(value) || email.toLowerCase().includes(value);
|
|
339
438
|
};
|
|
340
439
|
var handleFilterOption = function (_a, inputValue) {
|
|
341
440
|
var _b = _a.data, label = _b.label, optionEmail = _b.email;
|
|
@@ -348,7 +447,7 @@ var UserDropdown = function (_a) {
|
|
|
348
447
|
return email === optionEmail;
|
|
349
448
|
});
|
|
350
449
|
var isContainsInputValue = [originInputValue, transliteratedInputValue, toEngInputValue, fromEngInputValue].some(function (value) {
|
|
351
|
-
return
|
|
450
|
+
return checkIsContainsValue({ label: label, email: optionEmail, value: value });
|
|
352
451
|
});
|
|
353
452
|
if (isFilteringDisabled)
|
|
354
453
|
return !isEmpty(selectedUsers) ? !isUserAlreadySelected : true;
|
|
@@ -365,46 +464,49 @@ var UserDropdown = function (_a) {
|
|
|
365
464
|
var handleCollapseChips = function () {
|
|
366
465
|
var _a, _b;
|
|
367
466
|
var collapsableChips = 0;
|
|
368
|
-
var chipLabelWithMaxWidth =
|
|
467
|
+
var chipLabelWithMaxWidth = EMPTY_STRING;
|
|
369
468
|
var chipsNodes = ((_a = document.querySelector("#".concat(userDropdownId))) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.smartapp-chip')) || [];
|
|
370
469
|
var chips = Array.from(chipsNodes);
|
|
371
470
|
if (isEmpty(chips))
|
|
372
471
|
return;
|
|
373
472
|
var yRows = uniq(chips.map(function (chip) { return generateTruncatedElementY(chip); }));
|
|
374
|
-
var
|
|
375
|
-
var rowsToHide = yRows.slice(
|
|
376
|
-
var
|
|
473
|
+
var yLastRow = yRows[maxRowsCountToCollapseChips - 1];
|
|
474
|
+
var rowsToHide = yRows.slice(maxRowsCountToCollapseChips);
|
|
475
|
+
var lastRow = [];
|
|
377
476
|
chips.forEach(function (chip) {
|
|
378
477
|
var y = generateTruncatedElementY(chip);
|
|
379
478
|
if (rowsToHide.includes(y)) {
|
|
380
479
|
collapsableChips += 1;
|
|
381
480
|
}
|
|
382
481
|
else {
|
|
383
|
-
y ===
|
|
482
|
+
y === yLastRow && lastRow.push(chip);
|
|
384
483
|
}
|
|
385
484
|
});
|
|
386
485
|
var counterWidth = calculateCounterWidth(collapsableChips);
|
|
387
486
|
var rowWidth = counterWidth + INPUT_SPACE_WIDTH;
|
|
388
|
-
var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth;
|
|
389
|
-
|
|
487
|
+
var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth - suffixWidth;
|
|
488
|
+
lastRow.forEach(function (chip) {
|
|
390
489
|
var _a;
|
|
391
490
|
rowWidth += chip.getBoundingClientRect().width + GAP;
|
|
392
491
|
if (rowWidth > dropdownWidth) {
|
|
393
|
-
if (
|
|
492
|
+
if (lastRow.length > 1) {
|
|
394
493
|
collapsableChips += 1;
|
|
395
494
|
}
|
|
396
495
|
else {
|
|
397
496
|
var emptySpaceWidth = collapsableChips > 0 ? counterWidth + INPUT_SPACE_WIDTH + GAP : INPUT_SPACE_WIDTH;
|
|
398
497
|
chip.style.maxWidth = "".concat(dropdownWidth - emptySpaceWidth, "px");
|
|
399
|
-
chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) ||
|
|
498
|
+
chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
|
|
400
499
|
}
|
|
401
500
|
}
|
|
402
501
|
});
|
|
502
|
+
var visibleChipsCurrentCount = chips.length - collapsableChips;
|
|
503
|
+
isNeedCheckChipCollapsableCount.current = true;
|
|
504
|
+
visibleChipsCount.current = visibleChipsCurrentCount;
|
|
403
505
|
collapsableChipsCount.current = collapsableChips;
|
|
404
|
-
lastVisibleChipIndex.current =
|
|
506
|
+
lastVisibleChipIndex.current = visibleChipsCurrentCount;
|
|
405
507
|
setChipLabelWithMaxWidth(chipLabelWithMaxWidth || generateId());
|
|
406
508
|
};
|
|
407
|
-
var handleUnCollapseChips = function () {
|
|
509
|
+
var handleUnCollapseChips = useCallback(function () {
|
|
408
510
|
var _a;
|
|
409
511
|
if (!userDropdownId)
|
|
410
512
|
return;
|
|
@@ -412,16 +514,29 @@ var UserDropdown = function (_a) {
|
|
|
412
514
|
var chips = Array.from(chipsNodes);
|
|
413
515
|
chips.forEach(function (chip) {
|
|
414
516
|
var _a;
|
|
415
|
-
var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) ||
|
|
517
|
+
var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
|
|
416
518
|
chipLabel === chipLabelWithMaxWidth && (chip.style.maxWidth = '100%');
|
|
417
519
|
});
|
|
520
|
+
isNeedCheckChipCollapsableCount.current = false;
|
|
521
|
+
visibleChipsCount.current = chips.length;
|
|
418
522
|
collapsableChipsCount.current = 0;
|
|
419
523
|
lastVisibleChipIndex.current = -1;
|
|
420
|
-
setChipLabelWithMaxWidth(
|
|
524
|
+
setChipLabelWithMaxWidth(EMPTY_STRING);
|
|
525
|
+
}, [chipLabelWithMaxWidth, userDropdownId]);
|
|
526
|
+
var handleDragBlur = function (isDisableCheckFocused) {
|
|
527
|
+
var _a;
|
|
528
|
+
if (!isInputFocused.current && !isDisableCheckFocused)
|
|
529
|
+
return;
|
|
530
|
+
if (selectRef.current)
|
|
531
|
+
selectRef.current._preventBlur = false;
|
|
532
|
+
(_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
421
533
|
};
|
|
422
534
|
var handleBlur = function () {
|
|
423
535
|
var _a;
|
|
424
536
|
var shouldSkipAddUserToChipsOnNextBlur = skipAddUserToChipsOnNextBlurRef.current;
|
|
537
|
+
var _b = selectRef.current || {}, _preventBlur = _b._preventBlur, _contextMenuOpen = _b._contextMenuOpen, _isDragging = _b._isDragging;
|
|
538
|
+
if (_preventBlur || _contextMenuOpen || _isDragging || skipAddUserToChipsOnNextBlurRef.current)
|
|
539
|
+
return;
|
|
425
540
|
var onBlurComplete = function () {
|
|
426
541
|
isChipsCollapsable && handleCollapseChips();
|
|
427
542
|
isInputFocused.current = false;
|
|
@@ -431,19 +546,34 @@ var UserDropdown = function (_a) {
|
|
|
431
546
|
return;
|
|
432
547
|
}
|
|
433
548
|
else
|
|
434
|
-
(_a = handleAddUser(
|
|
549
|
+
(_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { return requestAnimationFrame(function () { return requestAnimationFrame(function () { return onBlurComplete(); }); }); });
|
|
435
550
|
skipAddUserToChipsOnNextBlurRef.current = false;
|
|
436
551
|
};
|
|
437
|
-
var
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
552
|
+
var handleSelectBlur = function () {
|
|
553
|
+
setPlaceholderValue(placeholder);
|
|
554
|
+
setTimeout(handleBlur, RENDER_DELAY);
|
|
555
|
+
};
|
|
556
|
+
var focusInputIOS = useCallback(function (input) {
|
|
557
|
+
var length = input.value.length;
|
|
558
|
+
requestAnimationFrame(function () {
|
|
559
|
+
input.focus();
|
|
560
|
+
input.value === EMPTY_STRING ? setCaretInEmptyInput(input) : setCaretPosition(input, length);
|
|
561
|
+
});
|
|
562
|
+
}, []);
|
|
563
|
+
var handleFocus = useCallback(function (isDisableCheckFocused) {
|
|
564
|
+
setPlaceholderValue(SEARCH_PLACEHOLDER[language]);
|
|
565
|
+
if (isInputFocused.current && !isDisableCheckFocused)
|
|
566
|
+
return;
|
|
444
567
|
isInputFocused.current = true;
|
|
568
|
+
var selectRefCurrent = selectRef.current;
|
|
569
|
+
var _a = selectRefCurrent || {}, _preventBlur = _a._preventBlur, inputRef = _a.inputRef;
|
|
570
|
+
setTimeout(function () {
|
|
571
|
+
if (selectRefCurrent && !_preventBlur)
|
|
572
|
+
isIosPlatform(platform) && inputRef ? focusInputIOS(inputRef) : selectRefCurrent.focus();
|
|
573
|
+
}, RENDER_DELAY);
|
|
445
574
|
isChipsCollapsable && handleUnCollapseChips();
|
|
446
|
-
};
|
|
575
|
+
}, [language, isChipsCollapsable, handleUnCollapseChips, platform, focusInputIOS]);
|
|
576
|
+
var handleForceFocus = useCallback(function () { return setTimeout(function () { return handleFocus(true); }, RENDER_DELAY); }, [handleFocus]);
|
|
447
577
|
var handleCloseModal = function () {
|
|
448
578
|
setModalData(null);
|
|
449
579
|
setIsSearchable(true);
|
|
@@ -472,14 +602,16 @@ var UserDropdown = function (_a) {
|
|
|
472
602
|
!userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
|
|
473
603
|
}, [userDropdownId]);
|
|
474
604
|
useLayoutEffect(function () {
|
|
475
|
-
if (userDropdownId)
|
|
476
|
-
isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips();
|
|
477
|
-
}
|
|
605
|
+
if (userDropdownId)
|
|
606
|
+
setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
|
|
478
607
|
// eslint-disable-next-line
|
|
479
608
|
}, [isChipsCollapsable, userDropdownId]);
|
|
480
609
|
useEffect(function () {
|
|
481
610
|
setPaddingLeft(calculatePaddingLeft());
|
|
482
611
|
}, [mask]);
|
|
612
|
+
useEffect(function () {
|
|
613
|
+
setPaddingRight(calculatePaddingRight());
|
|
614
|
+
}, [suffix]);
|
|
483
615
|
useEffect(function () {
|
|
484
616
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
485
617
|
return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
|
|
@@ -488,7 +620,13 @@ var UserDropdown = function (_a) {
|
|
|
488
620
|
useEffect(function () {
|
|
489
621
|
if (!isEmpty(selectedEntries)) {
|
|
490
622
|
setSelectedUsers(selectedEntries.map(function (entity) {
|
|
491
|
-
var
|
|
623
|
+
var _a;
|
|
624
|
+
var isWarning = entity.isWarning, isLoading = entity.isLoading, isOrganizerShort = entity.isOrganizerShort, isResetChipsToInputValue = entity.isResetChipsToInputValue, userType = entity.userType, currentContextItems = entity.contextMenuItems, uid = entity.uid, organizerName = entity.organizerName, email = entity.email;
|
|
625
|
+
var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
|
|
626
|
+
var _a;
|
|
627
|
+
(_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
|
|
628
|
+
isMobilePlatform(platform) && handleFocus(true);
|
|
629
|
+
} })); });
|
|
492
630
|
var commonFields = {
|
|
493
631
|
platform: platform,
|
|
494
632
|
layoutType: layoutType,
|
|
@@ -500,20 +638,28 @@ var UserDropdown = function (_a) {
|
|
|
500
638
|
isSelectedChipHasTooltip: isSelectedChipHasTooltip,
|
|
501
639
|
isLoading: isLoading,
|
|
502
640
|
isWarning: isWarning,
|
|
503
|
-
|
|
641
|
+
isOrganizerShort: isOrganizerShort,
|
|
504
642
|
userType: userType,
|
|
505
643
|
uid: uid,
|
|
644
|
+
organizerName: organizerName,
|
|
506
645
|
isInputFocused: isInputFocused,
|
|
507
646
|
selectRef: selectRef,
|
|
508
647
|
collapsableChipsCount: collapsableChipsCount,
|
|
509
648
|
lastVisibleChipIndex: lastVisibleChipIndex,
|
|
510
649
|
};
|
|
650
|
+
var isEntityContainsContacts = 'contacts' in entity;
|
|
511
651
|
var generatedNotCorporateEntity = Object.keys(entity).length === 1
|
|
512
|
-
? generateEnteredByUserOption(__assign({ email:
|
|
513
|
-
: generateContactsOption(__assign({ option: entity }, commonFields));
|
|
514
|
-
|
|
652
|
+
? generateEnteredByUserOption(__assign({ email: email }, commonFields))
|
|
653
|
+
: generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
|
|
654
|
+
if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
|
|
655
|
+
return generateCorporateOption(__assign({ option: entity }, commonFields));
|
|
656
|
+
return isEntityContainsContacts
|
|
657
|
+
? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
|
|
658
|
+
: generatedNotCorporateEntity;
|
|
515
659
|
}));
|
|
516
660
|
}
|
|
661
|
+
else
|
|
662
|
+
setSelectedUsers([]);
|
|
517
663
|
// eslint-disable-next-line
|
|
518
664
|
}, [selectedEntries]);
|
|
519
665
|
useEffect(function () {
|
|
@@ -526,15 +672,38 @@ var UserDropdown = function (_a) {
|
|
|
526
672
|
useEffect(function () {
|
|
527
673
|
return function () {
|
|
528
674
|
requestInputChangeDebounce.cancel();
|
|
529
|
-
|
|
675
|
+
clearUserTypingTimeout();
|
|
530
676
|
};
|
|
531
|
-
}, [
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
677
|
+
}, [clearUserTypingTimeout, requestInputChangeDebounce]);
|
|
678
|
+
useEffect(function () {
|
|
679
|
+
if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
|
|
680
|
+
collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
|
|
681
|
+
}, [isChipsCollapsable, selectedEntries]);
|
|
682
|
+
var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
|
|
683
|
+
var MenuListComponent = useCallback(function (props) { return (_jsx(MenuList, __assign({}, props, { children: props.children, selectRef: selectRef, scrollFromTop: menuScrollFromTop, language: language, platform: platform, menuListMaxHeight: menuListMaxHeight, hasNextPage: hasNextPage, isLoading: isLoading, isShowCatalogSearchButton: isShowCatalogSearchButton, onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick, isUserTyping: isUserTyping, isCharHintVisible: isCharHintVisible, isMenuShadowless: isMenuShadowless, isNextPageLoading: isNextPageLoading, onLoadNextPage: function (inputValue) { return onLoadNextPage === null || onLoadNextPage === void 0 ? void 0 : onLoadNextPage(inputValue); }, setIsDelimiterVisible: setIsDelimiterVisible }))); }, [
|
|
684
|
+
hasNextPage,
|
|
685
|
+
isCharHintVisible,
|
|
686
|
+
isLoading,
|
|
687
|
+
isMenuShadowless,
|
|
688
|
+
isNextPageLoading,
|
|
689
|
+
isShowCatalogSearchButton,
|
|
690
|
+
isUserTyping,
|
|
691
|
+
language,
|
|
692
|
+
menuListMaxHeight,
|
|
693
|
+
onLoadNextPage,
|
|
694
|
+
onShowCatalogSearchButtonClick,
|
|
695
|
+
platform,
|
|
696
|
+
]);
|
|
697
|
+
var NoOptionsButton = function (props) { return (_jsx(components.NoOptionsMessage, __assign({}, props, { children: _jsx(SearchInCatalogButton, { language: language, isOnlyButtonInList: true, isMenuShadowless: isMenuShadowless, noOptionText: isShowCatalogSearchButton ? undefined : generateNoOptionsMessage({ inputValue: inputValue }), onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick }) }))); };
|
|
698
|
+
var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
|
|
699
|
+
var MultiValueLabelComponent = useCallback(function (props) { return (_jsx(MultiValueLabel, __assign({}, props, { platform: platform, isChipsOutline: isChipsOutline, transformCurrentChipToInputValue: transformCurrentChipToInputValue, handleBlurDropdown: function () { return handleDragBlur(true); }, handleRequestFocus: handleForceFocus }))); }, [platform, isChipsOutline, transformCurrentChipToInputValue, handleForceFocus]);
|
|
700
|
+
var setContainerNodeRef = function (ref) {
|
|
701
|
+
var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
|
|
702
|
+
setNodeRef(ref);
|
|
703
|
+
setDelimiterOffset(isShowCatalogSearchButton ? 0 : left);
|
|
704
|
+
};
|
|
705
|
+
return (_jsxs("div", __assign({ id: userDropdownId, className: classNames('smartapp-user-dropdown', containerClassName), style: __assign(__assign({}, fontFamilyStyle), containerStyles) }, { children: [renderTitle(), _jsxs("div", __assign({ className: "smartapp-user-dropdown__container", ref: setContainerNodeRef }, { children: [renderMask(), _jsx(Select, { ref: selectRef, menuIsOpen: isInputHidden ? !!externalInputValue : undefined, menuPortalTarget: menuPortalTarget === null || menuPortalTarget === void 0 ? void 0 : menuPortalTarget.current, isMulti: true, openMenuOnFocus: true, blurInputOnSelect: false, captureMenuScroll: false, isSearchable: isSearchable, menuPlacement: menuPosition, menuPosition: menuLocation, controlShouldRenderValue: isChipsVisible, backspaceRemovesValue: isChipsVisible, isDisabled: isDisabled, closeMenuOnSelect: isMenuCloseOnSelect, isLoading: isLoading || isUserTyping, isClearable: false, styles: generateStyles(), placeholder: placeholderValue, noOptionsMessage: generateNoOptionsMessage, loadingMessage: function () { return _jsx(LoadingMessage, { isMenuShadowless: isMenuShadowless, skeletonRowsCount: skeletonRowsCount }); }, value: selectedUsers, inputValue: inputValue, options: !isNull(corporateEntries) || !isNull(myContactsEntries) ? generateOptions() : undefined, filterOption: handleFilterOption, onInputChange: handleInputChange, onChange: handleChange, onMenuClose: handleMenuClose, onMenuOpen: onMenuOpen, onKeyDown: handleKeyDown, onBlur: handleSelectBlur, autoFocus: autoFocus, onFocus: function () { return (onFocus ? onFocus() : handleFocus()); }, instanceId: userDropdownId, components: {
|
|
706
|
+
Input: InputComponent,
|
|
538
707
|
MultiValueLabel: MultiValueLabelComponent,
|
|
539
708
|
MultiValueRemove: MultiValueRemove,
|
|
540
709
|
Option: OptionComponent,
|
|
@@ -543,7 +712,9 @@ var UserDropdown = function (_a) {
|
|
|
543
712
|
LoadingIndicator: LoadingIndicator,
|
|
544
713
|
MenuList: MenuListComponent,
|
|
545
714
|
NoOptionsMessage: NoOptionsButton,
|
|
546
|
-
} })
|
|
715
|
+
} }), isMenuShadowless && isDelimiterVisible && (_jsx("div", { className: classNames('smartapp-user-dropdown__container--delimiter', {
|
|
716
|
+
'smartapp-user-dropdown__container--delimiter__with-catalog-search-btn': isShowCatalogSearchButton,
|
|
717
|
+
}), style: { '--delimiter-offset': "-".concat(delimiterOffset, "px") } }))] })), renderHint(), _jsx(Modal, { isModalOpen: !isNull(modalData), platform: platform, fontFamily: fontFamily, content: modalContent, isBottomSheet: isMobilePlatform(platform), backgroundColor: "var(--color-bg-blackout-transparent)", handleCloseModal: handleCloseModal })] })));
|
|
547
718
|
};
|
|
548
|
-
export default UserDropdown;
|
|
719
|
+
export default memo(UserDropdown);
|
|
549
720
|
//# sourceMappingURL=UserDropdown.js.map
|