tabler-react-2 0.1.126 → 0.1.128

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.
@@ -113,7 +113,7 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
113
113
  var dropdownContent = /*#__PURE__*/_react["default"].createElement("div", _extends({
114
114
  className: "dropdown"
115
115
  }, props), /*#__PURE__*/_react["default"].createElement("a", _extends({
116
- href: "#",
116
+ href: "javascript:void(0)",
117
117
  className: "btn dropdown-toggle ".concat(props.disabled ? "disabled" : "", " ").concat(color ? "btn-".concat(outline ? "outline-" : "").concat(color) : ""),
118
118
  "data-bs-toggle": "dropdown"
119
119
  }, aprops), selectedValue ? selectedValue.label : prompt), /*#__PURE__*/_react["default"].createElement("div", {
@@ -156,7 +156,7 @@ var DropdownInput = exports.DropdownInput = function DropdownInput(_ref) {
156
156
  style: {
157
157
  cursor: isItemDisabled ? "not-allowed" : "pointer"
158
158
  },
159
- href: v.href || "#"
159
+ href: v.href || "javascript:void(0)"
160
160
  }, v.icon && /*#__PURE__*/_react["default"].createElement("span", {
161
161
  className: "dropdown-item-icon"
162
162
  }, v.icon), (_v$dropdownText = v.dropdownText) !== null && _v$dropdownText !== void 0 ? _v$dropdownText : v.label);
@@ -4,9 +4,10 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.Table = void 0;
7
+ exports.Table = exports.IconSortDescending = exports.IconSortAscending = exports.IconArrowsSort = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _index = require("../index");
10
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
12
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
13
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
@@ -20,7 +21,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
20
21
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
22
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
22
23
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
23
- var IconSortDescending = function IconSortDescending(_ref) {
24
+ var IconSortDescending = exports.IconSortDescending = function IconSortDescending(_ref) {
24
25
  var size = _ref.size;
25
26
  return /*#__PURE__*/_react["default"].createElement("svg", {
26
27
  xmlns: "http://www.w3.org/2000/svg",
@@ -49,7 +50,7 @@ var IconSortDescending = function IconSortDescending(_ref) {
49
50
  d: "M18 6l0 12"
50
51
  }));
51
52
  };
52
- var IconSortAscending = function IconSortAscending(_ref2) {
53
+ var IconSortAscending = exports.IconSortAscending = function IconSortAscending(_ref2) {
53
54
  var size = _ref2.size;
54
55
  return /*#__PURE__*/_react["default"].createElement("svg", {
55
56
  xmlns: "http://www.w3.org/2000/svg",
@@ -78,7 +79,7 @@ var IconSortAscending = function IconSortAscending(_ref2) {
78
79
  d: "M18 6l0 12"
79
80
  }));
80
81
  };
81
- var IconArrowsSort = function IconArrowsSort(_ref3) {
82
+ var IconArrowsSort = exports.IconArrowsSort = function IconArrowsSort(_ref3) {
82
83
  var size = _ref3.size;
83
84
  return /*#__PURE__*/_react["default"].createElement("svg", {
84
85
  xmlns: "http://www.w3.org/2000/svg",
@@ -109,9 +110,18 @@ var getValueByAccessor = function getValueByAccessor(object, accessor) {
109
110
  var Table = exports.Table = function Table(_ref4) {
110
111
  var columns = _ref4.columns,
111
112
  data = _ref4.data,
112
- nowrap = _ref4.nowrap,
113
- stickyHeader = _ref4.stickyHeader,
114
- className = _ref4.className;
113
+ _ref4$nowrap = _ref4.nowrap,
114
+ nowrap = _ref4$nowrap === void 0 ? false : _ref4$nowrap,
115
+ _ref4$stickyHeader = _ref4.stickyHeader,
116
+ stickyHeader = _ref4$stickyHeader === void 0 ? false : _ref4$stickyHeader,
117
+ _ref4$className = _ref4.className,
118
+ className = _ref4$className === void 0 ? "" : _ref4$className,
119
+ _ref4$showPagination = _ref4.showPagination,
120
+ showPagination = _ref4$showPagination === void 0 ? false : _ref4$showPagination,
121
+ _ref4$defaultRowsPerP = _ref4.defaultRowsPerPage,
122
+ defaultRowsPerPage = _ref4$defaultRowsPerP === void 0 ? 10 : _ref4$defaultRowsPerP,
123
+ _ref4$tableClassName = _ref4.tableClassName,
124
+ tableClassName = _ref4$tableClassName === void 0 ? "" : _ref4$tableClassName;
115
125
  var _useState = (0, _react.useState)({
116
126
  key: null,
117
127
  direction: "asc"
@@ -119,6 +129,14 @@ var Table = exports.Table = function Table(_ref4) {
119
129
  _useState2 = _slicedToArray(_useState, 2),
120
130
  sortConfig = _useState2[0],
121
131
  setSortConfig = _useState2[1];
132
+ var _useState3 = (0, _react.useState)(1),
133
+ _useState4 = _slicedToArray(_useState3, 2),
134
+ currentPage = _useState4[0],
135
+ setCurrentPage = _useState4[1];
136
+ var _useState5 = (0, _react.useState)(defaultRowsPerPage),
137
+ _useState6 = _slicedToArray(_useState5, 2),
138
+ pageSize = _useState6[0],
139
+ setPageSize = _useState6[1];
122
140
  var defaultSortFn = function defaultSortFn(a, b) {
123
141
  if (a === b) return 0;
124
142
  return a > b ? 1 : -1;
@@ -132,24 +150,32 @@ var Table = exports.Table = function Table(_ref4) {
132
150
  key: accessor,
133
151
  direction: direction
134
152
  });
153
+ setCurrentPage(1);
135
154
  };
136
- var sortedData = _react["default"].useMemo(function () {
137
- if (sortConfig.key) {
138
- var key = sortConfig.key,
139
- direction = sortConfig.direction;
140
- var sortColumn = columns.find(function (col) {
141
- return col.accessor === key;
142
- });
143
- var sortFunction = (sortColumn === null || sortColumn === void 0 ? void 0 : sortColumn.sortFn) || defaultSortFn;
144
- return _toConsumableArray(data).sort(function (a, b) {
145
- var aValue = getValueByAccessor(a, key);
146
- var bValue = getValueByAccessor(b, key);
147
- var order = direction === "asc" ? 1 : -1;
148
- return sortFunction(aValue, bValue) * order;
149
- });
150
- }
151
- return data;
155
+ var sortedData = (0, _react.useMemo)(function () {
156
+ if (!sortConfig.key) return data;
157
+ var key = sortConfig.key,
158
+ direction = sortConfig.direction;
159
+ var sortColumn = columns.find(function (col) {
160
+ return col.accessor === key;
161
+ });
162
+ var sortFunction = (sortColumn === null || sortColumn === void 0 ? void 0 : sortColumn.sortFn) || defaultSortFn;
163
+ var order = direction === "asc" ? 1 : -1;
164
+ return _toConsumableArray(data).sort(function (a, b) {
165
+ var aValue = getValueByAccessor(a, key);
166
+ var bValue = getValueByAccessor(b, key);
167
+ return sortFunction(aValue, bValue) * order;
168
+ });
152
169
  }, [data, sortConfig, columns]);
170
+ var pageSizeOptions = [10, 25, 50, 100];
171
+ var totalPages = (0, _react.useMemo)(function () {
172
+ return Math.max(1, Math.ceil(sortedData.length / pageSize));
173
+ }, [sortedData, pageSize]);
174
+ var paginatedData = (0, _react.useMemo)(function () {
175
+ if (!showPagination) return sortedData;
176
+ var start = (currentPage - 1) * pageSize;
177
+ return sortedData.slice(start, start + pageSize);
178
+ }, [sortedData, currentPage, pageSize, showPagination]);
153
179
  var getSortIcon = function getSortIcon(column) {
154
180
  if (sortConfig.key === column.accessor) {
155
181
  return sortConfig.direction === "asc" ? /*#__PURE__*/_react["default"].createElement(IconSortAscending, {
@@ -165,27 +191,27 @@ var Table = exports.Table = function Table(_ref4) {
165
191
  return /*#__PURE__*/_react["default"].createElement("div", {
166
192
  className: "table-responsive ".concat(nowrap ? "table-nowrap" : "", " ").concat(className)
167
193
  }, /*#__PURE__*/_react["default"].createElement("table", {
168
- className: "table table-vcenter ".concat(stickyHeader ? "sticky-top" : "")
169
- }, /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, columns.map(function (column, index) {
194
+ className: "table table-vcenter ".concat(stickyHeader ? "sticky-top" : "", " ").concat(tableClassName)
195
+ }, /*#__PURE__*/_react["default"].createElement("thead", null, /*#__PURE__*/_react["default"].createElement("tr", null, columns.map(function (column, idx) {
170
196
  return /*#__PURE__*/_react["default"].createElement("th", {
171
- key: index,
197
+ key: idx,
172
198
  className: "".concat(column.className || "", " ").concat(column.sortable ? "sortable" : ""),
173
199
  onClick: column.sortable ? function () {
174
- return handleSort(column.accessor, column === null || column === void 0 ? void 0 : column.sortFn);
200
+ return handleSort(column.accessor, column.sortFn);
175
201
  } : undefined,
176
202
  style: {
177
203
  cursor: column.sortable ? "pointer" : "default"
178
204
  }
179
205
  }, column.icon && /*#__PURE__*/_react["default"].createElement("span", {
180
206
  style: {
181
- marginRight: "8px"
207
+ marginRight: 8
182
208
  }
183
209
  }, column.icon), /*#__PURE__*/_react["default"].createElement("span", {
184
210
  style: {
185
- marginRight: "8px"
211
+ marginRight: 8
186
212
  }
187
213
  }, column.label), column.sortable && getSortIcon(column));
188
- }))), /*#__PURE__*/_react["default"].createElement("tbody", null, sortedData.map(function (row, rowIndex) {
214
+ }))), /*#__PURE__*/_react["default"].createElement("tbody", null, paginatedData.map(function (row, rowIndex) {
189
215
  return /*#__PURE__*/_react["default"].createElement("tr", {
190
216
  key: rowIndex
191
217
  }, columns.map(function (column, colIndex) {
@@ -194,21 +220,57 @@ var Table = exports.Table = function Table(_ref4) {
194
220
  className: column.className || ""
195
221
  }, column.render ? column.render(getValueByAccessor(row, column.accessor), row) : getValueByAccessor(row, column.accessor));
196
222
  }));
197
- }))));
223
+ }))), showPagination && /*#__PURE__*/_react["default"].createElement("div", {
224
+ className: "d-flex justify-content-between align-items-center mt-2"
225
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_index.Button, {
226
+ onClick: function onClick() {
227
+ return setCurrentPage(function (p) {
228
+ return Math.max(p - 1, 1);
229
+ });
230
+ },
231
+ disabled: currentPage === 1
232
+ }, "Previous"), /*#__PURE__*/_react["default"].createElement(_index.Button, {
233
+ onClick: function onClick() {
234
+ return setCurrentPage(function (p) {
235
+ return Math.min(p + 1, totalPages);
236
+ });
237
+ },
238
+ disabled: currentPage === totalPages,
239
+ style: {
240
+ marginLeft: 8
241
+ }
242
+ }, "Next"), /*#__PURE__*/_react["default"].createElement("span", {
243
+ style: {
244
+ marginLeft: 16
245
+ }
246
+ }, "Page ", currentPage, " of ", totalPages)), /*#__PURE__*/_react["default"].createElement(_index.DropdownInput, {
247
+ prompt: "Rows per page",
248
+ items: pageSizeOptions.map(function (size) {
249
+ return {
250
+ id: size,
251
+ label: size
252
+ };
253
+ }),
254
+ onChange: function onChange(selected) {
255
+ setPageSize(selected.id);
256
+ setCurrentPage(1);
257
+ }
258
+ })));
198
259
  };
199
260
  Table.propTypes = {
200
261
  columns: _propTypes["default"].arrayOf(_propTypes["default"].shape({
201
262
  label: _propTypes["default"].string.isRequired,
202
263
  accessor: _propTypes["default"].string.isRequired,
203
264
  className: _propTypes["default"].string,
204
- // Optional: For adding specific CSS classes
205
265
  render: _propTypes["default"].func,
206
- // Optional: Custom render function for the cell content
207
266
  sortable: _propTypes["default"].bool,
208
- // Optional: Determines if the column is sortable
209
- sortFn: _propTypes["default"].func // Optional: Custom sorting function
267
+ sortFn: _propTypes["default"].func,
268
+ icon: _propTypes["default"].node
210
269
  })).isRequired,
211
270
  data: _propTypes["default"].arrayOf(_propTypes["default"].object).isRequired,
212
271
  nowrap: _propTypes["default"].bool,
213
- stickyHeader: _propTypes["default"].bool
272
+ stickyHeader: _propTypes["default"].bool,
273
+ className: _propTypes["default"].string,
274
+ showPagination: _propTypes["default"].bool,
275
+ defaultRowsPerPage: _propTypes["default"].number
214
276
  };
@@ -2,7 +2,11 @@
2
2
  title: Changelog
3
3
  ---
4
4
 
5
- # 0.1.125
5
+ # 0.1.127
6
+
7
+ - Added support for `showPagination` and `defaultRowsPerPage` in the `Table` component.
8
+
9
+ # 0.1.126
6
10
 
7
11
  - Added support for `disabled` in the `DropdownInput` component.
8
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tabler-react-2",
3
- "version": "0.1.126",
3
+ "version": "0.1.128",
4
4
  "description": "A react implementation of Tabler ui",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {