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.
- package/dist/Components/KaTable/KaTable.js +2 -2
- package/dist/Components/KaTable/useMergedChildComponents.js +3 -3
- package/dist/Components/Table/Components/Pagination.d.ts +15 -0
- package/dist/Components/Table/Components/Pagination.js +42 -0
- package/dist/Components/Table/Components/TableBody.d.ts +12 -0
- package/dist/Components/Table/Components/TableBody.js +35 -0
- package/dist/Components/Table/Components/TableHeader.d.ts +18 -0
- package/dist/Components/Table/Components/TableHeader.js +115 -0
- package/dist/Components/Table/Components/TableLoading.d.ts +3 -0
- package/dist/Components/Table/Components/TableLoading.js +31 -0
- package/dist/Components/Table/Table.css +29 -0
- package/dist/Components/Table/Table.d.ts +1 -1
- package/dist/Components/Table/Table.js +231 -217
- package/dist/Components/Table/TableProps.d.ts +20 -17
- package/dist/Layout.js +5 -1
- package/dist/Pages/table.d.ts +2 -0
- package/dist/Pages/table.js +59 -0
- package/dist/Utils/common.d.ts +2 -0
- package/dist/Utils/common.js +24 -1
- package/dist/Utils/table.d.ts +9 -0
- package/dist/Utils/table.js +64 -0
- package/package.json +1 -1
|
@@ -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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,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,
|
|
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 =
|
|
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
|
|
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
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
var
|
|
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)(
|
|
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 =
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
86
|
+
var value = Number(event.target.value);
|
|
87
|
+
setRowsPerPage(value !== 0 ? value : defaultPageSize);
|
|
52
88
|
setCurrentPage(0);
|
|
53
89
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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(
|
|
90
|
-
var highestValue_1 = String(Math.max.apply(
|
|
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
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
-
|
|
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
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
-
|
|
274
|
-
react_1.default.createElement(
|
|
275
|
-
|
|
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,
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
2
|
export type TableProps = {
|
|
3
3
|
data: DataObject[];
|
|
4
|
-
|
|
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
|
|
22
|
+
export type TableHeaderProps = {
|
|
24
23
|
label: string;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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,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;
|
package/dist/Utils/common.d.ts
CHANGED
|
@@ -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;
|
package/dist/Utils/common.js
CHANGED
|
@@ -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;
|