react-core-ts 1.9.18 → 2.0.1

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.
Files changed (33) hide show
  1. package/dist/AutoCompleteWithTabFilter.d.ts +4 -0
  2. package/dist/AutoCompleteWithTabFilter.js +743 -0
  3. package/dist/AutoCompleteWithTabFilter.js.map +1 -0
  4. package/dist/AutoCompleteWithTreeStructure.js +3 -3
  5. package/dist/AutoCompleteWithTreeStructure.js.map +1 -1
  6. package/dist/ReactTextField.js +1 -1
  7. package/dist/ReactTextField.js.map +1 -1
  8. package/dist/commontypes.d.ts +13 -1
  9. package/dist/dropdownFilterTabs.d.ts +7 -0
  10. package/dist/dropdownFilterTabs.js +647 -0
  11. package/dist/dropdownFilterTabs.js.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +3 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/styles/components/selectedautocomplete.css +11 -0
  16. package/dist/styles/styles/components/autocomplete.css +717 -0
  17. package/dist/styles/styles/components/selectedautocomplete.css +179 -0
  18. package/dist/styles/styles/components/tooltip.css +497 -0
  19. package/dist/styles/styles/components/treedropdown.css +97 -0
  20. package/dist/styles/styles/global.css +8 -0
  21. package/dist/utilities/icons.d.ts +1 -0
  22. package/dist/utilities/icons.js +6 -1
  23. package/dist/utilities/icons.js.map +1 -1
  24. package/docs/App.tsx +109 -8
  25. package/package.json +1 -1
  26. package/src/AutoCompleteWithTabFilter.tsx +1244 -0
  27. package/src/AutoCompleteWithTreeStructure.tsx +4 -8
  28. package/src/ReactTextField.tsx +12 -4
  29. package/src/commontypes.ts +14 -1
  30. package/src/dropdownFilterTabs.tsx +1002 -0
  31. package/src/index.tsx +1 -0
  32. package/src/styles/components/selectedautocomplete.css +11 -0
  33. package/src/utilities/icons.tsx +10 -0
@@ -0,0 +1,743 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
73
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
74
+ if (ar || !(i in from)) {
75
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
76
+ ar[i] = from[i];
77
+ }
78
+ }
79
+ return to.concat(ar || Array.prototype.slice.call(from));
80
+ };
81
+ var __importDefault = (this && this.__importDefault) || function (mod) {
82
+ return (mod && mod.__esModule) ? mod : { "default": mod };
83
+ };
84
+ Object.defineProperty(exports, "__esModule", { value: true });
85
+ var jsx_runtime_1 = require("react/jsx-runtime");
86
+ var react_1 = __importStar(require("react"));
87
+ var react_dom_1 = __importDefault(require("react-dom"));
88
+ var DropdownList_1 = __importDefault(require("./components/DropdownList"));
89
+ var autosuggestions_1 = require("./utilities/autosuggestions");
90
+ var debounce_1 = require("./utilities/debounce");
91
+ var deepEqual_1 = require("./utilities/deepEqual");
92
+ var filterSuggestions_1 = require("./utilities/filterSuggestions");
93
+ var icons_1 = require("./utilities/icons");
94
+ var NewTooltip_1 = __importDefault(require("./utilities/NewTooltip"));
95
+ var getKeyValue_1 = require("./utilities/getKeyValue");
96
+ var dropdownFilterTabs_1 = __importDefault(require("./dropdownFilterTabs"));
97
+ var AutoCompleteWithTabFilter = (0, react_1.forwardRef)(function (_a, ref) {
98
+ var label = _a.label, onChange = _a.onChange, _b = _a.getData, getData = _b === void 0 ? function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
99
+ return [2 /*return*/, []];
100
+ }); }); } : _b, _c = _a.data, data = _c === void 0 ? [] : _c, errors = _a.errors, _d = _a.required, required = _d === void 0 ? false : _d, name = _a.name, _e = _a.fullWidth, fullWidth = _e === void 0 ? false : _e, placeholder = _a.placeholder, id = _a.id, _f = _a.type, type = _f === void 0 ? 'custom_select' : _f, _g = _a.selectedItems, propsSeelctedItems = _g === void 0 ? [] : _g, _h = _a.readOnly, readOnly = _h === void 0 ? false : _h, _j = _a.disabled, disabled = _j === void 0 ? false : _j, value = _a.value, _k = _a.searchValue, propsSearchValue = _k === void 0 ? '' : _k, _l = _a.isMultiple, isMultiple = _l === void 0 ? false : _l, _m = _a.desc, desc = _m === void 0 ? 'name' : _m, _o = _a.descId, descId = _o === void 0 ? 'id' : _o, singleSelect = _a.singleSelect, className = _a.className, _p = _a.async, async = _p === void 0 ? false : _p, paginationEnabled = _a.paginationEnabled, _q = _a.initialLoad, initialLoad = _q === void 0 ? false : _q, actionLabel = _a.actionLabel, handleAction = _a.handleAction, nextBlock = _a.nextBlock, notDataMessage = _a.notDataMessage, initialDataMessage = _a.initialDataMessage, onFocus = _a.onFocus, onSearchValueChange = _a.onSearchValueChange, _r = _a.expandable, expandable = _r === void 0 ? false : _r, _s = _a.textCount, textCount = _s === void 0 ? 10 : _s, _t = _a.itemCount, itemCount = _t === void 0 ? 1 : _t, scrollRef = _a.scrollRef, _u = _a.countOnly, countOnly = _u === void 0 ? true : _u, _v = _a.typeOnlyFetch, typeOnlyFetch = _v === void 0 ? false : _v, _w = _a.tab, tab = _w === void 0 ? [] : _w, _x = _a.clearTabSwitch, clearTabSwitch = _x === void 0 ? false : _x, _y = _a.selectedRowLimit, selectedRowLimit = _y === void 0 ? 2 : _y, _z = _a.topMargin, topMargin = _z === void 0 ? 0 : _z, _0 = _a.currentTab, currentTab = _0 === void 0 ? 0 : _0, _1 = _a.selectedLabel, selectedLabel = _1 === void 0 ? '' : _1, _2 = _a.viewMode, viewMode = _2 === void 0 ? false : _2, handleUpdateParent = _a.handleUpdateParent, _3 = _a.shortCode, shortCode = _3 === void 0 ? '' : _3, _4 = _a.labelCode, labelCode = _4 === void 0 ? '' : _4, _5 = _a.tabInlineSearch, tabInlineSearch = _5 === void 0 ? true : _5, _6 = _a.matchFromStart, matchFromStart = _6 === void 0 ? false : _6, _7 = _a.autoDropdown, autoDropdown = _7 === void 0 ? false : _7, _8 = _a.enableSelectAll, enableSelectAll = _8 === void 0 ? false : _8, tabName = _a.tabName, _9 = _a.tabDesc, tabDesc = _9 === void 0 ? 'tabName' : _9, _10 = _a.tabDescId, tabDescId = _10 === void 0 ? 'tabId' : _10, _11 = _a.tabSelectedItems, tabSelectedItems = _11 === void 0 ? [] : _11, getTabData = _a.getTabData, tabData = _a.tabData, _12 = _a.toolTabs, toolTabs = _12 === void 0 ? [] : _12, _13 = _a.enableToolsTab, enableToolsTab = _13 === void 0 ? true : _13, _14 = _a.toolTabClearSwitch, toolTabClearSwitch = _14 === void 0 ? false : _14, onToolTabChange = _a.onToolTabChange, _15 = _a.autoRefreshMainDropdown, autoRefreshMainDropdown = _15 === void 0 ? true : _15;
101
+ var dropdownRef = (0, react_1.useRef)(null);
102
+ var selItemRef = (0, react_1.useRef)(null);
103
+ var itemsRef = (0, react_1.useRef)(null);
104
+ var dropdownSelectedRef = (0, react_1.useRef)(null);
105
+ var tabRef = (0, react_1.useRef)(null);
106
+ var dropLevelRef = (0, react_1.useRef)('bottom');
107
+ // State Hooks Section
108
+ var _16 = (0, react_1.useState)(true), isInitialRender = _16[0], setIsInitialRender = _16[1];
109
+ var _17 = (0, react_1.useState)(value), inputValue = _17[0], setInputValue = _17[1];
110
+ var _18 = (0, react_1.useState)(propsSearchValue), searchValue = _18[0], setSearchValue = _18[1];
111
+ var _19 = (0, react_1.useState)(''), searchOldValue = _19[0], setSearchOldValue = _19[1];
112
+ var _20 = (0, react_1.useState)(1), nextPage = _20[0], setNextPage = _20[1];
113
+ var _21 = (0, react_1.useState)(false), dropOpen = _21[0], setDropOpen = _21[1];
114
+ var _22 = (0, react_1.useState)([]), selectedItems = _22[0], setSelectedItems = _22[1];
115
+ var _23 = (0, react_1.useState)(propsSearchValue ? false : true), searchLoaded = _23[0], setSearchLoaded = _23[1];
116
+ var _24 = (0, react_1.useState)(false), showAllSelected = _24[0], setShowAllSelected = _24[1];
117
+ var _25 = (0, react_1.useState)(184), selHeight = _25[0], setSelHeight = _25[1];
118
+ var _26 = (0, react_1.useState)(1), expandArrowClick = _26[0], setExpandArrowClick = _26[1];
119
+ var _27 = (0, react_1.useState)(false), visible = _27[0], setVisible = _27[1];
120
+ var _28 = (0, react_1.useState)(currentTab), activeTab = _28[0], setActiveTab = _28[1];
121
+ var _29 = (0, react_1.useState)(0), focusedIndex = _29[0], setFocusedIndex = _29[1];
122
+ var itemRefs = (0, react_1.useRef)([]);
123
+ // API call for suggestions through a custom hook
124
+ var inputRef = (0, react_1.useRef)(null);
125
+ var dropRef = (0, react_1.useRef)(null);
126
+ var inputSearchRef = (0, react_1.useRef)(null);
127
+ var dropBtnRef = (0, react_1.useRef)(null);
128
+ (0, react_1.useImperativeHandle)(ref, function () { return inputRef.current; });
129
+ var _30 = (0, react_1.useState)({
130
+ top: 0,
131
+ left: 0,
132
+ width: 200,
133
+ transform: '',
134
+ }), dropdownStyle = _30[0], setDropdownStyle = _30[1];
135
+ var _31 = (0, react_1.useState)(false), selectAll = _31[0], setSelectAll = _31[1];
136
+ var _32 = (0, react_1.useState)(false), refetchData = _32[0], setRefetchData = _32[1];
137
+ var _33 = (0, react_1.useState)(false), allDataLoaded = _33[0], setAllDataLoaded = _33[1];
138
+ var toolsBtnRef = (0, react_1.useRef)(null);
139
+ var _34 = (0, react_1.useState)(false), showToolsTab = _34[0], setShowToolsTab = _34[1];
140
+ // Track previous tabSelectedItems to detect new items
141
+ var prevTabSelectedItemsRef = (0, react_1.useRef)([]);
142
+ var originalOverflow = '';
143
+ var hasScrollbar = false;
144
+ var _35 = (0, autosuggestions_1.useSuggestions)(getData, data, dropOpen, async, paginationEnabled, initialLoad, inputValue, isMultiple, setNextPage, selectedItems, typeOnlyFetch
145
+ // nextBlock
146
+ ), suggestions = _35.suggestions, isLoading = _35.isLoading, handlePickSuggestions = _35.handlePickSuggestions, resetSuggections = _35.resetSuggections;
147
+ // Handling the selection of a suggestion
148
+ var handleSuggestionClick = (0, react_1.useCallback)(function (suggestion, idx) {
149
+ if (isMultiple) {
150
+ setFocusedIndex(idx);
151
+ setSelectedItems(function (prev) {
152
+ var isAdded = prev && prev.length > 0
153
+ ? prev.some(function (item) {
154
+ return (0, getKeyValue_1.getKeyValue)(item, descId, 'id') ===
155
+ (0, getKeyValue_1.getKeyValue)(suggestion, descId, 'id');
156
+ })
157
+ : false;
158
+ if (isAdded) {
159
+ return prev.filter(function (item) {
160
+ return (0, getKeyValue_1.getKeyValue)(item, descId, 'id') !==
161
+ (0, getKeyValue_1.getKeyValue)(suggestion, descId, 'id');
162
+ });
163
+ }
164
+ else {
165
+ return __spreadArray(__spreadArray([], prev, true), [suggestion], false);
166
+ }
167
+ });
168
+ }
169
+ else {
170
+ setFocusedIndex(idx);
171
+ setInputValue(String(suggestion[desc]));
172
+ setSearchValue('');
173
+ onChange(suggestion);
174
+ setDropOpen(false);
175
+ setShowToolsTab(false);
176
+ }
177
+ }, [tab, activeTab, descId, desc, onChange]);
178
+ // Adding debounce to avoid making API calls on every keystroke
179
+ var debouncedUpdate = (0, react_1.useCallback)((0, debounce_1.debounce)(function (value, tabVal) {
180
+ setSearchOldValue(value);
181
+ handlePickSuggestions(value, 1, false, tabVal);
182
+ }, 500), []);
183
+ var handleChangeWithDebounce = function (value) {
184
+ if ((type === 'auto_complete' || type === 'auto_suggestion') && async) {
185
+ var activeTabVal = tab.length > 0 ? tab === null || tab === void 0 ? void 0 : tab[activeTab].id : undefined;
186
+ debouncedUpdate(value, activeTabVal);
187
+ }
188
+ };
189
+ var handleMultiSelect = (0, react_1.useCallback)(function (e, suggestion) {
190
+ var checked = e.target.checked;
191
+ if (isMultiple) {
192
+ if (checked) {
193
+ setSelectedItems(function (prev) { return __spreadArray(__spreadArray([], prev, true), [suggestion], false); });
194
+ }
195
+ else {
196
+ setSelectedItems(function (prev) {
197
+ return prev.filter(function (item, i) {
198
+ return (0, getKeyValue_1.getKeyValue)(item, descId, 'id') !==
199
+ (0, getKeyValue_1.getKeyValue)(suggestion, descId, 'id');
200
+ });
201
+ });
202
+ }
203
+ }
204
+ else {
205
+ if (checked) {
206
+ setInputValue(String(suggestion[desc]));
207
+ onChange(suggestion);
208
+ }
209
+ else {
210
+ setInputValue('');
211
+ }
212
+ }
213
+ }, [isMultiple, descId, desc, onChange]);
214
+ (0, react_1.useEffect)(function () {
215
+ // Only update if different
216
+ if (!(0, deepEqual_1.deepEqual)(selectedItems, propsSeelctedItems)) {
217
+ setSelectedItems(propsSeelctedItems);
218
+ }
219
+ // eslint-disable-next-line react-hooks/exhaustive-deps
220
+ }, [propsSeelctedItems]);
221
+ // Effect to set the input value whenever `value` prop changes
222
+ (0, react_1.useEffect)(function () {
223
+ setInputValue(value !== null && value !== void 0 ? value : '');
224
+ }, [value]);
225
+ var handleChange = (0, react_1.useCallback)(function (e) {
226
+ var value = e.target.value;
227
+ //setVisibleDrop();
228
+ setSearchValue(value);
229
+ handleChangeWithDebounce(value);
230
+ if (!tabInlineSearch) {
231
+ onSearchValueChange === null || onSearchValueChange === void 0 ? void 0 : onSearchValueChange(value);
232
+ }
233
+ if (!value) {
234
+ if (!typeOnlyFetch)
235
+ setInputValue('');
236
+ // onChange({ [descId]: '', [desc]: '' });
237
+ }
238
+ if (!tabInlineSearch) {
239
+ setDropOpen(true);
240
+ setShowToolsTab(false);
241
+ }
242
+ }, [handleChangeWithDebounce, tabInlineSearch, onSearchValueChange, typeOnlyFetch]);
243
+ var handleSuggestionChange = (0, react_1.useCallback)(function (e) {
244
+ var value = e.target.value;
245
+ //setVisibleDrop();
246
+ var trimStart = value.trimStart();
247
+ setSearchValue(trimStart);
248
+ handleChangeWithDebounce(trimStart);
249
+ setAllDataLoaded(false);
250
+ }, [handleChangeWithDebounce]);
251
+ var handleClearSelected = (0, react_1.useCallback)(function () {
252
+ var _a;
253
+ setSelectedItems([]);
254
+ setShowAllSelected(false);
255
+ if (searchValue && type === 'auto_suggestion' && tabInlineSearch) {
256
+ setSearchValue('');
257
+ }
258
+ if (isMultiple)
259
+ onChange([]);
260
+ else
261
+ onChange((_a = {}, _a[descId] = '', _a[desc] = '', _a));
262
+ if (async && type === 'auto_suggestion' && tabInlineSearch)
263
+ resetSuggections === null || resetSuggections === void 0 ? void 0 : resetSuggections();
264
+ }, [searchValue, type, tabInlineSearch, isMultiple, onChange, descId, desc, async, resetSuggections]);
265
+ var generateClassName = (0, react_1.useCallback)(function () {
266
+ return "qbs-textfield-default ".concat(className, " ").concat(errors && (errors === null || errors === void 0 ? void 0 : errors.message) ? 'textfield-error' : 'textfield', " ").concat(expandable ? 'expandable' : '');
267
+ }, [errors, name]);
268
+ var handleRemoveSelectedItem = (0, react_1.useCallback)(function (index) {
269
+ setSelectedItems(function (prev) {
270
+ return prev.filter(function (_, i) { return i !== index; });
271
+ });
272
+ }, []);
273
+ var uniqueDropArrowId = "".concat(name, "-drop-arrow-selected-list-icon");
274
+ (0, react_1.useEffect)(function () {
275
+ var handleClickOutside = function (event) {
276
+ var _a, _b;
277
+ if (dropRef.current &&
278
+ event.target instanceof Node &&
279
+ !dropRef.current.contains(event.target) &&
280
+ ((_a = event.target) === null || _a === void 0 ? void 0 : _a.id) !== uniqueDropArrowId &&
281
+ !((_b = event.target) === null || _b === void 0 ? void 0 : _b.closest('.tools-drop-btn'))) {
282
+ setTimeout(function () {
283
+ setDropOpen(false);
284
+ setShowToolsTab(false);
285
+ if (!typeOnlyFetch)
286
+ setSearchValue('');
287
+ }, 200);
288
+ //setSearchValue("");
289
+ }
290
+ };
291
+ document.addEventListener('mousedown', handleClickOutside);
292
+ window.addEventListener('scroll', handleClickOutside);
293
+ var scrollableDivs = document.querySelectorAll('div[style*="overflow"], .overflow-auto, .overflow-y-auto, .overflow-x-auto');
294
+ scrollableDivs.forEach(function (div) {
295
+ return div.addEventListener('scroll', handleClickOutside);
296
+ });
297
+ if (scrollRef && scrollRef.current && scrollRef.current !== null) {
298
+ scrollRef.current.addEventListener('scroll', handleClickOutside);
299
+ }
300
+ return function () {
301
+ document.removeEventListener('mousedown', handleClickOutside);
302
+ window.removeEventListener('scroll', handleClickOutside);
303
+ scrollableDivs.forEach(function (div) {
304
+ return div.removeEventListener('scroll', handleClickOutside);
305
+ });
306
+ if (scrollRef && scrollRef.current && scrollRef.current !== null) {
307
+ scrollRef.current.removeEventListener('scroll', handleClickOutside);
308
+ }
309
+ };
310
+ }, []);
311
+ // Filtering suggestions based on type and search value
312
+ var selected = isMultiple ? selectedItems : inputValue;
313
+ var filteredData = (0, filterSuggestions_1.filterSuggestions)(suggestions, searchValue, type, desc, selected, async, false, true, matchFromStart);
314
+ var adjustDropdownPosition = (0, react_1.useCallback)(function () {
315
+ var _a, _b;
316
+ if (dropdownRef.current) {
317
+ var inputRect_1 = dropdownRef.current.getBoundingClientRect();
318
+ var dropdownPosition_1 = {
319
+ left: inputRect_1.left + window.scrollX,
320
+ width: inputRect_1.width,
321
+ top: 0,
322
+ };
323
+ // Check if there's enough space below the input for the dropdown
324
+ var spaceBelow = window.innerHeight - inputRect_1.bottom;
325
+ var spaceAbove = inputRect_1.top + window.scrollY;
326
+ var dropdownHeight = viewMode ? 160 : 300; // Assume a fixed height or calculate based on content
327
+ var defaultHeight_1 = 184;
328
+ if (countOnly) {
329
+ if (dropdownSelectedRef === null || dropdownSelectedRef === void 0 ? void 0 : dropdownSelectedRef.current)
330
+ dropdownHeight += (_a = dropdownSelectedRef === null || dropdownSelectedRef === void 0 ? void 0 : dropdownSelectedRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
331
+ }
332
+ if (tab.length > 0) {
333
+ if (tabRef === null || tabRef === void 0 ? void 0 : tabRef.current)
334
+ dropdownHeight += (_b = tabRef === null || tabRef === void 0 ? void 0 : tabRef.current) === null || _b === void 0 ? void 0 : _b.clientHeight;
335
+ }
336
+ if (spaceBelow >= dropdownHeight) {
337
+ dropLevelRef.current = 'bottom';
338
+ dropdownPosition_1.top =
339
+ inputRect_1.top + window.scrollY + inputRect_1.height;
340
+ setSelHeight(function (prev) { return prev !== defaultHeight_1 ? defaultHeight_1 : prev; });
341
+ }
342
+ else if (spaceAbove >= dropdownHeight) {
343
+ var sHeight = tabInlineSearch ? 73 : 113;
344
+ sHeight =
345
+ sHeight -
346
+ ((filteredData === null || filteredData === void 0 ? void 0 : filteredData.length) > 0 && enableSelectAll && isMultiple
347
+ ? 32
348
+ : 0);
349
+ dropLevelRef.current = 'top';
350
+ dropdownPosition_1.top =
351
+ inputRect_1.top +
352
+ window.scrollY -
353
+ dropdownHeight +
354
+ sHeight +
355
+ topMargin;
356
+ setSelHeight(function (prev) { return prev !== defaultHeight_1 ? defaultHeight_1 : prev; });
357
+ }
358
+ else {
359
+ dropLevelRef.current = 'bottom';
360
+ dropdownPosition_1.top =
361
+ inputRect_1.top + window.scrollY + inputRect_1.height;
362
+ if (itemsRef === null || itemsRef === void 0 ? void 0 : itemsRef.current) {
363
+ var totalH = showAllSelected ? 148 : defaultHeight_1;
364
+ var selH = totalH - (dropdownHeight - spaceBelow);
365
+ var newHeight_1 = selH < 50 ? 50 : selH;
366
+ setSelHeight(function (prev) { return prev !== newHeight_1 ? newHeight_1 : prev; });
367
+ }
368
+ }
369
+ // setDropdownStyle({
370
+ // ...dropdownPosition,
371
+ // });
372
+ setDropdownStyle(function (prevStyle) {
373
+ var newStyle = __assign(__assign({}, prevStyle), { transform: "translateY(".concat(dropdownPosition_1.top, "px)"), left: inputRect_1.left + window.scrollX, width: inputRect_1.width });
374
+ // Only update if the style actually changed
375
+ if (prevStyle.transform !== newStyle.transform ||
376
+ prevStyle.left !== newStyle.left ||
377
+ prevStyle.width !== newStyle.width) {
378
+ return newStyle;
379
+ }
380
+ return prevStyle;
381
+ });
382
+ }
383
+ }, [viewMode, countOnly, tab.length, tabInlineSearch, filteredData === null || filteredData === void 0 ? void 0 : filteredData.length, enableSelectAll, isMultiple, topMargin, showAllSelected]);
384
+ (0, react_1.useEffect)(function () {
385
+ window.addEventListener('resize', adjustDropdownPosition);
386
+ adjustDropdownPosition();
387
+ return function () {
388
+ window.removeEventListener('resize', adjustDropdownPosition);
389
+ };
390
+ }, [adjustDropdownPosition]);
391
+ (0, react_1.useEffect)(function () {
392
+ if (isInitialRender) {
393
+ setIsInitialRender(false);
394
+ }
395
+ else {
396
+ onChange(selectedItems);
397
+ }
398
+ adjustDropdownPosition();
399
+ setTimeout(function () {
400
+ adjustDropdownPosition();
401
+ }, 200);
402
+ // eslint-disable-next-line react-hooks/exhaustive-deps
403
+ }, [selectedItems, adjustDropdownPosition]);
404
+ (0, react_1.useEffect)(function () {
405
+ adjustDropdownPosition();
406
+ setTimeout(function () {
407
+ adjustDropdownPosition();
408
+ }, 200);
409
+ // eslint-disable-next-line react-hooks/exhaustive-deps
410
+ }, [filteredData, adjustDropdownPosition]);
411
+ (0, react_1.useEffect)(function () {
412
+ // Handle keyboard navigation
413
+ var handleKeyDown = function (e) {
414
+ var _a, _b;
415
+ if (!dropOpen)
416
+ return;
417
+ var atBottom = focusedIndex === filteredData.length - 1;
418
+ var atTop = focusedIndex === 0;
419
+ switch (e.key) {
420
+ case 'ArrowDown':
421
+ e.preventDefault();
422
+ if (itemsRef.current) {
423
+ if (!atBottom) {
424
+ itemsRef.current.scrollTop +=
425
+ ((_a = itemRefs.current[focusedIndex]) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 50;
426
+ }
427
+ else {
428
+ itemsRef.current.scrollTop = 0;
429
+ }
430
+ }
431
+ setFocusedIndex(function (prev) { return (prev + 1) % (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length); });
432
+ break;
433
+ case 'ArrowUp':
434
+ e.preventDefault();
435
+ if (itemsRef.current) {
436
+ if (!atTop) {
437
+ itemsRef.current.scrollTop -=
438
+ ((_b = itemRefs.current[focusedIndex]) === null || _b === void 0 ? void 0 : _b.offsetHeight) || 50;
439
+ }
440
+ else {
441
+ itemsRef.current.scrollTop = 0;
442
+ }
443
+ }
444
+ setFocusedIndex(function (prev) { return (prev - 1 + (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length)) % (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length); });
445
+ break;
446
+ case 'Enter':
447
+ e.preventDefault();
448
+ if (filteredData && filteredData.length > 0)
449
+ handleSuggestionClick(filteredData[focusedIndex], focusedIndex);
450
+ break;
451
+ case 'Escape':
452
+ e.preventDefault();
453
+ setDropOpen(false);
454
+ break;
455
+ default:
456
+ break;
457
+ }
458
+ };
459
+ window.addEventListener('keydown', handleKeyDown);
460
+ return function () {
461
+ window.removeEventListener('keydown', handleKeyDown);
462
+ };
463
+ }, [filteredData, dropOpen, isLoading, focusedIndex]);
464
+ var isSelected = function (item, selectedItems) {
465
+ if (Array.isArray(selectedItems)) {
466
+ return selectedItems.some(function (selectedItem) {
467
+ return (0, getKeyValue_1.getKeyValue)(selectedItem, desc, 'name') === (0, getKeyValue_1.getKeyValue)(item, desc, 'name') ||
468
+ (0, getKeyValue_1.getKeyValue)(selectedItem, descId, 'id') === (0, getKeyValue_1.getKeyValue)(item, descId, 'id');
469
+ });
470
+ }
471
+ else {
472
+ return ((0, getKeyValue_1.getKeyValue)(item, desc, 'name') === (0, getKeyValue_1.safeToLowerString)(selectedItems) ||
473
+ (0, getKeyValue_1.getKeyValue)(item, descId, 'id') === (0, getKeyValue_1.safeToLowerString)(selectedItems));
474
+ }
475
+ };
476
+ var handleLoadMore = function () {
477
+ if (paginationEnabled) {
478
+ handlePickSuggestions(searchValue, nextPage + 1, true);
479
+ setNextPage(nextPage + 1);
480
+ }
481
+ };
482
+ var handleOnClick = function () {
483
+ (!disabled && !readOnly && !expandable && !dropOpen) || viewMode
484
+ ? setVisibleDrop()
485
+ : '';
486
+ };
487
+ var onInputFocus = function () {
488
+ if (!dropOpen) {
489
+ if (countOnly) {
490
+ setTimeout(function () {
491
+ if (inputSearchRef.current)
492
+ inputSearchRef.current.focus();
493
+ }, 10);
494
+ }
495
+ else {
496
+ if (inputRef.current)
497
+ inputRef.current.focus();
498
+ }
499
+ // handleOnClick();
500
+ }
501
+ };
502
+ var handleShowAllSelected = (0, react_1.useCallback)(function (enabled) {
503
+ setExpandArrowClick(expandArrowClick + 1);
504
+ if (enabled) {
505
+ setShowAllSelected(true);
506
+ }
507
+ else {
508
+ setShowAllSelected(false);
509
+ }
510
+ }, [expandArrowClick]);
511
+ var handleCollapseArrowClick = (0, react_1.useCallback)(function () {
512
+ setExpandArrowClick(expandArrowClick + 1);
513
+ setShowAllSelected(false);
514
+ }, [expandArrowClick]);
515
+ var tooltipContent = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > itemCount
516
+ ? selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.slice(itemCount).map(function (item) { return item[desc]; }).join(', ')
517
+ : '';
518
+ var allSelectedTooltipContent = (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0
519
+ ? selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.map(function (item) { return item[desc]; }).join(', ')
520
+ : '';
521
+ var setVisibleDrop = function () {
522
+ hasScrollbar = document.body.scrollHeight > window.innerHeight;
523
+ if (!originalOverflow && !hasScrollbar) {
524
+ originalOverflow = document.body.style.overflow;
525
+ document.body.style.overflow = 'hidden';
526
+ }
527
+ setVisible(false);
528
+ if (!dropOpen) {
529
+ setDropOpen(true);
530
+ setShowToolsTab(false);
531
+ }
532
+ setFocusedIndex(0);
533
+ setTimeout(function () {
534
+ setVisible(true);
535
+ if (!hasScrollbar) {
536
+ document.body.style.overflow = originalOverflow || '';
537
+ }
538
+ originalOverflow = '';
539
+ }, 200);
540
+ };
541
+ var handleTabClick = (0, react_1.useCallback)(function (index) {
542
+ if (activeTab !== index) {
543
+ if (clearTabSwitch) {
544
+ handleClearSelected();
545
+ if (tabInlineSearch) {
546
+ setSearchValue('');
547
+ setInputValue('');
548
+ handlePickSuggestions('', 1);
549
+ }
550
+ else {
551
+ resetSuggections === null || resetSuggections === void 0 ? void 0 : resetSuggections();
552
+ var activeTabVal = tab.length > 0 ? tab === null || tab === void 0 ? void 0 : tab[index].id : undefined;
553
+ handlePickSuggestions(searchValue, 1, false, activeTabVal);
554
+ }
555
+ setAllDataLoaded(false);
556
+ }
557
+ else if (!tabInlineSearch) {
558
+ resetSuggections === null || resetSuggections === void 0 ? void 0 : resetSuggections();
559
+ var activeTabVal = tab.length > 0 ? tab === null || tab === void 0 ? void 0 : tab[index].id : undefined;
560
+ handlePickSuggestions(searchValue, 1, false, activeTabVal);
561
+ }
562
+ setActiveTab(index);
563
+ }
564
+ }, [activeTab, clearTabSwitch, handleClearSelected, tabInlineSearch, tab, searchValue, handlePickSuggestions, resetSuggections]);
565
+ var getSelectedRowLimit = (0, react_1.useCallback)(function () {
566
+ var maxHeight = 36;
567
+ if ((selItemRef === null || selItemRef === void 0 ? void 0 : selItemRef.current) && (selItemRef === null || selItemRef === void 0 ? void 0 : selItemRef.current.clientWidth) < 300) {
568
+ maxHeight = 24;
569
+ }
570
+ return selectedRowLimit * maxHeight + 5;
571
+ }, [selectedRowLimit]);
572
+ var getSelectedItems = (0, react_1.useCallback)(function (dropdown) {
573
+ return ((0, jsx_runtime_1.jsxs)("div", __assign({ ref: selItemRef, className: "selected-items-outer-container", style: { maxHeight: "".concat(getSelectedRowLimit(), "px") } }, { children: [selectedItems
574
+ .slice(0, (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > itemCount
575
+ ? showAllSelected
576
+ ? selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length
577
+ : itemCount
578
+ : selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length)
579
+ .map(function (item, index) {
580
+ var _a, _b;
581
+ return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "selected-items-container" }, { children: (0, jsx_runtime_1.jsx)(NewTooltip_1.default, __assign({ title: String(item === null || item === void 0 ? void 0 : item[desc]), enabled: ((_a = String(item === null || item === void 0 ? void 0 : item[desc])) === null || _a === void 0 ? void 0 : _a.length) > textCount }, { children: (0, jsx_runtime_1.jsxs)("div", __assign({ className: "selected-item" }, { children: [((_b = String(item === null || item === void 0 ? void 0 : item[desc])) === null || _b === void 0 ? void 0 : _b.length) > textCount
582
+ ? "".concat(String(item === null || item === void 0 ? void 0 : item[desc]).substring(0, textCount), "...")
583
+ : String(item === null || item === void 0 ? void 0 : item[desc]), !viewMode && ((0, jsx_runtime_1.jsx)("button", __assign({ onClick: function () { return handleRemoveSelectedItem(index); }, className: "remove-item-btn", "aria-label": "Remove ".concat(String(item === null || item === void 0 ? void 0 : item[desc])) }, { children: "X" })))] }), item.id) })) }), index));
584
+ }), (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > itemCount && !showAllSelected && ((0, jsx_runtime_1.jsx)("div", __assign({ className: "selected-items-container" }, { children: (0, jsx_runtime_1.jsx)(NewTooltip_1.default, __assign({ title: tooltipContent, enabled: true }, { children: (0, jsx_runtime_1.jsxs)("div", __assign({ className: "selected-item-more qbs-rounded-full qbs-min-h-6 qbs-min-w-6 qbs-p-1 ".concat(dropdown ? 'qbs-cursor-pointer' : ''), onClick: function () {
585
+ handleShowAllSelected(dropdown);
586
+ } }, { children: ["+", (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) - itemCount, ' ', (0, jsx_runtime_1.jsx)("span", __assign({ className: "qbs-hidden" }, { children: "more" }))] })) })) })))] })));
587
+ }, [selectedItems, getSelectedRowLimit, itemCount, showAllSelected, desc, textCount, viewMode, handleRemoveSelectedItem, tooltipContent, handleShowAllSelected]);
588
+ var getTabItems = (0, react_1.useCallback)(function () {
589
+ return ((0, jsx_runtime_1.jsx)("ul", __assign({ className: "qbs-flex qbs-flex-wrap qbs-w-full qbs-tab qbs-mb-2 -qbs-mt-2", ref: tabRef }, { children: tab.map(function (item, idx) { return ((0, jsx_runtime_1.jsx)("li", __assign({ className: "qbs-flex-1 qbs-tab-items" }, { children: (0, jsx_runtime_1.jsx)("span", __assign({ className: "qbs-inline-block qbs-tab-item qbs-text-sm qbs-cursor-pointer qbs-w-full qbs-text-center qbs-p-1 qbs-border-b-2 ".concat(activeTab === idx ? 'qbs-tab-active-item' : ''), onClick: function () {
590
+ handleTabClick(idx);
591
+ } }, { children: item.label })) }), "tab-".concat(idx))); }) })));
592
+ }, [tab, activeTab, handleTabClick]);
593
+ var handleSelectAll = (0, react_1.useCallback)(function () {
594
+ if (isMultiple) {
595
+ if (selectAll) {
596
+ setSelectedItems(function (prev) {
597
+ return prev.filter(function (item) {
598
+ return !filteredData.some(function (f) {
599
+ return (0, getKeyValue_1.getKeyValue)(f, descId, 'id') === (0, getKeyValue_1.getKeyValue)(item, descId, 'id');
600
+ });
601
+ });
602
+ });
603
+ }
604
+ else {
605
+ // Add only items from current tab - batch all updates in single setState
606
+ setSelectedItems(function (prev) {
607
+ var newItems = [];
608
+ filteredData.forEach(function (suggestion) {
609
+ var isAdded = prev.some(function (item) {
610
+ return (0, getKeyValue_1.getKeyValue)(item, descId, 'id') ===
611
+ (0, getKeyValue_1.getKeyValue)(suggestion, descId, 'id');
612
+ });
613
+ if (!isAdded) {
614
+ newItems.push(suggestion);
615
+ }
616
+ });
617
+ return __spreadArray(__spreadArray([], prev, true), newItems, true);
618
+ });
619
+ }
620
+ }
621
+ }, [isMultiple, selectAll, filteredData, descId]);
622
+ var handleOpenDropdown = (0, react_1.useCallback)(function (e) {
623
+ if (!suggestions || (suggestions === null || suggestions === void 0 ? void 0 : suggestions.length) === 0 || refetchData) {
624
+ if (autoDropdown && (inputValue === '' || inputValue.trim() === '')) {
625
+ if (tabInlineSearch && tab.length > 0) {
626
+ var activeTabVal = tab.length > 0 ? tab === null || tab === void 0 ? void 0 : tab[activeTab].id : undefined;
627
+ handlePickSuggestions('*', 1, false, activeTabVal);
628
+ }
629
+ else {
630
+ handlePickSuggestions('*', 1);
631
+ }
632
+ setRefetchData(false);
633
+ setAllDataLoaded(true);
634
+ }
635
+ else if (!refetchData && inputValue !== '') {
636
+ if (tabInlineSearch && tab.length > 0) {
637
+ var activeTabVal = tab.length > 0 ? tab === null || tab === void 0 ? void 0 : tab[activeTab].id : undefined;
638
+ handlePickSuggestions(inputValue, 1, false, activeTabVal);
639
+ }
640
+ else {
641
+ handlePickSuggestions(inputValue, 1);
642
+ }
643
+ setRefetchData(true);
644
+ setAllDataLoaded(false);
645
+ }
646
+ }
647
+ }, [suggestions, refetchData, autoDropdown, inputValue, tabInlineSearch, tab, activeTab, handlePickSuggestions]);
648
+ var handleOpenToolsTab = (0, react_1.useCallback)(function (e) {
649
+ setShowToolsTab(showToolsTab ? false : true);
650
+ setDropOpen(false);
651
+ }, [showToolsTab]);
652
+ (0, react_1.useEffect)(function () {
653
+ var allSelected = (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length) > 0 && (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0 &&
654
+ filteredData.every(function (item) {
655
+ return selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.some(function (s) {
656
+ return (0, getKeyValue_1.getKeyValue)(s, descId, 'id') === (0, getKeyValue_1.getKeyValue)(item, descId, 'id');
657
+ });
658
+ });
659
+ setSelectAll(allSelected);
660
+ }, [filteredData, selectedItems, descId]);
661
+ (0, react_1.useEffect)(function () {
662
+ handleUpdateParent === null || handleUpdateParent === void 0 ? void 0 : handleUpdateParent(dropOpen, dropLevelRef.current);
663
+ }, [dropOpen]);
664
+ // Auto-focus search input when dropdown opens with tabInlineSearch
665
+ (0, react_1.useEffect)(function () {
666
+ if (dropOpen && visible && tabInlineSearch && type === 'auto_suggestion' && !expandable) {
667
+ // Small delay to ensure the dropdown is fully rendered
668
+ setTimeout(function () {
669
+ if (inputSearchRef.current) {
670
+ inputSearchRef.current.focus();
671
+ }
672
+ }, 50);
673
+ }
674
+ }, [dropOpen, visible, tabInlineSearch, type, expandable]);
675
+ // Auto-refresh main dropdown data when tabSelectedItems change (add/remove)
676
+ (0, react_1.useEffect)(function () {
677
+ if (autoRefreshMainDropdown && dropOpen && async) {
678
+ // Check if there are changes by comparing with previous state
679
+ var hasChanges = tabSelectedItems.length !== prevTabSelectedItemsRef.current.length ||
680
+ !(0, deepEqual_1.deepEqual)(tabSelectedItems, prevTabSelectedItemsRef.current);
681
+ // Trigger refresh if there are changes (items added, removed, or modified)
682
+ if (hasChanges) {
683
+ if (tabInlineSearch && toolTabs.length > 0 && searchValue) {
684
+ handlePickSuggestions(searchValue, 1);
685
+ }
686
+ }
687
+ // Update the previous state
688
+ prevTabSelectedItemsRef.current = tabSelectedItems;
689
+ }
690
+ }, [autoRefreshMainDropdown, dropOpen, tabSelectedItems, activeTab, tab, tabInlineSearch, searchValue, async, handlePickSuggestions]);
691
+ return ((0, jsx_runtime_1.jsxs)("div", __assign({ id: id ? "selected-list-".concat(id) : "selected-list-".concat(name), className: fullWidth ? 'fullWidth' : 'autoWidth', ref: dropdownRef }, { children: [label && ((0, jsx_runtime_1.jsxs)("div", __assign({ style: {
692
+ marginBottom: 5,
693
+ display: 'flex',
694
+ justifyContent: 'space-between',
695
+ } }, { children: [(0, jsx_runtime_1.jsxs)("label", __assign({ className: "labels label-text" }, { children: [label, required && (0, jsx_runtime_1.jsx)("span", __assign({ className: "text-error" }, { children: " *" }))] })), (0, jsx_runtime_1.jsx)("span", __assign({ onClick: function () { return handleAction === null || handleAction === void 0 ? void 0 : handleAction(); }, className: "action_label" }, { children: actionLabel }))] }))), (0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-relative qbs-autocomplete-selected-comp ".concat(expandable ? 'qbs-expandable-container' : 'qbs-container') }, { children: [((selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0 || !tabInlineSearch) && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: !countOnly ? (getSelectedItems(false)) : !tabInlineSearch ? ((0, jsx_runtime_1.jsx)("div", __assign({ className: "selected-items-counter-container qbs-text-sm qbs-gap-1" }, { children: (0, jsx_runtime_1.jsx)(NewTooltip_1.default, __assign({ title: allSelectedTooltipContent, enabled: (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0 ? true : false }, { children: (0, jsx_runtime_1.jsx)("span", __assign({ className: "badge qbs-rounded-full qbs-text-xs qbs-inline-flex qbs-items-center qbs-justify-center qbs-px-2 qbs-py-1 qbs-leading-none qbs-min-w-6 qbs-min-h-6" }, { children: selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length })) })) }))) : ((0, jsx_runtime_1.jsxs)("div", __assign({ className: "selected-items-container qbs-text-sm qbs-gap-1", onClick: function () { return onInputFocus(); } }, { children: [(0, jsx_runtime_1.jsx)("span", __assign({ className: "badge qbs-rounded-full qbs-text-xs qbs-inline-flex qbs-items-center qbs-justify-center qbs-px-2 qbs-py-1 qbs-leading-none qbs-min-w-6 qbs-min-h-6 ".concat((selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 99 ? 'qbs-text-hundred-plus' : '') }, { children: (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 99 ? '99+' : selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length })), (0, jsx_runtime_1.jsx)("span", __assign({ className: "selected-label-text" }, { children: selectedLabel && selectedLabel !== '' ? (selectedLabel) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Item", (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 1 && 's', " Selected"] })) }))] }))) })), (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-textfield-expandable ".concat(!expandable ? 'qbs-normal' : ''), "data-value": (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0 || searchValue
696
+ ? !tabInlineSearch && searchValue
697
+ ? searchValue
698
+ : placeholder !== null && placeholder !== void 0 ? placeholder : ''
699
+ : placeholder !== null && placeholder !== void 0 ? placeholder : '', onClick: function () { return onInputFocus(); } }, { children: (0, jsx_runtime_1.jsx)("input", { id: id, ref: inputRef, autoComplete: "off", type: "text", value: type === 'auto_suggestion' && !expandable && tabInlineSearch
700
+ ? inputValue
701
+ : searchValue || inputValue, onChange: handleChange,
702
+ // onBlur={handleBlur}
703
+ onFocus: function (e) {
704
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
705
+ if (!searchLoaded && searchValue && searchValue !== '') {
706
+ handleChangeWithDebounce(searchValue);
707
+ setSearchLoaded(true);
708
+ }
709
+ }, onClick: function () { return handleOnClick(); }, className: generateClassName(), placeholder: (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0
710
+ ? !tabInlineSearch && searchValue
711
+ ? searchValue
712
+ : !tabInlineSearch
713
+ ? placeholder !== null && placeholder !== void 0 ? placeholder : ''
714
+ : ''
715
+ : placeholder !== null && placeholder !== void 0 ? placeholder : '', readOnly: readOnly ||
716
+ type === 'custom_select' ||
717
+ (type === 'auto_suggestion' && !expandable && tabInlineSearch), disabled: disabled, "data-testid": "custom-autocomplete" }) })), enableToolsTab && ((0, jsx_runtime_1.jsx)("button", __assign({ disabled: disabled !== null && disabled !== void 0 ? disabled : readOnly, onClick: function (e) { return handleOpenToolsTab(e); }, className: "absolute right-2 top-2 tools-drop-btn focus-visible:outline-slate-100 ".concat(viewMode ? 'hidden' : '', " ").concat((tabSelectedItems === null || tabSelectedItems === void 0 ? void 0 : tabSelectedItems.length) > 0 ? 'has-selected-items' : '', " ").concat(showToolsTab ? 'tools-drop-btn-active' : ''), "data-testid": "tools-drop-arrow", type: "button", id: "tools-drop-icon", ref: toolsBtnRef }, { children: (0, jsx_runtime_1.jsx)(icons_1.Tools, { uniqueId: "tools-arrow-icon", className: "tools-arrow-icon" }) }))), dropOpen &&
718
+ react_dom_1.default.createPortal((0, jsx_runtime_1.jsxs)("div", __assign({ ref: dropRef, style: __assign(__assign({}, dropdownStyle), { minHeight: viewMode ? 100 : 192, visibility: visible ? 'visible' : 'hidden', opacity: visible ? 1 : 0, transition: 'opacity 0.2s ease-in-out' }), className: "qbs-autocomplete-suggestions qbs-autocomplete-selected-suggestions ".concat(viewMode ? 'qbs-dropdown-selected-preview' : '', " ").concat(viewMode && (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) === 0 ? 'hidden' : '') }, { children: [!viewMode && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: tab.length > 0 && getTabItems() }), type === 'auto_suggestion' &&
719
+ !expandable &&
720
+ tabInlineSearch && ((0, jsx_runtime_1.jsxs)("div", __assign({ style: { position: 'relative' }, className: "react-core-ts-search-container qbs-autocomplete-selected-suggestions-outer" }, { children: [(0, jsx_runtime_1.jsx)("span", __assign({ className: "dropdown-search-icon" }, { children: (0, jsx_runtime_1.jsx)(icons_1.Search, {}) })), (0, jsx_runtime_1.jsx)("input", { className: "dropdown-search-input", onChange: handleSuggestionChange, value: searchValue, placeholder: "Type to search", autoComplete: "off", ref: inputSearchRef }), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: autoDropdown && !disabled && !readOnly && ((0, jsx_runtime_1.jsx)("button", __assign({ disabled: disabled !== null && disabled !== void 0 ? disabled : readOnly, onClick: function (e) { return handleOpenDropdown(e); }, className: "text-[#667085] focus-visible:outline-slate-100 absolute right-2 qbs-all-dropdown-btn", "data-testid": "drop-arrow", type: "button", id: "autocomplete-drop-icon", ref: dropBtnRef }, { children: (0, jsx_runtime_1.jsx)(icons_1.AllDropArrow, { type: !allDataLoaded ? 'down' : 'up', uniqueId: "all-dropdow-arrow-icon", className: "all-dropdow-arrow-icon" }) }))) })] })))] })), (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length) > 0 && enableSelectAll && isMultiple && ((0, jsx_runtime_1.jsx)("div", __assign({ id: "select-all", className: "qbs-select-all-link qbs-cursor-pointer qbs-text-xs", onClick: handleSelectAll }, { children: (0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-autocomplete-listitem-container qbs-autocomplete-checkbox-container" }, { children: [(0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-autocomplete-checkbox" }, { children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", checked: selectAll, id: "qbs-checkbox-all" }), (0, jsx_runtime_1.jsx)("label", __assign({ htmlFor: "qbs-checkbox-all" }, { children: (0, jsx_runtime_1.jsx)("svg", __assign({ width: "8", height: "6", viewBox: "0 0 8 6", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, { children: (0, jsx_runtime_1.jsx)("path", { d: "M0 3.21739L2.89883 6L8 1.06994L6.89494 0L2.89883 3.86768L1.09728 2.14745L0 3.21739Z", fill: "white" }) })) }))] })), (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-autocomplete-suggestions-item" }, { children: "Select All" }))] })) }))), (0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-autocomplete-suggestions-sub qbs-autocomplete-selected-suggestions-outer ".concat(viewMode ? 'hidden' : ''), ref: itemsRef, style: {
721
+ maxHeight: "".concat(selHeight, "px"),
722
+ minHeight: "".concat(selHeight, "px"),
723
+ } }, { children: [(filteredData === null || filteredData === void 0 ? void 0 : filteredData.length) > 0 ? (filteredData.map(function (suggestion, idx) { return ((0, jsx_runtime_1.jsx)(DropdownList_1.default, { idx: idx, suggestion: suggestion, isSelected: isSelected, handleSuggestionClick: function () {
724
+ return handleSuggestionClick(suggestion, idx);
725
+ }, handleMultiSelect: handleMultiSelect, selected: selected, isMultiple: isMultiple, singleSelect: singleSelect, desc: desc, shortCode: shortCode, labelCode: labelCode, focusedIndex: focusedIndex, setItemRef: function (index, ref) {
726
+ itemRefs.current[index] = ref; // Store each ref properly
727
+ } }, suggestion[descId])); })) : ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: isLoading ||
728
+ (searchValue !== searchOldValue &&
729
+ searchValue !== '' &&
730
+ async) ? ((0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-flex qbs-align-middle qbs-justify-center qbs-min-emp-h" }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-pt-16 qbs-autocomplete-loader" }, { children: (0, jsx_runtime_1.jsx)(icons_1.Spinner, {}) })) }))) : ((0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-autocomplete-notfound qbs-text-center qbs-justify-center qbs-align-middle qbs-min-emp-h" }, { children: searchValue !== ''
731
+ ? notDataMessage !== null && notDataMessage !== void 0 ? notDataMessage : 'No Results Found'
732
+ : initialDataMessage !== null && initialDataMessage !== void 0 ? initialDataMessage : 'Type to search' }))) })), paginationEnabled &&
733
+ nextBlock !== 0 &&
734
+ nextBlock !== undefined &&
735
+ (filteredData === null || filteredData === void 0 ? void 0 : filteredData.length) > 0 && ((0, jsx_runtime_1.jsx)("div", __assign({ className: "loadMoreSection", onClick: function () { return handleLoadMore(); } }, { children: (0, jsx_runtime_1.jsx)("p", __assign({ style: { margin: 2 } }, { children: "Load More" })) })))] })), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: countOnly && (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > 0 && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-expandable-container qbs-dropdown-selected-container", ref: dropdownSelectedRef }, { children: [(0, jsx_runtime_1.jsxs)("div", __assign({ className: "qbs-flex qbs-w-full qbs-text-xs" }, { children: [(0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-selected-lbs qbs-flex-grow" }, { children: "Selected Items" })), (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-clear-link qbs-text-right qbs-cursor-pointer ".concat(viewMode ? 'hidden' : ''), onClick: handleClearSelected }, { children: "Clear all" })), (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-done-link qbs-text-right qbs-cursor-pointer ".concat(viewMode ? 'hidden' : ''), onClick: function () {
736
+ setDropOpen(false);
737
+ } }, { children: "Done" }))] })), getSelectedItems(true), (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) > itemCount &&
738
+ showAllSelected && ((0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-readmore-collapse" }, { children: (0, jsx_runtime_1.jsx)("div", __assign({ className: "qbs-more-collapse", onClick: function () {
739
+ handleCollapseArrowClick();
740
+ } }, { children: (0, jsx_runtime_1.jsx)(icons_1.DropArrow, { className: "icon-button-rotate", uniqueDropArrowId: uniqueDropArrowId }) })) }))) })] })) })) })] })), document.body), enableToolsTab && ((0, jsx_runtime_1.jsx)(dropdownFilterTabs_1.default, { label: "", name: tabName !== null && tabName !== void 0 ? tabName : '', desc: tabDesc, descId: tabDescId, type: "auto_suggestion", dropdownRef: dropdownRef, async: true, isMultiple: true, typeOnlyFetch: true, itemCount: itemCount, textCount: textCount, getData: getTabData, placeholder: "", selectedItems: tabSelectedItems, onChange: onToolTabChange, countOnly: true, tab: toolTabs, clearTabSwitch: toolTabClearSwitch, tabInlineSearch: true, autoDropdown: autoDropdown, open: showToolsTab, data: tabData, enableSelectAll: enableSelectAll }))] })), errors && ((0, jsx_runtime_1.jsx)("div", __assign({ className: "text-error text-error-label mt-[1px]", "data-testid": "autocomplete-error" }, { children: errors.message })))] })));
741
+ });
742
+ exports.default = react_1.default.memo(AutoCompleteWithTabFilter);
743
+ //# sourceMappingURL=AutoCompleteWithTabFilter.js.map