pixelize-design-library 1.1.34 → 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.
@@ -54,7 +54,7 @@ require("ka-table/style.css");
54
54
  require("./ka-table.css");
55
55
  var useMergedChildComponents_1 = __importDefault(require("./useMergedChildComponents"));
56
56
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
57
- var common_1 = require("../../Utils/common");
57
+ var table_1 = require("../../Utils/table");
58
58
  var selectionCellColumn = {
59
59
  key: "select-cell",
60
60
  width: 50,
@@ -80,7 +80,7 @@ var KaTable = function (_a) {
80
80
  var handleSort = function (sort) {
81
81
  setSortState(sort);
82
82
  };
83
- var sortedData = (0, react_1.useMemo)(function () { return (0, common_1.SortMultiColumnData)(__spreadArray([], data, true), sortState); }, [sortState, data]);
83
+ var sortedData = (0, react_1.useMemo)(function () { return (0, table_1.SortMultiColumnData)(__spreadArray([], data, true), sortState); }, [sortState, data]);
84
84
  var mergedChildComponents = (0, useMergedChildComponents_1.default)({
85
85
  childComponents: childComponents,
86
86
  onSortChange: handleSort,
@@ -51,7 +51,7 @@ var CustomHeader_1 = __importDefault(require("./CustomHeader"));
51
51
  var SelectionHeader_1 = __importDefault(require("./SelectionHeader"));
52
52
  var SelectionCell_1 = __importDefault(require("./SelectionCell"));
53
53
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
54
- var common_1 = require("../../Utils/common");
54
+ var table_1 = require("../../Utils/table");
55
55
  var useMergedChildComponents = function (_a) {
56
56
  var childComponents = _a.childComponents, onSortChange = _a.onSortChange, handleSelection = _a.handleSelection, rowKey = _a.rowKey, onRowClick = _a.onRowClick, selected = _a.selected, dataLength = _a.dataLength, columns = _a.columns, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, sortState = _a.sortState;
57
57
  var theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -144,7 +144,7 @@ var useMergedChildComponents = function (_a) {
144
144
  }
145
145
  }
146
146
  if (props.column.columnFreeze) {
147
- var stickyLeft = (0, common_1.getPreviousColumnWidth)(columns, props.column.key);
147
+ var stickyLeft = (0, table_1.getPreviousColumnWidth)(columns, props.column.key);
148
148
  return {
149
149
  style: __assign(__assign({}, props.column.style), { position: "sticky", left: stickyLeft, zIndex: 3, backgroundColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.backgroundColor.subtle, color: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.gray[600] }),
150
150
  };
@@ -168,7 +168,7 @@ var useMergedChildComponents = function (_a) {
168
168
  }
169
169
  }
170
170
  if (props.column.columnFreeze) {
171
- var stickyLeft = (0, common_1.getPreviousColumnWidth)(columns, props.column.key);
171
+ var stickyLeft = (0, table_1.getPreviousColumnWidth)(columns, props.column.key);
172
172
  return {
173
173
  style: __assign(__assign({}, props.column.style), { position: "sticky", left: stickyLeft, zIndex: 2, backgroundColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.backgroundColor.subtle, color: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.gray[600], fontWeight: 600 }),
174
174
  };
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ import { TableProps } from "../TableProps";
3
+ type PaginationProps = Pick<TableProps, "isVisiblity" | "columns"> & {
4
+ visibleColumns: Record<string, boolean>;
5
+ paginationText: string;
6
+ handlePageSizeChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;
7
+ rowsPerPage: number;
8
+ currentPage: number;
9
+ pages: number;
10
+ handleColumnVisibilityChange: (header: string) => void;
11
+ setCurrentPage: React.Dispatch<React.SetStateAction<number>>;
12
+ dataLength: number;
13
+ };
14
+ declare const Pagination: ({ isVisiblity, columns, visibleColumns, paginationText, handlePageSizeChange, rowsPerPage, currentPage, pages, handleColumnVisibilityChange, setCurrentPage, dataLength, }: PaginationProps) => React.JSX.Element;
15
+ export default Pagination;
@@ -0,0 +1,42 @@
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 icons_1 = require("@chakra-ui/icons");
8
+ var react_2 = require("@chakra-ui/react");
9
+ var fa_1 = require("react-icons/fa");
10
+ var Pagination = function (_a) {
11
+ var isVisiblity = _a.isVisiblity, columns = _a.columns, visibleColumns = _a.visibleColumns, paginationText = _a.paginationText, handlePageSizeChange = _a.handlePageSizeChange, rowsPerPage = _a.rowsPerPage, currentPage = _a.currentPage, pages = _a.pages, handleColumnVisibilityChange = _a.handleColumnVisibilityChange, setCurrentPage = _a.setCurrentPage, dataLength = _a.dataLength;
12
+ var pageSizeOptions = [1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 75, 100].filter(function (size) { return size <= dataLength; });
13
+ var isLeftDisabled = currentPage === 0;
14
+ var isRightDisabled = currentPage >= pages - 1;
15
+ return (react_1.default.createElement(react_2.Flex, { justify: "flex-end", align: "center", mt: 4 },
16
+ isVisiblity && (react_1.default.createElement(react_2.Flex, { mr: 4 },
17
+ react_1.default.createElement(react_2.Menu, null,
18
+ react_1.default.createElement(react_2.MenuButton, { as: react_2.Button, rightIcon: react_1.default.createElement(icons_1.ChevronDownIcon, null), colorScheme: "blue", variant: "ghost", size: "xs" }, "Columns"),
19
+ react_1.default.createElement(react_2.MenuList, { overflow: "scroll", zIndex: "2" }, columns.map(function (header, index) { return (react_1.default.createElement(react_2.MenuItem, { key: index },
20
+ react_1.default.createElement(react_2.Checkbox, { isChecked: visibleColumns[header.label], size: "sm", onChange: function () { return handleColumnVisibilityChange(header.label); } }, header.label))); }))))),
21
+ react_1.default.createElement(react_2.Text, { mr: 4, fontSize: 12 }, paginationText),
22
+ react_1.default.createElement(react_2.Select, { onChange: handlePageSizeChange, value: rowsPerPage, mr: 4, size: "xs", width: 20 },
23
+ react_1.default.createElement("option", { value: 0 }),
24
+ pageSizeOptions.map(function (size, index) { return (react_1.default.createElement("option", { key: index, value: size }, size)); })),
25
+ react_1.default.createElement(react_2.Flex, null,
26
+ react_1.default.createElement(react_2.IconButton, { mx: 1, "aria-label": "left-icon", color: isLeftDisabled ? "gray" : "black", rounded: "full", variant: isLeftDisabled ? "plain" : "ghost", onClick: function () { return setCurrentPage(0); } },
27
+ react_1.default.createElement(fa_1.FaAngleDoubleLeft, null)),
28
+ react_1.default.createElement(react_2.IconButton, { mx: 1, "aria-label": "left-icon", color: isLeftDisabled ? "gray" : "black", rounded: "full", variant: isLeftDisabled ? "plain" : "ghost", onClick: function () { return currentPage > 0 && setCurrentPage(currentPage - 1); } },
29
+ react_1.default.createElement(fa_1.FaAngleLeft, null)),
30
+ react_1.default.createElement(react_2.Text, { mx: 1, mt: 3, fontSize: 12 },
31
+ "Page ",
32
+ currentPage + 1,
33
+ " of ",
34
+ pages),
35
+ react_1.default.createElement(react_2.IconButton, { mx: 1, "aria-label": "left-icon", color: isRightDisabled ? "gray" : "black", rounded: "full", variant: isRightDisabled ? "plain" : "ghost", onClick: function () {
36
+ return currentPage < pages - 1 && setCurrentPage(currentPage + 1);
37
+ } },
38
+ react_1.default.createElement(fa_1.FaAngleRight, null)),
39
+ react_1.default.createElement(react_2.IconButton, { mx: 1, "aria-label": "left-icon", color: isRightDisabled ? "gray" : "black", rounded: "full", variant: isRightDisabled ? "plain" : "ghost", onClick: function () { return setCurrentPage(pages - 1); } },
40
+ react_1.default.createElement(fa_1.FaAngleDoubleRight, null)))));
41
+ };
42
+ exports.default = Pagination;
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ import { TableProps } from "../TableProps";
3
+ type TableBodyProps = Pick<TableProps, "columns" | "isCheckbox" | "data" | "freezedBgColor" | "freezedTextColor" | "noBorders"> & {
4
+ visibleColumns: Record<string, boolean>;
5
+ startRow: number;
6
+ endRow: number;
7
+ columnWidths: number[];
8
+ handleCheckbox: (selection: string | number) => void;
9
+ selections: (string | number)[];
10
+ };
11
+ declare const TableBody: ({ data, isCheckbox, columns, visibleColumns, startRow, endRow, columnWidths, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, selections, }: TableBodyProps) => React.JSX.Element;
12
+ export default TableBody;
@@ -0,0 +1,35 @@
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 = require("@chakra-ui/react");
7
+ var react_2 = __importDefault(require("react"));
8
+ var table_1 = require("../../../Utils/table");
9
+ var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
10
+ var TableBody = function (_a) {
11
+ 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;
12
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
13
+ return (react_2.default.createElement(react_2.default.Fragment, null, data.slice(startRow, endRow).map(function (row, index) {
14
+ var _a;
15
+ return (react_2.default.createElement(react_1.Tr, { key: index + 1 },
16
+ isCheckbox && (react_2.default.createElement(react_1.Td, { w: "6", fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: freezedBgColor, position: "sticky", border: noBorders ? "none" : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[300]), boxSizing: "border-box", left: 0, zIndex: 1, className: "columns sticky-columns" },
17
+ react_2.default.createElement(react_1.Checkbox, { "aria-label": "Select all rows", colorScheme: "gray", backgroundColor: theme.colors.gray[50], borderColor: theme.colors.gray[500], variant: "subtle", onChange: function () { return handleCheckbox(row.id); }, isChecked: selections.includes(row.id) }))),
18
+ columns.map(function (header, headerIndex) {
19
+ var _a;
20
+ var isFrozen = header.isFreeze;
21
+ var leftOffset = isFrozen
22
+ ? (0, table_1.calculateLeftOffset)(columnWidths, headerIndex) +
23
+ (isCheckbox ? 50 : 0)
24
+ : 0;
25
+ return (visibleColumns[header.label] && (react_2.default.createElement(react_1.Td, { key: headerIndex + 1, fontSize: 14, fontWeight: 400, position: isFrozen ? "sticky" : undefined, left: isFrozen ? leftOffset : undefined, zIndex: isFrozen ? 1 : 0, backgroundColor: isFrozen
26
+ ? freezedBgColor
27
+ : index % 2 === 1
28
+ ? theme.colors.backgroundColor.light
29
+ : "white", textOverflow: "ellipsis", border: noBorders
30
+ ? "none"
31
+ : "1px solid ".concat((_a = theme.colors) === null || _a === void 0 ? void 0 : _a.gray[isFrozen ? 300 : 200]), className: "columns ".concat(isFrozen ? "sticky-columns" : "scrollable-columns"), boxSizing: "border-box", color: isFrozen ? freezedTextColor : undefined }, header.node ? header.node(row) : row[header.id])));
32
+ })));
33
+ })));
34
+ };
35
+ exports.default = TableBody;
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { ColumnSortingProps, TableProps } from "../TableProps";
3
+ type TableHeaderProps = Pick<TableProps, "columns" | "isCheckbox" | "headerBgColor" | "headerTextColor" | "freezedBgColor" | "freezedTextColor" | "noBorders"> & {
4
+ visibleColumns: Record<string, boolean>;
5
+ handleSort: (label: string, type: "asc" | "desc" | "none") => void;
6
+ activeHeader: string | null;
7
+ isPopoverOpen: boolean;
8
+ closePopover: () => void;
9
+ searchFeatures: (header: string) => React.ReactNode;
10
+ handleHeaderClick: (header: string, search: boolean) => void;
11
+ headerRefs: React.MutableRefObject<(HTMLTableCellElement | null)[]>;
12
+ columnWidths: number[];
13
+ columnsSort: ColumnSortingProps[];
14
+ handleCheckbox: (selection: string | number) => void;
15
+ checked: boolean | "indeterminate";
16
+ };
17
+ declare const TableHeader: ({ columns, isCheckbox, visibleColumns, handleSort, activeHeader, isPopoverOpen, closePopover, searchFeatures, handleHeaderClick, headerRefs, columnWidths, columnsSort, headerBgColor, headerTextColor, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, checked, }: TableHeaderProps) => React.JSX.Element;
18
+ export default TableHeader;
@@ -0,0 +1,115 @@
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 = require("@chakra-ui/react");
27
+ var react_2 = __importStar(require("react"));
28
+ var table_1 = require("../../../Utils/table");
29
+ var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
30
+ var fa_1 = require("react-icons/fa");
31
+ var TableHeader = function (_a) {
32
+ var _b;
33
+ var columns = _a.columns, isCheckbox = _a.isCheckbox, visibleColumns = _a.visibleColumns, handleSort = _a.handleSort, activeHeader = _a.activeHeader, isPopoverOpen = _a.isPopoverOpen, closePopover = _a.closePopover, searchFeatures = _a.searchFeatures,
34
+ // hoveredHeaderIndex,
35
+ handleHeaderClick = _a.handleHeaderClick, 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;
36
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
37
+ return (react_2.default.createElement(react_1.Tr, null,
38
+ isCheckbox && (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((_b = theme.colors) === null || _b === void 0 ? void 0 : _b.gray[300]), position: "sticky", className: "columns sticky-columns", left: "0px", zIndex: 1, boxShadow: "2px 0 5px rgba(0, 0, 0, 0.1)" },
39
+ react_2.default.createElement(react_1.Checkbox, { "aria-label": "Select all rows", colorScheme: "gray", backgroundColor: theme.colors.gray[50], borderColor: theme.colors.gray[500], variant: "subtle", onChange: function () { return handleCheckbox(0); }, isChecked: checked === true, isIndeterminate: checked === "indeterminate" }))),
40
+ columns.map(function (header, index) {
41
+ var _a, _b;
42
+ var isFrozen = header.isFreeze;
43
+ var leftOffset = isFrozen
44
+ ? (0, table_1.calculateLeftOffset)(columnWidths, index) + (isCheckbox ? 50 : 0)
45
+ : undefined;
46
+ var isSorting = header.isSort
47
+ ? columnsSort.find(function (o) { return o.column === header.id; })
48
+ : undefined;
49
+ var BgColor = isFrozen ? freezedBgColor : headerBgColor;
50
+ var TextColor = isFrozen ? freezedTextColor : headerTextColor;
51
+ 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, 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") },
52
+ react_2.default.createElement(react_1.Box, { display: "flex", color: TextColor, justifyContent: "space-between", alignItems: "center" },
53
+ react_2.default.createElement(react_1.Box, { textOverflow: "ellipsis", whiteSpace: "nowrap", display: "block", overflow: "hidden" }, header.label),
54
+ react_2.default.createElement("span", null, header.isSort && (react_2.default.createElement(SortingIcon, { sortState: (_b = isSorting === null || isSorting === void 0 ? void 0 : isSorting.direction) !== null && _b !== void 0 ? _b : "none", handleSortClick: function () {
55
+ var direction = "asc";
56
+ if ((isSorting === null || isSorting === void 0 ? void 0 : isSorting.direction) === "asc") {
57
+ direction = "desc";
58
+ }
59
+ else if ((isSorting === null || isSorting === void 0 ? void 0 : isSorting.direction) === "desc") {
60
+ direction = "none";
61
+ }
62
+ handleSort(header.id, direction);
63
+ } })))))));
64
+ })));
65
+ };
66
+ exports.default = TableHeader;
67
+ var SortingIcon = (0, react_2.memo)(function (_a) {
68
+ var sortState = _a.sortState, handleSortClick = _a.handleSortClick;
69
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
70
+ 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)" } },
71
+ sortState === "none" && react_2.default.createElement(fa_1.FaSort, { color: "black", size: 14 }),
72
+ sortState === "asc" && react_2.default.createElement(fa_1.FaCaretUp, { color: "black", size: 14 }),
73
+ sortState === "desc" && react_2.default.createElement(fa_1.FaCaretDown, { color: "black", size: 14 })));
74
+ });
75
+ // const Popover = () => {
76
+ // return (
77
+ // <div style={{ background: "red" }}>
78
+ // <Popover
79
+ // isOpen={
80
+ // activeHeader === header.label && isPopoverOpen && header.isSearch
81
+ // }
82
+ // onClose={closePopover}
83
+ // placement="bottom-start"
84
+ // closeOnBlur={false}
85
+ // >
86
+ // <PopoverTrigger>
87
+ // <span>
88
+ // <HamburgerIcon
89
+ // w={15}
90
+ // h={15}
91
+ // onClick={() =>
92
+ // handleHeaderClick(
93
+ // header.label,
94
+ // header.isSearch ? header.isSearch : false
95
+ // )
96
+ // }
97
+ // style={{
98
+ // cursor: "pointer",
99
+ // display:
100
+ // hoveredHeaderIndex === index && header.isSearch
101
+ // ? "inline"
102
+ // : "none",
103
+ // }}
104
+ // />
105
+ // </span>
106
+ // </PopoverTrigger>
107
+ // <PopoverContent width={200} zIndex={3}>
108
+ // <PopoverBody background={"#deeefd"}>
109
+ // {searchFeatures(header.label)}
110
+ // </PopoverBody>
111
+ // </PopoverContent>
112
+ // </Popover>
113
+ // </div>
114
+ // );
115
+ // };
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const TableLoading: () => React.JSX.Element;
3
+ export default TableLoading;
@@ -0,0 +1,31 @@
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 TableLoading = function () {
9
+ return (react_1.default.createElement(react_2.Box, { overflowX: "auto", p: 4 },
10
+ react_1.default.createElement(react_2.Table, { variant: "simple", width: "full" },
11
+ react_1.default.createElement(react_2.Thead, null,
12
+ react_1.default.createElement(react_2.Tr, null,
13
+ react_1.default.createElement(react_2.Th, { p: 2 },
14
+ react_1.default.createElement(react_2.Skeleton, { height: "20px" })),
15
+ react_1.default.createElement(react_2.Th, { p: 2 },
16
+ react_1.default.createElement(react_2.Skeleton, { height: "20px" })),
17
+ react_1.default.createElement(react_2.Th, { p: 2 },
18
+ react_1.default.createElement(react_2.Skeleton, { height: "20px" })),
19
+ react_1.default.createElement(react_2.Th, { p: 2 },
20
+ react_1.default.createElement(react_2.Skeleton, { height: "20px" })))),
21
+ react_1.default.createElement(react_2.Tbody, null, Array.from({ length: 5 }).map(function (_, rowIndex) { return (react_1.default.createElement(react_2.Tr, { key: rowIndex },
22
+ react_1.default.createElement(react_2.Td, { p: 2 },
23
+ react_1.default.createElement(react_2.SkeletonText, { noOfLines: 1, skeletonHeight: "2" })),
24
+ react_1.default.createElement(react_2.Td, { p: 2 },
25
+ react_1.default.createElement(react_2.SkeletonText, { noOfLines: 1, skeletonHeight: "2" })),
26
+ react_1.default.createElement(react_2.Td, { p: 2 },
27
+ react_1.default.createElement(react_2.SkeletonText, { noOfLines: 1, skeletonHeight: "2" })),
28
+ react_1.default.createElement(react_2.Td, { p: 2 },
29
+ react_1.default.createElement(react_2.SkeletonText, { noOfLines: 1, skeletonHeight: "2" })))); })))));
30
+ };
31
+ exports.default = TableLoading;
@@ -0,0 +1,29 @@
1
+ .table-container {
2
+ display: flex;
3
+ overflow: hidden; /* Prevent extra scrollbars */
4
+ }
5
+
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;
29
+ }
@@ -1,3 +1,3 @@
1
1
  import React from "react";
2
2
  import { TableProps } from "./TableProps";
3
- export default function Table({ data, headers, tableHeaderBgColor, tableHeaderColor, handleExportChange, exportOptions, exportLabel, isLoading, loadingContaxt, loadingBoxStyle, isVisiblity, }: TableProps): React.JSX.Element;
3
+ export default function Table({ data, columns, handleExportChange, onSelection, exportOptions, exportLabel, isLoading, isVisiblity, isCheckbox, headerBgColor, freezedBgColor, headerTextColor, freezedTextColor, tableBorderColor, noBorders, }: TableProps): React.JSX.Element;
@@ -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
+ };
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()));
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const TableExample: () => React.JSX.Element;
@@ -0,0 +1,59 @@
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
+ exports.TableExample = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var Table_1 = __importDefault(require("../Components/Table/Table"));
9
+ var tableData = [
10
+ {
11
+ id: 1,
12
+ name: "John Doe",
13
+ age: 30,
14
+ gender: "Male",
15
+ },
16
+ {
17
+ id: 2,
18
+ name: "Jane Doe",
19
+ age: 25,
20
+ gender: "Female",
21
+ },
22
+ {
23
+ id: 3,
24
+ name: "Bob Smith",
25
+ age: 40,
26
+ gender: "Male",
27
+ },
28
+ ];
29
+ var column = [
30
+ {
31
+ label: "Name",
32
+ id: "name",
33
+ isFreeze: true,
34
+ isSort: true,
35
+ },
36
+ {
37
+ label: "Age",
38
+ id: "age",
39
+ isFreeze: false,
40
+ isSort: true,
41
+ },
42
+ {
43
+ label: "Gender",
44
+ id: "gender",
45
+ },
46
+ {
47
+ label: "Action",
48
+ id: "action",
49
+ isVisiblity: true,
50
+ node: function (props) {
51
+ return props.name;
52
+ },
53
+ },
54
+ ];
55
+ var TableExample = function () {
56
+ return (react_1.default.createElement("div", null,
57
+ react_1.default.createElement(Table_1.default, { columns: column, data: tableData, isCheckbox: true, isVisiblity: false, isLoading: false, noBorders: false, onSelection: function (dd) { return console.log(dd); } })));
58
+ };
59
+ exports.TableExample = TableExample;
@@ -3,3 +3,5 @@ export declare function SortMultiColumnData(data: Record<string, any>[], sortCon
3
3
  direction: string;
4
4
  }[]): Record<string, any>[];
5
5
  export declare const getPreviousColumnWidth: (columns: any, key: any) => any;
6
+ export declare const getFieldType: (header: string, data: any) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
7
+ export declare const calculateLeftOffset: (columns: number[], index: number) => number;
@@ -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.getPreviousColumnWidth = exports.SortMultiColumnData = void 0;
12
+ 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,3 +39,26 @@ 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
+ var getFieldType = function (header, data) {
52
+ for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
53
+ var row = data_1[_i];
54
+ if (row[header] !== null) {
55
+ return typeof row[header];
56
+ }
57
+ }
58
+ return "string";
59
+ };
60
+ exports.getFieldType = getFieldType;
61
+ var calculateLeftOffset = function (columns, index) {
62
+ return columns.slice(0, index).reduce(function (sum, width) { return sum + width; }, 0);
63
+ };
64
+ exports.calculateLeftOffset = calculateLeftOffset;
@@ -0,0 +1,9 @@
1
+ import { KaTableProps } from "../Components/KaTable/KaTableProps";
2
+ import { DataObject } from "../Components/Table/TableProps";
3
+ export declare function SortMultiColumnData(data: Record<string, string | number>[], sortConfig: {
4
+ column: string;
5
+ direction: string;
6
+ }[]): Record<string, string | number>[];
7
+ export declare const getPreviousColumnWidth: (columns: KaTableProps["columns"], key: string) => any;
8
+ export declare const getFieldType: (header: string, data: DataObject[]) => "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
9
+ export declare const calculateLeftOffset: (columns: number[], index: number) => number;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.calculateLeftOffset = exports.getFieldType = exports.getPreviousColumnWidth = exports.SortMultiColumnData = void 0;
13
+ function SortMultiColumnData(data, sortConfig) {
14
+ if (!sortConfig.length)
15
+ return data;
16
+ return __spreadArray([], data, true).sort(function (a, b) {
17
+ for (var _i = 0, sortConfig_1 = sortConfig; _i < sortConfig_1.length; _i++) {
18
+ var _a = sortConfig_1[_i], column = _a.column, direction = _a.direction;
19
+ if (direction === "none") {
20
+ continue;
21
+ }
22
+ var dirMultiplier = direction === "asc" ? 1 : -1;
23
+ // Compare values for the current column
24
+ if (a[column] < b[column])
25
+ return -1 * dirMultiplier;
26
+ if (a[column] > b[column])
27
+ return 1 * dirMultiplier;
28
+ // If values are equal, continue to the next sorting rule
29
+ }
30
+ return 0; // Return 0 if all sort conditions are equal
31
+ });
32
+ }
33
+ exports.SortMultiColumnData = SortMultiColumnData;
34
+ var getPreviousColumnWidth = function (columns, key) {
35
+ var index = columns === null || columns === void 0 ? void 0 : columns.findIndex(function (column) { return column.key === key; });
36
+ if (index > 0) {
37
+ return columns[index - 1].width;
38
+ }
39
+ return 0;
40
+ };
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
+ var getFieldType = function (header, data) {
52
+ for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
53
+ var row = data_1[_i];
54
+ if (row[header] !== null) {
55
+ return typeof row[header];
56
+ }
57
+ }
58
+ return "string";
59
+ };
60
+ exports.getFieldType = getFieldType;
61
+ var calculateLeftOffset = function (columns, index) {
62
+ return columns.slice(0, index).reduce(function (sum, width) { return sum + width; }, 0);
63
+ };
64
+ exports.calculateLeftOffset = calculateLeftOffset;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "1.1.34",
3
+ "version": "1.1.35",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",