@expressms/smartapp-ui 3.0.0-alpha.13 → 3.0.0-alpha.131
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/doc.svg +3 -3
- package/build/main/assets/icons/file-small.svg +5 -5
- package/build/main/assets/icons/file.svg +2 -2
- 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/pdf.svg +3 -3
- package/build/main/assets/icons/ppt-small.svg +5 -5
- package/build/main/assets/icons/ppt.svg +2 -2
- 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/txt.svg +3 -3
- 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/icons/xls.svg +2 -2
- 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 +10 -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 +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 +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 +163 -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 +173 -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.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 +7 -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 +162 -69
- package/build/main//321/201omponents/Modal/Modal.js.map +1 -1
- package/build/main//321/201omponents/Modal/types.d.ts +35 -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 +23 -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 +5 -3
- package/build/main//321/201omponents/UserDropdown/UserDropdown.js +249 -90
- 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 +49 -26
- package/build/main//321/201omponents/UserDropdown/selectStyles.js.map +1 -1
- package/build/main//321/201omponents/UserDropdown/types.d.ts +95 -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,36 @@ 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 dispatchInputEvent = function (input) { return input.dispatchEvent(new Event(INPUT, BUBBLES)); };
|
|
59
|
+
var setCaretPosition = function (input, position) { return input.setSelectionRange(position, position); };
|
|
60
|
+
var setCaretInEmptyInput = function (input) {
|
|
61
|
+
input.value = SPACE;
|
|
62
|
+
dispatchInputEvent(input);
|
|
63
|
+
setTimeout(function () {
|
|
64
|
+
input.value = EMPTY_STRING;
|
|
65
|
+
dispatchInputEvent(input);
|
|
66
|
+
setCaretPosition(input, 0);
|
|
67
|
+
}, 0);
|
|
68
|
+
};
|
|
49
69
|
var MENU_ACTIONS;
|
|
50
70
|
(function (MENU_ACTIONS) {
|
|
51
71
|
MENU_ACTIONS["close"] = "menu-close";
|
|
@@ -80,54 +100,92 @@ var EXCLUDED_FIELDS;
|
|
|
80
100
|
EXCLUDED_FIELDS["fontFamily"] = "fontFamily";
|
|
81
101
|
})(EXCLUDED_FIELDS || (EXCLUDED_FIELDS = {}));
|
|
82
102
|
var COMMON_FIELDS_TO_OMIT = Object.keys(omit(EXCLUDED_FIELDS, [EXCLUDED_FIELDS.language, EXCLUDED_FIELDS.isMyContacts, EXCLUDED_FIELDS.isEnteredByUser]));
|
|
83
|
-
var Input = function (props) {
|
|
103
|
+
var Input = function (props) {
|
|
104
|
+
var isClearable = props["data-is-clearable"], placeholder = props["data-placeholder"], value = props.value, suffix = props.suffix, suffixRef = props.suffixref, onInputChange = props.selectProps.onInputChange;
|
|
105
|
+
var handleClearInput = function () { return onInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: value }); };
|
|
106
|
+
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, {}) })))] }));
|
|
107
|
+
};
|
|
84
108
|
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
|
|
109
|
+
var _b;
|
|
110
|
+
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;
|
|
111
|
+
var _6 = useState(initialUserDropdownId), userDropdownId = _6[0], setUserDropdownId = _6[1];
|
|
112
|
+
var _7 = useState([]), selectedUsers = _7[0], setSelectedUsers = _7[1];
|
|
113
|
+
var _8 = useState(EMPTY_STRING), paddingLeft = _8[0], setPaddingLeft = _8[1];
|
|
114
|
+
var _9 = useState(EMPTY_STRING), paddingRight = _9[0], setPaddingRight = _9[1];
|
|
115
|
+
var _10 = useState(0), maskWidth = _10[0], setMaskWidth = _10[1];
|
|
116
|
+
var _11 = useState(0), suffixWidth = _11[0], setSuffixWidth = _11[1];
|
|
117
|
+
var _12 = useState(true), isSearchable = _12[0], setIsSearchable = _12[1];
|
|
118
|
+
var _13 = useState(false), isUserTyping = _13[0], setIsUserTyping = _13[1];
|
|
119
|
+
var _14 = useState(null), modalData = _14[0], setModalData = _14[1];
|
|
120
|
+
var _15 = useState(EMPTY_STRING), chipLabelWithMaxWidth = _15[0], setChipLabelWithMaxWidth = _15[1];
|
|
121
|
+
var _16 = useState(EMPTY_STRING), inputValue = _16[0], setInputValue = _16[1];
|
|
122
|
+
var _17 = useState(placeholder), placeholderValue = _17[0], setPlaceholderValue = _17[1];
|
|
123
|
+
var _18 = useState(false), isDelimiterVisible = _18[0], setIsDelimiterVisible = _18[1];
|
|
124
|
+
var _19 = useState(0), delimiterOffset = _19[0], setDelimiterOffset = _19[1];
|
|
96
125
|
var isInputFocused = useRef(false);
|
|
97
126
|
var selectRef = useRef(null);
|
|
98
127
|
var maskRef = useRef(null);
|
|
128
|
+
var suffixRef = useRef(null);
|
|
99
129
|
var menuScrollFromTop = useRef(0);
|
|
100
130
|
var collapsableChipsCount = useRef(0);
|
|
131
|
+
var visibleChipsCount = useRef(0);
|
|
132
|
+
var isNeedCheckChipCollapsableCount = useRef(false);
|
|
101
133
|
var lastVisibleChipIndex = useRef(-1);
|
|
102
134
|
var skipAddUserToChipsOnNextBlurRef = useRef(false);
|
|
135
|
+
var userTypingTimeoutRef = useRef(null);
|
|
136
|
+
var prevIsLoadingRef = useRef(isLoading);
|
|
103
137
|
var selectedUsersLength = selectedUsers.length;
|
|
138
|
+
var _20 = useDroppable({ id: userDropdownId }), setNodeRef = _20.setNodeRef, over = _20.over;
|
|
139
|
+
var overId = (over || {}).id;
|
|
140
|
+
var isDraggable = overId === userDropdownId;
|
|
141
|
+
var isInputPlaceholderVisible = selectedUsersLength === 1 ? ((_b = selectedUsers[0].isNotRemovable) !== null && _b !== void 0 ? _b : false) : false;
|
|
142
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
143
|
+
useImperativeHandle(focusRef, function () { return ({ focus: handleFocus, blur: function () { return handleDragBlur(true); } }); }, []);
|
|
104
144
|
var fontFamilyStyle = generateFontFamilyStyle(fontFamily);
|
|
145
|
+
var isCharHintVisible = useCharHintDisplay({ inputValue: inputValue }).isCharHintVisible;
|
|
105
146
|
var checkIsValueIsEmail = function (inputValue) {
|
|
106
147
|
var regex = new RegExp(/^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/);
|
|
107
148
|
return regex.test(inputValue);
|
|
108
149
|
};
|
|
109
|
-
|
|
150
|
+
// TODO: emailsToExclude в массиве зависимостей вызывает бесконечный ререндер при драге
|
|
151
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
152
|
+
var checkIsEmailToExclude = useCallback(function (email) { return includes(emailsToExclude, email); }, []);
|
|
110
153
|
var calculatePaddingLeft = function () {
|
|
111
154
|
var _a, _b;
|
|
112
155
|
var maskWidth = ((_b = (_a = maskRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
|
|
113
156
|
maskWidth && setMaskWidth(maskWidth + GAP);
|
|
114
157
|
return "".concat(maskWidth ? maskWidth + MASK_INPUT_PL : DEFAULT_INPUT_PADDING, "px");
|
|
115
158
|
};
|
|
159
|
+
var calculatePaddingRight = function () {
|
|
160
|
+
var _a, _b;
|
|
161
|
+
var suffixWidth = ((_b = (_a = suffixRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.width) || null;
|
|
162
|
+
suffixWidth && setSuffixWidth(suffixWidth + GAP);
|
|
163
|
+
return "".concat(suffixWidth ? suffixWidth + SUFFIX_INPUT_PR : DEFAULT_INPUT_PADDING, "px");
|
|
164
|
+
};
|
|
116
165
|
var generateStyles = function () {
|
|
117
166
|
return selectStyles({
|
|
118
167
|
isChipsVisible: isChipsVisible,
|
|
119
168
|
isMaxMembersAdded: maxMembersCount && isChipsVisible ? selectedUsersLength === maxMembersCount : false,
|
|
120
169
|
isDisabled: isDisabled,
|
|
121
|
-
|
|
170
|
+
isInputPlaceholderVisible: isInputPlaceholderVisible,
|
|
122
171
|
lastRowNumber: isChipsVisible ? Math.ceil(selectedUsersLength / 2) + 1 : 1,
|
|
123
172
|
paddingLeft: paddingLeft,
|
|
173
|
+
paddingRight: !isChipsVisible && !isEmpty(inputValue) ? PADDING_WITH_CLEAR_ICON : paddingRight,
|
|
124
174
|
platform: platform,
|
|
125
175
|
layoutType: layoutType,
|
|
126
176
|
isInputHidden: isInputHidden,
|
|
127
177
|
isDisabledMenuOffsetAtFullscreen: isDisabledMenuOffsetAtFullscreen,
|
|
178
|
+
isInputFocused: isInputFocused.current,
|
|
128
179
|
isMaskRepresented: !isEmpty(mask),
|
|
180
|
+
isSuffixRepresented: !isNil(suffix),
|
|
181
|
+
isMenuShadowless: isMenuShadowless,
|
|
129
182
|
fontFamilyStyle: fontFamilyStyle,
|
|
130
183
|
containerPadding: containerPadding,
|
|
184
|
+
isDraggable: isDraggable,
|
|
185
|
+
isChipsCollapsed: isChipsCollapsable && !isInputFocused.current,
|
|
186
|
+
menuListMaxHeight: menuListMaxHeight,
|
|
187
|
+
maxRowsCountToCollapseChips: maxRowsCountToCollapseChips,
|
|
188
|
+
isError: isError,
|
|
131
189
|
});
|
|
132
190
|
};
|
|
133
191
|
var generateNoOptionsMessage = function (_a) {
|
|
@@ -159,64 +217,89 @@ var UserDropdown = function (_a) {
|
|
|
159
217
|
return contactType === EMAIL_FIELD;
|
|
160
218
|
})[0].contact;
|
|
161
219
|
});
|
|
162
|
-
var query = ((_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.inputValue) ||
|
|
220
|
+
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
221
|
var sortedCorporateContacts = sortContacts(corporateContacts, query);
|
|
222
|
+
var sortedLocalContacts = sortContacts((corporateEntries === null || corporateEntries === void 0 ? void 0 : corporateEntries.localPhonebookEntries) || [], query);
|
|
164
223
|
var sortedMyContacts = sortContacts(myContactsEntries || [], query);
|
|
165
224
|
var filteredCorporateContacts = sortedCorporateContacts.filter(function (_a) {
|
|
166
225
|
var email = _a.email, contacts = _a.contacts;
|
|
167
226
|
return [email, contacts[0].contact].every(function (email) { return !checkIsEmailToExclude(email); });
|
|
168
227
|
});
|
|
228
|
+
var filteredLocalContacts = sortedLocalContacts.filter(function (_a) {
|
|
229
|
+
var _b;
|
|
230
|
+
var email = _a.email, contacts = _a.contacts;
|
|
231
|
+
var contact = (_b = contacts[0]) === null || _b === void 0 ? void 0 : _b.contact;
|
|
232
|
+
return !checkIsEmailToExclude(email) && !checkIsEmailToExclude(contact);
|
|
233
|
+
});
|
|
169
234
|
var filteredMyContacts = sortedMyContacts.filter(function (_a) {
|
|
170
235
|
var email = _a.email;
|
|
171
236
|
return !checkIsEmailToExclude(email);
|
|
172
237
|
});
|
|
173
|
-
return __spreadArray(__spreadArray([], generateCorporateOptionsToSelect(__assign({ options: filteredCorporateContacts }, commonFields)), true), generateContactsOptionsToSelect(__assign({ options: filteredMyContacts }, commonFields)), true);
|
|
238
|
+
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
239
|
};
|
|
240
|
+
var clearUserTypingTimeout = useCallback(function () {
|
|
241
|
+
var userTypingTimeoutRefCurrent = userTypingTimeoutRef.current;
|
|
242
|
+
if (userTypingTimeoutRefCurrent) {
|
|
243
|
+
clearTimeout(userTypingTimeoutRefCurrent);
|
|
244
|
+
userTypingTimeoutRef.current = null;
|
|
245
|
+
}
|
|
246
|
+
}, []);
|
|
247
|
+
useEffect(function () {
|
|
248
|
+
if (prevIsLoadingRef.current && !isLoading) {
|
|
249
|
+
setIsUserTyping(false);
|
|
250
|
+
clearUserTypingTimeout();
|
|
251
|
+
}
|
|
252
|
+
prevIsLoadingRef.current = isLoading;
|
|
253
|
+
}, [isLoading, clearUserTypingTimeout]);
|
|
175
254
|
var requestInputChangeDebounce = useMemo(function () {
|
|
176
255
|
return debounce(function (inputValue) {
|
|
177
256
|
onInputChange(inputValue);
|
|
178
|
-
|
|
257
|
+
clearUserTypingTimeout();
|
|
258
|
+
userTypingTimeoutRef.current = setTimeout(function () { return setIsUserTyping(false); }, CLEAR_USER_TYPING_TIMEOUT);
|
|
179
259
|
}, 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); };
|
|
260
|
+
}, [clearUserTypingTimeout, onInputChange]);
|
|
183
261
|
var handleMenuClose = function () {
|
|
184
262
|
menuScrollFromTop.current = 0;
|
|
185
|
-
|
|
186
|
-
onMenuClose
|
|
263
|
+
setIsDelimiterVisible(false);
|
|
264
|
+
onMenuClose === null || onMenuClose === void 0 ? void 0 : onMenuClose();
|
|
187
265
|
};
|
|
188
|
-
var handleInputChange = function (inputValue, additionalInfo) {
|
|
266
|
+
var handleInputChange = useCallback(function (inputValue, additionalInfo) {
|
|
189
267
|
if (additionalInfo) {
|
|
190
|
-
var action = additionalInfo.action,
|
|
268
|
+
var action = additionalInfo.action, _a = additionalInfo.prevInputValue, prevInputValue = _a === void 0 ? EMPTY_STRING : _a;
|
|
191
269
|
var trimPrevInputValue_1 = prevInputValue.trim();
|
|
192
270
|
var isInputBlurAction = action === INPUT_ACTIONS.blur;
|
|
193
271
|
var isMenuCloseAction = action === MENU_ACTIONS.close;
|
|
194
|
-
if (!isInputBlurAction && !isMenuCloseAction)
|
|
272
|
+
if (!isInputBlurAction && !isMenuCloseAction) {
|
|
195
273
|
setInputValue(inputValue);
|
|
274
|
+
onImmediateInputChange === null || onImmediateInputChange === void 0 ? void 0 : onImmediateInputChange(inputValue);
|
|
275
|
+
}
|
|
196
276
|
if ((isInputBlurAction || isMenuCloseAction) && checkIsValueIsEmail(trimPrevInputValue_1)) {
|
|
197
277
|
var isUserAlreadySelected = selectedUsers.some(function (_a) {
|
|
198
278
|
var email = _a.email;
|
|
199
279
|
return email === trimPrevInputValue_1;
|
|
200
280
|
});
|
|
201
|
-
|
|
281
|
+
var nextInputValue = isUserAlreadySelected || checkIsEmailToExclude(trimPrevInputValue_1) ? trimPrevInputValue_1 : inputValue;
|
|
282
|
+
setInputValue(nextInputValue);
|
|
283
|
+
onImmediateInputChange === null || onImmediateInputChange === void 0 ? void 0 : onImmediateInputChange(nextInputValue);
|
|
202
284
|
}
|
|
203
285
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
286
|
+
if (!isEmpty(inputValue)) {
|
|
287
|
+
clearUserTypingTimeout();
|
|
288
|
+
setIsUserTyping(true);
|
|
289
|
+
}
|
|
290
|
+
inputValue.length >= MIN_INPUT_SYMBOLS && requestInputChangeDebounce(inputValue);
|
|
291
|
+
}, [onImmediateInputChange, requestInputChangeDebounce, selectedUsers, checkIsEmailToExclude, clearUserTypingTimeout]);
|
|
208
292
|
var extractInputEmails = function (inputValue) {
|
|
209
293
|
return inputValue
|
|
210
294
|
.split(/[,;]+/)
|
|
211
295
|
.map(function (inputStr) { return inputStr.trim(); })
|
|
212
296
|
.filter(function (inputStr) { return !!inputStr.length; });
|
|
213
297
|
};
|
|
214
|
-
var handleAddUser = function (
|
|
215
|
-
if (needToShowError === void 0) { needToShowError = true; }
|
|
298
|
+
var handleAddUser = function () {
|
|
216
299
|
var props = selectRef.current.props;
|
|
217
|
-
var options = props.options,
|
|
300
|
+
var options = props.options, onChange = props.onChange;
|
|
218
301
|
if (isEmpty(inputValue))
|
|
219
|
-
return;
|
|
302
|
+
return Promise.resolve();
|
|
220
303
|
var trimInputValue = inputValue.trim();
|
|
221
304
|
var optionProps = {
|
|
222
305
|
platform: platform,
|
|
@@ -248,10 +331,10 @@ var UserDropdown = function (_a) {
|
|
|
248
331
|
return email === inputEmail;
|
|
249
332
|
});
|
|
250
333
|
enteredUsers.push(existingUser || generateEnteredByUserOption(__assign(__assign({}, optionProps), { email: inputEmail })));
|
|
251
|
-
if (isUserAlreadySelected &&
|
|
252
|
-
|
|
334
|
+
if (isUserAlreadySelected && isSingleEmailEntered)
|
|
335
|
+
return;
|
|
253
336
|
else
|
|
254
|
-
handleInputChange(
|
|
337
|
+
handleInputChange(EMPTY_STRING, { action: INPUT_ACTIONS.change, prevInputValue: trimInputValue });
|
|
255
338
|
}
|
|
256
339
|
!isValueIsEmail && incorrectEmails.push(inputEmail);
|
|
257
340
|
});
|
|
@@ -265,7 +348,7 @@ var UserDropdown = function (_a) {
|
|
|
265
348
|
var isEnterPressed = code === ENTER_KEY || key === ENTER_KEY;
|
|
266
349
|
var isBackspacePressed = code === BACKSPACE_KEY || key === BACKSPACE_KEY;
|
|
267
350
|
var isSpacePressed = code === SPACE_KEY;
|
|
268
|
-
var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue ===
|
|
351
|
+
var isTransformChipToInputValue = isBackspacePressed && isBackspaceChipToInput && inputValue === EMPTY_STRING && !isEmpty(selectedUsers);
|
|
269
352
|
if (isEnterPressed) {
|
|
270
353
|
event.preventDefault();
|
|
271
354
|
(_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { });
|
|
@@ -291,25 +374,29 @@ var UserDropdown = function (_a) {
|
|
|
291
374
|
(_c = (_b = selectRef.current) === null || _b === void 0 ? void 0 : _b.onMenuOpen) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
292
375
|
}
|
|
293
376
|
};
|
|
294
|
-
var transformCurrentChipToInputValue = function (label,
|
|
377
|
+
var transformCurrentChipToInputValue = useCallback(function (label, value) {
|
|
295
378
|
var _a, _b;
|
|
296
379
|
skipAddUserToChipsOnNextBlurRef.current = true;
|
|
297
380
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
298
381
|
var nextSelectedUsers = prevSelectedUsers.filter(function (_a) {
|
|
299
|
-
var userEmail = _a.email;
|
|
300
|
-
return userEmail !==
|
|
382
|
+
var userEmail = _a.email, userType = _a.userType, userUid = _a.uid;
|
|
383
|
+
return checkIfContactTypeIsGroup(userType) ? userUid !== value : userEmail !== value;
|
|
301
384
|
});
|
|
302
385
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextSelectedUsers.map(function (userData) { return omit(userData, COMMON_FIELDS_TO_OMIT); }));
|
|
303
386
|
return nextSelectedUsers;
|
|
304
387
|
});
|
|
388
|
+
handleFocus();
|
|
305
389
|
setInputValue(label);
|
|
306
390
|
onInputChange(label);
|
|
307
391
|
handleInputChange(label);
|
|
308
392
|
onMenuOpen === null || onMenuOpen === void 0 ? void 0 : onMenuOpen();
|
|
309
393
|
(_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.onMenuOpen) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
310
|
-
|
|
394
|
+
setIsUserTyping(false);
|
|
395
|
+
},
|
|
396
|
+
// eslint-disable-next-line
|
|
397
|
+
[onInputChange, handleInputChange, onMenuOpen, onChange]);
|
|
311
398
|
var handleChange = function (newSelectedUsers) {
|
|
312
|
-
var uniqNewSelectedUsers = uniqBy(newSelectedUsers, EMAIL_FIELD);
|
|
399
|
+
var uniqNewSelectedUsers = isDisabledCheckUniqueEmails ? newSelectedUsers : uniqBy(newSelectedUsers, EMAIL_FIELD);
|
|
313
400
|
var users = [];
|
|
314
401
|
var deletedUser = selectedUsers.find(function (_a) {
|
|
315
402
|
var value = _a.value;
|
|
@@ -333,9 +420,11 @@ var UserDropdown = function (_a) {
|
|
|
333
420
|
if (!isInputFocused.current && isChipsCollapsable)
|
|
334
421
|
handleFocus();
|
|
335
422
|
};
|
|
336
|
-
var
|
|
423
|
+
var checkIsContainsValue = function (_a) {
|
|
337
424
|
var label = _a.label, email = _a.email, value = _a.value;
|
|
338
|
-
|
|
425
|
+
var _b = label.split(SPACE), name = _b[0], surname = _b[1];
|
|
426
|
+
var reversedLabel = "".concat(surname).concat(SPACE).concat(name);
|
|
427
|
+
return label.toLowerCase().includes(value) || reversedLabel.toLowerCase().includes(value) || email.toLowerCase().includes(value);
|
|
339
428
|
};
|
|
340
429
|
var handleFilterOption = function (_a, inputValue) {
|
|
341
430
|
var _b = _a.data, label = _b.label, optionEmail = _b.email;
|
|
@@ -348,7 +437,7 @@ var UserDropdown = function (_a) {
|
|
|
348
437
|
return email === optionEmail;
|
|
349
438
|
});
|
|
350
439
|
var isContainsInputValue = [originInputValue, transliteratedInputValue, toEngInputValue, fromEngInputValue].some(function (value) {
|
|
351
|
-
return
|
|
440
|
+
return checkIsContainsValue({ label: label, email: optionEmail, value: value });
|
|
352
441
|
});
|
|
353
442
|
if (isFilteringDisabled)
|
|
354
443
|
return !isEmpty(selectedUsers) ? !isUserAlreadySelected : true;
|
|
@@ -365,46 +454,49 @@ var UserDropdown = function (_a) {
|
|
|
365
454
|
var handleCollapseChips = function () {
|
|
366
455
|
var _a, _b;
|
|
367
456
|
var collapsableChips = 0;
|
|
368
|
-
var chipLabelWithMaxWidth =
|
|
457
|
+
var chipLabelWithMaxWidth = EMPTY_STRING;
|
|
369
458
|
var chipsNodes = ((_a = document.querySelector("#".concat(userDropdownId))) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.smartapp-chip')) || [];
|
|
370
459
|
var chips = Array.from(chipsNodes);
|
|
371
460
|
if (isEmpty(chips))
|
|
372
461
|
return;
|
|
373
462
|
var yRows = uniq(chips.map(function (chip) { return generateTruncatedElementY(chip); }));
|
|
374
|
-
var
|
|
375
|
-
var rowsToHide = yRows.slice(
|
|
376
|
-
var
|
|
463
|
+
var yLastRow = yRows[maxRowsCountToCollapseChips - 1];
|
|
464
|
+
var rowsToHide = yRows.slice(maxRowsCountToCollapseChips);
|
|
465
|
+
var lastRow = [];
|
|
377
466
|
chips.forEach(function (chip) {
|
|
378
467
|
var y = generateTruncatedElementY(chip);
|
|
379
468
|
if (rowsToHide.includes(y)) {
|
|
380
469
|
collapsableChips += 1;
|
|
381
470
|
}
|
|
382
471
|
else {
|
|
383
|
-
y ===
|
|
472
|
+
y === yLastRow && lastRow.push(chip);
|
|
384
473
|
}
|
|
385
474
|
});
|
|
386
475
|
var counterWidth = calculateCounterWidth(collapsableChips);
|
|
387
476
|
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
|
-
|
|
477
|
+
var dropdownWidth = ((_b = document.querySelector("#".concat(userDropdownId))) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width) - maskWidth - suffixWidth;
|
|
478
|
+
lastRow.forEach(function (chip) {
|
|
390
479
|
var _a;
|
|
391
480
|
rowWidth += chip.getBoundingClientRect().width + GAP;
|
|
392
481
|
if (rowWidth > dropdownWidth) {
|
|
393
|
-
if (
|
|
482
|
+
if (lastRow.length > 1) {
|
|
394
483
|
collapsableChips += 1;
|
|
395
484
|
}
|
|
396
485
|
else {
|
|
397
486
|
var emptySpaceWidth = collapsableChips > 0 ? counterWidth + INPUT_SPACE_WIDTH + GAP : INPUT_SPACE_WIDTH;
|
|
398
487
|
chip.style.maxWidth = "".concat(dropdownWidth - emptySpaceWidth, "px");
|
|
399
|
-
chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) ||
|
|
488
|
+
chipLabelWithMaxWidth = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
|
|
400
489
|
}
|
|
401
490
|
}
|
|
402
491
|
});
|
|
492
|
+
var visibleChipsCurrentCount = chips.length - collapsableChips;
|
|
493
|
+
isNeedCheckChipCollapsableCount.current = true;
|
|
494
|
+
visibleChipsCount.current = visibleChipsCurrentCount;
|
|
403
495
|
collapsableChipsCount.current = collapsableChips;
|
|
404
|
-
lastVisibleChipIndex.current =
|
|
496
|
+
lastVisibleChipIndex.current = visibleChipsCurrentCount;
|
|
405
497
|
setChipLabelWithMaxWidth(chipLabelWithMaxWidth || generateId());
|
|
406
498
|
};
|
|
407
|
-
var handleUnCollapseChips = function () {
|
|
499
|
+
var handleUnCollapseChips = useCallback(function () {
|
|
408
500
|
var _a;
|
|
409
501
|
if (!userDropdownId)
|
|
410
502
|
return;
|
|
@@ -412,16 +504,29 @@ var UserDropdown = function (_a) {
|
|
|
412
504
|
var chips = Array.from(chipsNodes);
|
|
413
505
|
chips.forEach(function (chip) {
|
|
414
506
|
var _a;
|
|
415
|
-
var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) ||
|
|
507
|
+
var chipLabel = ((_a = chip.querySelector('.smartapp-chip__info--name')) === null || _a === void 0 ? void 0 : _a.innerHTML) || EMPTY_STRING;
|
|
416
508
|
chipLabel === chipLabelWithMaxWidth && (chip.style.maxWidth = '100%');
|
|
417
509
|
});
|
|
510
|
+
isNeedCheckChipCollapsableCount.current = false;
|
|
511
|
+
visibleChipsCount.current = chips.length;
|
|
418
512
|
collapsableChipsCount.current = 0;
|
|
419
513
|
lastVisibleChipIndex.current = -1;
|
|
420
|
-
setChipLabelWithMaxWidth(
|
|
514
|
+
setChipLabelWithMaxWidth(EMPTY_STRING);
|
|
515
|
+
}, [chipLabelWithMaxWidth, userDropdownId]);
|
|
516
|
+
var handleDragBlur = function (isDisableCheckFocused) {
|
|
517
|
+
var _a;
|
|
518
|
+
if (!isInputFocused.current && !isDisableCheckFocused)
|
|
519
|
+
return;
|
|
520
|
+
if (selectRef.current)
|
|
521
|
+
selectRef.current._preventBlur = false;
|
|
522
|
+
(_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
421
523
|
};
|
|
422
524
|
var handleBlur = function () {
|
|
423
525
|
var _a;
|
|
424
526
|
var shouldSkipAddUserToChipsOnNextBlur = skipAddUserToChipsOnNextBlurRef.current;
|
|
527
|
+
var _b = selectRef.current || {}, _preventBlur = _b._preventBlur, _contextMenuOpen = _b._contextMenuOpen, _isDragging = _b._isDragging;
|
|
528
|
+
if (_preventBlur || _contextMenuOpen || _isDragging || skipAddUserToChipsOnNextBlurRef.current)
|
|
529
|
+
return;
|
|
425
530
|
var onBlurComplete = function () {
|
|
426
531
|
isChipsCollapsable && handleCollapseChips();
|
|
427
532
|
isInputFocused.current = false;
|
|
@@ -431,19 +536,34 @@ var UserDropdown = function (_a) {
|
|
|
431
536
|
return;
|
|
432
537
|
}
|
|
433
538
|
else
|
|
434
|
-
(_a = handleAddUser(
|
|
539
|
+
(_a = handleAddUser()) === null || _a === void 0 ? void 0 : _a.then(function () { return requestAnimationFrame(function () { return requestAnimationFrame(function () { return onBlurComplete(); }); }); });
|
|
435
540
|
skipAddUserToChipsOnNextBlurRef.current = false;
|
|
436
541
|
};
|
|
437
|
-
var
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
542
|
+
var handleSelectBlur = function () {
|
|
543
|
+
setPlaceholderValue(placeholder);
|
|
544
|
+
setTimeout(handleBlur, RENDER_DELAY);
|
|
545
|
+
};
|
|
546
|
+
var focusInputIOS = useCallback(function (input) {
|
|
547
|
+
var length = input.value.length;
|
|
548
|
+
requestAnimationFrame(function () {
|
|
549
|
+
input.focus();
|
|
550
|
+
input.value === EMPTY_STRING ? setCaretInEmptyInput(input) : setCaretPosition(input, length);
|
|
551
|
+
});
|
|
552
|
+
}, []);
|
|
553
|
+
var handleFocus = useCallback(function (isDisableCheckFocused) {
|
|
554
|
+
setPlaceholderValue(SEARCH_PLACEHOLDER[language]);
|
|
555
|
+
if (isInputFocused.current && !isDisableCheckFocused)
|
|
556
|
+
return;
|
|
444
557
|
isInputFocused.current = true;
|
|
558
|
+
var selectRefCurrent = selectRef.current;
|
|
559
|
+
var _a = selectRefCurrent || {}, _preventBlur = _a._preventBlur, inputRef = _a.inputRef;
|
|
560
|
+
setTimeout(function () {
|
|
561
|
+
if (selectRefCurrent && !_preventBlur)
|
|
562
|
+
isIosPlatform(platform) && inputRef ? focusInputIOS(inputRef) : selectRefCurrent.focus();
|
|
563
|
+
}, RENDER_DELAY);
|
|
445
564
|
isChipsCollapsable && handleUnCollapseChips();
|
|
446
|
-
};
|
|
565
|
+
}, [language, isChipsCollapsable, handleUnCollapseChips, platform, focusInputIOS]);
|
|
566
|
+
var handleForceFocus = useCallback(function () { return setTimeout(function () { return handleFocus(true); }, RENDER_DELAY); }, [handleFocus]);
|
|
447
567
|
var handleCloseModal = function () {
|
|
448
568
|
setModalData(null);
|
|
449
569
|
setIsSearchable(true);
|
|
@@ -472,14 +592,16 @@ var UserDropdown = function (_a) {
|
|
|
472
592
|
!userDropdownId && setUserDropdownId("user_dropdown_".concat(generateId().replace(/-/g, '_')));
|
|
473
593
|
}, [userDropdownId]);
|
|
474
594
|
useLayoutEffect(function () {
|
|
475
|
-
if (userDropdownId)
|
|
476
|
-
isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips();
|
|
477
|
-
}
|
|
595
|
+
if (userDropdownId)
|
|
596
|
+
setTimeout(function () { return (isChipsCollapsable ? handleCollapseChips() : handleUnCollapseChips()); }, RENDER_DELAY);
|
|
478
597
|
// eslint-disable-next-line
|
|
479
598
|
}, [isChipsCollapsable, userDropdownId]);
|
|
480
599
|
useEffect(function () {
|
|
481
600
|
setPaddingLeft(calculatePaddingLeft());
|
|
482
601
|
}, [mask]);
|
|
602
|
+
useEffect(function () {
|
|
603
|
+
setPaddingRight(calculatePaddingRight());
|
|
604
|
+
}, [suffix]);
|
|
483
605
|
useEffect(function () {
|
|
484
606
|
setSelectedUsers(function (prevSelectedUsers) {
|
|
485
607
|
return prevSelectedUsers.map(function (selectedUser) { return (__assign(__assign({}, selectedUser), { layoutType: layoutType, fontFamily: fontFamily, language: language, isChipsCollapsable: isChipsCollapsable })); });
|
|
@@ -488,7 +610,13 @@ var UserDropdown = function (_a) {
|
|
|
488
610
|
useEffect(function () {
|
|
489
611
|
if (!isEmpty(selectedEntries)) {
|
|
490
612
|
setSelectedUsers(selectedEntries.map(function (entity) {
|
|
491
|
-
var
|
|
613
|
+
var _a;
|
|
614
|
+
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;
|
|
615
|
+
var contextMenuItems = currentContextItems === null || currentContextItems === void 0 ? void 0 : currentContextItems.map(function (item) { return (__assign(__assign({}, item), { action: function (data) {
|
|
616
|
+
var _a;
|
|
617
|
+
(_a = item.action) === null || _a === void 0 ? void 0 : _a.call(item, data);
|
|
618
|
+
isMobilePlatform(platform) && handleFocus(true);
|
|
619
|
+
} })); });
|
|
492
620
|
var commonFields = {
|
|
493
621
|
platform: platform,
|
|
494
622
|
layoutType: layoutType,
|
|
@@ -500,20 +628,28 @@ var UserDropdown = function (_a) {
|
|
|
500
628
|
isSelectedChipHasTooltip: isSelectedChipHasTooltip,
|
|
501
629
|
isLoading: isLoading,
|
|
502
630
|
isWarning: isWarning,
|
|
503
|
-
|
|
631
|
+
isOrganizerShort: isOrganizerShort,
|
|
504
632
|
userType: userType,
|
|
505
633
|
uid: uid,
|
|
634
|
+
organizerName: organizerName,
|
|
506
635
|
isInputFocused: isInputFocused,
|
|
507
636
|
selectRef: selectRef,
|
|
508
637
|
collapsableChipsCount: collapsableChipsCount,
|
|
509
638
|
lastVisibleChipIndex: lastVisibleChipIndex,
|
|
510
639
|
};
|
|
640
|
+
var isEntityContainsContacts = 'contacts' in entity;
|
|
511
641
|
var generatedNotCorporateEntity = Object.keys(entity).length === 1
|
|
512
|
-
? generateEnteredByUserOption(__assign({ email:
|
|
513
|
-
: generateContactsOption(__assign({ option: entity }, commonFields));
|
|
514
|
-
|
|
642
|
+
? generateEnteredByUserOption(__assign({ email: email }, commonFields))
|
|
643
|
+
: generateContactsOption(__assign({ option: entity, isMyContacts: true }, commonFields));
|
|
644
|
+
if (isEntityContainsContacts && ((_a = entity.contacts[0]) === null || _a === void 0 ? void 0 : _a.userKind) === CTS_USER)
|
|
645
|
+
return generateCorporateOption(__assign({ option: entity }, commonFields));
|
|
646
|
+
return isEntityContainsContacts
|
|
647
|
+
? generateContactsOption(__assign({ option: entity, isLocalContact: true }, commonFields))
|
|
648
|
+
: generatedNotCorporateEntity;
|
|
515
649
|
}));
|
|
516
650
|
}
|
|
651
|
+
else
|
|
652
|
+
setSelectedUsers([]);
|
|
517
653
|
// eslint-disable-next-line
|
|
518
654
|
}, [selectedEntries]);
|
|
519
655
|
useEffect(function () {
|
|
@@ -526,15 +662,38 @@ var UserDropdown = function (_a) {
|
|
|
526
662
|
useEffect(function () {
|
|
527
663
|
return function () {
|
|
528
664
|
requestInputChangeDebounce.cancel();
|
|
529
|
-
|
|
665
|
+
clearUserTypingTimeout();
|
|
530
666
|
};
|
|
531
|
-
}, [
|
|
532
|
-
|
|
533
|
-
|
|
667
|
+
}, [clearUserTypingTimeout, requestInputChangeDebounce]);
|
|
668
|
+
useEffect(function () {
|
|
669
|
+
if (isChipsCollapsable && !isInputFocused.current && isNeedCheckChipCollapsableCount.current)
|
|
670
|
+
collapsableChipsCount.current = selectedEntries.length - visibleChipsCount.current;
|
|
671
|
+
}, [isChipsCollapsable, selectedEntries]);
|
|
672
|
+
var OptionComponent = useCallback(function (props) { return _jsx(Option, __assign({}, props, { isMenuShadowless: isMenuShadowless, children: props.children })); }, [isMenuShadowless]);
|
|
673
|
+
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 }))); }, [
|
|
674
|
+
hasNextPage,
|
|
675
|
+
isCharHintVisible,
|
|
676
|
+
isLoading,
|
|
677
|
+
isMenuShadowless,
|
|
678
|
+
isNextPageLoading,
|
|
679
|
+
isShowCatalogSearchButton,
|
|
680
|
+
isUserTyping,
|
|
681
|
+
language,
|
|
682
|
+
menuListMaxHeight,
|
|
683
|
+
onLoadNextPage,
|
|
684
|
+
onShowCatalogSearchButtonClick,
|
|
685
|
+
platform,
|
|
686
|
+
]);
|
|
534
687
|
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
|
-
|
|
688
|
+
var InputComponent = useCallback(function (props) { return (_jsx(Input, __assign({}, props, { "data-is-clearable": !isChipsVisible, "data-placeholder": placeholderValue, suffixref: suffixRef, suffix: suffix }))); }, [isChipsVisible, placeholderValue, suffix]);
|
|
689
|
+
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]);
|
|
690
|
+
var setContainerNodeRef = function (ref) {
|
|
691
|
+
var _a = ((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect()) || {}).left, left = _a === void 0 ? 0 : _a;
|
|
692
|
+
setNodeRef(ref);
|
|
693
|
+
setDelimiterOffset(left);
|
|
694
|
+
};
|
|
695
|
+
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: {
|
|
696
|
+
Input: InputComponent,
|
|
538
697
|
MultiValueLabel: MultiValueLabelComponent,
|
|
539
698
|
MultiValueRemove: MultiValueRemove,
|
|
540
699
|
Option: OptionComponent,
|
|
@@ -543,7 +702,7 @@ var UserDropdown = function (_a) {
|
|
|
543
702
|
LoadingIndicator: LoadingIndicator,
|
|
544
703
|
MenuList: MenuListComponent,
|
|
545
704
|
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 })] })));
|
|
705
|
+
} }), 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
706
|
};
|
|
548
|
-
export default UserDropdown;
|
|
707
|
+
export default memo(UserDropdown);
|
|
549
708
|
//# sourceMappingURL=UserDropdown.js.map
|