pixelize-design-library 1.1.49 → 1.1.51

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.
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const TableActions: ({ row }: any) => React.JSX.Element;
3
+ export default TableActions;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var react_2 = require("@chakra-ui/react");
8
+ var fa_1 = require("react-icons/fa");
9
+ var md_1 = require("react-icons/md");
10
+ var icons_1 = require("@chakra-ui/icons");
11
+ var TableActions = function (_a) {
12
+ var row = _a.row;
13
+ return (react_1.default.createElement(react_2.Popover, { placement: "bottom-start" },
14
+ react_1.default.createElement(react_2.PopoverTrigger, null,
15
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Link", color: "black", icon: react_1.default.createElement(fa_1.FaEllipsisV, { fontSize: 12 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" } })),
16
+ react_1.default.createElement(react_2.Portal, null,
17
+ react_1.default.createElement(react_2.PopoverContent, { w: "auto", minW: "150px", boxShadow: "lg", p: 0, zIndex: 999 },
18
+ react_1.default.createElement(react_2.PopoverBody, null,
19
+ react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1 },
20
+ row.onLink && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () { return row === null || row === void 0 ? void 0 : row.onLink(row); } },
21
+ react_1.default.createElement(icons_1.ExternalLinkIcon, null),
22
+ " View")),
23
+ row.onEdit && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, onClick: function () { var _a; return (_a = row === null || row === void 0 ? void 0 : row.onEdit) === null || _a === void 0 ? void 0 : _a.call(row, row); } },
24
+ react_1.default.createElement(icons_1.EditIcon, null),
25
+ " Edit")),
26
+ row.onDelete && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", colorScheme: "red", gap: 2, onClick: function () { var _a; return (_a = row === null || row === void 0 ? void 0 : row.onDelete) === null || _a === void 0 ? void 0 : _a.call(row, row); } },
27
+ react_1.default.createElement(md_1.MdDelete, null),
28
+ "Delete"))))))));
29
+ };
30
+ exports.default = TableActions;
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { TableBodyPageProps } from "../TableProps";
3
- declare const TableBody: ({ data, isCheckbox, columns, visibleColumns, startRow, endRow, columnWidths, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, selections, isLoading, onRowClick, isContent, isLink, }: TableBodyPageProps) => React.JSX.Element;
3
+ declare const TableBody: ({ data, isCheckbox, columns, visibleColumns, startRow, endRow, columnWidths, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, selections, isLoading, onRowClick, isContent, isLink, isActionFreeze, }: TableBodyPageProps) => React.JSX.Element;
4
4
  export default TableBody;
@@ -22,6 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  var react_1 = require("@chakra-ui/react");
27
30
  var react_2 = __importStar(require("react"));
@@ -29,10 +32,10 @@ var table_1 = require("../../../Utils/table");
29
32
  var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
30
33
  var TableLoading_1 = require("./TableLoading");
31
34
  var fa_1 = require("react-icons/fa");
32
- var icons_1 = require("@chakra-ui/icons");
35
+ var TableActions_1 = __importDefault(require("./TableActions"));
33
36
  var TableBody = function (_a) {
34
37
  var _b;
35
- var data = _a.data, isCheckbox = _a.isCheckbox, columns = _a.columns, visibleColumns = _a.visibleColumns, startRow = _a.startRow, endRow = _a.endRow, columnWidths = _a.columnWidths, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, handleCheckbox = _a.handleCheckbox, selections = _a.selections, isLoading = _a.isLoading, onRowClick = _a.onRowClick, isContent = _a.isContent, isLink = _a.isLink;
38
+ var data = _a.data, isCheckbox = _a.isCheckbox, columns = _a.columns, visibleColumns = _a.visibleColumns, startRow = _a.startRow, endRow = _a.endRow, columnWidths = _a.columnWidths, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, handleCheckbox = _a.handleCheckbox, selections = _a.selections, isLoading = _a.isLoading, onRowClick = _a.onRowClick, isContent = _a.isContent, isLink = _a.isLink, isActionFreeze = _a.isActionFreeze;
36
39
  var theme = (0, useCustomTheme_1.useCustomTheme)();
37
40
  var _c = (0, react_2.useState)(new Set()), expandedRows = _c[0], setExpandedRows = _c[1];
38
41
  var toggleRowExpansion = function (rowIndex) {
@@ -68,10 +71,10 @@ var TableBody = function (_a) {
68
71
  return (react_2.default.createElement(react_1.Td, { w: "6", p: 0, fontSize: 14, backgroundColor: freezedBgColor, color: freezedTextColor, position: "sticky", border: noBorders ? "none" : "1px solid ".concat((_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[300]), boxSizing: "border-box", left: 0, zIndex: 1, className: "columns sticky-columns" }, isContent && (react_2.default.createElement(react_1.IconButton, { "aria-label": isExpanded ? "Collapse row" : "Expand row", color: (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.gray[600], icon: isExpanded ? (react_2.default.createElement(fa_1.FaAngleDown, { fontSize: 16 })) : (react_2.default.createElement(fa_1.FaAngleRight, { fontSize: 16 })), _hover: { transform: "scale(1.1)" }, size: "sm", onClick: function () { return toggleRowExpansion(rowIndex); }, variant: "ghost" }))));
69
72
  }, [freezedBgColor, freezedTextColor, noBorders, theme.colors.gray]);
70
73
  var RenderView = (0, react_2.useCallback)(function (_a) {
71
- var _b, _c;
72
- var row = _a.row;
73
- return (react_2.default.createElement(react_1.Td, { w: 2, p: 0, fontSize: 14, backgroundColor: freezedBgColor, color: freezedTextColor, position: "sticky", border: noBorders ? "none" : "1px solid ".concat((_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[300]), boxSizing: "border-box", right: 0, zIndex: 1, className: "columns sticky-columns" }, !!row.onLink && (react_2.default.createElement(react_1.IconButton, { "aria-label": "Link", color: (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.blue[500], icon: react_2.default.createElement(icons_1.ExternalLinkIcon, { fontSize: 16 }), size: "sm", onClick: function () { return row === null || row === void 0 ? void 0 : row.onLink(row); }, variant: "ghost", _hover: { transform: "scale(1.1)" } }))));
74
- }, [freezedBgColor, freezedTextColor, noBorders, theme.colors]);
74
+ var _b;
75
+ var row = _a.row, bgcolor = _a.bgcolor;
76
+ return (react_2.default.createElement(react_1.Td, { w: 2, p: 0, fontSize: 14, backgroundColor: isActionFreeze ? freezedBgColor : bgcolor, color: freezedTextColor, position: isActionFreeze ? "sticky" : "relative", border: noBorders ? "none" : "1px solid ".concat((_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[300]), boxSizing: "border-box", right: 0, zIndex: 1, className: "columns sticky-columns".concat(isActionFreeze ? "-right" : "") }, (row.onLink || row.onEdit || row.onDelete) && (react_2.default.createElement(TableActions_1.default, { row: row }))));
77
+ }, [freezedBgColor, freezedTextColor, noBorders, theme.colors, isActionFreeze]);
75
78
  if (isLoading) {
76
79
  var totalVisibleColumns = Object.values(visibleColumns).filter(Boolean).length +
77
80
  (isCheckbox ? 1 : 0);
@@ -91,6 +94,7 @@ var TableBody = function (_a) {
91
94
  var rowIndex = startRow + index;
92
95
  var isExpanded = expandedRows.has(rowIndex);
93
96
  var isChecked = selections.includes(row.id);
97
+ var freezeViewColor = index % 2 === 1 ? theme.colors.backgroundColor.light : "white";
94
98
  return (react_2.default.createElement(react_2.default.Fragment, { key: rowIndex },
95
99
  react_2.default.createElement(react_1.Tr, { key: index + 1, sx: isChecked
96
100
  ? {
@@ -128,7 +132,7 @@ var TableBody = function (_a) {
128
132
  : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[isFrozen || isChecked ? 300 : 200]), className: "columns ".concat(isFrozen ? "sticky-columns" : "scrollable-columns"), boxSizing: "border-box", color: isFrozen ? freezedTextColor : undefined },
129
133
  react_2.default.createElement(react_1.Box, { textOverflow: "ellipsis", whiteSpace: "nowrap", display: "block", overflow: "hidden" }, header.node ? header.node(row) : row[header.id]))));
130
134
  }),
131
- isLink && react_2.default.createElement(RenderView, { row: row })),
135
+ isLink && react_2.default.createElement(RenderView, { row: row, bgcolor: freezeViewColor })),
132
136
  row.content && isExpanded && (react_2.default.createElement(react_1.Tr, null,
133
137
  react_2.default.createElement(react_1.Td, { colSpan: columns.length +
134
138
  (isCheckbox ? 1 : 0) +
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { TableFiltersProps } from "../TableProps";
3
+ declare const TableFilters: React.MemoExoticComponent<({ header, setColumnsSearch, columnsSearch, onClose }: TableFiltersProps) => React.JSX.Element>;
4
+ export default TableFilters;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ var react_1 = __importStar(require("react"));
27
+ var icons_1 = require("@chakra-ui/icons");
28
+ var react_2 = require("@chakra-ui/react");
29
+ var fa_1 = require("react-icons/fa");
30
+ var table_1 = require("../../../Utils/table");
31
+ var TableFilters = (0, react_1.memo)(function (_a) {
32
+ var header = _a.header, setColumnsSearch = _a.setColumnsSearch, columnsSearch = _a.columnsSearch, onClose = _a.onClose;
33
+ var searchRef = (0, react_1.useRef)(null);
34
+ var _b = (0, react_1.useState)(false), refreshDataOnOpen = _b[0], setRefreshDataOnOpen = _b[1];
35
+ var debounceRef = (0, table_1.debounce)(function (value) {
36
+ setColumnsSearch(value);
37
+ }, 700);
38
+ (0, react_1.useEffect)(function () {
39
+ if (columnsSearch.length && searchRef.current) {
40
+ searchRef.current.value = columnsSearch;
41
+ }
42
+ }, [refreshDataOnOpen]);
43
+ return (react_1.default.createElement(react_2.Popover, { onClose: onClose, onOpen: function () {
44
+ setRefreshDataOnOpen(function (prev) { return !prev; });
45
+ } },
46
+ react_1.default.createElement(react_2.PopoverTrigger, null,
47
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Search", icon: react_1.default.createElement(fa_1.FaEllipsisV, null), size: "xs", variant: "ghost", _hover: { bg: "none" } })),
48
+ react_1.default.createElement(react_2.Portal, null,
49
+ react_1.default.createElement(react_2.PopoverContent, { width: "200px" },
50
+ react_1.default.createElement(react_2.PopoverBody, { p: 2 },
51
+ react_1.default.createElement(react_2.InputGroup, { flex: "1", size: "xs" },
52
+ react_1.default.createElement(react_2.InputLeftElement, { pointerEvents: "none" },
53
+ react_1.default.createElement(icons_1.SearchIcon, { color: "gray.300" })),
54
+ react_1.default.createElement(react_2.Input, { autoFocus: true, placeholder: "Search ".concat(header.label, "..."), size: "xs", ref: searchRef, onChange: function (e) {
55
+ e.stopPropagation();
56
+ debounceRef(e.target.value);
57
+ }, onFocus: function (e) { return e.stopPropagation(); } })))))));
58
+ });
59
+ exports.default = TableFilters;
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { TableHeaderPageProps } from "../TableProps";
3
- declare const TableHeader: ({ columns, isCheckbox, visibleColumns, handleSort, headerRefs, columnWidths, columnsSort, headerBgColor, headerTextColor, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, checked, isLoading, isContent, isLink, onColumnSearch, columnFilters, }: TableHeaderPageProps) => React.JSX.Element;
4
- export default TableHeader;
3
+ declare const _default: React.MemoExoticComponent<({ columns, isCheckbox, visibleColumns, handleSort, headerRefs, columnWidths, columnsSort, headerBgColor, headerTextColor, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, checked, isLoading, isContent, isLink, isActionFreeze, setColumnsSearch, columnsSearch, }: TableHeaderPageProps) => React.JSX.Element>;
4
+ export default _default;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
14
  if (k2 === undefined) k2 = k;
4
15
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -22,43 +33,22 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
33
  __setModuleDefault(result, mod);
23
34
  return result;
24
35
  };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
25
39
  Object.defineProperty(exports, "__esModule", { value: true });
26
40
  var react_1 = require("@chakra-ui/react");
27
41
  var react_2 = __importStar(require("react"));
28
42
  var table_1 = require("../../../Utils/table");
29
43
  var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
30
- var icons_1 = require("@chakra-ui/icons");
31
44
  var fa_1 = require("react-icons/fa");
32
45
  var pi_1 = require("react-icons/pi");
33
46
  var lu_1 = require("react-icons/lu");
47
+ var TableFilters_1 = __importDefault(require("./TableFilters"));
34
48
  var TableHeader = function (_a) {
35
49
  var _b;
36
- var columns = _a.columns, isCheckbox = _a.isCheckbox, visibleColumns = _a.visibleColumns, handleSort = _a.handleSort, headerRefs = _a.headerRefs, columnWidths = _a.columnWidths, columnsSort = _a.columnsSort, headerBgColor = _a.headerBgColor, headerTextColor = _a.headerTextColor, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, handleCheckbox = _a.handleCheckbox, checked = _a.checked, isLoading = _a.isLoading, isContent = _a.isContent, isLink = _a.isLink, onColumnSearch = _a.onColumnSearch, _c = _a.columnFilters, columnFilters = _c === void 0 ? {} : _c;
50
+ var columns = _a.columns, isCheckbox = _a.isCheckbox, visibleColumns = _a.visibleColumns, handleSort = _a.handleSort, headerRefs = _a.headerRefs, columnWidths = _a.columnWidths, columnsSort = _a.columnsSort, headerBgColor = _a.headerBgColor, headerTextColor = _a.headerTextColor, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, handleCheckbox = _a.handleCheckbox, checked = _a.checked, isLoading = _a.isLoading, isContent = _a.isContent, isLink = _a.isLink, isActionFreeze = _a.isActionFreeze, setColumnsSearch = _a.setColumnsSearch, columnsSearch = _a.columnsSearch;
37
51
  var theme = (0, useCustomTheme_1.useCustomTheme)();
38
- var _d = (0, react_2.useState)(null), openPopoverId = _d[0], setOpenPopoverId = _d[1];
39
- var handleSearchChange = (0, react_2.useCallback)(function (columnId, value) {
40
- onColumnSearch === null || onColumnSearch === void 0 ? void 0 : onColumnSearch(columnId, value);
41
- }, [onColumnSearch]);
42
- (0, react_2.useEffect)(function () {
43
- if (!columnFilters)
44
- return;
45
- var lastKey = Object.keys(columnFilters).pop() || null;
46
- if (!lastKey)
47
- return;
48
- setOpenPopoverId(lastKey);
49
- }, [columnFilters]);
50
- (0, react_2.useEffect)(function () {
51
- var handleClickOutside = function (event) {
52
- var target = event.target;
53
- if (!(target === null || target === void 0 ? void 0 : target.closest(".search-popover"))) {
54
- setOpenPopoverId(null);
55
- }
56
- };
57
- document.addEventListener("mousedown", handleClickOutside);
58
- return function () {
59
- document.removeEventListener("mousedown", handleClickOutside);
60
- };
61
- }, [openPopoverId]);
62
52
  var RenderCheckbox = (0, react_2.useCallback)(function () {
63
53
  var _a;
64
54
  return (react_2.default.createElement(react_1.Th, { w: 6, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: freezedBgColor, border: noBorders ? "none" : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[300]), position: "sticky", className: "columns sticky-columns", left: "0px", zIndex: 9, boxShadow: "2px 0 5px rgba(0, 0, 0, 0.1)", top: 0 },
@@ -80,10 +70,63 @@ var TableHeader = function (_a) {
80
70
  }, [freezedBgColor, noBorders, theme.colors.gray]);
81
71
  var RenderView = (0, react_2.useCallback)(function () {
82
72
  var _a;
83
- return (react_2.default.createElement(react_1.Th, { w: 2, p: 0, backgroundColor: freezedBgColor, border: noBorders ? "none" : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[300]), position: "sticky", className: "columns sticky-columns", right: "0px", zIndex: 1, boxShadow: "2px 0 5px rgba(0, 0, 0, 0.1)" },
73
+ var BgColor = isActionFreeze ? freezedBgColor : headerBgColor;
74
+ return (react_2.default.createElement(react_1.Th, { w: 2, p: 0, backgroundColor: BgColor, border: noBorders ? "none" : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[300]), position: isActionFreeze ? "sticky" : "relative", className: "columns sticky-columns", right: "0px", zIndex: 1, boxShadow: "2px 0 5px rgba(0, 0, 0, 0.1)" },
84
75
  react_2.default.createElement(react_1.Box, { display: "flex", justifyContent: "center" },
85
76
  react_2.default.createElement(lu_1.LuFileSymlink, { fontSize: 16 }))));
86
- }, [freezedBgColor, noBorders, theme.colors.gray]);
77
+ }, [
78
+ freezedBgColor,
79
+ noBorders,
80
+ theme.colors.gray,
81
+ headerBgColor,
82
+ isActionFreeze,
83
+ ]);
84
+ return (react_2.default.createElement(react_1.Tr, { pr: 0 },
85
+ isContent && react_2.default.createElement(RenderConent, null),
86
+ isCheckbox && react_2.default.createElement(RenderCheckbox, null),
87
+ columns.map(function (header, index) { return (react_2.default.createElement(ColumnHeader, { header: header, index: index, key: header.label, columnWidths: columnWidths, handleSort: handleSort, isCheckbox: isCheckbox, visibleColumns: visibleColumns, headerBgColor: headerBgColor, headerTextColor: headerTextColor, freezedBgColor: freezedBgColor, freezedTextColor: freezedTextColor, noBorders: noBorders, columnsSort: columnsSort, headerRefs: headerRefs, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch })); }),
88
+ isLink && react_2.default.createElement(RenderView, null)));
89
+ };
90
+ exports.default = (0, react_2.memo)(TableHeader);
91
+ var SortingIcon = (0, react_2.memo)(function (_a) {
92
+ var sortState = _a.sortState, handleSortClick = _a.handleSortClick;
93
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
94
+ return (react_2.default.createElement(react_1.Box, { display: "flex", alignItems: "center", justifyContent: "center", bg: theme.colors.white, borderRadius: "full", cursor: "pointer", w: "24px", h: "24px", ml: 2, onClick: handleSortClick, transition: "transform 0.2s ease-in-out", _hover: { transform: "scale(1.1)" } },
95
+ sortState === "none" && react_2.default.createElement(fa_1.FaSort, { color: "black", size: 14 }),
96
+ sortState === "asc" && react_2.default.createElement(fa_1.FaCaretUp, { color: "black", size: 14 }),
97
+ sortState === "desc" && react_2.default.createElement(fa_1.FaCaretDown, { color: "black", size: 14 })));
98
+ });
99
+ var ColumnHeader = (0, react_2.memo)(function (_a) {
100
+ var _b;
101
+ var header = _a.header, index = _a.index, columnWidths = _a.columnWidths, isCheckbox = _a.isCheckbox, visibleColumns = _a.visibleColumns, headerBgColor = _a.headerBgColor, headerTextColor = _a.headerTextColor, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, columnsSort = _a.columnsSort, headerRefs = _a.headerRefs, columnsSearch = _a.columnsSearch, setColumnsSearch = _a.setColumnsSearch, handleSort = _a.handleSort;
102
+ var _c = (0, react_2.useState)(false), isHovered = _c[0], setIsHovered = _c[1];
103
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
104
+ var isFrozen = header.isFreeze;
105
+ var leftOffset = isFrozen
106
+ ? (0, table_1.calculateLeftOffset)(columnWidths, index) + (isCheckbox ? 50 : 0)
107
+ : undefined;
108
+ var isSorting = header.isSort
109
+ ? columnsSort.find(function (o) { return o.column === header.id; })
110
+ : undefined;
111
+ var BgColor = isFrozen ? freezedBgColor : headerBgColor;
112
+ var TextColor = isFrozen ? freezedTextColor : headerTextColor;
113
+ var handleMouseDown = function (e) {
114
+ var parentBox = e.target
115
+ .parentElement;
116
+ var th = parentBox.parentElement;
117
+ var startX = e.pageX;
118
+ var startWidth = th.offsetWidth;
119
+ var onMouseMove = function (moveEvent) {
120
+ var newWidth = startWidth + (moveEvent.pageX - startX);
121
+ th.style.width = "".concat(newWidth, "px");
122
+ };
123
+ var onMouseUp = function () {
124
+ document.removeEventListener("mousemove", onMouseMove);
125
+ document.removeEventListener("mouseup", onMouseUp);
126
+ };
127
+ document.addEventListener("mousemove", onMouseMove);
128
+ document.addEventListener("mouseup", onMouseUp);
129
+ };
87
130
  var Sorting = (0, react_2.useCallback)(function (_a) {
88
131
  var _b;
89
132
  var isSorting = _a.isSorting, header = _a.header;
@@ -98,95 +141,18 @@ var TableHeader = function (_a) {
98
141
  handleSort(header.id, direction);
99
142
  } }));
100
143
  }, [handleSort]);
101
- var Popvers = (0, react_2.useCallback)(function (_a) {
102
- var header = _a.header;
103
- return (react_2.default.createElement("div", { className: "search-popover" },
104
- react_2.default.createElement(react_1.Popover, { isOpen: openPopoverId === header.id, onClose: function () { return setOpenPopoverId(null); }, placement: "bottom-start", closeOnBlur: false, closeOnEsc: false },
105
- react_2.default.createElement(react_1.PopoverTrigger, null,
106
- react_2.default.createElement(react_1.IconButton, { "aria-label": "Search", icon: react_2.default.createElement(fa_1.FaEllipsisV, null), size: "xs", variant: "ghost", onClick: function () {
107
- return setOpenPopoverId(openPopoverId === header.id ? null : header.id);
108
- }, _hover: { bg: "none" } })),
109
- react_2.default.createElement(react_1.PopoverContent, { width: "200px" },
110
- react_2.default.createElement(react_1.PopoverBody, { p: 2 },
111
- react_2.default.createElement(react_1.InputGroup, { flex: "1", size: "xs" },
112
- react_2.default.createElement(react_1.InputLeftElement, { pointerEvents: "none" },
113
- react_2.default.createElement(icons_1.SearchIcon, { color: "gray.300" })),
114
- react_2.default.createElement(react_1.Input, { autoFocus: true, placeholder: "Search ".concat(header.label, "..."), size: "xs", value: columnFilters[header.id] || "", onChange: function (e) {
115
- e.stopPropagation();
116
- handleSearchChange(header.id, e.target.value);
117
- } })))))));
118
- }, [columnFilters, openPopoverId, handleSearchChange]);
119
- var renderColumnHeader = function (header, index) {
120
- var _a;
121
- var isFrozen = header.isFreeze;
122
- var leftOffset = isFrozen
123
- ? (0, table_1.calculateLeftOffset)(columnWidths, index) + (isCheckbox ? 50 : 0)
124
- : undefined;
125
- var isSorting = header.isSort
126
- ? columnsSort.find(function (o) { return o.column === header.id; })
127
- : undefined;
128
- var BgColor = isFrozen ? freezedBgColor : headerBgColor;
129
- var TextColor = isFrozen ? freezedTextColor : headerTextColor;
130
- return (visibleColumns[header.label] && (react_2.default.createElement(react_1.Th, { key: index + 1, ref: function (el) { return (headerRefs.current[index] = el); }, textTransform: "capitalize", color: TextColor, fontSize: 14, fontWeight: 600, position: isFrozen ? "sticky" : undefined, left: isFrozen ? leftOffset : undefined, minWidth: 120, backgroundColor: BgColor, maxWidth: 500, zIndex: isFrozen ? 2 : 1, py: 2, pr: 0, border: noBorders ? "none" : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[300]), className: "columns ".concat(isFrozen ? "sticky-columns" : "scrollable-columns") },
131
- react_2.default.createElement(react_1.Box, { display: "flex", color: TextColor, justifyContent: "space-between", alignItems: "center" },
132
- react_2.default.createElement(react_1.Box, { textOverflow: "ellipsis", whiteSpace: "nowrap", display: "block", overflow: "hidden" }, header.label),
133
- react_2.default.createElement(react_1.Box, { display: "flex", alignItems: "center" },
134
- header.isSort ? (react_2.default.createElement(Sorting, { isSorting: isSorting, header: header })) : null,
135
- react_2.default.createElement(Popvers, { header: header }))))));
136
- };
137
- return (react_2.default.createElement(react_1.Tr, { pr: 0 },
138
- isContent && react_2.default.createElement(RenderConent, null),
139
- isCheckbox && react_2.default.createElement(RenderCheckbox, null),
140
- columns.map(function (header, index) { return renderColumnHeader(header, index); }),
141
- isLink && react_2.default.createElement(RenderView, null)));
142
- };
143
- exports.default = TableHeader;
144
- var SortingIcon = (0, react_2.memo)(function (_a) {
145
- var sortState = _a.sortState, handleSortClick = _a.handleSortClick;
146
- var theme = (0, useCustomTheme_1.useCustomTheme)();
147
- return (react_2.default.createElement(react_1.Box, { display: "flex", alignItems: "center", justifyContent: "center", bg: theme.colors.white, borderRadius: "full", cursor: "pointer", w: "24px", h: "24px", ml: 2, onClick: handleSortClick, transition: "transform 0.2s ease-in-out", _hover: { transform: "scale(1.1)" } },
148
- sortState === "none" && react_2.default.createElement(fa_1.FaSort, { color: "black", size: 14 }),
149
- sortState === "asc" && react_2.default.createElement(fa_1.FaCaretUp, { color: "black", size: 14 }),
150
- sortState === "desc" && react_2.default.createElement(fa_1.FaCaretDown, { color: "black", size: 14 })));
144
+ var isFiltersEnabled = (isHovered && header.isSort) ||
145
+ ((isSorting === null || isSorting === void 0 ? void 0 : isSorting.direction) && isSorting.direction !== "none");
146
+ return visibleColumns[header.label] ? (react_2.default.createElement(react_1.Th, { key: index + 1, ref: function (el) { return (headerRefs.current[index] = el); }, textTransform: "capitalize", color: TextColor, fontSize: 14, fontWeight: 600, position: isFrozen ? "sticky" : undefined, left: isFrozen ? leftOffset : undefined, minWidth: 120, backgroundColor: BgColor, maxWidth: 500, zIndex: isFrozen ? 2 : 1, py: 2, pr: 0, border: noBorders ? "none" : "1px solid ".concat((_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[300]), className: "columns ".concat(isFrozen ? "sticky-columns" : "scrollable-columns"), height: 41, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { return setIsHovered(false); } },
147
+ react_2.default.createElement(react_1.Box, { display: "flex", color: TextColor, justifyContent: "space-between", alignItems: "center", position: "relative" },
148
+ react_2.default.createElement(react_1.Box, { textOverflow: "ellipsis", whiteSpace: "nowrap", display: "block", overflow: "hidden" }, header.label),
149
+ react_2.default.createElement(react_1.Box, { display: "flex", alignItems: "center" },
150
+ isFiltersEnabled && (react_2.default.createElement(Sorting, { isSorting: isSorting, header: header })),
151
+ react_2.default.createElement(TableFilters_1.default, { header: header, setColumnsSearch: function (searchVal) {
152
+ return setColumnsSearch(function (prev) {
153
+ var _a;
154
+ return (__assign(__assign({}, prev), (_a = {}, _a[header.id] = searchVal, _a)));
155
+ });
156
+ }, columnsSearch: columnsSearch[header.id] || "", onClose: function () { return setIsHovered(false); } })),
157
+ react_2.default.createElement("div", { className: "resize-handle", onMouseDown: handleMouseDown })))) : (react_2.default.createElement(react_2.default.Fragment, null));
151
158
  });
152
- // const Popover = () => {
153
- // return (
154
- // <div style={{ background: "red" }}>
155
- // <Popover
156
- // isOpen={
157
- // activeHeader === header.label && isPopoverOpen && header.isSearch
158
- // }
159
- // onClose={closePopover}
160
- // placement="bottom-start"
161
- // closeOnBlur={false}
162
- // >
163
- // <PopoverTrigger>
164
- // <span>
165
- // <HamburgerIcon
166
- // w={15}
167
- // h={15}
168
- // onClick={() =>
169
- // handleHeaderClick(
170
- // header.label,
171
- // header.isSearch ? header.isSearch : false
172
- // )
173
- // }
174
- // style={{
175
- // cursor: "pointer",
176
- // display:
177
- // hoveredHeaderIndex === index && header.isSearch
178
- // ? "inline"
179
- // : "none",
180
- // }}
181
- // />
182
- // </span>
183
- // </PopoverTrigger>
184
- // <PopoverContent width={200} zIndex={3}>
185
- // <PopoverBody background={"#deeefd"}>
186
- // {searchFeatures(header.label)}
187
- // </PopoverBody>
188
- // </PopoverContent>
189
- // </Popover>
190
- // </div>
191
- // );
192
- // };
@@ -0,0 +1,2 @@
1
+ declare const useDebounce: (callback: Function, delay: number) => (...args: any[]) => void;
2
+ export default useDebounce;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var react_1 = require("react");
4
+ // First, create a custom debounce hook
5
+ var useDebounce = function (callback, delay) {
6
+ var timeoutRef = (0, react_1.useRef)();
7
+ (0, react_1.useEffect)(function () {
8
+ return function () {
9
+ if (timeoutRef.current) {
10
+ clearTimeout(timeoutRef.current);
11
+ }
12
+ };
13
+ }, []);
14
+ var debouncedCallback = (0, react_1.useCallback)(function () {
15
+ var args = [];
16
+ for (var _i = 0; _i < arguments.length; _i++) {
17
+ args[_i] = arguments[_i];
18
+ }
19
+ if (timeoutRef.current) {
20
+ clearTimeout(timeoutRef.current);
21
+ }
22
+ timeoutRef.current = setTimeout(function () {
23
+ callback.apply(void 0, args);
24
+ }, delay);
25
+ }, [callback, delay]);
26
+ return debouncedCallback;
27
+ };
28
+ exports.default = useDebounce;
@@ -0,0 +1,40 @@
1
+ /// <reference types="react" />
2
+ import { ColumnSortingProps, DataObject, TableHeaderProps } from "../TableProps";
3
+ type UseTableProps = {
4
+ tableBorderColor?: string;
5
+ data: DataObject[];
6
+ isPagination: boolean;
7
+ selections?: (string | number)[];
8
+ columns: TableHeaderProps[];
9
+ onSelection?: (selected: (string | number)[]) => void;
10
+ };
11
+ declare const useTable: ({ tableBorderColor, data, isPagination, selections, columns, onSelection, }: UseTableProps) => {
12
+ tableData: DataObject[];
13
+ tableContainerStyles: {
14
+ borderRadius: string;
15
+ borderWidth: string;
16
+ borderColor: string;
17
+ boxShadow: string;
18
+ maxHeight: string;
19
+ overflowY: string;
20
+ };
21
+ isContent: boolean;
22
+ isLink: boolean;
23
+ headerRefs: import("react").MutableRefObject<(HTMLTableCellElement | null)[]>;
24
+ columnWidths: number[];
25
+ visibleColumns: Record<string, boolean>;
26
+ handleSort: (field: string | number, sort: "asc" | "desc" | "none") => void;
27
+ handleCheckbox: (id: string | number) => void;
28
+ filteredData: DataObject[];
29
+ startRow: number;
30
+ endRow: number;
31
+ selection: (string | number)[];
32
+ columnsSort: ColumnSortingProps[];
33
+ handleColumnVisibilityChange: (header: string | number) => void;
34
+ handlePageSizeChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;
35
+ pages: number;
36
+ currentPage: number;
37
+ rowsPerPage: number;
38
+ setCurrentPage: import("react").Dispatch<import("react").SetStateAction<number>>;
39
+ };
40
+ export default useTable;
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ var react_1 = require("react");
24
+ var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
25
+ var table_1 = require("../../../Utils/table");
26
+ var defaultPageSize = 5;
27
+ var useTable = function (_a) {
28
+ var tableBorderColor = _a.tableBorderColor, data = _a.data, isPagination = _a.isPagination, selections = _a.selections, columns = _a.columns, onSelection = _a.onSelection;
29
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
30
+ var headerRefs = (0, react_1.useRef)([]);
31
+ var _b = (0, react_1.useState)([]), columnWidths = _b[0], setColumnWidths = _b[1];
32
+ var _c = (0, react_1.useState)(selections !== null && selections !== void 0 ? selections : []), selection = _c[0], setSelection = _c[1];
33
+ var _d = (0, react_1.useState)([]), columnsSort = _d[0], setColumnsSort = _d[1];
34
+ var _e = (0, react_1.useState)(0), currentPage = _e[0], setCurrentPage = _e[1];
35
+ var _f = (0, react_1.useState)(defaultPageSize), rowsPerPage = _f[0], setRowsPerPage = _f[1];
36
+ var _g = (0, react_1.useState)(columns.reduce(function (acc, curr) {
37
+ var _a;
38
+ return (__assign(__assign({}, acc), (_a = {}, _a[curr.label] = true, _a)));
39
+ }, {})), visibleColumns = _g[0], setVisibleColumns = _g[1];
40
+ var tableData = (0, react_1.useMemo)(function () { return data; }, [data]);
41
+ var _h = (0, react_1.useState)(tableData), filteredData = _h[0], setFilteredData = _h[1];
42
+ (0, react_1.useEffect)(function () {
43
+ setFilteredData(tableData);
44
+ }, [tableData]);
45
+ var tableContainerStyles = (0, react_1.useMemo)(function () {
46
+ var _a;
47
+ return ({
48
+ borderRadius: "10px 0 0 10px",
49
+ borderWidth: "0px 0px 0px 5px",
50
+ borderColor: tableBorderColor !== null && tableBorderColor !== void 0 ? tableBorderColor : (_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[500],
51
+ boxShadow: theme.shadows.lg,
52
+ maxHeight: "50vh",
53
+ overflowY: "auto",
54
+ });
55
+ }, [tableBorderColor, theme]);
56
+ var isContent = (0, react_1.useMemo)(function () { return tableData.some(function (o) { return o.content; }); }, [tableData]);
57
+ var isLink = (0, react_1.useMemo)(function () { return tableData.some(function (o) { return o.onLink || o.onDelete || o.onEdit; }); }, [tableData]);
58
+ (0, react_1.useEffect)(function () {
59
+ var widths = headerRefs.current.map(function (ref) { return (ref === null || ref === void 0 ? void 0 : ref.offsetWidth) || 0; });
60
+ setColumnWidths(widths);
61
+ }, []);
62
+ var pages = (0, react_1.useMemo)(function () { return (isPagination ? Math.ceil(tableData.length / rowsPerPage) : 0); }, [isPagination, rowsPerPage, tableData.length]);
63
+ var startRow = (0, react_1.useMemo)(function () { return (!isPagination ? 0 : currentPage * rowsPerPage); }, [currentPage, isPagination, rowsPerPage]);
64
+ var endRow = (0, react_1.useMemo)(function () { return (!isPagination ? tableData.length : startRow + rowsPerPage); }, [isPagination, rowsPerPage, startRow, tableData.length]);
65
+ (0, react_1.useEffect)(function () {
66
+ var sortedData = (0, table_1.SortMultiColumnData)(tableData, columnsSort);
67
+ var data = sortedData.slice(startRow, endRow);
68
+ setFilteredData(data);
69
+ }, [columnsSort, startRow, endRow, tableData]);
70
+ var handlePageSizeChange = function (event) {
71
+ var value = Number(event.target.value);
72
+ setRowsPerPage(value !== 0 ? value : defaultPageSize);
73
+ setCurrentPage(0);
74
+ };
75
+ var handleSort = (0, react_1.useCallback)(function (field, sort) {
76
+ if (!sort)
77
+ return;
78
+ var newSortState = __spreadArray([], columnsSort, true);
79
+ var existingIndex = newSortState.findIndex(function (sort) { return sort.column === field; });
80
+ if (existingIndex === -1) {
81
+ newSortState.push({
82
+ column: field,
83
+ direction: "asc", // Default to ascending when adding a column
84
+ });
85
+ }
86
+ else {
87
+ var existingSort = newSortState[existingIndex];
88
+ existingSort.direction = sort;
89
+ }
90
+ setColumnsSort(newSortState);
91
+ }, [columnsSort]);
92
+ (0, react_1.useEffect)(function () {
93
+ setSelection(selections !== null && selections !== void 0 ? selections : []);
94
+ }, [selections]);
95
+ var handleCheckbox = (0, react_1.useCallback)(function (id) {
96
+ var selectedItems = [];
97
+ if (id === 0) {
98
+ if (selection.length === tableData.length) {
99
+ selectedItems = [];
100
+ }
101
+ else {
102
+ selectedItems = tableData.map(function (item) { return item.id; });
103
+ }
104
+ }
105
+ else if (selection.includes(id)) {
106
+ selectedItems = selection.filter(function (item) { return item !== id; });
107
+ }
108
+ else {
109
+ selectedItems = __spreadArray(__spreadArray([], selection, true), [id], false);
110
+ }
111
+ setSelection(selectedItems);
112
+ onSelection && onSelection(selectedItems);
113
+ }, [onSelection, selection, tableData]);
114
+ var handleColumnVisibilityChange = function (header) {
115
+ setVisibleColumns(function (prev) {
116
+ var _a;
117
+ return (__assign(__assign({}, prev), (_a = {}, _a[header] = !prev[header], _a)));
118
+ });
119
+ };
120
+ return {
121
+ tableData: tableData,
122
+ tableContainerStyles: tableContainerStyles,
123
+ isContent: isContent,
124
+ isLink: isLink,
125
+ headerRefs: headerRefs,
126
+ columnWidths: columnWidths,
127
+ visibleColumns: visibleColumns,
128
+ handleSort: handleSort,
129
+ handleCheckbox: handleCheckbox,
130
+ filteredData: filteredData,
131
+ startRow: startRow,
132
+ endRow: endRow,
133
+ selection: selection,
134
+ columnsSort: columnsSort,
135
+ handleColumnVisibilityChange: handleColumnVisibilityChange,
136
+ handlePageSizeChange: handlePageSizeChange,
137
+ pages: pages,
138
+ currentPage: currentPage,
139
+ rowsPerPage: rowsPerPage,
140
+ setCurrentPage: setCurrentPage,
141
+ };
142
+ };
143
+ exports.default = useTable;
@@ -1,29 +1,16 @@
1
- .table-container {
2
- display: flex;
3
- overflow: hidden; /* Prevent extra scrollbars */
1
+ .table_wrapper {
2
+ width: 100%;
3
+ border-collapse: collapse;
4
+ /* table-layout: fixed; */
4
5
  }
5
6
 
6
- .sticky-columns {
7
- position: relative;
8
- z-index: 2;
9
- background-color: white;
10
- box-shadow: 2px 0 0 #e2e8f0; /* Optional for visual separation */
11
- }
12
-
13
- .scrollable-columns {
14
- overflow-x: auto;
15
- overflow-y: hidden; /* Only horizontal scrolling */
16
- white-space: nowrap; /* Prevent wrapping */
17
- }
18
-
19
- th,
20
- td {
21
- border: 1px solid #e2e8f0;
22
- padding: 8px;
23
- box-sizing: border-box;
24
- }
25
-
26
- .scrollable-columns th,
27
- .scrollable-columns td {
28
- background-color: white;
7
+ .table_wrapper th .resize-handle {
8
+ position: absolute;
9
+ top: 0;
10
+ right: 0;
11
+ width: 8px;
12
+ height: 100%;
13
+ cursor: col-resize;
14
+ background-color: transparent;
15
+ z-index: 999;
29
16
  }
@@ -1,3 +1,4 @@
1
1
  import React from "react";
2
2
  import { TableProps } from "./TableProps";
3
- export default function Table({ data, columns, onSelection, isLoading, isCheckbox, headerBgColor, freezedBgColor, headerTextColor, freezedTextColor, tableBorderColor, noBorders, isPagintaion, onRowClick, selections, }: TableProps): React.JSX.Element;
3
+ import "./Table.css";
4
+ export default function Table({ data, columns, onSelection, isLoading, isCheckbox, headerBgColor, freezedBgColor, headerTextColor, freezedTextColor, tableBorderColor, noBorders, isPagination, onRowClick, selections, isActionFreeze, }: TableProps): React.JSX.Element;
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
3
  if (k2 === undefined) k2 = k;
15
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -33,15 +22,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
22
  __setModuleDefault(result, mod);
34
23
  return result;
35
24
  };
36
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
37
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
38
- if (ar || !(i in from)) {
39
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
40
- ar[i] = from[i];
41
- }
42
- }
43
- return to.concat(ar || Array.prototype.slice.call(from));
44
- };
45
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
46
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
47
27
  };
@@ -49,134 +29,59 @@ Object.defineProperty(exports, "__esModule", { value: true });
49
29
  var react_1 = __importStar(require("react"));
50
30
  var react_2 = require("@chakra-ui/react");
51
31
  var react_3 = require("@chakra-ui/react");
52
- var react_4 = require("react");
53
32
  var Pagination_1 = __importDefault(require("./Components/Pagination"));
54
- var table_1 = require("../../Utils/table");
55
33
  var TableHeader_1 = __importDefault(require("./Components/TableHeader"));
56
34
  var TableBody_1 = __importDefault(require("./Components/TableBody"));
57
35
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
58
- var defaultPageSize = 5;
36
+ var useTable_1 = __importDefault(require("./Components/useTable"));
37
+ require("./Table.css");
38
+ var table_1 = require("../../Utils/table");
59
39
  function Table(_a) {
60
- var _b;
61
- var data = _a.data, columns = _a.columns, onSelection = _a.onSelection, isLoading = _a.isLoading, _c = _a.isCheckbox, isCheckbox = _c === void 0 ? false : _c, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, tableBorderColor = _a.tableBorderColor, _d = _a.noBorders, noBorders = _d === void 0 ? false : _d, _e = _a.isPagintaion, isPagintaion = _e === void 0 ? true : _e, onRowClick = _a.onRowClick, selections = _a.selections;
40
+ var _b, _c, _d;
41
+ var data = _a.data, columns = _a.columns, onSelection = _a.onSelection, isLoading = _a.isLoading, _e = _a.isCheckbox, isCheckbox = _e === void 0 ? false : _e, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, tableBorderColor = _a.tableBorderColor, _f = _a.noBorders, noBorders = _f === void 0 ? false : _f, _g = _a.isPagination, isPagination = _g === void 0 ? true : _g, onRowClick = _a.onRowClick, selections = _a.selections, _h = _a.isActionFreeze, isActionFreeze = _h === void 0 ? true : _h;
62
42
  var theme = (0, useCustomTheme_1.useCustomTheme)();
63
- var _f = (0, react_4.useState)(selections !== null && selections !== void 0 ? selections : []), selection = _f[0], setSelection = _f[1];
64
- var _g = (0, react_4.useState)(0), currentPage = _g[0], setCurrentPage = _g[1];
65
- var _h = (0, react_4.useState)(defaultPageSize), rowsPerPage = _h[0], setRowsPerPage = _h[1];
66
- var _j = (0, react_4.useState)({}), columnFilters = _j[0], setColumnFilters = _j[1];
67
- var _k = (0, react_4.useState)(data), filteredData = _k[0], setFilteredData = _k[1];
68
- (0, react_1.useEffect)(function () {
69
- setSelection(selections !== null && selections !== void 0 ? selections : []);
70
- }, [selections]);
71
- var _l = (0, react_4.useState)(columns.reduce(function (acc, curr) {
72
- var _a;
73
- return (__assign(__assign({}, acc), (_a = {}, _a[curr.label] = true, _a)));
74
- }, {})), visibleColumns = _l[0], setVisibleColumns = _l[1];
75
- var _m = (0, react_4.useState)([]), columnWidths = _m[0], setColumnWidths = _m[1];
76
- var headerRefs = (0, react_1.useRef)([]);
77
- var _o = (0, react_4.useState)([]), columnsSort = _o[0], setColumnsSort = _o[1];
78
- (0, react_1.useEffect)(function () {
79
- // Measure widths after the component mounts
80
- var widths = headerRefs.current.map(function (ref) { return (ref === null || ref === void 0 ? void 0 : ref.offsetWidth) || 0; });
81
- setColumnWidths(widths);
82
- }, [columns, visibleColumns]);
83
- var handlePageSizeChange = function (event) {
84
- var value = Number(event.target.value);
85
- setRowsPerPage(value !== 0 ? value : defaultPageSize);
86
- setCurrentPage(0);
87
- };
88
- var handleSort = (0, react_1.useCallback)(function (field, sort) {
89
- if (!sort)
90
- return;
91
- var newSortState = __spreadArray([], columnsSort, true);
92
- var existingIndex = newSortState.findIndex(function (sort) { return sort.column === field; });
93
- if (existingIndex === -1) {
94
- newSortState.push({
95
- column: field,
96
- direction: "asc", // Default to ascending when adding a column
97
- });
98
- }
99
- else {
100
- var existingSort = newSortState[existingIndex];
101
- existingSort.direction = sort;
102
- }
103
- setColumnsSort(newSortState);
104
- }, [columnsSort]);
105
- var handleCheckbox = function (id) {
106
- if (id === 0) {
107
- if (selection.length === data.length) {
108
- setSelection([]);
109
- }
110
- else {
111
- setSelection(data.map(function (item) { return item.id; }));
112
- }
113
- }
114
- else if (selection.includes(id)) {
115
- setSelection(selection.filter(function (item) { return item !== id; }));
116
- }
117
- else {
118
- setSelection(__spreadArray(__spreadArray([], selection, true), [id], false));
119
- }
120
- };
121
- (0, react_1.useEffect)(function () {
122
- onSelection && onSelection(selection);
123
- }, [selection, onSelection]);
124
- var pages = isPagintaion ? Math.ceil(data.length / rowsPerPage) : 0;
125
- var startRow = !isPagintaion ? 0 : currentPage * rowsPerPage;
126
- var endRow = !isPagintaion ? data.length : startRow + rowsPerPage;
127
- (0, react_1.useEffect)(function () {
128
- var sortedData = (0, table_1.SortMultiColumnData)(filteredData, columnsSort);
129
- var data = sortedData.slice(startRow, endRow);
130
- setFilteredData(data);
131
- }, [columnsSort, startRow, endRow]);
132
- var handleColumnVisibilityChange = function (header) {
133
- setVisibleColumns(function (prev) {
134
- var _a;
135
- return (__assign(__assign({}, prev), (_a = {}, _a[header] = !prev[header], _a)));
136
- });
137
- };
138
- var handleColumnSearch = function (columnId, searchValue) {
139
- var _a;
140
- var newFilters = __assign(__assign({}, columnFilters), (_a = {}, _a[columnId] = searchValue, _a));
141
- if (!searchValue) {
142
- delete newFilters[columnId];
143
- }
144
- setColumnFilters(newFilters);
145
- // Apply all active filters
146
- var filtered = data.filter(function (row) {
147
- return Object.entries(newFilters).every(function (_a) {
148
- var colId = _a[0], filterValue = _a[1];
149
- var cellValue = String(row[colId]).toLowerCase();
150
- return cellValue.includes(filterValue.toLowerCase());
151
- });
152
- });
153
- setFilteredData(filtered);
154
- };
155
- var isContent = (0, react_1.useMemo)(function () { return data.some(function (o) { return o.content; }); }, [data]);
156
- var isLink = (0, react_1.useMemo)(function () { return data.some(function (o) { return o.onLink; }); }, [data]);
157
- var RenderTable = function (_a) {
158
- var _b, _c, _d;
159
- var columns = _a.columns;
160
- return (react_1.default.createElement(react_3.Table, { variant: "simple", size: "sm", overflowX: "scroll", minW: "100%", className: "sticky-columns" },
161
- react_1.default.createElement(react_3.Thead, { position: "sticky", top: 0, zIndex: 9 },
162
- 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, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isLoading, checked: data.length !== 0 && selection.length === data.length
163
- ? true
164
- : selection.length === 0
165
- ? false
166
- : "indeterminate", isContent: isContent, isLink: isLink, onColumnSearch: handleColumnSearch, columnFilters: columnFilters })),
167
- react_1.default.createElement(react_3.Tbody, null,
168
- react_1.default.createElement(TableBody_1.default, { data: filteredData, 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, isLoading: isLoading, onRowClick: onRowClick, isContent: isContent, isLink: isLink }))));
169
- };
43
+ var _j = (0, react_1.useState)({}), columnsSearch = _j[0], setColumnsSearch = _j[1];
44
+ var _k = (0, useTable_1.default)({
45
+ tableBorderColor: tableBorderColor,
46
+ data: data,
47
+ isPagination: isPagination,
48
+ selections: selections,
49
+ columns: columns,
50
+ onSelection: onSelection,
51
+ }), tableData = _k.tableData, tableContainerStyles = _k.tableContainerStyles, isContent = _k.isContent, isLink = _k.isLink, headerRefs = _k.headerRefs, columnWidths = _k.columnWidths, visibleColumns = _k.visibleColumns, handleSort = _k.handleSort, handleCheckbox = _k.handleCheckbox, filteredData = _k.filteredData, startRow = _k.startRow, endRow = _k.endRow, selection = _k.selection, columnsSort = _k.columnsSort, currentPage = _k.currentPage, pages = _k.pages, rowsPerPage = _k.rowsPerPage, handleColumnVisibilityChange = _k.handleColumnVisibilityChange, handlePageSizeChange = _k.handlePageSizeChange, setCurrentPage = _k.setCurrentPage;
52
+ var _filteredData = (0, react_1.useMemo)(function () {
53
+ return (0, table_1.searchAndSortData)(filteredData, columnsSearch);
54
+ }, [columnsSearch, filteredData]);
55
+ var RenderPagination = (0, react_1.useCallback)(function () {
56
+ if (!isPagination || !filteredData.length)
57
+ return null;
58
+ return (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(tableData.length), handlePageSizeChange: handlePageSizeChange, dataLength: tableData.length, visibleColumns: visibleColumns, handleColumnVisibilityChange: handleColumnVisibilityChange, isVisiblity: true }));
59
+ }, [
60
+ columns,
61
+ currentPage,
62
+ endRow,
63
+ filteredData.length,
64
+ handleColumnVisibilityChange,
65
+ handlePageSizeChange,
66
+ isPagination,
67
+ pages,
68
+ rowsPerPage,
69
+ setCurrentPage,
70
+ startRow,
71
+ tableData.length,
72
+ visibleColumns,
73
+ ]);
170
74
  return (react_1.default.createElement(react_1.default.Fragment, null,
171
- react_1.default.createElement(react_2.TableContainer, { sx: {
172
- borderRadius: "10px 0 0 10px",
173
- borderWidth: "0px 0px 0px 5px",
174
- borderColor: tableBorderColor !== null && tableBorderColor !== void 0 ? tableBorderColor : (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[500],
175
- boxShadow: theme.shadows.lg,
176
- maxHeight: "50vh",
177
- overflowY: "auto",
178
- } },
179
- react_1.default.createElement(RenderTable, { columns: columns })),
180
- isPagintaion && !!filteredData.length && (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 }))));
75
+ react_1.default.createElement(react_2.TableContainer, { sx: tableContainerStyles },
76
+ react_1.default.createElement(react_3.Table, { variant: "simple", size: "sm", overflowX: "scroll", minW: "100%", className: "table_wrapper" },
77
+ react_1.default.createElement(react_3.Thead, { position: "sticky", top: 0, zIndex: 2 },
78
+ 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, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isLoading, checked: tableData.length !== 0 && selection.length === tableData.length
79
+ ? true
80
+ : selection.length === 0
81
+ ? false
82
+ : "indeterminate", isContent: isContent, isLink: isLink, isActionFreeze: isActionFreeze, setColumnsSearch: setColumnsSearch, columnsSearch: columnsSearch })),
83
+ react_1.default.createElement(react_3.Tbody, null,
84
+ react_1.default.createElement(TableBody_1.default, { data: _filteredData, 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, isLoading: isLoading, onRowClick: onRowClick, isContent: isContent, isLink: isLink, isActionFreeze: isActionFreeze })))),
85
+ react_1.default.createElement(RenderPagination, null)));
181
86
  }
182
87
  exports.default = Table;
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import { Dispatch, MutableRefObject, SetStateAction } from "react";
2
2
  export type TableProps = {
3
3
  data: DataObject[];
4
4
  columns: TableHeaderProps[];
@@ -15,9 +15,10 @@ export type TableProps = {
15
15
  tableBorderColor?: string;
16
16
  noBorders?: boolean;
17
17
  onSelection?: (selected: (string | number)[]) => void;
18
- isPagintaion?: boolean;
18
+ isPagination?: boolean;
19
19
  selections?: (string | number)[];
20
20
  onRowClick?: (row: DataObject, header: Record<string | number, string | number>) => void;
21
+ isActionFreeze?: boolean;
21
22
  };
22
23
  export type DataObject = {
23
24
  [key: string]: string | number | any;
@@ -38,7 +39,7 @@ export type ColumnSortingProps = {
38
39
  column: string | number;
39
40
  direction: "asc" | "desc" | "none";
40
41
  };
41
- export type TableHeaderPageProps = Pick<TableProps, "columns" | "isCheckbox" | "headerBgColor" | "headerTextColor" | "freezedBgColor" | "freezedTextColor" | "noBorders" | "isLoading"> & {
42
+ export type TableHeaderPageProps = Pick<TableProps, "columns" | "isCheckbox" | "headerBgColor" | "headerTextColor" | "freezedBgColor" | "freezedTextColor" | "noBorders" | "isLoading" | "isActionFreeze"> & {
42
43
  visibleColumns: Record<string, boolean>;
43
44
  handleSort: (label: string | number, type: "asc" | "desc" | "none") => void;
44
45
  activeHeader?: string | null;
@@ -53,10 +54,10 @@ export type TableHeaderPageProps = Pick<TableProps, "columns" | "isCheckbox" | "
53
54
  checked: boolean | "indeterminate";
54
55
  isContent: boolean;
55
56
  isLink: boolean;
56
- onColumnSearch?: (columnId: string, searchValue: string) => void;
57
- columnFilters?: Record<string, string>;
57
+ setColumnsSearch: React.Dispatch<React.SetStateAction<Record<string, string>>>;
58
+ columnsSearch: Record<string, string>;
58
59
  };
59
- export type TableBodyPageProps = Pick<TableProps, "columns" | "isCheckbox" | "data" | "freezedBgColor" | "freezedTextColor" | "noBorders" | "isLoading" | "onRowClick"> & {
60
+ export type TableBodyPageProps = Pick<TableProps, "columns" | "isCheckbox" | "data" | "freezedBgColor" | "freezedTextColor" | "noBorders" | "isLoading" | "onRowClick" | "isActionFreeze"> & {
60
61
  visibleColumns: Record<string, boolean>;
61
62
  startRow: number;
62
63
  endRow: number;
@@ -66,3 +67,21 @@ export type TableBodyPageProps = Pick<TableProps, "columns" | "isCheckbox" | "da
66
67
  isContent: boolean;
67
68
  isLink: boolean;
68
69
  };
70
+ export type TableFiltersProps = {
71
+ header: DataObject;
72
+ setColumnsSearch: (searchVal: string) => void;
73
+ columnsSearch: string;
74
+ onClose: () => void;
75
+ };
76
+ export type ColumnHeaderProps = Pick<TableProps, "isCheckbox" | "headerBgColor" | "headerTextColor" | "freezedBgColor" | "freezedTextColor" | "noBorders"> & Pick<TableHeaderPageProps, "handleSort" | "visibleColumns" | "columnsSort"> & {
77
+ header: TableHeaderProps;
78
+ index: number;
79
+ columnWidths: number[];
80
+ headerRefs: MutableRefObject<(HTMLTableCellElement | null)[]>;
81
+ columnsSearch: Record<string, string>;
82
+ setColumnsSearch: Dispatch<SetStateAction<Record<string, string>>>;
83
+ };
84
+ export type SortingProps = {
85
+ isSorting: ColumnSortingProps | undefined;
86
+ header: TableHeaderProps;
87
+ };
@@ -40,13 +40,13 @@ var tableData = [
40
40
  },
41
41
  {
42
42
  id: 3,
43
- name: "Bob Smith",
43
+ name: "Bob Smitha",
44
44
  age: 40,
45
45
  gender: "Male",
46
46
  },
47
47
  {
48
48
  id: 3,
49
- name: "Bob Smith",
49
+ name: "Bobe Smith",
50
50
  age: 40,
51
51
  gender: "Male",
52
52
  },
@@ -64,15 +64,21 @@ var tableData = [
64
64
  },
65
65
  {
66
66
  id: 3,
67
- name: "Bob Smith",
68
- age: 40,
69
- gender: "Male",
67
+ name: "crushmika",
68
+ age: 33,
69
+ gender: "Female",
70
70
  },
71
71
  {
72
72
  id: 33,
73
- name: "Bob Smith333",
74
- age: 40,
75
- gender: "Male",
73
+ name: "Shree",
74
+ age: 30,
75
+ gender: "Female",
76
+ },
77
+ {
78
+ id: 33,
79
+ name: "Shree",
80
+ age: 25,
81
+ gender: "Female",
76
82
  },
77
83
  {
78
84
  id: 3,
@@ -82,9 +88,9 @@ var tableData = [
82
88
  },
83
89
  {
84
90
  id: 3,
85
- name: "Bob Smith",
91
+ name: "Waquima gaabi",
86
92
  age: 40,
87
- gender: "Male",
93
+ gender: "female",
88
94
  },
89
95
  {
90
96
  id: 3,
@@ -94,7 +100,7 @@ var tableData = [
94
100
  },
95
101
  {
96
102
  id: 3,
97
- name: "Bob Smith",
103
+ name: "Johny",
98
104
  age: 40,
99
105
  gender: "Male",
100
106
  },
@@ -133,6 +139,6 @@ var column = [
133
139
  ];
134
140
  var TableExample = function () {
135
141
  return (react_1.default.createElement("div", null,
136
- react_1.default.createElement(Table_1.default, { columns: column, data: tableData, isCheckbox: true, isVisiblity: false, isLoading: false, noBorders: false, onSelection: function (checked) { return console.log(checked); }, onRowClick: function (row, header) { return console.log(row, header); }, isPagintaion: false })));
142
+ react_1.default.createElement(Table_1.default, { columns: column, data: tableData, isCheckbox: true, isVisiblity: false, isLoading: false, noBorders: false, onSelection: function (checked) { return console.log(checked); }, onRowClick: function (row, header) { return console.log(row, header); }, isPagination: false })));
137
143
  };
138
144
  exports.TableExample = TableExample;
@@ -7,3 +7,5 @@ export declare function SortMultiColumnData(data: Record<string, string | number
7
7
  export declare const getPreviousColumnWidth: (columns: KaTableProps["columns"], key: string) => any;
8
8
  export declare const getFieldType: (header: string, data: DataObject[]) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
9
9
  export declare const calculateLeftOffset: (columns: number[], index: number) => number;
10
+ export declare const searchAndSortData: (data: DataObject[], searchValues: Record<string, string>) => DataObject[];
11
+ export declare function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void;
@@ -9,7 +9,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
9
9
  return to.concat(ar || Array.prototype.slice.call(from));
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.calculateLeftOffset = exports.getFieldType = exports.getPreviousColumnWidth = exports.SortMultiColumnData = void 0;
12
+ exports.debounce = exports.searchAndSortData = exports.calculateLeftOffset = exports.getFieldType = exports.getPreviousColumnWidth = exports.SortMultiColumnData = void 0;
13
13
  function SortMultiColumnData(data, sortConfig) {
14
14
  if (!sortConfig.length)
15
15
  return data;
@@ -39,15 +39,6 @@ var getPreviousColumnWidth = function (columns, key) {
39
39
  return 0;
40
40
  };
41
41
  exports.getPreviousColumnWidth = getPreviousColumnWidth;
42
- // export function calculateLeftOffset(columns: any, currentIndex: number) {
43
- // let offset = 0;
44
- // for (let i = 0; i < currentIndex; i++) {
45
- // if (columns[i].isFreeze) {
46
- // offset += columns[i].width || 100;
47
- // }
48
- // }
49
- // return offset;
50
- // }
51
42
  var getFieldType = function (header, data) {
52
43
  for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
53
44
  var row = data_1[_i];
@@ -62,3 +53,46 @@ var calculateLeftOffset = function (columns, index) {
62
53
  return columns.slice(0, index).reduce(function (sum, width) { return sum + width; }, 0);
63
54
  };
64
55
  exports.calculateLeftOffset = calculateLeftOffset;
56
+ var searchAndSortData = function (data, searchValues) {
57
+ var filteredData = data.filter(function (item) {
58
+ return Object.keys(searchValues).every(function (key) {
59
+ var searchValue = searchValues[key].toLowerCase();
60
+ return item[key].toString().toLowerCase().includes(searchValue);
61
+ });
62
+ });
63
+ return filteredData.sort(function (a, b) {
64
+ var aMatchCount = 0;
65
+ var bMatchCount = 0;
66
+ Object.keys(searchValues).forEach(function (key) {
67
+ var searchValue = searchValues[key].toLowerCase();
68
+ if (a[key] && a[key].toString().toLowerCase() === searchValue) {
69
+ aMatchCount++;
70
+ }
71
+ if (b[key] && b[key].toString().toLowerCase() === searchValue) {
72
+ bMatchCount++;
73
+ }
74
+ if (a[key] && a[key].toString().toLowerCase().includes(searchValue)) {
75
+ aMatchCount += 0.5;
76
+ }
77
+ if (b[key] && b[key].toString().toLowerCase().includes(searchValue)) {
78
+ bMatchCount += 0.5;
79
+ }
80
+ });
81
+ return bMatchCount - aMatchCount;
82
+ });
83
+ };
84
+ exports.searchAndSortData = searchAndSortData;
85
+ function debounce(func, delay) {
86
+ var timer;
87
+ return function () {
88
+ var args = [];
89
+ for (var _i = 0; _i < arguments.length; _i++) {
90
+ args[_i] = arguments[_i];
91
+ }
92
+ clearTimeout(timer);
93
+ timer = setTimeout(function () {
94
+ func.apply(void 0, args);
95
+ }, delay);
96
+ };
97
+ }
98
+ exports.debounce = debounce;
package/dist/index.d.ts CHANGED
@@ -39,5 +39,6 @@ import VerifyEmailOtp from "./Components/EmailCards/VerifyEmailOtp/VerifyEmailOt
39
39
  import withTheme from "./withTheme";
40
40
  import { useCustomTheme } from "./Theme/useCustomTheme";
41
41
  import { ThemesList } from "./Theme";
42
- export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, InputTextArea, KaTable, TableActionCreator, TableEnums, TableProps, TableModel, TableUtils, TableFun, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, NoteTextArea, MultiSelect, NumberInput, PinInput, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Search, Select, SelectSearch, SideBar, Skeletons, Switch, Table, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, };
42
+ import { debounce } from "./Utils/table";
43
+ export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, InputTextArea, KaTable, TableActionCreator, TableEnums, TableProps, TableModel, TableUtils, TableFun, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, NoteTextArea, MultiSelect, NumberInput, PinInput, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Search, Select, SelectSearch, SideBar, Skeletons, Switch, Table, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
43
44
  export default withTheme;
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.TextInput = exports.Table = exports.Switch = exports.Skeletons = exports.SideBar = exports.SelectSearch = exports.Select = exports.Search = exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.PinInput = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.TableFun = exports.TableUtils = exports.TableModel = exports.TableProps = exports.TableEnums = exports.TableActionCreator = exports.KaTable = exports.InputTextArea = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
31
- exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = void 0;
31
+ exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = void 0;
32
32
  var Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
33
33
  exports.Accordian = Accordion_1.default;
34
34
  var AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
@@ -127,4 +127,6 @@ var useCustomTheme_1 = require("./Theme/useCustomTheme");
127
127
  Object.defineProperty(exports, "useCustomTheme", { enumerable: true, get: function () { return useCustomTheme_1.useCustomTheme; } });
128
128
  var Theme_1 = require("./Theme");
129
129
  Object.defineProperty(exports, "ThemesList", { enumerable: true, get: function () { return Theme_1.ThemesList; } });
130
+ var table_1 = require("./Utils/table");
131
+ Object.defineProperty(exports, "debounce", { enumerable: true, get: function () { return table_1.debounce; } });
130
132
  exports.default = withTheme_1.default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "1.1.49",
3
+ "version": "1.1.51",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",