@dreamtree-org/twreact-ui 1.0.70 → 1.0.71

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/dist/index.esm.js CHANGED
@@ -3863,7 +3863,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3863
3863
  }, error));
3864
3864
  });
3865
3865
 
3866
- var _excluded$k = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "stripedColors", "responsiveBreakpoint"];
3866
+ var _excluded$k = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "stripedColors", "responsiveBreakpoint", "serverSide", "totalRecords", "pageNumber", "onPageChange"];
3867
3867
  function ownKeys$9(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3868
3868
  function _objectSpread$9(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$9(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$9(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3869
3869
  var Table = function Table(_ref) {
@@ -3917,7 +3917,13 @@ var Table = function Table(_ref) {
3917
3917
  stripedColors = _ref$stripedColors === void 0 ? ["#ffffff", "#f7fafc"] : _ref$stripedColors,
3918
3918
  _ref$responsiveBreakp = _ref.responsiveBreakpoint,
3919
3919
  responsiveBreakpoint = _ref$responsiveBreakp === void 0 ? 768 : _ref$responsiveBreakp,
3920
- props = _objectWithoutProperties$1(_ref, _excluded$k);
3920
+ _ref$serverSide = _ref.serverSide,
3921
+ serverSide = _ref$serverSide === void 0 ? false : _ref$serverSide,
3922
+ _ref$totalRecords = _ref.totalRecords,
3923
+ totalRecords = _ref$totalRecords === void 0 ? 0 : _ref$totalRecords,
3924
+ pageNumber = _ref.pageNumber;
3925
+ _ref.onPageChange;
3926
+ var props = _objectWithoutProperties$1(_ref, _excluded$k);
3921
3927
  // State for responsive view
3922
3928
  var _useState = useState(false),
3923
3929
  _useState2 = _slicedToArray(_useState, 2),
@@ -3978,7 +3984,7 @@ var Table = function Table(_ref) {
3978
3984
  _useState16 = _slicedToArray(_useState15, 2),
3979
3985
  expandedRows = _useState16[0],
3980
3986
  setExpandedRows = _useState16[1];
3981
- var _useState17 = useState(1),
3987
+ var _useState17 = useState(typeof pageNumber === "number" ? pageNumber : 1),
3982
3988
  _useState18 = _slicedToArray(_useState17, 2),
3983
3989
  currentPage = _useState18[0],
3984
3990
  setCurrentPage = _useState18[1];
@@ -4008,6 +4014,14 @@ var Table = function Table(_ref) {
4008
4014
  openActionKey = _useState28[0],
4009
4015
  setOpenActionKey = _useState28[1];
4010
4016
  var openRef = useRef(null);
4017
+ useEffect(function () {
4018
+ if (typeof pageNumber === "number" && pageNumber !== currentPage) {
4019
+ setCurrentPage(pageNumber);
4020
+ }
4021
+ }, [pageNumber]);
4022
+ useEffect(function () {
4023
+ setLimit(pageSize);
4024
+ }, [pageSize]);
4011
4025
 
4012
4026
  // Check if mobile view
4013
4027
  useEffect(function () {
@@ -4027,9 +4041,6 @@ var Table = function Table(_ref) {
4027
4041
  var isValidList = function isValidList(d) {
4028
4042
  return Array.isArray(d);
4029
4043
  };
4030
- var setDataForExternal = function setDataForExternal(newData) {
4031
- if (isValidList(newData)) setTableData(newData);else setTableData([]);
4032
- };
4033
4044
 
4034
4045
  // Close column menu when clicking outside
4035
4046
  useEffect(function () {
@@ -4126,70 +4137,42 @@ var Table = function Table(_ref) {
4126
4137
 
4127
4138
  // Sorting
4128
4139
  var sortedData = useMemo(function () {
4129
- if (!sortConfig.key) return tableData;
4140
+ if (serverSide || !sortConfig.key) return tableData;
4130
4141
  var key = sortConfig.key,
4131
4142
  direction = sortConfig.direction;
4132
4143
  return _toConsumableArray$1(tableData).sort(function (a, b) {
4133
- var aValue = a === null || a === void 0 ? void 0 : a[key];
4134
- var bValue = b === null || b === void 0 ? void 0 : b[key];
4135
- if (aValue == null && bValue == null) return 0;
4136
- if (aValue == null) return direction === "asc" ? -1 : 1;
4137
- if (bValue == null) return direction === "asc" ? 1 : -1;
4138
- if (typeof aValue === "number" && typeof bValue === "number") {
4139
- return direction === "asc" ? aValue - bValue : bValue - aValue;
4140
- }
4141
- var aStr = String(aValue).toLowerCase();
4142
- var bStr = String(bValue).toLowerCase();
4143
- if (aStr < bStr) return direction === "asc" ? -1 : 1;
4144
- if (aStr > bStr) return direction === "asc" ? 1 : -1;
4145
- return 0;
4144
+ var av = a === null || a === void 0 ? void 0 : a[key];
4145
+ var bv = b === null || b === void 0 ? void 0 : b[key];
4146
+ if (av == null || bv == null) return 0;
4147
+ if (typeof av === "number") return direction === "asc" ? av - bv : bv - av;
4148
+ return direction === "asc" ? String(av).localeCompare(String(bv)) : String(bv).localeCompare(String(av));
4146
4149
  });
4147
- }, [tableData, sortConfig]);
4150
+ }, [tableData, sortConfig, serverSide]);
4148
4151
 
4149
4152
  // Filtering
4150
4153
  var filteredData = useMemo(function () {
4151
- if (!filterable || Object.keys(filters).length === 0) return sortedData;
4152
- var globalQuery = String(filters.global || "").trim().toLowerCase();
4154
+ if (serverSide || !filterable || !Object.keys(filters).length) return sortedData;
4155
+ var q = (filters.global || "").toLowerCase();
4153
4156
  return sortedData.filter(function (row) {
4154
- // Per-column filters
4155
- var perColumnOk = Object.entries(filters).every(function (_ref2) {
4156
- var _ref3 = _slicedToArray(_ref2, 2),
4157
- key = _ref3[0],
4158
- value = _ref3[1];
4159
- if (key === "global") return true;
4160
- if (!value) return true;
4161
- var cell = row === null || row === void 0 ? void 0 : row[key];
4162
- if (cell == null) return false;
4163
- return String(cell).toLowerCase().includes(String(value).toLowerCase());
4157
+ return Object.values(row || {}).some(function (v) {
4158
+ return String(v).toLowerCase().includes(q);
4164
4159
  });
4165
- if (!perColumnOk) return false;
4166
-
4167
- // Global filter
4168
- if (globalQuery) {
4169
- var matchesVisible = visibleColumns.some(function (col) {
4170
- var v = row === null || row === void 0 ? void 0 : row[col.key];
4171
- if (v == null) return false;
4172
- return String(v).toLowerCase().includes(globalQuery);
4173
- });
4174
- if (matchesVisible) return true;
4175
- return Object.values(row || {}).some(function (v) {
4176
- return v != null ? String(v).toLowerCase().includes(globalQuery) : false;
4177
- });
4178
- }
4179
- return true;
4180
4160
  });
4181
- }, [sortedData, filters, filterable, visibleColumns]);
4182
-
4161
+ }, [sortedData, filters, filterable, serverSide]);
4183
4162
  // Pagination indices
4184
4163
  var startIndex = pagination ? (currentPage - 1) * limit : 0;
4185
4164
  var endIndex = pagination ? startIndex + limit : filteredData.length;
4186
4165
 
4187
4166
  // Paginated view
4188
4167
  var paginatedData = useMemo(function () {
4189
- if (!pagination) return filteredData;
4190
- return filteredData.slice(startIndex, endIndex);
4191
- }, [filteredData, startIndex, endIndex, pagination]);
4192
- var totalPages = Math.max(1, Math.ceil(filteredData.length / limit));
4168
+ if (!pagination || serverSide) return filteredData;
4169
+ var start = (currentPage - 1) * limit;
4170
+ return filteredData.slice(start, start + limit);
4171
+ }, [filteredData, pagination, serverSide, currentPage, limit]);
4172
+ var totalPages = useMemo(function () {
4173
+ if (!pagination) return 1;
4174
+ return serverSide ? Math.max(1, Math.ceil((totalRecords || 0) / limit)) : Math.max(1, Math.ceil(filteredData.length / limit));
4175
+ }, [pagination, serverSide, totalRecords, filteredData.length, limit]);
4193
4176
 
4194
4177
  // Sorting handler
4195
4178
  var handleSort = function handleSort(key) {
@@ -4304,17 +4287,19 @@ var Table = function Table(_ref) {
4304
4287
  useEffect(function () {
4305
4288
  if (!onFetch) return;
4306
4289
  onFetch({
4307
- setData: setDataForExternal,
4308
- filters: filters,
4290
+ setData: function setData(rows) {
4291
+ return setTableData(Array.isArray(rows) ? rows : []);
4292
+ },
4309
4293
  setLoading: setLoading,
4310
- pagination: {
4311
- currentPage: currentPage,
4312
- limit: limit,
4313
- totalPages: totalPages,
4314
- nextRecords: paginatedData
4315
- }
4294
+ filters: filters,
4295
+ page: currentPage,
4296
+ limit: limit,
4297
+ sort: sortConfig
4316
4298
  });
4317
- }, [filters, currentPage, limit]);
4299
+ }, [onFetch, filters, currentPage, limit, sortConfig]);
4300
+ useEffect(function () {
4301
+ if (!serverSide) setTableData(data);
4302
+ }, [data, serverSide]);
4318
4303
  useEffect(function () {
4319
4304
  if (!onFetch && isValidList(data)) setTableData(data);
4320
4305
  }, [data, onFetch]);
@@ -4332,13 +4317,11 @@ var Table = function Table(_ref) {
4332
4317
  applyGlobalSearch();
4333
4318
  }
4334
4319
  };
4335
- useEffect(function () {
4336
- setLimit(pageSize);
4337
- }, [pageSize]);
4338
4320
  var handleLimitChange = function handleLimitChange(nextLimit) {
4339
4321
  var parsed = Number(nextLimit);
4340
4322
  if (!Number.isFinite(parsed) || parsed <= 0) return;
4341
4323
  setLimit(parsed);
4324
+ setCurrentPage(1);
4342
4325
  onLimitChange === null || onLimitChange === void 0 || onLimitChange(parsed);
4343
4326
  };
4344
4327
 
@@ -4681,7 +4664,7 @@ var Table = function Table(_ref) {
4681
4664
  }, /*#__PURE__*/React__default.createElement("input", {
4682
4665
  type: "text",
4683
4666
  placeholder: "Filter ".concat(column.label),
4684
- className: "w-full rounded-md border border-gray-300 px-3 py-1.5 text-sm",
4667
+ className: "w-full rounded-md border border-gray-300 px-3 py-1.5 text-sm font-normal",
4685
4668
  value: filters[column.key] || "",
4686
4669
  onChange: function onChange(e) {
4687
4670
  return handleFilter(column.key, e.target.value);
@@ -4881,14 +4864,14 @@ var Table = function Table(_ref) {
4881
4864
  }
4882
4865
  }, "Next")))));
4883
4866
  };
4884
- function ActionMenuPortal(_ref4) {
4885
- var anchorElem = _ref4.anchorElem,
4886
- anchorRow = _ref4.anchorRow,
4887
- _ref4$actions = _ref4.actions,
4888
- actions = _ref4$actions === void 0 ? [] : _ref4$actions;
4889
- _ref4.onClose;
4890
- var onAction = _ref4.onAction,
4891
- menuRef = _ref4.menuRef;
4867
+ function ActionMenuPortal(_ref2) {
4868
+ var anchorElem = _ref2.anchorElem,
4869
+ anchorRow = _ref2.anchorRow,
4870
+ _ref2$actions = _ref2.actions,
4871
+ actions = _ref2$actions === void 0 ? [] : _ref2$actions;
4872
+ _ref2.onClose;
4873
+ var onAction = _ref2.onAction,
4874
+ menuRef = _ref2.menuRef;
4892
4875
  var _useState29 = useState({
4893
4876
  left: 0,
4894
4877
  top: 0,