pixelize-design-library 2.2.94 → 2.2.95
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/Table/Components/ActiveFilters.d.ts +9 -0
- package/dist/Components/Table/Components/ActiveFilters.js +91 -0
- package/dist/Components/Table/Components/TableFilters.d.ts +4 -1
- package/dist/Components/Table/Components/TableFilters.js +17 -5
- package/dist/Components/Table/Components/TableHeader.js +7 -3
- package/dist/Components/Table/Table.js +3 -6
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { TableHeaderProps } from "../TableProps";
|
|
3
|
+
interface ActiveFiltersProps {
|
|
4
|
+
columns: TableHeaderProps[];
|
|
5
|
+
columnsSearch: Record<string, string>;
|
|
6
|
+
setColumnsSearch: React.Dispatch<React.SetStateAction<Record<string, string>>>;
|
|
7
|
+
}
|
|
8
|
+
declare const ActiveFilters: React.FC<ActiveFiltersProps>;
|
|
9
|
+
export default ActiveFilters;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var react_2 = require("@chakra-ui/react");
|
|
19
|
+
var lucide_react_1 = require("lucide-react");
|
|
20
|
+
var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
|
|
21
|
+
var Divider_1 = __importDefault(require("../../Divider/Divider"));
|
|
22
|
+
var ActiveFilters = function (_a) {
|
|
23
|
+
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
24
|
+
var columns = _a.columns, columnsSearch = _a.columnsSearch, setColumnsSearch = _a.setColumnsSearch;
|
|
25
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
26
|
+
// Get active filters (columns that have a search value)
|
|
27
|
+
var activeFilters = Object.entries(columnsSearch)
|
|
28
|
+
.filter(function (_a) {
|
|
29
|
+
var _ = _a[0], value = _a[1];
|
|
30
|
+
return value && value.trim() !== "";
|
|
31
|
+
})
|
|
32
|
+
.map(function (_a) {
|
|
33
|
+
var columnId = _a[0], value = _a[1];
|
|
34
|
+
var column = columns.find(function (col) { return col.id === columnId; });
|
|
35
|
+
return {
|
|
36
|
+
columnId: columnId,
|
|
37
|
+
label: (column === null || column === void 0 ? void 0 : column.label) || columnId,
|
|
38
|
+
value: value.trim(),
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
if (activeFilters.length === 0) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
var handleRemoveFilter = function (columnId) {
|
|
45
|
+
setColumnsSearch(function (prev) {
|
|
46
|
+
var newSearch = __assign({}, prev);
|
|
47
|
+
delete newSearch[columnId];
|
|
48
|
+
return newSearch;
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
var handleClearAll = function () {
|
|
52
|
+
setColumnsSearch({});
|
|
53
|
+
};
|
|
54
|
+
return (react_1.default.createElement(react_2.Box, { px: 2, py: 1, bg: ((_c = (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.background) === null || _c === void 0 ? void 0 : _c[100]) || ((_e = (_d = theme.colors) === null || _d === void 0 ? void 0 : _d.gray) === null || _e === void 0 ? void 0 : _e[50]), overflowX: "auto", sx: {
|
|
55
|
+
'&::-webkit-scrollbar': {
|
|
56
|
+
height: '6px',
|
|
57
|
+
},
|
|
58
|
+
'&::-webkit-scrollbar-track': {
|
|
59
|
+
background: theme.colors.gray[100],
|
|
60
|
+
borderRadius: '3px',
|
|
61
|
+
},
|
|
62
|
+
'&::-webkit-scrollbar-thumb': {
|
|
63
|
+
background: theme.colors.gray[400],
|
|
64
|
+
borderRadius: '3px',
|
|
65
|
+
},
|
|
66
|
+
'&::-webkit-scrollbar-thumb:hover': {
|
|
67
|
+
background: theme.colors.gray[500],
|
|
68
|
+
},
|
|
69
|
+
scrollbarWidth: 'thin',
|
|
70
|
+
scrollbarColor: "".concat(theme.colors.gray[400], " ").concat(theme.colors.gray[100]),
|
|
71
|
+
} },
|
|
72
|
+
react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 2, flexWrap: "nowrap", minW: "max-content" },
|
|
73
|
+
activeFilters.length > 0 && react_1.default.createElement(Divider_1.default, null),
|
|
74
|
+
activeFilters.map(function (filter) {
|
|
75
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
76
|
+
return (react_1.default.createElement(react_2.Flex, { key: filter.columnId, alignItems: "center", gap: 1, px: 2, py: 1, bg: ((_b = (_a = theme.colors) === null || _a === void 0 ? void 0 : _a.blue) === null || _b === void 0 ? void 0 : _b[50]) || ((_d = (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.primary) === null || _d === void 0 ? void 0 : _d[50]), borderRadius: "md", border: "0.063rem solid ".concat(((_f = (_e = theme.colors) === null || _e === void 0 ? void 0 : _e.blue) === null || _f === void 0 ? void 0 : _f[200]) || ((_h = (_g = theme.colors) === null || _g === void 0 ? void 0 : _g.primary) === null || _h === void 0 ? void 0 : _h[200])), flexShrink: 0 },
|
|
77
|
+
react_1.default.createElement(react_2.Text, { fontSize: "sm", color: (_k = (_j = theme.colors) === null || _j === void 0 ? void 0 : _j.gray) === null || _k === void 0 ? void 0 : _k[700], whiteSpace: "nowrap" },
|
|
78
|
+
react_1.default.createElement(react_2.Text, { as: "span", fontWeight: 600 },
|
|
79
|
+
filter.label,
|
|
80
|
+
":"),
|
|
81
|
+
" ",
|
|
82
|
+
filter.value),
|
|
83
|
+
react_1.default.createElement(react_2.IconButton, { "aria-label": "Remove filter for ".concat(filter.label), icon: react_1.default.createElement(lucide_react_1.X, { size: 14 }), size: "xs", variant: "ghost", onClick: function () { return handleRemoveFilter(filter.columnId); }, _hover: {
|
|
84
|
+
bg: ((_m = (_l = theme.colors) === null || _l === void 0 ? void 0 : _l.blue) === null || _m === void 0 ? void 0 : _m[100]) || ((_p = (_o = theme.colors) === null || _o === void 0 ? void 0 : _o.primary) === null || _p === void 0 ? void 0 : _p[100]),
|
|
85
|
+
}, minW: "auto", h: "auto", p: 0.5, flexShrink: 0 })));
|
|
86
|
+
}),
|
|
87
|
+
activeFilters.length > 1 && (react_1.default.createElement(react_2.Text, { fontSize: "sm", color: ((_g = (_f = theme.colors) === null || _f === void 0 ? void 0 : _f.blue) === null || _g === void 0 ? void 0 : _g[600]) || ((_j = (_h = theme.colors) === null || _h === void 0 ? void 0 : _h.primary) === null || _j === void 0 ? void 0 : _j[600]), cursor: "pointer", fontWeight: 500, onClick: handleClearAll, _hover: {
|
|
88
|
+
textDecoration: "underline",
|
|
89
|
+
}, flexShrink: 0, whiteSpace: "nowrap" }, "Clear all")))));
|
|
90
|
+
};
|
|
91
|
+
exports.default = ActiveFilters;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { TableFiltersProps } from "../TableProps";
|
|
3
|
-
declare const TableFilters: React.MemoExoticComponent<({ header, setColumnsSearch, columnsSearch, onClose }: TableFiltersProps
|
|
3
|
+
declare const TableFilters: React.MemoExoticComponent<({ header, setColumnsSearch, columnsSearch, onClose, isOpen, onOpen, }: TableFiltersProps & {
|
|
4
|
+
isOpen?: boolean | undefined;
|
|
5
|
+
onOpen?: (() => void) | undefined;
|
|
6
|
+
}) => React.JSX.Element>;
|
|
4
7
|
export default TableFilters;
|
|
@@ -28,7 +28,7 @@ var react_2 = require("@chakra-ui/react");
|
|
|
28
28
|
var table_1 = require("../../../Utils/table");
|
|
29
29
|
var lucide_react_1 = require("lucide-react");
|
|
30
30
|
var TableFilters = (0, react_1.memo)(function (_a) {
|
|
31
|
-
var header = _a.header, setColumnsSearch = _a.setColumnsSearch, columnsSearch = _a.columnsSearch, onClose = _a.onClose;
|
|
31
|
+
var header = _a.header, setColumnsSearch = _a.setColumnsSearch, columnsSearch = _a.columnsSearch, onClose = _a.onClose, isOpen = _a.isOpen, onOpen = _a.onOpen;
|
|
32
32
|
var searchRef = (0, react_1.useRef)(null);
|
|
33
33
|
var _b = (0, react_1.useState)(false), refreshDataOnOpen = _b[0], setRefreshDataOnOpen = _b[1];
|
|
34
34
|
var debounceRef = (0, table_1.debounce)(function (value) {
|
|
@@ -40,9 +40,21 @@ var TableFilters = (0, react_1.memo)(function (_a) {
|
|
|
40
40
|
}
|
|
41
41
|
/* eslint-disable */
|
|
42
42
|
}, [refreshDataOnOpen]);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
// Auto-focus input when popover opens
|
|
44
|
+
(0, react_1.useEffect)(function () {
|
|
45
|
+
if (isOpen && searchRef.current) {
|
|
46
|
+
// Small delay to ensure popover is fully rendered
|
|
47
|
+
setTimeout(function () {
|
|
48
|
+
var _a;
|
|
49
|
+
(_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
50
|
+
}, 100);
|
|
51
|
+
}
|
|
52
|
+
}, [isOpen]);
|
|
53
|
+
var handleOpen = function () {
|
|
54
|
+
setRefreshDataOnOpen(function (prev) { return !prev; });
|
|
55
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen();
|
|
56
|
+
};
|
|
57
|
+
return (react_1.default.createElement(react_2.Popover, { isOpen: isOpen, onClose: onClose, onOpen: handleOpen },
|
|
46
58
|
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
47
59
|
react_1.default.createElement(react_2.IconButton, { "aria-label": "Search", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 17 }), size: "xs", variant: "ghost", _hover: { bg: "none" } })),
|
|
48
60
|
react_1.default.createElement(react_2.Portal, null,
|
|
@@ -50,7 +62,7 @@ var TableFilters = (0, react_1.memo)(function (_a) {
|
|
|
50
62
|
react_1.default.createElement(react_2.PopoverBody, { p: 2 },
|
|
51
63
|
react_1.default.createElement(react_2.InputGroup, { flex: "1", size: "xs" },
|
|
52
64
|
react_1.default.createElement(react_2.InputLeftElement, { pointerEvents: "none" },
|
|
53
|
-
react_1.default.createElement(lucide_react_1.Search,
|
|
65
|
+
react_1.default.createElement(react_2.Icon, { as: lucide_react_1.Search, color: "gray.400", boxSize: 4 })),
|
|
54
66
|
react_1.default.createElement(react_2.Input, { autoFocus: true, placeholder: "Search ".concat(header.label, "..."), size: "xs", ref: searchRef, onChange: function (e) {
|
|
55
67
|
e.stopPropagation();
|
|
56
68
|
debounceRef(e.target.value);
|
|
@@ -47,6 +47,7 @@ var Checkbox_1 = __importDefault(require("../../Checkbox/Checkbox"));
|
|
|
47
47
|
var TableHeader = function (_a) {
|
|
48
48
|
var columns = _a.columns, isCheckbox = _a.isCheckbox, handleSort = _a.handleSort, headerRefs = _a.headerRefs, columnWidths = _a.columnWidths, columnsSort = _a.columnsSort, headerBgColor = _a.headerBgColor, headerTextColor = _a.headerTextColor, freezedBgColor = _a.freezedBgColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, handleCheckbox = _a.handleCheckbox, checked = _a.checked, isLoading = _a.isLoading, isContent = _a.isContent, isLink = _a.isLink, isActionFreeze = _a.isActionFreeze, setColumnsSearch = _a.setColumnsSearch, columnsSearch = _a.columnsSearch;
|
|
49
49
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
50
|
+
var _b = (0, react_2.useState)(null), openFilterId = _b[0], setOpenFilterId = _b[1];
|
|
50
51
|
var RenderCheckbox = (0, react_2.useCallback)(function () {
|
|
51
52
|
var _a, _b, _c, _d;
|
|
52
53
|
return (react_2.default.createElement(react_1.Th, { w: 6, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: (_c = (_b = (_a = theme.colors) === null || _a === void 0 ? void 0 : _a.table) === null || _b === void 0 ? void 0 : _b.hover) === null || _c === void 0 ? void 0 : _c[600], borderY: noBorders ? "none" : "0.063rem solid ".concat((_d = theme.colors) === null || _d === void 0 ? void 0 : _d.gray[300]), position: "sticky", className: "columns sticky-columns", left: "0px", zIndex: 9, boxShadow: "2px 0 5px rgba(0, 0, 0, 0.1)" },
|
|
@@ -73,7 +74,7 @@ var TableHeader = function (_a) {
|
|
|
73
74
|
columns.map(function (header, index) {
|
|
74
75
|
if (header === null || header === void 0 ? void 0 : header.isHidden)
|
|
75
76
|
return null;
|
|
76
|
-
return (react_2.default.createElement(ColumnHeader, { header: header, index: index, key: header.label, columnWidths: columnWidths, handleSort: handleSort, isCheckbox: isCheckbox, headerBgColor: headerBgColor, headerTextColor: headerTextColor, freezedBgColor: freezedBgColor, freezedTextColor: freezedTextColor, noBorders: noBorders, columnsSort: columnsSort, headerRefs: headerRefs, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch }));
|
|
77
|
+
return (react_2.default.createElement(ColumnHeader, { header: header, index: index, key: header.label, columnWidths: columnWidths, handleSort: handleSort, isCheckbox: isCheckbox, headerBgColor: headerBgColor, headerTextColor: headerTextColor, freezedBgColor: freezedBgColor, freezedTextColor: freezedTextColor, noBorders: noBorders, columnsSort: columnsSort, headerRefs: headerRefs, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch, openFilterId: openFilterId, setOpenFilterId: setOpenFilterId }));
|
|
77
78
|
}),
|
|
78
79
|
isLink && react_2.default.createElement(RenderView, null)));
|
|
79
80
|
};
|
|
@@ -88,7 +89,7 @@ var SortingIcon = (0, react_2.memo)(function (_a) {
|
|
|
88
89
|
});
|
|
89
90
|
var ColumnHeader = (0, react_2.memo)(function (_a) {
|
|
90
91
|
var _b, _c, _d, _e, _f, _g;
|
|
91
|
-
var header = _a.header, index = _a.index, columnWidths = _a.columnWidths, isCheckbox = _a.isCheckbox, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, columnsSort = _a.columnsSort, headerRefs = _a.headerRefs, columnsSearch = _a.columnsSearch, setColumnsSearch = _a.setColumnsSearch, handleSort = _a.handleSort;
|
|
92
|
+
var header = _a.header, index = _a.index, columnWidths = _a.columnWidths, isCheckbox = _a.isCheckbox, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, noBorders = _a.noBorders, columnsSort = _a.columnsSort, headerRefs = _a.headerRefs, columnsSearch = _a.columnsSearch, setColumnsSearch = _a.setColumnsSearch, handleSort = _a.handleSort, openFilterId = _a.openFilterId, setOpenFilterId = _a.setOpenFilterId;
|
|
92
93
|
var _h = (0, react_2.useState)(false), isHovered = _h[0], setIsHovered = _h[1];
|
|
93
94
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
94
95
|
var isFrozen = header.isFreeze;
|
|
@@ -142,6 +143,9 @@ var ColumnHeader = (0, react_2.memo)(function (_a) {
|
|
|
142
143
|
var _a;
|
|
143
144
|
return (__assign(__assign({}, prev), (_a = {}, _a[header.id] = searchVal, _a)));
|
|
144
145
|
});
|
|
145
|
-
}, columnsSearch: columnsSearch[header.id] || "", onClose: function () {
|
|
146
|
+
}, columnsSearch: columnsSearch[header.id] || "", onClose: function () {
|
|
147
|
+
setIsHovered(false);
|
|
148
|
+
setOpenFilterId(null);
|
|
149
|
+
}, isOpen: openFilterId === header.id, onOpen: function () { return setOpenFilterId(header.id); } })),
|
|
146
150
|
react_2.default.createElement("div", { className: "resize-handle", onMouseDown: handleMouseDown }))));
|
|
147
151
|
});
|
|
@@ -40,6 +40,7 @@ var TableSettings_1 = __importDefault(require("./TableSettings/TableSettings"));
|
|
|
40
40
|
var HeaderActions_1 = __importDefault(require("./Components/HeaderActions"));
|
|
41
41
|
var Divider_1 = __importDefault(require("../Divider/Divider"));
|
|
42
42
|
var TableSearch_1 = __importDefault(require("./Components/TableSearch"));
|
|
43
|
+
var ActiveFilters_1 = __importDefault(require("./Components/ActiveFilters"));
|
|
43
44
|
function Table(_a) {
|
|
44
45
|
var _b, _c, _d, _e, _f, _g;
|
|
45
46
|
var data = _a.data, columns = _a.columns, onSelection = _a.onSelection, isLoading = _a.isLoading, _h = _a.isCheckbox, isCheckbox = _h === void 0 ? false : _h, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, tableBorderColor = _a.tableBorderColor, _j = _a.noBorders, noBorders = _j === void 0 ? false : _j, _k = _a.isPagination, isPagination = _k === void 0 ? true : _k, onRowClick = _a.onRowClick, selections = _a.selections, _l = _a.isActionFreeze, isActionFreeze = _l === void 0 ? true : _l, _m = _a.preferences, preferences = _m === void 0 ? {
|
|
@@ -52,11 +53,6 @@ function Table(_a) {
|
|
|
52
53
|
} : _m, _o = _a.paginationMode, paginationMode = _o === void 0 ? "client" : _o, _p = _a.noOfRowsPerPage, noOfRowsPerPage = _p === void 0 ? 50 : _p, _q = _a.totalRecords, totalRecords = _q === void 0 ? 0 : _q, onPagination = _a.onPagination, _r = _a.isTableSettings, isTableSettings = _r === void 0 ? false : _r, headerActions = _a.headerActions, onGlobalSearch = _a.onGlobalSearch, tableSettings = _a.tableSettings;
|
|
53
54
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
54
55
|
var _s = (0, react_1.useState)({}), columnsSearch = _s[0], setColumnsSearch = _s[1];
|
|
55
|
-
// useEffect(() => {
|
|
56
|
-
// if (onColumnFilter) {
|
|
57
|
-
// onColumnFilter(columnsSearch);
|
|
58
|
-
// }
|
|
59
|
-
// }, [columnsSearch, onColumnFilter]);
|
|
60
56
|
var isServerPagination = paginationMode === "server";
|
|
61
57
|
var _t = (0, usePreferences_1.useGetPreferences)({
|
|
62
58
|
baseUrl: preferences.url,
|
|
@@ -114,7 +110,8 @@ function Table(_a) {
|
|
|
114
110
|
selection.length ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
115
111
|
react_1.default.createElement(Divider_1.default, null),
|
|
116
112
|
react_1.default.createElement(HeaderActions_1.default, { actions: headerActions, selections: selection }))) : null,
|
|
117
|
-
|
|
113
|
+
react_1.default.createElement(ActiveFilters_1.default, { columns: columnsList, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch }),
|
|
114
|
+
(isPagination || isServerPagination) && (react_1.default.createElement(react_2.Box, { ml: "auto", minW: 310 },
|
|
118
115
|
react_1.default.createElement(Pagination_1.default, { columns: columns, currentPage: currentPage, setCurrentPage: setCurrentPage, rowsPerPage: rowsPerPage, pages: pages, paginationText: tablePaginationText, handlePageSizeChange: handlePageSizeChange, dataLength: tableData.length, isServerPagination: isServerPagination, isVisiblity: true })))),
|
|
119
116
|
react_1.default.createElement(react_2.TableContainer, { maxH: 500, overflowY: "auto", sx: {
|
|
120
117
|
'&::-webkit-scrollbar': {
|