@expressms/smartapp-ui 3.0.0-alpha.14 → 3.0.0-alpha.141
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/main/assets/icons/accepted-invite-status.svg +4 -0
- package/build/main/assets/icons/calendar-arrow-next.svg +3 -0
- package/build/main/assets/icons/calendar-arrow-prev.svg +3 -0
- package/build/main/assets/icons/chevron.svg +3 -0
- package/build/main/assets/icons/close-modal.svg +1 -1
- package/build/main/assets/icons/declined-invite-status.svg +4 -0
- package/build/main/assets/icons/doc-small.svg +5 -5
- package/build/main/assets/icons/file-small.svg +5 -5
- package/build/main/assets/icons/file.svg +1 -1
- package/build/main/assets/icons/image-no-preview-small.svg +11 -0
- package/build/main/assets/icons/image-no-preview.svg +11 -0
- package/build/main/assets/icons/needs-action-invite-status.svg +4 -0
- package/build/main/assets/icons/notification-close.svg +1 -1
- package/build/main/assets/icons/notification-error.svg +5 -0
- package/build/main/assets/icons/notification-failure-filled.svg +3 -0
- package/build/main/assets/icons/notification-info-filled.svg +5 -0
- package/build/main/assets/icons/notification-success-filled.svg +4 -0
- package/build/main/assets/icons/pdf-small.svg +5 -5
- package/build/main/assets/icons/ppt-small.svg +5 -5
- package/build/main/assets/icons/search.svg +1 -1
- package/build/main/assets/icons/select-arrow-down.svg +3 -0
- package/build/main/assets/icons/select-arrow-up.svg +3 -0
- package/build/main/assets/icons/txt-small.svg +5 -5
- package/build/main/assets/icons/video-no-preview-small.svg +11 -0
- package/build/main/assets/icons/video-no-preview.svg +11 -0
- package/build/main/assets/icons/xls-small.svg +5 -5
- package/build/main/assets/storybook/index.d.ts +2 -0
- package/build/main/assets/storybook/index.js +2 -0
- package/build/main/assets/storybook/index.js.map +1 -1
- package/build/main/constants/constants.d.ts +86 -45
- package/build/main/constants/constants.js +123 -48
- package/build/main/constants/constants.js.map +1 -1
- package/build/main/constants/types.d.ts +11 -1
- package/build/main/helpers/index.d.ts +3 -1
- package/build/main/helpers/index.js +21 -2
- package/build/main/helpers/index.js.map +1 -1
- package/build/main/hooks/useCharHintDisplay.d.ts +9 -0
- package/build/main/hooks/useCharHintDisplay.js +35 -0
- package/build/main/hooks/useCharHintDisplay.js.map +1 -0
- package/build/main/hooks/useMobileLongTap.d.ts +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 +37 -25
- package/build/main//321/201omponents/AttachedFile/AttachedFile.js.map +1 -1
- package/build/main//321/201omponents/Avatar/Avatar.d.ts +3 -2
- package/build/main//321/201omponents/Avatar/Avatar.js +52 -23
- package/build/main//321/201omponents/Avatar/Avatar.js.map +1 -1
- package/build/main//321/201omponents/Avatar/types.d.ts +9 -5
- package/build/main//321/201omponents/Avatar/types.js +5 -2
- package/build/main//321/201omponents/Avatar/types.js.map +1 -1
- package/build/main//321/201omponents/Button/Button.d.ts +1 -1
- package/build/main//321/201omponents/Button/Button.js +15 -8
- package/build/main//321/201omponents/Button/Button.js.map +1 -1
- package/build/main//321/201omponents/Button/types.d.ts +9 -2
- package/build/main//321/201omponents/Button/types.js +3 -0
- package/build/main//321/201omponents/Button/types.js.map +1 -1
- package/build/main//321/201omponents/Calendar/Calendar.d.ts +14 -2
- package/build/main//321/201omponents/Calendar/Calendar.js +203 -46
- package/build/main//321/201omponents/Calendar/Calendar.js.map +1 -1
- package/build/main//321/201omponents/Calendar/types.d.ts +20 -8
- package/build/main//321/201omponents/Charts/ChartBar/ChartBar.js +1 -1
- package/build/main//321/201omponents/Charts/ChartLine/ChartLine.js +1 -1
- package/build/main//321/201omponents/Charts/ChartPie/ChartPie.js +1 -1
- package/build/main//321/201omponents/Chip/Chip.d.ts +3 -2
- package/build/main//321/201omponents/Chip/Chip.js +198 -45
- package/build/main//321/201omponents/Chip/Chip.js.map +1 -1
- package/build/main//321/201omponents/Chip/types.d.ts +14 -4
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.d.ts +13 -0
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js +76 -0
- package/build/main//321/201omponents/ChipDndContext/ChipDndContext.js.map +1 -0
- package/build/main//321/201omponents/ChipDndContext/index.d.ts +1 -0
- package/build/main//321/201omponents/ChipDndContext/index.js +2 -0
- package/build/main//321/201omponents/ChipDndContext/index.js.map +1 -0
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.d.ts +1 -1
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js +3 -2
- package/build/main//321/201omponents/ConfirmationModal/ConfirmationModal.js.map +1 -1
- package/build/main//321/201omponents/ConfirmationModal/types.d.ts +5 -2
- package/build/main//321/201omponents/ContextMenu/ContextMenu.d.ts +1 -1
- package/build/main//321/201omponents/ContextMenu/ContextMenu.js +66 -26
- package/build/main//321/201omponents/ContextMenu/ContextMenu.js.map +1 -1
- package/build/main//321/201omponents/ContextMenu/types.d.ts +13 -7
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.d.ts +4 -0
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js +49 -0
- package/build/main//321/201omponents/ContextMenuItem/ContextMenuItem.js.map +1 -0
- package/build/main//321/201omponents/ContextMenuItem/index.d.ts +1 -0
- package/build/main//321/201omponents/ContextMenuItem/index.js +2 -0
- package/build/main//321/201omponents/ContextMenuItem/index.js.map +1 -0
- package/build/main//321/201omponents/ContextMenuItem/types.d.ts +28 -0
- package/build/main//321/201omponents/ContextMenuItem/types.js +6 -0
- package/build/main//321/201omponents/ContextMenuItem/types.js.map +1 -0
- package/build/main//321/201omponents/CustomSelect/CustomSelect.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelect/CustomSelect.js +9 -8
- package/build/main//321/201omponents/CustomSelect/CustomSelect.js.map +1 -1
- package/build/main//321/201omponents/CustomSelect/selectStyles.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelect/selectStyles.js +21 -22
- package/build/main//321/201omponents/CustomSelect/selectStyles.js.map +1 -1
- package/build/main//321/201omponents/CustomSelect/types.d.ts +8 -2
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.d.ts +1 -1
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js +33 -24
- package/build/main//321/201omponents/CustomSelectProfiles/CustomSelectProfiles.js.map +1 -1
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.d.ts +11 -0
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js +38 -0
- package/build/main//321/201omponents/CustomSelectProfiles/selectStyles.js.map +1 -0
- package/build/main//321/201omponents/CustomSelectProfiles/types.d.ts +4 -5
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.d.ts +1 -1
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js +24 -18
- package/build/main//321/201omponents/DraggablePopup/DraggablePopup.js.map +1 -1
- package/build/main//321/201omponents/DraggablePopup/types.d.ts +8 -8
- package/build/main//321/201omponents/Flex/Flex.d.ts +1 -1
- package/build/main//321/201omponents/Flex/Flex.js +2 -2
- package/build/main//321/201omponents/Flex/Flex.js.map +1 -1
- package/build/main//321/201omponents/Flex/types.d.ts +2 -0
- package/build/main//321/201omponents/Input/Input.d.ts +1 -1
- package/build/main//321/201omponents/Input/Input.js +75 -33
- package/build/main//321/201omponents/Input/Input.js.map +1 -1
- package/build/main//321/201omponents/Input/types.d.ts +10 -3
- package/build/main//321/201omponents/ListItem/ListItem.js +21 -10
- package/build/main//321/201omponents/ListItem/ListItem.js.map +1 -1
- package/build/main//321/201omponents/ListItem/types.d.ts +7 -2
- package/build/main//321/201omponents/Modal/Modal.d.ts +3 -2
- package/build/main//321/201omponents/Modal/Modal.js +167 -71
- package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
- package/build/main//321/201omponents/Modal/types.d.ts +34 -2
- package/build/main//321/201omponents/Notification/Notification.d.ts +4 -6
- package/build/main//321/201omponents/Notification/Notification.js +72 -25
- package/build/main//321/201omponents/Notification/Notification.js.map +1 -1
- package/build/main//321/201omponents/Notification/types.d.ts +17 -2
- package/build/main//321/201omponents/Skeleton/Skeleton.js +1 -1
- package/build/main//321/201omponents/Skeleton/Skeleton.js.map +1 -1
- package/build/main//321/201omponents/Stories/Stories.js +72 -4
- package/build/main//321/201omponents/Stories/Stories.js.map +1 -1
- package/build/main//321/201omponents/Textarea/Textarea.d.ts +1 -1
- package/build/main//321/201omponents/Textarea/Textarea.js +2 -2
- package/build/main//321/201omponents/Textarea/Textarea.js.map +1 -1
- package/build/main//321/201omponents/Textarea/types.d.ts +2 -2
- package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js +6 -0
- package/build/main//321/201omponents/UserDropdown/ContactInfo/ContactInfo.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.d.ts +2 -1
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js +4 -3
- package/build/main//321/201omponents/UserDropdown/LoadingMessage/LoadingMessage.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js +34 -58
- package/build/main//321/201omponents/UserDropdown/MenuList/MenuList.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.d.ts +3 -2
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js +34 -37
- package/build/main//321/201omponents/UserDropdown/MultiValueLabel/MultiValueLabel.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/Option/Option.js +2 -2
- package/build/main//321/201omponents/UserDropdown/Option/Option.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.d.ts +1 -1
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js +6 -9
- package/build/main//321/201omponents/UserDropdown/SearchInCatalogButton/SearchInCatalogButton.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/UserDropdown.d.ts +5 -3
- package/build/main//321/201omponents/UserDropdown/UserDropdown.js +272 -98
- 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,34 @@ 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]);
|
|
447
580
|
var handleCloseModal = function () {
|
|
448
581
|
setModalData(null);
|
|
449
582
|
setIsSearchable(true);
|
|
@@ -472,14 +605,16 @@ var UserDropdown = function (_a) {
|
|
|
472
605
|
!userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
|
|
473
606
|
}, [userDropdownId]);
|
|
474
607
|
useLayoutEffect(function () {
|
|
475
|
-
if (userDropdownId)
|
|
476
|
-
isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips();
|
|
477
|
-
}
|
|
608
|
+
if (userDropdownId)
|
|
609
|
+
setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
|
|
478
610
|
// eslint-disable-next-line
|
|
479
611
|
}, [isChipsCollapsable, userDropdownId]);
|
|
480
612
|
useEffect(function () {
|
|
481
613
|
setPaddingLeft(calculatePaddingLeft());
|
|
482
614
|
}, [mask]);
|
|
615
|
+
useEffect(function () {
|
|
616
|
+
setPaddingRight(calculatePaddingRight());
|
|
617
|
+
}, [suffix]);
|
|
483
618
|
useEffect(function () {
|
|
484
619
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
485
620
|
return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
|
|
@@ -488,7 +623,13 @@ var UserDropdown = function (_a) {
|
|
|
488
623
|
useEffect(function () {
|
|
489
624
|
if (!isEmpty(selectedEntries)) {
|
|
490
625
|
setSelectedUsers(selectedEntries.map(function (entity) {
|
|
491
|
-
var
|
|
626
|
+
var _a;
|
|
627
|
+
var isWarning = entity.isWarning, isLoading = entity.isLoading, isOrganizerShort = entity.isOrganizerShort, isResetChipsToInputValue = entity.isResetChipsToInputValue, userType = entity.userType, currentContextItems = entity.contextMenuItems, uid = entity.uid, organizerName = entity.organizerName, email = entity.email;
|
|
628
|
+
var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
|
|
629
|
+
var _a;
|
|
630
|
+
(_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
|
|
631
|
+
isMobilePlatform(platform) && handleFocus(true);
|
|
632
|
+
} })); });
|
|
492
633
|
var commonFields = {
|
|
493
634
|
platform: platform,
|
|
494
635
|
layoutType: layoutType,
|
|
@@ -500,20 +641,28 @@ var UserDropdown = function (_a) {
|
|
|
500
641
|
isSelectedChipHasTooltip: isSelectedChipHasTooltip,
|
|
501
642
|
isLoading: isLoading,
|
|
502
643
|
isWarning: isWarning,
|
|
503
|
-
|
|
644
|
+
isOrganizerShort: isOrganizerShort,
|
|
504
645
|
userType: userType,
|
|
505
646
|
uid: uid,
|
|
647
|
+
organizerName: organizerName,
|
|
506
648
|
isInputFocused: isInputFocused,
|
|
507
649
|
selectRef: selectRef,
|
|
508
650
|
collapsableChipsCount: collapsableChipsCount,
|
|
509
651
|
lastVisibleChipIndex: lastVisibleChipIndex,
|
|
510
652
|
};
|
|
653
|
+
var isEntityContainsContacts = 'contacts' in entity;
|
|
511
654
|
var generatedNotCorporateEntity = Object.keys(entity).length === 1
|
|
512
|
-
? generateEnteredByUserOption(__assign({ email:
|
|
513
|
-
: generateContactsOption(__assign({ option: entity }, commonFields));
|
|
514
|
-
|
|
655
|
+
? generateEnteredByUserOption(__assign({ email: email }, commonFields))
|
|
656
|
+
: generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
|
|
657
|
+
if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
|
|
658
|
+
return generateCorporateOption(__assign({ option: entity }, commonFields));
|
|
659
|
+
return isEntityContainsContacts
|
|
660
|
+
? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
|
|
661
|
+
: generatedNotCorporateEntity;
|
|
515
662
|
}));
|
|
516
663
|
}
|
|
664
|
+
else
|
|
665
|
+
setSelectedUsers([]);
|
|
517
666
|
// eslint-disable-next-line
|
|
518
667
|
}, [selectedEntries]);
|
|
519
668
|
useEffect(function () {
|
|
@@ -526,15 +675,38 @@ var UserDropdown = function (_a) {
|
|
|
526
675
|
useEffect(function () {
|
|
527
676
|
return function () {
|
|
528
677
|
requestInputChangeDebounce.cancel();
|
|
529
|
-
|
|
678
|
+
clearUserTypingTimeout();
|
|
530
679
|
};
|
|
531
|
-
}, [
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
680
|
+
}, [clearUserTypingTimeout, requestInputChangeDebounce]);
|
|
681
|
+
useEffect(function () {
|
|
682
|
+
if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
|
|
683
|
+
collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
|
|
684
|
+
}, [isChipsCollapsable, selectedEntries]);
|
|
685
|
+
var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
|
|
686
|
+
var MenuListComponent = useCallback(function (props) { return (_jsx(MenuList, __assign({}, props, { children: props.children, selectRef: selectRef, scrollFromTop: menuScrollFromTop, language: language, platform: platform, menuListMaxHeight: menuListMaxHeight, hasNextPage: hasNextPage, isLoading: isLoading, isShowCatalogSearchButton: isShowCatalogSearchButton, onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick, isUserTyping: isUserTyping, isCharHintVisible: isCharHintVisible, isMenuShadowless: isMenuShadowless, isNextPageLoading: isNextPageLoading, onLoadNextPage: function (inputValue) { return onLoadNextPage === null || onLoadNextPage === void 0 ? void 0 : onLoadNextPage(inputValue); }, setIsDelimiterVisible: setIsDelimiterVisible }))); }, [
|
|
687
|
+
hasNextPage,
|
|
688
|
+
isCharHintVisible,
|
|
689
|
+
isLoading,
|
|
690
|
+
isMenuShadowless,
|
|
691
|
+
isNextPageLoading,
|
|
692
|
+
isShowCatalogSearchButton,
|
|
693
|
+
isUserTyping,
|
|
694
|
+
language,
|
|
695
|
+
menuListMaxHeight,
|
|
696
|
+
onLoadNextPage,
|
|
697
|
+
onShowCatalogSearchButtonClick,
|
|
698
|
+
platform,
|
|
699
|
+
]);
|
|
700
|
+
var NoOptionsButton = function (props) { return (_jsx(components.NoOptionsMessage, __assign({}, props, { children: _jsx(SearchInCatalogButton, { language: language, isOnlyButtonInList: true, isMenuShadowless: isMenuShadowless, noOptionText: isShowCatalogSearchButton ? undefined : generateNoOptionsMessage({ inputValue: inputValue }), onShowCatalogSearchButtonClick: onShowCatalogSearchButtonClick }) }))); };
|
|
701
|
+
var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
|
|
702
|
+
var MultiValueLabelComponent = useCallback(function (props) { return (_jsx(MultiValueLabel, __assign({}, props, { platform: platform, isChipsOutline: isChipsOutline, transformCurrentChipToInputValue: transformCurrentChipToInputValue, handleBlurDropdown: function () { return handleDragBlur(true); }, handleRequestFocus: handleForceFocus }))); }, [platform, isChipsOutline, transformCurrentChipToInputValue, handleForceFocus]);
|
|
703
|
+
var setContainerNodeRef = function (ref) {
|
|
704
|
+
var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
|
|
705
|
+
setNodeRef(ref);
|
|
706
|
+
setDelimiterOffset(isShowCatalogSearchButton ? 0 : left);
|
|
707
|
+
};
|
|
708
|
+
return (_jsxs("div", __assign({ id: userDropdownId, className: classNames('smartapp-user-dropdown', containerClassName), style: __assign(__assign({}, fontFamilyStyle), containerStyles) }, { children: [renderTitle(), _jsxs("div", __assign({ className: "smartapp-user-dropdown__container", ref: setContainerNodeRef }, { children: [renderMask(), _jsx(Select, { ref: selectRef, menuIsOpen: isInputHidden ? !!externalInputValue : undefined, menuPortalTarget: menuPortalTarget === null || menuPortalTarget === void 0 ? void 0 : menuPortalTarget.current, isMulti: true, openMenuOnFocus: true, blurInputOnSelect: false, captureMenuScroll: false, isSearchable: isSearchable, menuPlacement: menuPosition, menuPosition: menuLocation, controlShouldRenderValue: isChipsVisible, backspaceRemovesValue: isChipsVisible, isDisabled: isDisabled, closeMenuOnSelect: isMenuCloseOnSelect, isLoading: isLoading || isUserTyping, isClearable: false, styles: generateStyles(), placeholder: placeholderValue, noOptionsMessage: generateNoOptionsMessage, loadingMessage: function () { return _jsx(LoadingMessage, { isMenuShadowless: isMenuShadowless, skeletonRowsCount: skeletonRowsCount }); }, value: selectedUsers, inputValue: inputValue, options: !isNull(corporateEntries) || !isNull(myContactsEntries) ? generateOptions() : undefined, filterOption: handleFilterOption, onInputChange: handleInputChange, onChange: handleChange, onMenuClose: handleMenuClose, onMenuOpen: onMenuOpen, onKeyDown: handleKeyDown, onBlur: handleSelectBlur, autoFocus: autoFocus, onFocus: function () { return (onFocus ? onFocus() : handleFocus()); }, instanceId: userDropdownId, components: {
|
|
709
|
+
Input: InputComponent,
|
|
538
710
|
MultiValueLabel: MultiValueLabelComponent,
|
|
539
711
|
MultiValueRemove: MultiValueRemove,
|
|
540
712
|
Option: OptionComponent,
|
|
@@ -543,7 +715,9 @@ var UserDropdown = function (_a) {
|
|
|
543
715
|
LoadingIndicator: LoadingIndicator,
|
|
544
716
|
MenuList: MenuListComponent,
|
|
545
717
|
NoOptionsMessage: NoOptionsButton,
|
|
546
|
-
} })
|
|
718
|
+
} }), isMenuShadowless && isDelimiterVisible && (_jsx("div", { className: classNames('smartapp-user-dropdown__container--delimiter', {
|
|
719
|
+
'smartapp-user-dropdown__container--delimiter__with-catalog-search-btn': isShowCatalogSearchButton,
|
|
720
|
+
}), style: { '--delimiter-offset': "-".concat(delimiterOffset, "px") } }))] })), renderHint(), _jsx(Modal, { isModalOpen: !isNull(modalData), platform: platform, fontFamily: fontFamily, content: modalContent, isBottomSheet: isMobilePlatform(platform), backgroundColor: "var(--color-bg-blackout-transparent)", handleCloseModal: handleCloseModal })] })));
|
|
547
721
|
};
|
|
548
|
-
export default UserDropdown;
|
|
722
|
+
export default memo(UserDropdown);
|
|
549
723
|
//# sourceMappingURL=UserDropdown.js.map
|