pixelize-design-library 1.1.33 → 1.1.35

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 (41) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/Components/KaTable/CustomHeader.d.ts +12 -1
  3. package/dist/Components/KaTable/CustomHeader.js +38 -75
  4. package/dist/Components/KaTable/KaTable.d.ts +1 -1
  5. package/dist/Components/KaTable/KaTable.js +48 -13
  6. package/dist/Components/KaTable/KaTableProps.d.ts +4 -3
  7. package/dist/Components/KaTable/SelectionHeader.js +4 -2
  8. package/dist/Components/KaTable/ka-table.css +3 -9
  9. package/dist/Components/KaTable/useMergedChildComponents.d.ts +13 -1
  10. package/dist/Components/KaTable/useMergedChildComponents.js +53 -28
  11. package/dist/Components/SideBar/SideBar.js +58 -40
  12. package/dist/Components/Table/Components/Pagination.d.ts +15 -0
  13. package/dist/Components/Table/Components/Pagination.js +42 -0
  14. package/dist/Components/Table/Components/TableBody.d.ts +12 -0
  15. package/dist/Components/Table/Components/TableBody.js +35 -0
  16. package/dist/Components/Table/Components/TableHeader.d.ts +18 -0
  17. package/dist/Components/Table/Components/TableHeader.js +115 -0
  18. package/dist/Components/Table/Components/TableLoading.d.ts +3 -0
  19. package/dist/Components/Table/Components/TableLoading.js +31 -0
  20. package/dist/Components/Table/Table.css +29 -0
  21. package/dist/Components/Table/Table.d.ts +1 -1
  22. package/dist/Components/Table/Table.js +231 -217
  23. package/dist/Components/Table/TableProps.d.ts +20 -17
  24. package/dist/Constants/Sidebar.d.ts +15 -0
  25. package/dist/Constants/Sidebar.js +18 -0
  26. package/dist/Layout.js +5 -1
  27. package/dist/Pages/KaTableExample.js +19 -2
  28. package/dist/Pages/katable.d.ts +3 -0
  29. package/dist/Pages/katable.js +194 -0
  30. package/dist/Pages/table.d.ts +2 -0
  31. package/dist/Pages/table.js +59 -0
  32. package/dist/Theme/fonts.d.ts +1 -0
  33. package/dist/Theme/fonts.js +8 -3
  34. package/dist/Utils/common.d.ts +7 -0
  35. package/dist/Utils/common.js +64 -0
  36. package/dist/Utils/table.d.ts +9 -0
  37. package/dist/Utils/table.js +64 -0
  38. package/dist/bootstrap.js +1 -2
  39. package/package.json +2 -1
  40. package/dist/Theme/Default/fonts.d.ts +0 -35
  41. package/dist/Theme/Default/fonts.js +0 -37
@@ -10,6 +10,29 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
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
+ };
13
36
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
37
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
38
  if (ar || !(i in from)) {
@@ -23,44 +46,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
23
46
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
47
  };
25
48
  Object.defineProperty(exports, "__esModule", { value: true });
26
- var react_1 = __importDefault(require("react"));
49
+ var react_1 = __importStar(require("react"));
27
50
  var react_2 = require("@chakra-ui/react");
28
51
  var react_3 = require("@chakra-ui/react");
29
52
  var react_4 = require("react");
30
- var icons_1 = require("@chakra-ui/icons");
53
+ var Pagination_1 = __importDefault(require("./Components/Pagination"));
54
+ var table_1 = require("../../Utils/table");
55
+ var TableHeader_1 = __importDefault(require("./Components/TableHeader"));
56
+ var TableBody_1 = __importDefault(require("./Components/TableBody"));
57
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
58
+ var TableLoading_1 = __importDefault(require("./Components/TableLoading"));
59
+ // import "./Table.css";
60
+ var defaultPageSize = 5;
31
61
  function Table(_a) {
32
- var data = _a.data, headers = _a.headers, _b = _a.tableHeaderBgColor, tableHeaderBgColor = _b === void 0 ? "#3182ce" : _b, _c = _a.tableHeaderColor, tableHeaderColor = _c === void 0 ? "white" : _c, handleExportChange = _a.handleExportChange, exportOptions = _a.exportOptions, exportLabel = _a.exportLabel, isLoading = _a.isLoading, loadingContaxt = _a.loadingContaxt, loadingBoxStyle = _a.loadingBoxStyle, _d = _a.isVisiblity, isVisiblity = _d === void 0 ? true : _d;
33
- var _e = (0, react_4.useState)(0), currentPage = _e[0], setCurrentPage = _e[1];
34
- var _f = (0, react_4.useState)(5), rowsPerPage = _f[0], setRowsPerPage = _f[1];
35
- var _g = (0, react_4.useState)(null), sortField = _g[0], setSortField = _g[1];
36
- var _h = (0, react_4.useState)(null), sortDirection = _h[0], setSortDirection = _h[1];
62
+ var _b;
63
+ var data = _a.data, columns = _a.columns, handleExportChange = _a.handleExportChange, onSelection = _a.onSelection, exportOptions = _a.exportOptions, exportLabel = _a.exportLabel, isLoading = _a.isLoading, _c = _a.isVisiblity, isVisiblity = _c === void 0 ? true : _c, _d = _a.isCheckbox, isCheckbox = _d === void 0 ? false : _d, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, tableBorderColor = _a.tableBorderColor, _e = _a.noBorders, noBorders = _e === void 0 ? false : _e;
64
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
65
+ var _f = (0, react_4.useState)([]), selection = _f[0], setSelection = _f[1];
66
+ var _g = (0, react_4.useState)(0), currentPage = _g[0], setCurrentPage = _g[1];
67
+ var _h = (0, react_4.useState)(defaultPageSize), rowsPerPage = _h[0], setRowsPerPage = _h[1];
37
68
  var _j = (0, react_4.useState)(false), isPopoverOpen = _j[0], setPopoverOpen = _j[1];
38
69
  var _k = (0, react_4.useState)(null), activeHeader = _k[0], setActiveHeader = _k[1];
39
70
  var _l = (0, react_4.useState)({}), searchTerms = _l[0], setSearchTerms = _l[1];
40
71
  var _m = (0, react_4.useState)({}), searchOperation = _m[0], setSearchOperation = _m[1];
41
72
  var _o = (0, react_4.useState)({}), betweenValues = _o[0], setBetweenValues = _o[1];
42
- var _p = (0, react_4.useState)(null), hoveredHeaderIndex = _p[0], setHoveredHeaderIndex = _p[1];
43
- var _q = (0, react_4.useState)(headers.reduce(function (acc, curr) {
73
+ var _p = (0, react_4.useState)(columns.reduce(function (acc, curr) {
44
74
  var _a;
45
75
  return (__assign(__assign({}, acc), (_a = {}, _a[curr.label] = true, _a)));
46
- }, {})), visibleColumns = _q[0], setVisibleColumns = _q[1];
47
- if (isLoading) {
48
- return (react_1.default.createElement(react_2.Box, { width: "full", overflowX: "auto", style: loadingBoxStyle }, loadingContaxt ? (loadingContaxt) : (react_1.default.createElement(react_2.Spinner, { thickness: "4px", speed: "0.65s", emptyColor: "gray.200", color: "blue.500", size: "xl" }))));
49
- }
76
+ }, {})), visibleColumns = _p[0], setVisibleColumns = _p[1];
77
+ var _q = (0, react_4.useState)([]), columnWidths = _q[0], setColumnWidths = _q[1];
78
+ var headerRefs = (0, react_1.useRef)([]);
79
+ var _r = (0, react_4.useState)([]), columnsSort = _r[0], setColumnsSort = _r[1];
80
+ (0, react_1.useEffect)(function () {
81
+ // Measure widths after the component mounts
82
+ var widths = headerRefs.current.map(function (ref) { return (ref === null || ref === void 0 ? void 0 : ref.offsetWidth) || 0; });
83
+ setColumnWidths(widths);
84
+ }, [columns, visibleColumns]);
50
85
  var handlePageSizeChange = function (event) {
51
- setRowsPerPage(Number(event.target.value));
86
+ var value = Number(event.target.value);
87
+ setRowsPerPage(value !== 0 ? value : defaultPageSize);
52
88
  setCurrentPage(0);
53
89
  };
54
- var pageSizeOptions = [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 75, 100].filter(function (size) { return size <= data.length; });
55
- var sortedData = __spreadArray([], data, true).sort(function (a, b) {
56
- if (!sortField)
57
- return 0;
58
- if (a[sortField] < b[sortField])
59
- return sortDirection === "asc" ? -1 : 1;
60
- if (a[sortField] > b[sortField])
61
- return sortDirection === "asc" ? 1 : -1;
62
- return 0;
63
- });
90
+ // const sortedData = [...data].sort((a, b) => {
91
+ // if (!sortField) return 0;
92
+ // if (a[sortField] < b[sortField]) return sortDirection === "asc" ? -1 : 1;
93
+ // if (a[sortField] > b[sortField]) return sortDirection === "asc" ? 1 : -1;
94
+ // return 0;
95
+ // });
64
96
  var getValue = function (header) {
65
97
  var value = data.reduce(function (acc, item) {
66
98
  var itemValue = item[header];
@@ -73,12 +105,23 @@ function Table(_a) {
73
105
  }, []);
74
106
  return value;
75
107
  };
76
- var handleSort = function (field, sort) {
108
+ var handleSort = (0, react_1.useCallback)(function (field, sort) {
77
109
  if (!sort)
78
110
  return;
79
- setSortField(field);
80
- setSortDirection(sortDirection === "asc" ? "desc" : "asc");
81
- };
111
+ var newSortState = __spreadArray([], columnsSort, true);
112
+ var existingIndex = newSortState.findIndex(function (sort) { return sort.column === field; });
113
+ if (existingIndex === -1) {
114
+ newSortState.push({
115
+ column: field,
116
+ direction: "asc", // Default to ascending when adding a column
117
+ });
118
+ }
119
+ else {
120
+ var existingSort = newSortState[existingIndex];
121
+ existingSort.direction = sort;
122
+ }
123
+ setColumnsSort(newSortState);
124
+ }, [columnsSort]);
82
125
  var handleSearchOperation = function (header, operation) {
83
126
  setSearchOperation(function (prev) {
84
127
  var _a;
@@ -86,8 +129,8 @@ function Table(_a) {
86
129
  });
87
130
  var list_ofdata = getValue(header);
88
131
  if (operation === "between") {
89
- var smallestValue_1 = String(Math.min.apply(Math, list_ofdata));
90
- var highestValue_1 = String(Math.max.apply(Math, list_ofdata));
132
+ var smallestValue_1 = String(Math.min(Number.apply(void 0, list_ofdata)));
133
+ var highestValue_1 = String(Math.max(Number.apply(void 0, list_ofdata)));
91
134
  setBetweenValues(function (prev) {
92
135
  var _a;
93
136
  return (__assign(__assign({}, prev), (_a = {}, _a[header] = { min: smallestValue_1, max: highestValue_1 }, _a)));
@@ -107,7 +150,7 @@ function Table(_a) {
107
150
  else {
108
151
  setSearchTerms(function (prev) {
109
152
  var _a;
110
- return (__assign(__assign({}, prev), (_a = {}, _a[header] = list_ofdata[0], _a)));
153
+ return (__assign(__assign({}, prev), (_a = {}, _a[header] = list_ofdata[0].toString(), _a)));
111
154
  });
112
155
  }
113
156
  }
@@ -136,60 +179,75 @@ function Table(_a) {
136
179
  var closePopover = function () {
137
180
  setPopoverOpen(false);
138
181
  };
139
- var filteredData = sortedData.filter(function (item) {
140
- return Object.keys(searchTerms).every(function (key) {
141
- var term = String(searchTerms[key]).toLowerCase();
142
- var value = String(item[key]).toLowerCase();
143
- var operation = searchOperation[key] || "notBlank";
144
- switch (operation) {
145
- case "contains":
146
- return value.includes(term);
147
- case "notContains":
148
- return !value.includes(term);
149
- case "equals":
150
- return value === term;
151
- case "notEquals":
152
- return value !== term;
153
- case "beginsWith":
154
- return value.startsWith(term);
155
- case "endsWith":
156
- return value.endsWith(term);
157
- case "greaterThan":
158
- return Number(value) > Number(term);
159
- case "greaterThanOrEqual":
160
- return Number(value) >= Number(term);
161
- case "lessThan":
162
- return Number(value) < Number(term);
163
- case "lessThanOrEqual":
164
- return Number(value) <= Number(term);
165
- case "between": {
166
- var _a = betweenValues[key] || {}, min = _a.min, max = _a.max;
167
- return Number(value) >= Number(min) && Number(value) <= Number(max);
168
- }
169
- case "blank":
170
- return value === "";
171
- case "notBlank":
172
- return value !== "";
173
- default:
174
- return true;
182
+ var handleCheckbox = function (id) {
183
+ if (id === 0) {
184
+ if (selection.length === data.length) {
185
+ setSelection([]);
175
186
  }
176
- });
177
- });
178
- var pages = Math.ceil(filteredData.length / rowsPerPage);
179
- var startRow = currentPage * rowsPerPage;
180
- var endRow = startRow + rowsPerPage;
181
- var getFieldType = function (header) {
182
- for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
183
- var row = data_1[_i];
184
- if (row[header] !== null) {
185
- return typeof row[header];
187
+ else {
188
+ setSelection(data.map(function (item) { return item.id; }));
186
189
  }
187
190
  }
188
- return "string";
191
+ else if (selection.includes(id)) {
192
+ setSelection(selection.filter(function (item) { return item !== id; }));
193
+ }
194
+ else {
195
+ setSelection(__spreadArray(__spreadArray([], selection, true), [id], false));
196
+ }
189
197
  };
198
+ (0, react_1.useEffect)(function () {
199
+ onSelection && onSelection(selection);
200
+ }, [selection, onSelection]);
201
+ // const filteredData = sortedData.filter((item) => {
202
+ // return Object.keys(searchTerms).every((key) => {
203
+ // const term = String(searchTerms[key]).toLowerCase();
204
+ // const value = String(item[key]).toLowerCase();
205
+ // const operation = searchOperation[key] || "notBlank";
206
+ // switch (operation) {
207
+ // case "contains":
208
+ // return value.includes(term);
209
+ // case "notContains":
210
+ // return !value.includes(term);
211
+ // case "equals":
212
+ // return value === term;
213
+ // case "notEquals":
214
+ // return value !== term;
215
+ // case "beginsWith":
216
+ // return value.startsWith(term);
217
+ // case "endsWith":
218
+ // return value.endsWith(term);
219
+ // case "greaterThan":
220
+ // return Number(value) > Number(term);
221
+ // case "greaterThanOrEqual":
222
+ // return Number(value) >= Number(term);
223
+ // case "lessThan":
224
+ // return Number(value) < Number(term);
225
+ // case "lessThanOrEqual":
226
+ // return Number(value) <= Number(term);
227
+ // case "between": {
228
+ // const { min, max } = betweenValues[key] || {};
229
+ // return Number(value) >= Number(min) && Number(value) <= Number(max);
230
+ // }
231
+ // case "blank":
232
+ // return value === "";
233
+ // case "notBlank":
234
+ // return value !== "";
235
+ // default:
236
+ // return true;
237
+ // }
238
+ // });
239
+ // });
240
+ var pages = Math.ceil(data.length / rowsPerPage);
241
+ var startRow = currentPage * rowsPerPage;
242
+ var endRow = startRow + rowsPerPage;
243
+ // const hasSelection = selection.length > 0;
244
+ // const indeterminate = hasSelection && selection.length < data.length;
245
+ var tableData = (0, react_1.useMemo)(function () {
246
+ return (0, table_1.SortMultiColumnData)(data, columnsSort);
247
+ }, [data, columnsSort]);
190
248
  var searchFeatures = function (header) {
191
249
  var _a, _b;
192
- var fieldType = getFieldType(header);
250
+ var fieldType = (0, table_1.getFieldType)(header, data);
193
251
  return (react_1.default.createElement(react_1.default.Fragment, null,
194
252
  react_1.default.createElement(react_2.Select, { value: searchOperation[header] || "notBlank", onChange: function (e) { return handleSearchOperation(header, e.target.value); }, style: { background: "#3182ce", color: "white" } },
195
253
  react_1.default.createElement("option", { value: "equals" }, "Equals"),
@@ -245,145 +303,101 @@ function Table(_a) {
245
303
  return (__assign(__assign({}, prev), (_a = {}, _a[header] = !prev[header], _a)));
246
304
  });
247
305
  };
248
- function calculateLeftOffset(headers, currentIndex) {
249
- var offset = 0;
250
- for (var i = 0; i < currentIndex; i++) {
251
- if (headers[i].columnFreeze) {
252
- offset += 100;
253
- }
254
- }
255
- return offset;
256
- }
257
- var handleMouseEnter = function (index) { return setHoveredHeaderIndex(index); };
258
- var handleMouseLeave = function () {
259
- setHoveredHeaderIndex(null);
260
- closePopover();
261
- };
262
- var removeSearchOptionTerm = function (key) {
263
- var newSearchTerms = __assign({}, searchTerms);
264
- var newSearchOperation = __assign({}, searchOperation);
265
- var newBetweenValues = __assign({}, betweenValues);
266
- delete newSearchTerms[key];
267
- delete newSearchOperation[key];
268
- delete newBetweenValues[key];
269
- setSearchTerms(newSearchTerms);
270
- setSearchOperation(newSearchOperation);
271
- setBetweenValues(newBetweenValues);
306
+ // const handleMouseEnter = (index: number) => setHoveredHeaderIndex(index);
307
+ // const handleMouseLeave = () => {
308
+ // setHoveredHeaderIndex(null);
309
+ // closePopover();
310
+ // };
311
+ // const removeSearchOptionTerm = (key: any) => {
312
+ // const newSearchTerms = { ...searchTerms };
313
+ // const newSearchOperation = { ...searchOperation };
314
+ // const newBetweenValues = { ...betweenValues };
315
+ // delete newSearchTerms[key];
316
+ // delete newSearchOperation[key];
317
+ // delete newBetweenValues[key];
318
+ // setSearchTerms(newSearchTerms);
319
+ // setSearchOperation(newSearchOperation);
320
+ // setBetweenValues(newBetweenValues);
321
+ // };
322
+ // const SearchOptions = () => {
323
+ // return (
324
+ // <Wrap>
325
+ // {searchOperation &&
326
+ // Object.keys(searchOperation).map((key, index) => {
327
+ // return (
328
+ // <Tag
329
+ // size="sm"
330
+ // key={index}
331
+ // borderRadius="full"
332
+ // variant="solid"
333
+ // colorScheme="gray"
334
+ // m={1}
335
+ // >
336
+ // <Box display="flex" alignItems="center">
337
+ // <TagLabel>{key}</TagLabel>
338
+ // <TagLabel mx={2}>{searchOperation[key]}</TagLabel>
339
+ // {searchOperation[key] === "between" ? (
340
+ // <TagLabel>
341
+ // {betweenValues[key]?.min} - {betweenValues[key]?.max}
342
+ // </TagLabel>
343
+ // ) : (
344
+ // <TagLabel>{searchTerms[key]}</TagLabel>
345
+ // )}
346
+ // </Box>
347
+ // <TagCloseButton onClick={() => removeSearchOptionTerm(key)} />
348
+ // </Tag>
349
+ // );
350
+ // })}
351
+ // </Wrap>
352
+ // );
353
+ // };
354
+ // const Export = ({
355
+ // exportOptions,
356
+ // }: {
357
+ // exportOptions: TableProps["exportOptions"];
358
+ // }) => {
359
+ // return (
360
+ // <Select
361
+ // placeholder="Exports"
362
+ // width={160}
363
+ // onChange={(e) => {
364
+ // handleExportChange && handleExportChange(e.target.value);
365
+ // }}
366
+ // value={exportLabel}
367
+ // key={exportLabel}
368
+ // >
369
+ // {exportOptions?.map((option) => (
370
+ // <option key={option.id} value={option.id}>
371
+ // {option.label}
372
+ // </option>
373
+ // ))}
374
+ // </Select>
375
+ // );
376
+ // };
377
+ var RenderTable = function (_a) {
378
+ var _b, _c, _d;
379
+ var columns = _a.columns;
380
+ return (react_1.default.createElement(react_3.Table, { variant: "simple", size: "sm", overflowX: "scroll", minW: "100%", className: "sticky-columns" },
381
+ react_1.default.createElement(react_3.Thead, null,
382
+ react_1.default.createElement(TableHeader_1.default, { columns: columns, isCheckbox: isCheckbox, headerBgColor: headerBgColor !== null && headerBgColor !== void 0 ? headerBgColor : theme.colors.backgroundColor.muted, headerTextColor: headerTextColor !== null && headerTextColor !== void 0 ? headerTextColor : (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[600], freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.gray[600], visibleColumns: visibleColumns, handleSort: handleSort, activeHeader: activeHeader, isPopoverOpen: isPopoverOpen, closePopover: closePopover, searchFeatures: searchFeatures, handleHeaderClick: handleHeaderClick, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, checked: selection.length === data.length
383
+ ? true
384
+ : selection.length === 0
385
+ ? false
386
+ : "indeterminate" })),
387
+ react_1.default.createElement(react_3.Tbody, null,
388
+ react_1.default.createElement(TableBody_1.default, { data: tableData, columns: columns, startRow: startRow, endRow: endRow, visibleColumns: visibleColumns, isCheckbox: isCheckbox, columnWidths: columnWidths, noBorders: noBorders, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_d = theme.colors) === null || _d === void 0 ? void 0 : _d.gray[600], handleCheckbox: handleCheckbox, selections: selection }))));
272
389
  };
273
- return (react_1.default.createElement("div", null,
274
- react_1.default.createElement(react_2.Wrap, null, searchOperation &&
275
- Object.keys(searchOperation).map(function (key, index) {
276
- var _a, _b;
277
- return (react_1.default.createElement(react_2.Tag, { size: "sm", key: index, borderRadius: "full", variant: "solid", colorScheme: "gray", m: 1 },
278
- react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center" },
279
- react_1.default.createElement(react_2.TagLabel, null, key),
280
- react_1.default.createElement(react_2.TagLabel, { mx: 2 }, searchOperation[key]),
281
- searchOperation[key] === "between" ? (react_1.default.createElement(react_2.TagLabel, null, (_a = betweenValues[key]) === null || _a === void 0 ? void 0 :
282
- _a.min,
283
- " - ", (_b = betweenValues[key]) === null || _b === void 0 ? void 0 :
284
- _b.max)) : (react_1.default.createElement(react_2.TagLabel, null, searchTerms[key]))),
285
- react_1.default.createElement(react_2.TagCloseButton, { onClick: function () { return removeSearchOptionTerm(key); } })));
286
- })),
287
- react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "flex-end" }, exportOptions && exportOptions.length > 0 && (react_1.default.createElement(react_2.Select, { placeholder: "Exports", width: 160, onChange: function (e) {
288
- handleExportChange && handleExportChange(e.target.value);
289
- }, value: exportLabel, key: exportLabel }, exportOptions.map(function (option) { return (react_1.default.createElement("option", { key: option.id, value: option.id }, option.label)); })))),
390
+ if (isLoading)
391
+ return react_1.default.createElement(TableLoading_1.default, null);
392
+ return (react_1.default.createElement(react_1.default.Fragment, null,
290
393
  react_1.default.createElement("br", null),
291
- react_1.default.createElement(react_2.TableContainer, null,
292
- react_1.default.createElement(react_3.Table, { variant: "simple", colorScheme: "teal", size: "md", overflowX: "scroll", minW: "100%" },
293
- react_1.default.createElement(react_3.Thead, { background: tableHeaderBgColor },
294
- react_1.default.createElement(react_3.Tr, null, headers.map(function (header, index) {
295
- var isFrozen = header.columnFreeze;
296
- var leftOffset = calculateLeftOffset(headers, index);
297
- return (visibleColumns[header.label] && (react_1.default.createElement(react_3.Th, { key: index + 1, style: {
298
- textTransform: "capitalize",
299
- color: tableHeaderColor,
300
- fontSize: "medium",
301
- fontWeight: 600,
302
- position: isFrozen ? "sticky" : undefined,
303
- left: isFrozen
304
- ? "".concat(leftOffset === 0 ? leftOffset : leftOffset - 4, "px")
305
- : undefined,
306
- zIndex: isFrozen ? 2 : 1,
307
- background: tableHeaderBgColor,
308
- textAlign: "center",
309
- width: "300px",
310
- }, onMouseEnter: function () { return handleMouseEnter(index); }, onMouseLeave: handleMouseLeave },
311
- react_1.default.createElement(react_2.Button, { onClick: function () {
312
- return handleSort(header.label, header.sort ? header.sort : false);
313
- }, style: {
314
- textTransform: "capitalize",
315
- color: "white",
316
- background: "none",
317
- paddingRight: "0px",
318
- } },
319
- header.label,
320
- react_1.default.createElement("span", { style: { width: "20px" } }, sortField === header.label &&
321
- (sortDirection === "asc" ? (react_1.default.createElement(icons_1.ArrowUpIcon, { w: 15, h: 15 })) : (react_1.default.createElement(icons_1.ArrowDownIcon, { w: 15, h: 15 }))))),
322
- react_1.default.createElement("div", { style: { display: "inline-block", width: "10px" } },
323
- react_1.default.createElement(react_2.Popover, { isOpen: activeHeader === header.label &&
324
- isPopoverOpen &&
325
- header.search, onClose: closePopover, placement: "bottom-start", closeOnBlur: false },
326
- react_1.default.createElement(react_2.PopoverTrigger, null,
327
- react_1.default.createElement("span", null,
328
- react_1.default.createElement(icons_1.HamburgerIcon, { w: 15, h: 15, onClick: function () {
329
- return handleHeaderClick(header.label, header.search ? header.search : false);
330
- }, style: {
331
- cursor: "pointer",
332
- display: hoveredHeaderIndex === index &&
333
- header.search
334
- ? "inline"
335
- : "none",
336
- } }))),
337
- react_1.default.createElement(react_2.PopoverContent, { width: 200, zIndex: 3 },
338
- react_1.default.createElement(react_2.PopoverBody, { background: "#deeefd" }, searchFeatures(header.label))))))));
339
- }))),
340
- react_1.default.createElement(react_3.Tbody, null, filteredData.slice(startRow, endRow).map(function (row, index) { return (react_1.default.createElement(react_3.Tr, { key: index + 1, style: {
341
- backgroundColor: index % 2 === 0 ? "#f7f7f7" : "white",
342
- }, border: "none" }, headers.map(function (header, headerIndex) {
343
- var isFrozen = header.columnFreeze;
344
- var leftOffset = calculateLeftOffset(headers, headerIndex);
345
- return (visibleColumns[header.label] && (react_1.default.createElement(react_3.Td, { key: headerIndex + 1, style: {
346
- border: "none",
347
- textAlign: "center",
348
- position: isFrozen ? "sticky" : undefined,
349
- left: isFrozen
350
- ? "".concat(leftOffset === 0 ? leftOffset : leftOffset - 4, "px")
351
- : undefined,
352
- zIndex: isFrozen ? 1 : 0,
353
- backgroundColor: index % 2 === 0 ? "#f7f7f7" : "white",
354
- // overflow: "hidden",
355
- textOverflow: "ellipsis",
356
- } }, typeof header.accessor_function === "function" &&
357
- header.accessor_key in row
358
- ? header.accessor_function(row[header.accessor_key])
359
- : row[header.accessor_key])));
360
- }))); })))),
361
- react_1.default.createElement(react_2.Flex, { justify: "flex-end", align: "center", mt: 4 },
362
- isVisiblity && (react_1.default.createElement(react_2.Flex, { mr: 4 },
363
- react_1.default.createElement(react_2.Menu, null,
364
- react_1.default.createElement(react_2.MenuButton, { as: react_2.Button, rightIcon: react_1.default.createElement(icons_1.ChevronDownIcon, null), colorScheme: "blue", variant: "outline" }, "Visiblity"),
365
- react_1.default.createElement(react_2.MenuList, { height: 150, overflow: "scroll", zIndex: "2" }, headers.map(function (header, index) { return (react_1.default.createElement(react_2.MenuItem, { key: index },
366
- react_1.default.createElement(react_2.Checkbox, { isChecked: visibleColumns[header.label], onChange: function () {
367
- return handleColumnVisibilityChange(header.label);
368
- } }, header.label))); }))))),
369
- react_1.default.createElement(react_2.Text, { mr: 4 },
370
- startRow + 1,
371
- " to ",
372
- endRow,
373
- " of ",
374
- filteredData.length),
375
- react_1.default.createElement(react_2.Select, { onChange: handlePageSizeChange, value: rowsPerPage, mr: 4, width: 20 }, pageSizeOptions.map(function (size, index) { return (react_1.default.createElement("option", { key: index, value: size }, size)); })),
376
- react_1.default.createElement(react_2.Flex, null,
377
- react_1.default.createElement(react_2.Button, { mx: 1, disabled: currentPage === 0, onClick: function () { return setCurrentPage(0); } }, "<<"),
378
- react_1.default.createElement(react_2.Button, { mx: 1, disabled: currentPage === 0, onClick: function () { return currentPage > 0 && setCurrentPage(currentPage - 1); } }, "<"),
379
- react_1.default.createElement(react_2.Text, { mx: 1, mt: 2 },
380
- "Page ",
381
- currentPage + 1,
382
- " of ",
383
- pages),
384
- react_1.default.createElement(react_2.Button, { mx: 1, disabled: currentPage > pages, onClick: function () {
385
- return currentPage < pages - 1 && setCurrentPage(currentPage + 1);
386
- } }, ">"),
387
- react_1.default.createElement(react_2.Button, { mx: 1, disabled: currentPage >= pages - 1, onClick: function () { return setCurrentPage(pages - 1); } }, ">>")))));
394
+ react_1.default.createElement(react_2.TableContainer, { sx: {
395
+ borderRadius: "10px 0 0 10px",
396
+ borderWidth: "0px 0px 0px 5px",
397
+ borderColor: tableBorderColor !== null && tableBorderColor !== void 0 ? tableBorderColor : (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[500],
398
+ boxShadow: theme.shadows.lg,
399
+ } },
400
+ react_1.default.createElement(RenderTable, { columns: columns })),
401
+ react_1.default.createElement(Pagination_1.default, { columns: columns, currentPage: currentPage, setCurrentPage: setCurrentPage, rowsPerPage: rowsPerPage, pages: pages, paginationText: "".concat(startRow + 1, " to ").concat(endRow, " of ").concat(data.length), handlePageSizeChange: handlePageSizeChange, dataLength: data.length, visibleColumns: visibleColumns, handleColumnVisibilityChange: handleColumnVisibilityChange, isVisiblity: true })));
388
402
  }
389
403
  exports.default = Table;
@@ -1,34 +1,37 @@
1
- import { ReactNode } from "react";
1
+ /// <reference types="react" />
2
2
  export type TableProps = {
3
3
  data: DataObject[];
4
- headers: TableHeader[];
5
- tableHeaderBgColor?: string;
6
- tableHeaderColor?: string;
4
+ columns: TableHeaderProps[];
7
5
  handleExportChange?: (value: string) => void | undefined;
8
6
  exportOptions?: ExportOption[];
9
7
  exportLabel?: string;
10
8
  isLoading?: boolean;
11
- loadingType?: "skeleton" | "spinner";
12
- loadingContaxt?: ReactNode;
13
- loadingBoxStyle?: React.CSSProperties;
14
9
  isVisiblity?: boolean;
10
+ isCheckbox?: boolean;
11
+ headerBgColor?: string;
12
+ freezedBgColor?: string;
13
+ headerTextColor?: string;
14
+ freezedTextColor?: string;
15
+ tableBorderColor?: string;
16
+ noBorders?: boolean;
17
+ onSelection?: (selected: (string | number)[]) => void;
15
18
  };
16
19
  export type DataObject = {
17
- id: number;
18
- name: string;
19
- email: string;
20
- role: string;
21
20
  [key: string]: string | number;
22
21
  };
23
- export type TableHeader = {
22
+ export type TableHeaderProps = {
24
23
  label: string;
25
- accessor_key: string;
26
- sort?: boolean;
27
- search?: boolean;
28
- columnFreeze?: boolean;
29
- accessor_function?: (data: string | number) => JSX.Element | string | number;
24
+ id: string;
25
+ isSort?: boolean;
26
+ isSearch?: boolean;
27
+ isFreeze?: boolean;
28
+ node?: (data: DataObject) => JSX.Element | string | number | undefined;
30
29
  };
31
30
  export type ExportOption = {
32
31
  label: string;
33
32
  id: string;
34
33
  };
34
+ export type ColumnSortingProps = {
35
+ column: string;
36
+ direction: "asc" | "desc" | "none";
37
+ };
@@ -0,0 +1,15 @@
1
+ export declare const FlexCss: {
2
+ "&::-webkit-scrollbar": {
3
+ width: string;
4
+ };
5
+ "&::-webkit-scrollbar-track": {
6
+ background: string;
7
+ };
8
+ "&::-webkit-scrollbar-thumb": {
9
+ background: string;
10
+ transition: string;
11
+ };
12
+ "&:hover::-webkit-scrollbar-thumb": {
13
+ background: string;
14
+ };
15
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlexCss = void 0;
4
+ exports.FlexCss = {
5
+ "&::-webkit-scrollbar": {
6
+ width: "3px",
7
+ },
8
+ "&::-webkit-scrollbar-track": {
9
+ background: "transparent",
10
+ },
11
+ "&::-webkit-scrollbar-thumb": {
12
+ background: "transparent",
13
+ transition: "background 0.5s",
14
+ },
15
+ "&:hover::-webkit-scrollbar-thumb": {
16
+ background: "#888",
17
+ },
18
+ };
package/dist/Layout.js CHANGED
@@ -58,6 +58,7 @@ var toster_1 = __importDefault(require("./Pages/toster"));
58
58
  var input_1 = __importDefault(require("./Pages/input"));
59
59
  var KaTableExample_1 = __importDefault(require("./Pages/KaTableExample"));
60
60
  var alertdialog_1 = __importDefault(require("./Pages/alertdialog"));
61
+ var table_1 = require("./Pages/table");
61
62
  var Layout = function () {
62
63
  var _a = (0, react_2.useState)(window.location.pathname), currentPath = _a[0], setCurrentPath = _a[1];
63
64
  var navigate = function (path) {
@@ -135,6 +136,8 @@ var Layout = function () {
135
136
  return react_2.default.createElement(toster_1.default, null);
136
137
  case "/input":
137
138
  return react_2.default.createElement(input_1.default, null);
139
+ case "/table":
140
+ return react_2.default.createElement(table_1.TableExample, null);
138
141
  case "/":
139
142
  default:
140
143
  }
@@ -171,7 +174,8 @@ var Layout = function () {
171
174
  react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/modal"); } }, "Modal"),
172
175
  react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/checkbox"); } }, "Checkbox"),
173
176
  react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/toster"); } }, "Toster"),
174
- react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/input"); } }, "Input")),
177
+ react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/input"); } }, "Input"),
178
+ react_2.default.createElement(react_1.Button, { onClick: function () { return navigate("/table"); } }, "Table")),
175
179
  react_2.default.createElement("br", null),
176
180
  react_2.default.createElement("br", null),
177
181
  renderPage()));