@expressms/smartapp-ui 3.0.0-alpha.16 → 3.0.0-alpha.161
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/download.svg +3 -0
- 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 +87 -45
- package/build/main/constants/constants.js +127 -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 +16 -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 +18 -10
- package/build/main/hooks/useModal.js +199 -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/ActionModal/ActionModal.js +1 -1
- package/build/main//321/201omponents/ActionModal/ActionModal.js.map +1 -1
- package/build/main//321/201omponents/AttachedFile/AttachedFile.d.ts +1 -1
- package/build/main//321/201omponents/AttachedFile/AttachedFile.js +84 -26
- package/build/main//321/201omponents/AttachedFile/AttachedFile.js.map +1 -1
- package/build/main//321/201omponents/AttachedFile/types.d.ts +1 -0
- package/build/main//321/201omponents/Avatar/Avatar.d.ts +3 -2
- package/build/main//321/201omponents/Avatar/Avatar.js +53 -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 +238 -45
- package/build/main//321/201omponents/Calendar/Calendar.js.map +1 -1
- package/build/main//321/201omponents/Calendar/types.d.ts +22 -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 +200 -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 +12 -11
- 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 +15 -3
- 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 +86 -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 +199 -84
- package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
- package/build/main//321/201omponents/Modal/types.d.ts +37 -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 +12 -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 +7 -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 +282 -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,107 @@ 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
|
-
|
|
216
|
-
|
|
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 &&
|
|
252
|
-
|
|
347
|
+
if (isUserAlreadySelected && isSingleEmailEntered)
|
|
348
|
+
return;
|
|
253
349
|
else
|
|
254
|
-
handleInputChange(
|
|
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 ===
|
|
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,
|
|
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 !==
|
|
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
|
|
436
|
+
var checkIsContainsValue = function (_a) {
|
|
337
437
|
var label = _a.label, email = _a.email, value = _a.value;
|
|
338
|
-
|
|
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
|
|
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
|
|
375
|
-
var rowsToHide = yRows.slice(
|
|
376
|
-
var
|
|
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 ===
|
|
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
|
-
|
|
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 (
|
|
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 =
|
|
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,38 @@ var UserDropdown = function (_a) {
|
|
|
431
549
|
return;
|
|
432
550
|
}
|
|
433
551
|
else
|
|
434
|
-
(_a = handleAddUser(
|
|
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
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
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]);
|
|
580
|
+
var handleSelectFocus = useCallback(function () {
|
|
581
|
+
handleFocus();
|
|
582
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus();
|
|
583
|
+
}, [handleFocus, onFocus]);
|
|
447
584
|
var handleCloseModal = function () {
|
|
448
585
|
setModalData(null);
|
|
449
586
|
setIsSearchable(true);
|
|
@@ -472,14 +609,23 @@ var UserDropdown = function (_a) {
|
|
|
472
609
|
!userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
|
|
473
610
|
}, [userDropdownId]);
|
|
474
611
|
useLayoutEffect(function () {
|
|
475
|
-
if (
|
|
476
|
-
|
|
612
|
+
if (isChipsCollapsable && !isEmpty(chipLabelWithMaxWidth) && !isInputFocused.current) {
|
|
613
|
+
handleUnCollapseChips();
|
|
614
|
+
handleCollapseChips();
|
|
477
615
|
}
|
|
478
616
|
// eslint-disable-next-line
|
|
617
|
+
}, [hint]);
|
|
618
|
+
useLayoutEffect(function () {
|
|
619
|
+
if (userDropdownId)
|
|
620
|
+
setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
|
|
621
|
+
// eslint-disable-next-line
|
|
479
622
|
}, [isChipsCollapsable, userDropdownId]);
|
|
480
623
|
useEffect(function () {
|
|
481
624
|
setPaddingLeft(calculatePaddingLeft());
|
|
482
625
|
}, [mask]);
|
|
626
|
+
useEffect(function () {
|
|
627
|
+
setPaddingRight(calculatePaddingRight());
|
|
628
|
+
}, [suffix]);
|
|
483
629
|
useEffect(function () {
|
|
484
630
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
485
631
|
return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
|
|
@@ -488,7 +634,13 @@ var UserDropdown = function (_a) {
|
|
|
488
634
|
useEffect(function () {
|
|
489
635
|
if (!isEmpty(selectedEntries)) {
|
|
490
636
|
setSelectedUsers(selectedEntries.map(function (entity) {
|
|
491
|
-
var
|
|
637
|
+
var _a;
|
|
638
|
+
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;
|
|
639
|
+
var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
|
|
640
|
+
var _a;
|
|
641
|
+
(_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
|
|
642
|
+
isMobilePlatform(platform) && handleFocus(true);
|
|
643
|
+
} })); });
|
|
492
644
|
var commonFields = {
|
|
493
645
|
platform: platform,
|
|
494
646
|
layoutType: layoutType,
|
|
@@ -500,20 +652,28 @@ var UserDropdown = function (_a) {
|
|
|
500
652
|
isSelectedChipHasTooltip: isSelectedChipHasTooltip,
|
|
501
653
|
isLoading: isLoading,
|
|
502
654
|
isWarning: isWarning,
|
|
503
|
-
|
|
655
|
+
isOrganizerShort: isOrganizerShort,
|
|
504
656
|
userType: userType,
|
|
505
657
|
uid: uid,
|
|
658
|
+
organizerName: organizerName,
|
|
506
659
|
isInputFocused: isInputFocused,
|
|
507
660
|
selectRef: selectRef,
|
|
508
661
|
collapsableChipsCount: collapsableChipsCount,
|
|
509
662
|
lastVisibleChipIndex: lastVisibleChipIndex,
|
|
510
663
|
};
|
|
664
|
+
var isEntityContainsContacts = 'contacts' in entity;
|
|
511
665
|
var generatedNotCorporateEntity = Object.keys(entity).length === 1
|
|
512
|
-
? generateEnteredByUserOption(__assign({ email:
|
|
513
|
-
: generateContactsOption(__assign({ option: entity }, commonFields));
|
|
514
|
-
|
|
666
|
+
? generateEnteredByUserOption(__assign({ email: email }, commonFields))
|
|
667
|
+
: generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
|
|
668
|
+
if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
|
|
669
|
+
return generateCorporateOption(__assign({ option: entity }, commonFields));
|
|
670
|
+
return isEntityContainsContacts
|
|
671
|
+
? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
|
|
672
|
+
: generatedNotCorporateEntity;
|
|
515
673
|
}));
|
|
516
674
|
}
|
|
675
|
+
else
|
|
676
|
+
setSelectedUsers([]);
|
|
517
677
|
// eslint-disable-next-line
|
|
518
678
|
}, [selectedEntries]);
|
|
519
679
|
useEffect(function () {
|
|
@@ -526,15 +686,38 @@ var UserDropdown = function (_a) {
|
|
|
526
686
|
useEffect(function () {
|
|
527
687
|
return function () {
|
|
528
688
|
requestInputChangeDebounce.cancel();
|
|
529
|
-
|
|
689
|
+
clearUserTypingTimeout();
|
|
530
690
|
};
|
|
531
|
-
}, [
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
691
|
+
}, [clearUserTypingTimeout, requestInputChangeDebounce]);
|
|
692
|
+
useEffect(function () {
|
|
693
|
+
if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
|
|
694
|
+
collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
|
|
695
|
+
}, [isChipsCollapsable, selectedEntries]);
|
|
696
|
+
var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
|
|
697
|
+
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 }))); }, [
|
|
698
|
+
hasNextPage,
|
|
699
|
+
isCharHintVisible,
|
|
700
|
+
isLoading,
|
|
701
|
+
isMenuShadowless,
|
|
702
|
+
isNextPageLoading,
|
|
703
|
+
isShowCatalogSearchButton,
|
|
704
|
+
isUserTyping,
|
|
705
|
+
language,
|
|
706
|
+
menuListMaxHeight,
|
|
707
|
+
onLoadNextPage,
|
|
708
|
+
onShowCatalogSearchButtonClick,
|
|
709
|
+
platform,
|
|
710
|
+
]);
|
|
711
|
+
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 }) }))); };
|
|
712
|
+
var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
|
|
713
|
+
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]);
|
|
714
|
+
var setContainerNodeRef = function (ref) {
|
|
715
|
+
var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
|
|
716
|
+
setNodeRef(ref);
|
|
717
|
+
setDelimiterOffset(isShowCatalogSearchButton ? 0 : left);
|
|
718
|
+
};
|
|
719
|
+
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: handleSelectFocus, instanceId: userDropdownId, components: {
|
|
720
|
+
Input: InputComponent,
|
|
538
721
|
MultiValueLabel: MultiValueLabelComponent,
|
|
539
722
|
MultiValueRemove: MultiValueRemove,
|
|
540
723
|
Option: OptionComponent,
|
|
@@ -543,7 +726,9 @@ var UserDropdown = function (_a) {
|
|
|
543
726
|
LoadingIndicator: LoadingIndicator,
|
|
544
727
|
MenuList: MenuListComponent,
|
|
545
728
|
NoOptionsMessage: NoOptionsButton,
|
|
546
|
-
} })
|
|
729
|
+
} }), isMenuShadowless && isDelimiterVisible && (_jsx("div", { className: classNames('smartapp-user-dropdown__container--delimiter', {
|
|
730
|
+
'smartapp-user-dropdown__container--delimiter__with-catalog-search-btn': isShowCatalogSearchButton,
|
|
731
|
+
}), 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
732
|
};
|
|
548
|
-
export default UserDropdown;
|
|
733
|
+
export default memo(UserDropdown);
|
|
549
734
|
//# sourceMappingURL=UserDropdown.js.map
|