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.
@@ -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) => React.JSX.Element>;
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
- return (react_1.default.createElement(react_2.Popover, { onClose: onClose, onOpen: function () {
44
- setRefreshDataOnOpen(function (prev) { return !prev; });
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, { color: "gray.300" })),
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 () { return setIsHovered(false); } })),
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
- (isPagination || isServerPagination) && (react_1.default.createElement(react_2.Box, { ml: "auto" },
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': {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.94",
3
+ "version": "2.2.95",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",