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