@superleapai/flow-ui 2.4.5 → 2.4.7
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/components/popover.js +63 -12
- package/components/record-multiselect.js +12 -1
- package/components/record-select.js +204 -107
- package/core/flow.js +4 -0
- package/dist/output.css +1 -1
- package/dist/superleap-flow.js +383 -681
- package/dist/superleap-flow.js.map +1 -1
- package/dist/superleap-flow.min.js +2 -2
- package/package.json +1 -1
|
@@ -10,9 +10,20 @@
|
|
|
10
10
|
(function (global) {
|
|
11
11
|
"use strict";
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
function getDep(name) {
|
|
14
|
+
if (
|
|
15
|
+
typeof global.FlowUI !== "undefined" &&
|
|
16
|
+
typeof global.FlowUI._getComponent === "function"
|
|
17
|
+
) {
|
|
18
|
+
var c = global.FlowUI._getComponent(name);
|
|
19
|
+
if (c) return c;
|
|
20
|
+
}
|
|
21
|
+
return global[name];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var Popover = getDep("Popover");
|
|
25
|
+
var InputComponent = getDep("InputComponent");
|
|
26
|
+
var Spinner = getDep("Spinner");
|
|
16
27
|
|
|
17
28
|
/** When objectSlug === USERS, show Vivid Avatar (name-based color) instead of static icon */
|
|
18
29
|
var STANDARD_OBJECT_SLUGS_USERS = "user";
|
|
@@ -34,7 +45,7 @@
|
|
|
34
45
|
'<svg width="16" height="16" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"/></svg>';
|
|
35
46
|
var X_SVG =
|
|
36
47
|
'<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" xmlns="http://www.w3.org/2000/svg"><path d="M18 6L6 18M6 6l12 12"/></svg>';
|
|
37
|
-
|
|
48
|
+
|
|
38
49
|
var SEARCH_ICON =
|
|
39
50
|
'<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>';
|
|
40
51
|
|
|
@@ -49,7 +60,8 @@
|
|
|
49
60
|
"border-error-border hover:border-error-border-hover focus:border-1/2 focus:border-error-border-hover",
|
|
50
61
|
warning:
|
|
51
62
|
"border-warning-border hover:border-warning-border-hover focus:border-1/2 focus:border-warning-border-hover",
|
|
52
|
-
borderless:
|
|
63
|
+
borderless:
|
|
64
|
+
"border-none shadow-none rounded-0 bg-fill-quarternary-fill-white",
|
|
53
65
|
inline:
|
|
54
66
|
"focus:border-transparent border border-transparent shadow-none rounded-0 bg-fill-quarternary-fill-white hover:bg-fill-tertiary-fill-light-gray hover:border-transparent",
|
|
55
67
|
};
|
|
@@ -58,7 +70,9 @@
|
|
|
58
70
|
large: "px-12 py-8",
|
|
59
71
|
small: "px-8 py-4",
|
|
60
72
|
};
|
|
61
|
-
var placeholderClass = placeholder
|
|
73
|
+
var placeholderClass = placeholder
|
|
74
|
+
? " text-typography-quaternary-text"
|
|
75
|
+
: "";
|
|
62
76
|
var disabledClass = disabled
|
|
63
77
|
? " pointer-events-none cursor-not-allowed bg-fill-tertiary-fill-light-gray text-typography-quaternary-text hover:border-border-primary"
|
|
64
78
|
: "";
|
|
@@ -114,15 +128,27 @@
|
|
|
114
128
|
function getObjectIconInfo(slug, objectSchema) {
|
|
115
129
|
var color = "neutral";
|
|
116
130
|
var iconStr = "IconDatabase";
|
|
117
|
-
if (
|
|
131
|
+
if (
|
|
132
|
+
objectSchema &&
|
|
133
|
+
objectSchema.properties &&
|
|
134
|
+
objectSchema.properties.icon_data
|
|
135
|
+
) {
|
|
118
136
|
var iconData = objectSchema.properties.icon_data;
|
|
119
|
-
if (typeof iconData.color === "string" && iconData.color)
|
|
120
|
-
|
|
137
|
+
if (typeof iconData.color === "string" && iconData.color)
|
|
138
|
+
color = iconData.color;
|
|
139
|
+
if (typeof iconData.icon === "string" && iconData.icon)
|
|
140
|
+
iconStr = iconData.icon;
|
|
121
141
|
}
|
|
122
|
-
if (
|
|
142
|
+
if (
|
|
143
|
+
!objectSchema ||
|
|
144
|
+
!objectSchema.properties ||
|
|
145
|
+
!objectSchema.properties.icon_data ||
|
|
146
|
+
!objectSchema.properties.icon_data.icon
|
|
147
|
+
) {
|
|
123
148
|
if (OBJECT_SLUG_TO_ICON[slug]) {
|
|
124
149
|
iconStr = OBJECT_SLUG_TO_ICON[slug].iconStr;
|
|
125
|
-
if (OBJECT_SLUG_TO_ICON[slug].color)
|
|
150
|
+
if (OBJECT_SLUG_TO_ICON[slug].color)
|
|
151
|
+
color = OBJECT_SLUG_TO_ICON[slug].color;
|
|
126
152
|
} else {
|
|
127
153
|
iconStr = "IconDatabase";
|
|
128
154
|
color = "neutral";
|
|
@@ -145,6 +171,7 @@
|
|
|
145
171
|
* @param {string} [config.size] - 'default' | 'large' | 'small'
|
|
146
172
|
* @param {boolean} [config.canClear] - Show clear button when value is set
|
|
147
173
|
* @param {number} [config.initialLimit] - Initial fetch limit (default 50)
|
|
174
|
+
* @param {Object} [config.initialFilter] - Optional filter object to merge with search (e.g. { field: "status", operator: "exact", value: "active" } or { and: [...] })
|
|
148
175
|
* @param {Object} [config.objectSchema] - Optional object type/schema; properties.icon_data { svg?, color? } used for static icon (not used for user; user shows Vivid Avatar)
|
|
149
176
|
* @returns {HTMLElement} Record select container element
|
|
150
177
|
*/
|
|
@@ -153,12 +180,14 @@
|
|
|
153
180
|
var objectSlug = config.objectSlug;
|
|
154
181
|
var objectSchema = config.objectSchema || null;
|
|
155
182
|
var placeholder = config.placeholder || "Select a record";
|
|
156
|
-
var searchPlaceholder =
|
|
183
|
+
var searchPlaceholder =
|
|
184
|
+
config.searchPlaceholder || "Search " + (objectSlug || "") + "...";
|
|
157
185
|
var onChange = config.onChange;
|
|
158
186
|
var variant = config.variant || "default";
|
|
159
187
|
var size = config.size || "default";
|
|
160
188
|
var canClear = !!config.canClear;
|
|
161
189
|
var initialLimit = config.initialLimit != null ? config.initialLimit : 50;
|
|
190
|
+
var initialFilter = config.initialFilter || null; // Can be array, object, or function returning either
|
|
162
191
|
|
|
163
192
|
var disabled = config.disabled === true;
|
|
164
193
|
var value =
|
|
@@ -206,7 +235,7 @@
|
|
|
206
235
|
size,
|
|
207
236
|
disabled,
|
|
208
237
|
!value,
|
|
209
|
-
canClear && !!value && !disabled
|
|
238
|
+
canClear && !!value && !disabled,
|
|
210
239
|
);
|
|
211
240
|
trigger.disabled = disabled;
|
|
212
241
|
trigger.setAttribute("aria-haspopup", "listbox");
|
|
@@ -215,7 +244,8 @@
|
|
|
215
244
|
trigger.classList.add("record-select-trigger");
|
|
216
245
|
|
|
217
246
|
var triggerContent = document.createElement("div");
|
|
218
|
-
triggerContent.className =
|
|
247
|
+
triggerContent.className =
|
|
248
|
+
"record-select-trigger-content flex items-center gap-8 flex-1 min-w-0";
|
|
219
249
|
|
|
220
250
|
var triggerIcon = document.createElement("span");
|
|
221
251
|
triggerIcon.className = "record-select-trigger-icon shrink-0 hidden";
|
|
@@ -258,7 +288,9 @@
|
|
|
258
288
|
// Dropdown content: search + list (same content pattern as Select)
|
|
259
289
|
var content = document.createElement("div");
|
|
260
290
|
content.setAttribute("role", "listbox");
|
|
261
|
-
content.
|
|
291
|
+
content.setAttribute("data-field-id", fieldId);
|
|
292
|
+
content.className =
|
|
293
|
+
"record-select-content max-h-[45vh] overflow-hidden flex flex-col";
|
|
262
294
|
|
|
263
295
|
var searchWrap = document.createElement("div");
|
|
264
296
|
searchWrap.className = "py-8 border-b-1/2 border-border-primary";
|
|
@@ -289,12 +321,12 @@
|
|
|
289
321
|
} else {
|
|
290
322
|
var fallbackWrapper = document.createElement("div");
|
|
291
323
|
fallbackWrapper.className = "flex items-center gap-8 px-12";
|
|
292
|
-
|
|
324
|
+
|
|
293
325
|
var searchIconSpan = document.createElement("span");
|
|
294
326
|
searchIconSpan.className = "shrink-0 text-typography-tertiary-text";
|
|
295
327
|
searchIconSpan.innerHTML = SEARCH_ICON;
|
|
296
328
|
fallbackWrapper.appendChild(searchIconSpan);
|
|
297
|
-
|
|
329
|
+
|
|
298
330
|
var searchInput = document.createElement("input");
|
|
299
331
|
searchInput.type = "text";
|
|
300
332
|
searchInput.className =
|
|
@@ -308,21 +340,22 @@
|
|
|
308
340
|
content.appendChild(searchWrap);
|
|
309
341
|
|
|
310
342
|
var optionsList = document.createElement("div");
|
|
311
|
-
optionsList.className =
|
|
312
|
-
|
|
343
|
+
optionsList.className =
|
|
344
|
+
"overflow-y-auto max-h-[45vh] p-2 w-full rounded-4 bg-fill-quarternary-fill-white record-select-options";
|
|
345
|
+
|
|
313
346
|
// Add scroll listener for infinite scroll
|
|
314
347
|
optionsList.addEventListener("scroll", function () {
|
|
315
348
|
if (isFetchingMore || !hasMoreRecords) return;
|
|
316
349
|
var scrollHeight = optionsList.scrollHeight;
|
|
317
350
|
var scrollTop = optionsList.scrollTop;
|
|
318
351
|
var clientHeight = optionsList.clientHeight;
|
|
319
|
-
|
|
352
|
+
|
|
320
353
|
// Trigger load more when scrolled to bottom (with 50px threshold)
|
|
321
354
|
if (scrollTop + clientHeight >= scrollHeight - 50) {
|
|
322
355
|
loadMoreRecords();
|
|
323
356
|
}
|
|
324
357
|
});
|
|
325
|
-
|
|
358
|
+
|
|
326
359
|
content.appendChild(optionsList);
|
|
327
360
|
|
|
328
361
|
popover = Popover.create({
|
|
@@ -354,6 +387,19 @@
|
|
|
354
387
|
setTimeout(function () {
|
|
355
388
|
if (searchInputEl) searchInputEl.focus();
|
|
356
389
|
}, 0);
|
|
390
|
+
// Let consumers (e.g. BANT Questions "Add Contact") inject content into the dropdown
|
|
391
|
+
try {
|
|
392
|
+
var doc =
|
|
393
|
+
global.document ||
|
|
394
|
+
(typeof document !== "undefined" ? document : null);
|
|
395
|
+
if (doc && typeof global.CustomEvent !== "undefined") {
|
|
396
|
+
doc.dispatchEvent(
|
|
397
|
+
new global.CustomEvent("record-select:opened", {
|
|
398
|
+
detail: { fieldId: fieldId, content: content },
|
|
399
|
+
}),
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
} catch (e) {}
|
|
357
403
|
},
|
|
358
404
|
onClose: function () {
|
|
359
405
|
isOpen = false;
|
|
@@ -369,7 +415,8 @@
|
|
|
369
415
|
},
|
|
370
416
|
});
|
|
371
417
|
|
|
372
|
-
if (clearBtn)
|
|
418
|
+
if (clearBtn)
|
|
419
|
+
clearBtn.style.display = canClear && value && !disabled ? "" : "none";
|
|
373
420
|
|
|
374
421
|
function setValue(newVal) {
|
|
375
422
|
value = newVal !== undefined && newVal !== null ? newVal : "";
|
|
@@ -383,16 +430,18 @@
|
|
|
383
430
|
|
|
384
431
|
function updateTriggerDisplay() {
|
|
385
432
|
if (selectedRecord) {
|
|
386
|
-
triggerText.textContent =
|
|
433
|
+
triggerText.textContent =
|
|
434
|
+
selectedRecord.name || selectedRecord.label || value;
|
|
387
435
|
trigger.classList.remove("placeholder");
|
|
388
436
|
trigger.className = triggerClasses(
|
|
389
437
|
variant,
|
|
390
438
|
size,
|
|
391
439
|
disabled,
|
|
392
440
|
false,
|
|
393
|
-
canClear && !!value && !disabled
|
|
441
|
+
canClear && !!value && !disabled,
|
|
394
442
|
);
|
|
395
|
-
triggerIcon.className =
|
|
443
|
+
triggerIcon.className =
|
|
444
|
+
"record-select-trigger-icon shrink-0 flex items-center justify-center size-20 rounded-4 overflow-hidden";
|
|
396
445
|
triggerIcon.innerHTML = "";
|
|
397
446
|
if (objectSlug === STANDARD_OBJECT_SLUGS_USERS) {
|
|
398
447
|
var Avatar = getAvatar();
|
|
@@ -404,7 +453,9 @@
|
|
|
404
453
|
});
|
|
405
454
|
triggerIcon.appendChild(vividEl);
|
|
406
455
|
} else {
|
|
407
|
-
renderStaticIconPlaceholder(
|
|
456
|
+
renderStaticIconPlaceholder(
|
|
457
|
+
selectedRecord.name || selectedRecord.label,
|
|
458
|
+
);
|
|
408
459
|
}
|
|
409
460
|
} else {
|
|
410
461
|
renderStaticObjectIcon();
|
|
@@ -417,12 +468,13 @@
|
|
|
417
468
|
size,
|
|
418
469
|
disabled,
|
|
419
470
|
true,
|
|
420
|
-
canClear && !!value && !disabled
|
|
471
|
+
canClear && !!value && !disabled,
|
|
421
472
|
);
|
|
422
473
|
triggerIcon.className = "record-select-trigger-icon shrink-0 hidden";
|
|
423
474
|
triggerIcon.innerHTML = "";
|
|
424
475
|
}
|
|
425
|
-
if (clearBtn)
|
|
476
|
+
if (clearBtn)
|
|
477
|
+
clearBtn.style.display = canClear && value && !disabled ? "" : "none";
|
|
426
478
|
}
|
|
427
479
|
|
|
428
480
|
function renderStaticObjectIcon() {
|
|
@@ -478,18 +530,39 @@
|
|
|
478
530
|
var fields = ["id", "name"];
|
|
479
531
|
var actualLimit = limit || initialLimit;
|
|
480
532
|
var offset = page ? (page - 1) * actualLimit : 0;
|
|
481
|
-
|
|
533
|
+
|
|
482
534
|
try {
|
|
483
535
|
if (model && typeof model.select === "function") {
|
|
484
536
|
var q = model.select.apply(model, fields);
|
|
537
|
+
var filters = [];
|
|
538
|
+
var resolvedFilter =
|
|
539
|
+
typeof initialFilter === "function"
|
|
540
|
+
? initialFilter()
|
|
541
|
+
: initialFilter;
|
|
542
|
+
console.log(
|
|
543
|
+
"[RecordSelect] initialFilter:",
|
|
544
|
+
resolvedFilter,
|
|
545
|
+
"| search:",
|
|
546
|
+
search,
|
|
547
|
+
);
|
|
548
|
+
if (resolvedFilter) {
|
|
549
|
+
filters = filters.concat(
|
|
550
|
+
Array.isArray(resolvedFilter) ? resolvedFilter : [resolvedFilter],
|
|
551
|
+
);
|
|
552
|
+
}
|
|
485
553
|
if (search && search.trim()) {
|
|
486
|
-
|
|
554
|
+
filters.push({
|
|
487
555
|
or: [
|
|
488
556
|
{ field: "name", operator: "contains", value: search.trim() },
|
|
489
557
|
{ field: "id", operator: "eq", value: search.trim() },
|
|
490
558
|
],
|
|
491
559
|
});
|
|
492
560
|
}
|
|
561
|
+
if (filters.length > 0) {
|
|
562
|
+
q = q.filterBy(
|
|
563
|
+
filters.length === 1 ? filters[0] : { and: filters },
|
|
564
|
+
);
|
|
565
|
+
}
|
|
493
566
|
var orderBy = ["name"];
|
|
494
567
|
if (objectSlug === "account") orderBy.push("-ParentId");
|
|
495
568
|
return q
|
|
@@ -552,7 +625,12 @@
|
|
|
552
625
|
updateTriggerDisplay();
|
|
553
626
|
})
|
|
554
627
|
.catch(function () {
|
|
555
|
-
selectedRecord = {
|
|
628
|
+
selectedRecord = {
|
|
629
|
+
id: value,
|
|
630
|
+
value: value,
|
|
631
|
+
name: value,
|
|
632
|
+
label: value,
|
|
633
|
+
};
|
|
556
634
|
updateTriggerDisplay();
|
|
557
635
|
});
|
|
558
636
|
}
|
|
@@ -563,7 +641,9 @@
|
|
|
563
641
|
loadWrap.className =
|
|
564
642
|
"flex flex-row items-center justify-center gap-8 py-12 px-12 w-full text-reg-12 text-typography-quaternary-text record-select-loading";
|
|
565
643
|
if (Spinner && typeof Spinner.create === "function") {
|
|
566
|
-
loadWrap.appendChild(
|
|
644
|
+
loadWrap.appendChild(
|
|
645
|
+
Spinner.create({ size: "small", text: "Loading..." }),
|
|
646
|
+
);
|
|
567
647
|
} else {
|
|
568
648
|
var loadText = document.createElement("span");
|
|
569
649
|
loadText.textContent = "Loading...";
|
|
@@ -571,12 +651,12 @@
|
|
|
571
651
|
}
|
|
572
652
|
optionsList.appendChild(loadWrap);
|
|
573
653
|
}
|
|
574
|
-
|
|
654
|
+
|
|
575
655
|
function showLoadingMore() {
|
|
576
656
|
// Remove existing loading more indicator
|
|
577
657
|
var existing = optionsList.querySelector(".record-select-loading-more");
|
|
578
658
|
if (existing) existing.remove();
|
|
579
|
-
|
|
659
|
+
|
|
580
660
|
var loadWrap = document.createElement("div");
|
|
581
661
|
loadWrap.className =
|
|
582
662
|
"flex flex-row items-center justify-center gap-8 py-8 px-12 w-full text-reg-12 text-typography-quaternary-text record-select-loading-more";
|
|
@@ -589,9 +669,11 @@
|
|
|
589
669
|
}
|
|
590
670
|
optionsList.appendChild(loadWrap);
|
|
591
671
|
}
|
|
592
|
-
|
|
672
|
+
|
|
593
673
|
function removeLoadingMore() {
|
|
594
|
-
var loadingMore = optionsList.querySelector(
|
|
674
|
+
var loadingMore = optionsList.querySelector(
|
|
675
|
+
".record-select-loading-more",
|
|
676
|
+
);
|
|
595
677
|
if (loadingMore) loadingMore.remove();
|
|
596
678
|
}
|
|
597
679
|
|
|
@@ -610,13 +692,15 @@
|
|
|
610
692
|
existingOptions.forEach(function (opt) {
|
|
611
693
|
opt.remove();
|
|
612
694
|
});
|
|
613
|
-
|
|
695
|
+
|
|
614
696
|
// Remove old loading/empty states
|
|
615
|
-
var oldStates = optionsList.querySelectorAll(
|
|
697
|
+
var oldStates = optionsList.querySelectorAll(
|
|
698
|
+
".record-select-loading, .record-select-empty",
|
|
699
|
+
);
|
|
616
700
|
oldStates.forEach(function (el) {
|
|
617
701
|
el.remove();
|
|
618
702
|
});
|
|
619
|
-
|
|
703
|
+
|
|
620
704
|
filteredRecords.forEach(function (rec) {
|
|
621
705
|
var optionValue = rec.id || rec.value;
|
|
622
706
|
var optionLabel = rec.name || rec.label || rec.value;
|
|
@@ -631,7 +715,7 @@
|
|
|
631
715
|
"hover:bg-fill-tertiary-fill-light-gray focus:bg-fill-tertiary-fill-light-gray",
|
|
632
716
|
isSelected
|
|
633
717
|
? "bg-primary-surface hover:!bg-primary-surface-hover"
|
|
634
|
-
: ""
|
|
718
|
+
: "",
|
|
635
719
|
);
|
|
636
720
|
|
|
637
721
|
var optContent = document.createElement("span");
|
|
@@ -689,7 +773,7 @@
|
|
|
689
773
|
|
|
690
774
|
optionsList.appendChild(option);
|
|
691
775
|
});
|
|
692
|
-
|
|
776
|
+
|
|
693
777
|
// Add loading more indicator at the bottom if fetching
|
|
694
778
|
if (isFetchingMore) {
|
|
695
779
|
showLoadingMore();
|
|
@@ -711,60 +795,71 @@
|
|
|
711
795
|
currentPage = 1;
|
|
712
796
|
hasMoreRecords = true;
|
|
713
797
|
totalFetched = 0;
|
|
714
|
-
|
|
715
|
-
fetchRecords(searchTerm, initialLimit, 1)
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
798
|
+
|
|
799
|
+
fetchRecords(searchTerm, initialLimit, 1)
|
|
800
|
+
.then(function (result) {
|
|
801
|
+
allRecords = result.records;
|
|
802
|
+
filteredRecords = result.records;
|
|
803
|
+
hasMoreRecords = result.hasMore;
|
|
804
|
+
totalFetched = result.records.length;
|
|
805
|
+
currentPage = 1;
|
|
806
|
+
|
|
807
|
+
if (
|
|
808
|
+
value &&
|
|
809
|
+
!result.records.some(function (r) {
|
|
810
|
+
return (r.id || r.value) === value;
|
|
811
|
+
})
|
|
812
|
+
) {
|
|
813
|
+
loadSelectedRecord();
|
|
814
|
+
} else if (value && result.records.length) {
|
|
815
|
+
var sel = result.records.find(function (r) {
|
|
816
|
+
return (r.id || r.value) === value;
|
|
817
|
+
});
|
|
818
|
+
if (sel) selectedRecord = sel;
|
|
819
|
+
updateTriggerDisplay();
|
|
820
|
+
}
|
|
821
|
+
if (filteredRecords.length === 0) {
|
|
822
|
+
showEmpty(searchTerm ? "No results found" : "No records available");
|
|
823
|
+
} else {
|
|
824
|
+
renderOptions();
|
|
825
|
+
}
|
|
826
|
+
scheduleUpdatePosition();
|
|
827
|
+
})
|
|
828
|
+
.catch(function () {
|
|
829
|
+
showEmpty("Failed to load records");
|
|
830
|
+
hasMoreRecords = false;
|
|
831
|
+
scheduleUpdatePosition();
|
|
832
|
+
});
|
|
740
833
|
}
|
|
741
|
-
|
|
834
|
+
|
|
742
835
|
function loadMoreRecords() {
|
|
743
836
|
if (isFetchingMore || !hasMoreRecords) return;
|
|
744
|
-
|
|
837
|
+
|
|
745
838
|
isFetchingMore = true;
|
|
746
839
|
currentPage += 1;
|
|
747
840
|
showLoadingMore();
|
|
748
|
-
|
|
749
|
-
fetchRecords(searchTerm, initialLimit, currentPage)
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
841
|
+
|
|
842
|
+
fetchRecords(searchTerm, initialLimit, currentPage)
|
|
843
|
+
.then(function (result) {
|
|
844
|
+
isFetchingMore = false;
|
|
845
|
+
removeLoadingMore();
|
|
846
|
+
|
|
847
|
+
if (result.records.length > 0) {
|
|
848
|
+
allRecords = allRecords.concat(result.records);
|
|
849
|
+
filteredRecords = filteredRecords.concat(result.records);
|
|
850
|
+
totalFetched += result.records.length;
|
|
851
|
+
hasMoreRecords = result.hasMore;
|
|
852
|
+
renderOptions();
|
|
853
|
+
} else {
|
|
854
|
+
hasMoreRecords = false;
|
|
855
|
+
}
|
|
856
|
+
})
|
|
857
|
+
.catch(function (err) {
|
|
858
|
+
console.error("[RecordSelect] loadMoreRecords error:", err);
|
|
859
|
+
isFetchingMore = false;
|
|
860
|
+
removeLoadingMore();
|
|
760
861
|
hasMoreRecords = false;
|
|
761
|
-
}
|
|
762
|
-
}).catch(function (err) {
|
|
763
|
-
console.error("[RecordSelect] loadMoreRecords error:", err);
|
|
764
|
-
isFetchingMore = false;
|
|
765
|
-
removeLoadingMore();
|
|
766
|
-
hasMoreRecords = false;
|
|
767
|
-
});
|
|
862
|
+
});
|
|
768
863
|
}
|
|
769
864
|
|
|
770
865
|
function debouncedSearch() {
|
|
@@ -775,24 +870,26 @@
|
|
|
775
870
|
currentPage = 1;
|
|
776
871
|
hasMoreRecords = true;
|
|
777
872
|
totalFetched = 0;
|
|
778
|
-
|
|
779
|
-
fetchRecords(searchTerm, initialLimit, 1)
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
873
|
+
|
|
874
|
+
fetchRecords(searchTerm, initialLimit, 1)
|
|
875
|
+
.then(function (result) {
|
|
876
|
+
allRecords = result.records;
|
|
877
|
+
filteredRecords = result.records;
|
|
878
|
+
hasMoreRecords = result.hasMore;
|
|
879
|
+
totalFetched = result.records.length;
|
|
880
|
+
|
|
881
|
+
if (result.records.length === 0) {
|
|
882
|
+
showEmpty("No results found");
|
|
883
|
+
} else {
|
|
884
|
+
renderOptions();
|
|
885
|
+
}
|
|
886
|
+
scheduleUpdatePosition();
|
|
887
|
+
})
|
|
888
|
+
.catch(function () {
|
|
889
|
+
showEmpty("Search failed");
|
|
890
|
+
hasMoreRecords = false;
|
|
891
|
+
scheduleUpdatePosition();
|
|
892
|
+
});
|
|
796
893
|
}, 500);
|
|
797
894
|
}
|
|
798
895
|
|
|
@@ -842,7 +939,7 @@
|
|
|
842
939
|
size,
|
|
843
940
|
disabled,
|
|
844
941
|
!value,
|
|
845
|
-
canClear && !!value && !disabled
|
|
942
|
+
canClear && !!value && !disabled,
|
|
846
943
|
);
|
|
847
944
|
if (disabled && isOpen) closeDropdown();
|
|
848
945
|
};
|
package/core/flow.js
CHANGED
|
@@ -700,6 +700,7 @@
|
|
|
700
700
|
size,
|
|
701
701
|
canClear,
|
|
702
702
|
initialLimit,
|
|
703
|
+
initialFilter,
|
|
703
704
|
helpText = null,
|
|
704
705
|
} = config;
|
|
705
706
|
|
|
@@ -719,6 +720,7 @@
|
|
|
719
720
|
size: size || "default",
|
|
720
721
|
canClear: !!canClear,
|
|
721
722
|
initialLimit,
|
|
723
|
+
initialFilter,
|
|
722
724
|
onChange: (value, record) => {
|
|
723
725
|
set(fieldId, value);
|
|
724
726
|
if (onChange) onChange(value, record);
|
|
@@ -768,6 +770,7 @@
|
|
|
768
770
|
variant,
|
|
769
771
|
size,
|
|
770
772
|
initialLimit,
|
|
773
|
+
initialFilter,
|
|
771
774
|
displayFields,
|
|
772
775
|
helpText = null,
|
|
773
776
|
} = config;
|
|
@@ -786,6 +789,7 @@
|
|
|
786
789
|
variant: variant || "default",
|
|
787
790
|
size: size || "default",
|
|
788
791
|
initialLimit,
|
|
792
|
+
initialFilter,
|
|
789
793
|
displayFields: displayFields || [],
|
|
790
794
|
onValuesChange: (values, records) => {
|
|
791
795
|
set(fieldId, values);
|