@capillarytech/blaze-ui 1.0.3-alpha.8 → 1.0.3-alpha.9

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.
@@ -96,6 +96,15 @@ export interface CapUnifiedSelectProps extends Omit<TreeSelectProps, 'treeData'
96
96
  * }}
97
97
  */
98
98
  onPopupScroll?: () => void;
99
+ /**
100
+ * Indicates whether there are more items available to load via pagination.
101
+ * When false, the component will not show loading state or trigger onPopupScroll when scrolling to bottom.
102
+ * This prevents infinite loading when all items have been exhausted.
103
+ * @default true - Assumes more items are available if not specified
104
+ * @example
105
+ * hasMore={enumData?.hasMore ?? false}
106
+ */
107
+ hasMore?: boolean;
99
108
  /**
100
109
  * Enable controlled virtualization for large lists.
101
110
  * When true, disables Ant Design's built-in virtualization (virtual prop).
@@ -1 +1 @@
1
- {"version":3,"file":"CapUnifiedSelect.d.ts","sourceRoot":"","sources":["../../components/CapUnifiedSelect/CapUnifiedSelect.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CapUnifiedSelect.d.ts","sourceRoot":"","sources":["../../components/CapUnifiedSelect/CapUnifiedSelect.tsx"],"names":[],"mappings":"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"}
@@ -776,7 +776,7 @@ var _CapTooltipWithInfo = _interopRequireDefault(__webpack_require__(2608));
776
776
  var _constants = __webpack_require__(9788);
777
777
  var _styles = _interopRequireDefault(__webpack_require__(8263));
778
778
  var _jsxRuntime = __webpack_require__(4848);
779
- const _excluded = ["type", "options", "value", "onChange", "placeholder", "className", "style", "isError", "errorMessage", "containerClassName", "popoverClassName", "allowClear", "headerLabel", "onUpload", "uploadLabel", "tooltip", "bylineText", "disabled", "showUpload", "customPopupRender", "showSearch", "searchBasedOn", "onSearch", "searchDebounce", "onConfirm", "clearText", "noResultCustomText", "noResultCustomIcon", "readOnly", "staticValue", "onFooterDownloadChange", "onPopupScroll", "enableVirtualization", "virtualRowHeight", "resetSearch", "resetData", "fetchMissingOptions"];
779
+ const _excluded = ["type", "options", "value", "onChange", "placeholder", "className", "style", "isError", "errorMessage", "containerClassName", "popoverClassName", "allowClear", "headerLabel", "onUpload", "uploadLabel", "tooltip", "bylineText", "disabled", "showUpload", "customPopupRender", "showSearch", "searchBasedOn", "onSearch", "searchDebounce", "onConfirm", "clearText", "noResultCustomText", "noResultCustomIcon", "readOnly", "staticValue", "onFooterDownloadChange", "onPopupScroll", "hasMore", "enableVirtualization", "virtualRowHeight", "resetSearch", "resetData", "fetchMissingOptions"];
780
780
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
781
781
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
782
782
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -946,6 +946,7 @@ const CapUnifiedSelect = _ref4 => {
946
946
  staticValue = true,
947
947
  onFooterDownloadChange,
948
948
  onPopupScroll,
949
+ hasMore = true,
949
950
  enableVirtualization = false,
950
951
  virtualRowHeight = _constants.DEFAULTS.VIRTUAL_ROW_HEIGHT,
951
952
  resetSearch = true,
@@ -1280,6 +1281,18 @@ const CapUnifiedSelect = _ref4 => {
1280
1281
  return () => clearTimeout(fallbackTimeout);
1281
1282
  }, [isResettingData, options]);
1282
1283
 
1284
+ // Clear loading state when hasMore becomes false (all items exhausted)
1285
+ (0, _react.useEffect)(() => {
1286
+ if (!hasMore && isLoadingOnScroll) {
1287
+ setIsLoadingOnScroll(false);
1288
+ isScrollProcessingRef.current = false;
1289
+ if (scrollLoadingTimeoutRef.current) {
1290
+ clearTimeout(scrollLoadingTimeoutRef.current);
1291
+ scrollLoadingTimeoutRef.current = null;
1292
+ }
1293
+ }
1294
+ }, [hasMore, isLoadingOnScroll]);
1295
+
1283
1296
  // Detect when options change after scroll to clear loading overlay
1284
1297
  (0, _react.useEffect)(() => {
1285
1298
  // Always update refs when options change (when not loading)
@@ -1831,7 +1844,7 @@ const CapUnifiedSelect = _ref4 => {
1831
1844
  hasInteractedRef.current = false;
1832
1845
  }
1833
1846
  setDropdownOpen(open);
1834
- }, [customPopupRender, value, onChange, tempValue, readOnly, resetSearch, resetData, options]);
1847
+ }, [customPopupRender, value, onChange, tempValue, readOnly, resetSearch, resetData, options, isResettingData]);
1835
1848
  const handleFooterDownload = (0, _react.useCallback)(() => {
1836
1849
  const currentValues = Array.isArray(tempValue) ? tempValue : tempValue ? [tempValue] : [];
1837
1850
  onFooterDownloadChange == null || onFooterDownloadChange(currentValues);
@@ -1886,6 +1899,13 @@ const CapUnifiedSelect = _ref4 => {
1886
1899
  // This ensures loading state is managed properly and data loading completes
1887
1900
  if (isLoadingOnScroll) return;
1888
1901
 
1902
+ // Don't trigger if there are no more items to load
1903
+ // This prevents showing loading state when all items are exhausted
1904
+ if (!hasMore) {
1905
+ isScrollProcessingRef.current = false;
1906
+ return;
1907
+ }
1908
+
1889
1909
  // Throttle scroll events to prevent rapid-fire API calls
1890
1910
  // Clear any existing throttle timeout
1891
1911
  if (scrollThrottleTimeoutRef.current) {
@@ -1899,7 +1919,8 @@ const CapUnifiedSelect = _ref4 => {
1899
1919
  scrollThrottleTimeoutRef.current = setTimeout(() => {
1900
1920
  // Double-check we're still near bottom and not loading
1901
1921
  const stillNearBottom = Math.floor(target.scrollHeight - target.scrollTop) <= target.clientHeight;
1902
- if (!stillNearBottom || isLoadingOnScroll) {
1922
+ // Also check if hasMore is still true (might have changed during throttle delay)
1923
+ if (!stillNearBottom || isLoadingOnScroll || !hasMore) {
1903
1924
  isScrollProcessingRef.current = false;
1904
1925
  return;
1905
1926
  }
@@ -1948,7 +1969,7 @@ const CapUnifiedSelect = _ref4 => {
1948
1969
  });
1949
1970
  }, _constants.TIMEOUTS.SCROLL_LOADING_TIMEOUT);
1950
1971
  }, 150); // 150ms throttle to prevent rapid-fire events
1951
- }, [onPopupScroll, isLoadingOnScroll]);
1972
+ }, [onPopupScroll, isLoadingOnScroll, hasMore]);
1952
1973
 
1953
1974
  // Setup scroll listener for onPopupScroll
1954
1975
  (0, _react.useEffect)(() => {
@@ -2112,7 +2133,7 @@ const CapUnifiedSelect = _ref4 => {
2112
2133
  children: "Loading..."
2113
2134
  })
2114
2135
  })]
2115
- }), isLoadingOnScroll && onPopupScroll && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2136
+ }), isLoadingOnScroll && onPopupScroll && hasMore && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
2116
2137
  className: _styles.default['cap-unified-select-loading-overlay'],
2117
2138
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CapRow.default, {
2118
2139
  align: "middle",
@@ -2169,7 +2190,7 @@ const CapUnifiedSelect = _ref4 => {
2169
2190
  })
2170
2191
  })]
2171
2192
  });
2172
- }, [customPopupRender, filteredTree, searchText, isMulti, showUpload, uploadLabel, handleUpload, noResultCustomText, noResultCustomIcon, options, type, tempValue, handleConfirm, handleClearAll, popoverClassName, className, selectedLeafCount, clearText, allowClear, staticValue, showSearch, onFooterDownloadChange, handleFooterDownload, isSearching, handleSearchChange, handleSearchKeyDown, isLoadingOnScroll, onPopupScroll, isResettingData]);
2193
+ }, [customPopupRender, filteredTree, searchText, isMulti, showUpload, uploadLabel, handleUpload, noResultCustomText, noResultCustomIcon, options, type, tempValue, handleConfirm, handleClearAll, popoverClassName, className, selectedLeafCount, clearText, allowClear, staticValue, showSearch, onFooterDownloadChange, handleFooterDownload, isSearching, handleSearchChange, handleSearchKeyDown, isLoadingOnScroll, onPopupScroll, hasMore, isResettingData]);
2173
2194
  const combinedClassName = (0, _react.useMemo)(() => (0, _classnames.default)(containerClassName, _styles.default['cap-unified-tree-select'], {
2174
2195
  [_styles.default['cap-unified-tree-select-readonly']]: readOnly
2175
2196
  }, className), [containerClassName, className, readOnly]);