pixelize-design-library 2.3.1-beta.2 → 2.3.1-beta.20
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/.claude/settings.local.json +28 -1
- package/.cursor/TASK-SETUP.md +43 -0
- package/.cursor/agents/be-impl.md +37 -0
- package/.cursor/agents/fe-impl.md +39 -0
- package/.cursor/agents/task-plan.md +56 -0
- package/.cursor/agents/test-create.md +31 -0
- package/.cursor/agents/test-exec.md +26 -0
- package/.cursor/hooks/task-hint.env +1 -0
- package/.cursor/hooks/task-skill-nudge.sh +71 -0
- package/.cursor/hooks/task-slash-guard.sh +31 -0
- package/.cursor/hooks.json +13 -0
- package/.cursor/modules/account-management/MODULE.md +16 -0
- package/.cursor/modules/buttons/MODULE.md +13 -0
- package/.cursor/modules/cards/MODULE.md +13 -0
- package/.cursor/modules/charts/MODULE.md +13 -0
- package/.cursor/modules/common/MODULE.md +13 -0
- package/.cursor/modules/contact-auth/MODULE.md +13 -0
- package/.cursor/modules/data-display/MODULE.md +13 -0
- package/.cursor/modules/feedback/MODULE.md +14 -0
- package/.cursor/modules/form/MODULE.md +13 -0
- package/.cursor/modules/inputs-basic/MODULE.md +13 -0
- package/.cursor/modules/inputs-date-file/MODULE.md +19 -0
- package/.cursor/modules/inputs-select/MODULE.md +14 -0
- package/.cursor/modules/inputs-toggle/MODULE.md +13 -0
- package/.cursor/modules/kanban/MODULE.md +14 -0
- package/.cursor/modules/layout-navigation/MODULE.md +14 -0
- package/.cursor/modules/overlays/MODULE.md +13 -0
- package/.cursor/modules/playground/MODULE.md +15 -0
- package/.cursor/modules/table/MODULE.md +15 -0
- package/.cursor/modules/theme/MODULE.md +15 -0
- package/.cursor/modules/types-exports/MODULE.md +17 -0
- package/.cursor/modules/utility-ui/MODULE.md +15 -0
- package/.cursor/modules/utils-hooks/MODULE.md +13 -0
- package/.cursor/pixelize-task-statusline.sh +64 -0
- package/.cursor/plans/blocked/.gitkeep +0 -0
- package/.cursor/plans/current.md +35 -0
- package/.cursor/plans/done/.gitkeep +0 -0
- package/.cursor/rules +31 -0
- package/.cursor/skills/task/SKILL.md +167 -0
- package/CLAUDE.md +122 -0
- package/dist/Components/Accordion/Accordion.js +26 -5
- package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -1
- package/dist/Components/Card/PaymentCard/PaymentCard.js +3 -3
- package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +1 -0
- package/dist/Components/CopyButton/CopyButton.d.ts +22 -0
- package/dist/Components/CopyButton/CopyButton.js +126 -0
- package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts +4 -0
- package/dist/Components/CustomModulesTable/CustomModulesTable.js +182 -0
- package/dist/Components/CustomModulesTable/CustomModulesTable.test.d.ts +1 -0
- package/dist/Components/CustomModulesTable/CustomModulesTable.test.js +84 -0
- package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +54 -0
- package/dist/Components/CustomModulesTable/CustomModulesTableProps.js +2 -0
- package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts +4 -0
- package/dist/Components/CustomModulesTable/DeleteModuleModal.js +33 -0
- package/dist/Components/CustomModulesTable/EditModuleModal.d.ts +4 -0
- package/dist/Components/CustomModulesTable/EditModuleModal.js +63 -0
- package/dist/Components/Dropdown/DropDown.js +110 -28
- package/dist/Components/Dropdown/Dropdown.test.d.ts +1 -0
- package/dist/Components/Dropdown/Dropdown.test.js +102 -0
- package/dist/Components/Dropdown/DropdownProps.d.ts +4 -1
- package/dist/Components/EmptyState/EmptyState.d.ts +4 -0
- package/dist/Components/EmptyState/EmptyState.js +65 -0
- package/dist/Components/EmptyState/EmptyStateProps.d.ts +28 -0
- package/dist/Components/EmptyState/EmptyStateProps.js +2 -0
- package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +26 -0
- package/dist/Components/FieldSelectModal/FieldSelectModal.js +107 -0
- package/dist/Components/FilePreview/FilePreview.d.ts +6 -0
- package/dist/Components/FilePreview/FilePreview.js +190 -0
- package/dist/Components/FilePreview/FilePreviewProps.d.ts +26 -0
- package/dist/Components/FilePreview/FilePreviewProps.js +2 -0
- package/dist/Components/KanbanBoard/AccountCard.js +17 -14
- package/dist/Components/KanbanBoard/KanbanBoard.js +93 -78
- package/dist/Components/LazyWrapper/LazyWrapper.d.ts +10 -0
- package/dist/Components/LazyWrapper/LazyWrapper.js +50 -0
- package/dist/Components/MoreItems/MoreItems.d.ts +4 -0
- package/dist/Components/MoreItems/MoreItems.js +35 -0
- package/dist/Components/MoreItems/MoreItemsProps.d.ts +29 -0
- package/dist/Components/MoreItems/MoreItemsProps.js +2 -0
- package/dist/Components/NavigationBar/NavigationBar.js +4 -4
- package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
- package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
- package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
- package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
- package/dist/Components/OrganizationDetails/CreateOrgModal.d.ts +4 -0
- package/dist/Components/OrganizationDetails/CreateOrgModal.js +122 -0
- package/dist/Components/OrganizationDetails/DeleteOrgModal.d.ts +4 -0
- package/dist/Components/OrganizationDetails/DeleteOrgModal.js +29 -0
- package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +4 -0
- package/dist/Components/OrganizationDetails/OrganizationDetails.js +264 -0
- package/dist/Components/OrganizationDetails/OrganizationDetails.test.d.ts +1 -0
- package/dist/Components/OrganizationDetails/OrganizationDetails.test.js +122 -0
- package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +88 -0
- package/dist/Components/OrganizationDetails/OrganizationDetailsProps.js +2 -0
- package/dist/Components/PdfViewer/PdfViewer.d.ts +15 -0
- package/dist/Components/PdfViewer/PdfViewer.js +29 -0
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +1 -1
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +42 -24
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewerProps.d.ts +2 -0
- package/dist/Components/RolesPermission/DeleteRoleModal.d.ts +4 -0
- package/dist/Components/RolesPermission/DeleteRoleModal.js +29 -0
- package/dist/Components/RolesPermission/RolesPermission.d.ts +4 -0
- package/dist/Components/RolesPermission/RolesPermission.js +243 -0
- package/dist/Components/RolesPermission/RolesPermission.test.d.ts +1 -0
- package/dist/Components/RolesPermission/RolesPermission.test.js +150 -0
- package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +117 -0
- package/dist/Components/RolesPermission/RolesPermissionProps.js +2 -0
- package/dist/Components/ScrollToTop/ScrollToTop.d.ts +19 -0
- package/dist/Components/ScrollToTop/ScrollToTop.js +104 -0
- package/dist/Components/SearchSelect/SearchSelect.js +53 -21
- package/dist/Components/SideBar/components/OtherApps.test.js +3 -2
- package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts +4 -0
- package/dist/Components/SignInActivityTable/SignInActivityTable.js +95 -0
- package/dist/Components/SignInActivityTable/SignInActivityTable.test.d.ts +1 -0
- package/dist/Components/SignInActivityTable/SignInActivityTable.test.js +63 -0
- package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +21 -0
- package/dist/Components/SignInActivityTable/SignInActivityTableProps.js +2 -0
- package/dist/Components/StageProgress/StageItem.d.ts +4 -0
- package/dist/Components/StageProgress/StageItem.js +137 -0
- package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
- package/dist/Components/StageProgress/StageProgress.js +59 -0
- package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
- package/dist/Components/StageProgress/StageProgressProps.js +27 -0
- package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
- package/dist/Components/StageProgress/StepperStage.js +78 -0
- package/dist/Components/Table/Table.d.ts +1 -1
- package/dist/Components/Table/Table.js +167 -32
- package/dist/Components/Table/TableProps.d.ts +11 -3
- package/dist/Components/Table/components/Pagination.js +1 -1
- package/dist/Components/Table/components/TableActions.d.ts +2 -2
- package/dist/Components/Table/components/TableActions.js +5 -4
- package/dist/Components/Table/components/TableBody.js +98 -29
- package/dist/Components/Table/components/TableBody.virtualize.test.js +13 -3
- package/dist/Components/Table/components/TableHeader.d.ts +1 -1
- package/dist/Components/Table/components/TableHeader.js +9 -13
- package/dist/Components/Table/hooks/useTable.d.ts +2 -1
- package/dist/Components/Table/hooks/useTable.js +24 -10
- package/dist/Components/Table/settings/ManageColumns.test.js +1 -0
- package/dist/Components/Table/settings/TableSettings.d.ts +3 -2
- package/dist/Components/Table/settings/TableSettings.js +30 -6
- package/dist/Components/Timeline/Timeline.d.ts +1 -1
- package/dist/Components/Timeline/Timeline.js +145 -78
- package/dist/Components/Toaster/Toaster.js +40 -20
- package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
- package/dist/Components/UpgradeButton/UpgradeButton.js +73 -0
- package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +43 -0
- package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
- package/dist/Components/UserDetails/AddUserModal.d.ts +4 -0
- package/dist/Components/UserDetails/AddUserModal.js +218 -0
- package/dist/Components/UserDetails/ChangeRoleModal.d.ts +4 -0
- package/dist/Components/UserDetails/ChangeRoleModal.js +150 -0
- package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts +4 -0
- package/dist/Components/UserDetails/DeactivateConfirmModal.js +34 -0
- package/dist/Components/UserDetails/UserDetails.d.ts +4 -0
- package/dist/Components/UserDetails/UserDetails.js +263 -0
- package/dist/Components/UserDetails/UserDetails.test.d.ts +1 -0
- package/dist/Components/UserDetails/UserDetails.test.js +129 -0
- package/dist/Components/UserDetails/UserDetailsProps.d.ts +151 -0
- package/dist/Components/UserDetails/UserDetailsProps.js +2 -0
- package/dist/Theme/index.d.ts +4 -4
- package/dist/Theme/index.js +4 -4
- package/dist/Utils/table.d.ts +6 -1
- package/dist/Utils/table.js +47 -27
- package/dist/index.d.ts +23 -1
- package/dist/index.js +37 -2
- package/package.json +1 -1
|
@@ -43,6 +43,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
43
43
|
return result;
|
|
44
44
|
};
|
|
45
45
|
})();
|
|
46
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
47
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
48
|
+
if (ar || !(i in from)) {
|
|
49
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
50
|
+
ar[i] = from[i];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
54
|
+
};
|
|
46
55
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
56
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
57
|
};
|
|
@@ -65,33 +74,34 @@ var HeaderActions_1 = __importDefault(require("./components/HeaderActions"));
|
|
|
65
74
|
var Divider_1 = __importDefault(require("../Divider/Divider"));
|
|
66
75
|
var TableSearch_1 = __importDefault(require("./components/TableSearch"));
|
|
67
76
|
var ActiveFilters_1 = __importDefault(require("./filters/ActiveFilters"));
|
|
77
|
+
var Button_1 = __importDefault(require("../Button/Button"));
|
|
68
78
|
var lucide_react_1 = require("lucide-react");
|
|
69
79
|
var MotionBox = (0, framer_motion_1.motion)(react_2.Box);
|
|
70
80
|
function Table(_a) {
|
|
71
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8;
|
|
72
|
-
var data = _a.data, columns = _a.columns, onSelection = _a.onSelection, isLoading = _a.isLoading,
|
|
81
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12;
|
|
82
|
+
var data = _a.data, columns = _a.columns, onSelection = _a.onSelection, isLoading = _a.isLoading, _13 = _a.isCheckbox, isCheckbox = _13 === void 0 ? false : _13, headerBgColor = _a.headerBgColor, freezedBgColor = _a.freezedBgColor, headerTextColor = _a.headerTextColor, freezedTextColor = _a.freezedTextColor, tableBorderColor = _a.tableBorderColor, _14 = _a.noBorders, noBorders = _14 === void 0 ? false : _14, _15 = _a.isPagination, isPagination = _15 === void 0 ? true : _15, onRowClick = _a.onRowClick, selections = _a.selections, _16 = _a.isActionFreeze, isActionFreeze = _16 === void 0 ? true : _16, _17 = _a.preferences, preferences = _17 === void 0 ? {
|
|
73
83
|
url: "",
|
|
74
84
|
token: "",
|
|
75
85
|
key: "",
|
|
76
86
|
name: "",
|
|
77
87
|
page: "",
|
|
78
88
|
orgId: "",
|
|
79
|
-
} :
|
|
89
|
+
} : _17, _18 = _a.paginationMode, paginationMode = _18 === void 0 ? "client" : _18, _19 = _a.infiniteScroll, infiniteScroll = _19 === void 0 ? false : _19, hasMore = _a.hasMore, _20 = _a.isLoadingMore, isLoadingMore = _20 === void 0 ? false : _20, _21 = _a.groupLoadMore, groupLoadMore = _21 === void 0 ? false : _21, _22 = _a.loadMoreText, loadMoreText = _22 === void 0 ? "Load more" : _22, _23 = _a.loadMorePosition, loadMorePosition = _23 === void 0 ? "top" : _23, loadMoreChunkSize = _a.loadMoreChunkSize, _24 = _a.noOfRowsPerPage, noOfRowsPerPage = _24 === void 0 ? 50 : _24, _25 = _a.totalRecords, totalRecords = _25 === void 0 ? 0 : _25, onPagination = _a.onPagination, _26 = _a.isTableSettings, isTableSettings = _26 === void 0 ? false : _26, headerActions = _a.headerActions, onGlobalSearch = _a.onGlobalSearch, onNoOfRowsPerPageChange = _a.onNoOfRowsPerPageChange, paginationSelectOptions = _a.paginationSelectOptions, tableMaxHeight = _a.tableMaxHeight, minVisibleRows = _a.minVisibleRows, maxVisibleRows = _a.maxVisibleRows, autoFitViewport = _a.autoFitViewport, tableSettings = _a.tableSettings, filterSidebar = _a.filterSidebar, loadingSkeletonRows = _a.loadingSkeletonRows, defaultVisibleColumns = _a.defaultVisibleColumns, _27 = _a.density, density = _27 === void 0 ? "normal" : _27, stripe = _a.stripe, groupColors = _a.groupColors, onAddItem = _a.onAddItem, emptyState = _a.emptyState;
|
|
80
90
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
81
|
-
var
|
|
91
|
+
var _28 = (0, react_1.useState)({}), columnsSearch = _28[0], setColumnsSearch = _28[1];
|
|
82
92
|
var tableContainerRef = (0, react_1.useRef)(null);
|
|
83
|
-
var
|
|
93
|
+
var _29 = (0, react_2.useDisclosure)(), isFilterModalOpen = _29.isOpen, onFilterModalOpen = _29.onOpen, onFilterModalClose = _29.onClose;
|
|
84
94
|
var filterMode = (_b = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.filterMode) !== null && _b !== void 0 ? _b : "sidebar";
|
|
85
|
-
var
|
|
95
|
+
var _30 = (0, react_1.useState)(500), viewportAvailableH = _30[0], setViewportAvailableH = _30[1];
|
|
86
96
|
var isServerPagination = paginationMode === "server";
|
|
87
|
-
var
|
|
97
|
+
var _31 = (0, usePreferences_1.useGetPreferences)({
|
|
88
98
|
baseUrl: preferences.url,
|
|
89
99
|
page: preferences.page,
|
|
90
100
|
key: preferences.key,
|
|
91
101
|
name: preferences.name,
|
|
92
102
|
authToken: preferences.token,
|
|
93
103
|
orgId: preferences.orgId,
|
|
94
|
-
}), tablePreferencesData =
|
|
104
|
+
}), tablePreferencesData = _31.preferences, loading = _31.loading;
|
|
95
105
|
var savePreferences = (0, usePreferences_1.useSavePreferences)({
|
|
96
106
|
baseUrl: preferences.url,
|
|
97
107
|
page: preferences.page,
|
|
@@ -109,7 +119,7 @@ function Table(_a) {
|
|
|
109
119
|
}
|
|
110
120
|
return {};
|
|
111
121
|
}, [tablePreferencesData]);
|
|
112
|
-
var
|
|
122
|
+
var _32 = (0, useTable_1.default)({
|
|
113
123
|
tableBorderColor: tableBorderColor,
|
|
114
124
|
data: data,
|
|
115
125
|
isPagination: isPagination,
|
|
@@ -123,37 +133,131 @@ function Table(_a) {
|
|
|
123
133
|
isServerPagination: isServerPagination,
|
|
124
134
|
onNoOfRowsPerPageChange: onNoOfRowsPerPageChange,
|
|
125
135
|
defaultVisibleColumns: defaultVisibleColumns,
|
|
126
|
-
}), tableData =
|
|
127
|
-
// Density
|
|
128
|
-
// (seeded from the prop
|
|
129
|
-
var
|
|
136
|
+
}), tableData = _32.tableData, isContent = _32.isContent, isLink = _32.isLink, headerRefs = _32.headerRefs, columnWidths = _32.columnWidths, handleSort = _32.handleSort, handleCheckbox = _32.handleCheckbox, filteredData = _32.filteredData, startRow = _32.startRow, endRow = _32.endRow, selection = _32.selection, columnsSort = _32.columnsSort, currentPage = _32.currentPage, pages = _32.pages, rowsPerPage = _32.rowsPerPage, handlePageSizeChange = _32.handlePageSizeChange, setCurrentPage = _32.setCurrentPage, columnsList = _32.columnsList, handleColumnPreferences = _32.handleColumnPreferences, isSelecting = _32.isSelecting, selectAllRowsRef = _32.selectAllRowsRef;
|
|
137
|
+
// Density + grouping are managed here so the Table Settings tabs can change +
|
|
138
|
+
// persist them (seeded from the prop / saved preferences when they load).
|
|
139
|
+
var _33 = (0, react_1.useState)(density), densityState = _33[0], setDensityState = _33[1];
|
|
140
|
+
// Grouping is chosen by the user in Table Settings > Group and persisted to
|
|
141
|
+
// preferences (`json.groupBy`); there is no `groupBy` prop.
|
|
142
|
+
var _34 = (0, react_1.useState)(undefined), groupByState = _34[0], setGroupByState = _34[1];
|
|
143
|
+
// Grouped "Load more" accumulates pages here so loading more ADDS rows to the
|
|
144
|
+
// groups (server pagination replaces `data` each fetch). Reset on fresh loads
|
|
145
|
+
// (search / filter / sort / page-size). Only used in grouped + groupLoadMore mode.
|
|
146
|
+
var _35 = (0, react_1.useState)([]), accumulatedRows = _35[0], setAccumulatedRows = _35[1];
|
|
147
|
+
var pendingLoadMoreRef = (0, react_1.useRef)(false);
|
|
148
|
+
// Pages loaded so far (1 = the initial page). The next page is derived from this
|
|
149
|
+
// counter — NOT from the deduped row count — so overlapping rows across pages
|
|
150
|
+
// (e.g. pinned rows that repeat on every page) don't stall the page index.
|
|
151
|
+
var loadedPagesRef = (0, react_1.useRef)(1);
|
|
152
|
+
(0, react_1.useEffect)(function () {
|
|
153
|
+
if (!groupLoadMore)
|
|
154
|
+
return;
|
|
155
|
+
setAccumulatedRows(function (prev) {
|
|
156
|
+
if (prev.length === 0) {
|
|
157
|
+
loadedPagesRef.current = 1;
|
|
158
|
+
return tableData.slice();
|
|
159
|
+
}
|
|
160
|
+
var accIds = new Set(prev.map(function (r) { return r.id; }));
|
|
161
|
+
if (pendingLoadMoreRef.current) {
|
|
162
|
+
// A "Load more" is in flight. The parent may re-emit the SAME page (new
|
|
163
|
+
// array reference) on intermediate re-renders before the next page arrives,
|
|
164
|
+
// so only append + consume the flag once genuinely new rows show up.
|
|
165
|
+
var newRows = tableData.filter(function (r) { return !accIds.has(r.id); });
|
|
166
|
+
if (newRows.length === 0)
|
|
167
|
+
return prev; // same page re-emitted — keep waiting
|
|
168
|
+
pendingLoadMoreRef.current = false;
|
|
169
|
+
return __spreadArray(__spreadArray([], prev, true), newRows, true);
|
|
170
|
+
}
|
|
171
|
+
// Not a load-more: a re-emit of already-loaded rows keeps the accumulation
|
|
172
|
+
// (the parent re-renders the current page often). Genuinely new rows
|
|
173
|
+
// (search / filter / sort / page-size / reload) reset it.
|
|
174
|
+
var allKnown = tableData.length > 0 && tableData.every(function (r) { return accIds.has(r.id); });
|
|
175
|
+
if (allKnown)
|
|
176
|
+
return prev;
|
|
177
|
+
loadedPagesRef.current = 1; // fresh data set
|
|
178
|
+
return tableData.slice();
|
|
179
|
+
});
|
|
180
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
181
|
+
}, [tableData, groupLoadMore]);
|
|
182
|
+
// Page-size change restarts the accumulation (the page boundaries change), so the
|
|
183
|
+
// next "Load more" requests page 2 of the NEW size, not a stale page index.
|
|
184
|
+
var rowsPerPageMountedRef = (0, react_1.useRef)(false);
|
|
185
|
+
(0, react_1.useEffect)(function () {
|
|
186
|
+
if (!rowsPerPageMountedRef.current) {
|
|
187
|
+
rowsPerPageMountedRef.current = true;
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
pendingLoadMoreRef.current = false;
|
|
191
|
+
loadedPagesRef.current = 1;
|
|
192
|
+
setAccumulatedRows(tableData); // current page at the new size (not empty)
|
|
193
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
194
|
+
}, [rowsPerPage]);
|
|
130
195
|
(0, react_1.useEffect)(function () {
|
|
131
196
|
if (tablePreferences === null || tablePreferences === void 0 ? void 0 : tablePreferences.density)
|
|
132
197
|
setDensityState(tablePreferences.density);
|
|
133
198
|
}, [tablePreferences === null || tablePreferences === void 0 ? void 0 : tablePreferences.density]);
|
|
199
|
+
(0, react_1.useEffect)(function () {
|
|
200
|
+
if (tablePreferences && "groupBy" in tablePreferences) {
|
|
201
|
+
var saved = tablePreferences.groupBy;
|
|
202
|
+
setGroupByState(saved === null || saved === undefined || saved === "" ? undefined : saved);
|
|
203
|
+
}
|
|
204
|
+
}, [tablePreferences === null || tablePreferences === void 0 ? void 0 : tablePreferences.groupBy]);
|
|
134
205
|
var handleDensityChange = function (d) {
|
|
135
206
|
setDensityState(d);
|
|
136
|
-
savePreferences === null || savePreferences === void 0 ? void 0 : savePreferences(__assign(__assign({}, tablePreferences), { columns: columnsList, density: d }));
|
|
207
|
+
savePreferences === null || savePreferences === void 0 ? void 0 : savePreferences(__assign(__assign({}, tablePreferences), { columns: columnsList, groupBy: groupByState !== null && groupByState !== void 0 ? groupByState : null, density: d }));
|
|
208
|
+
};
|
|
209
|
+
// Settings "Save": persist columns + group (+ current density) in ONE write so
|
|
210
|
+
// they don't clobber each other, and apply them locally.
|
|
211
|
+
var handleSettingsSave = function (cols, group) {
|
|
212
|
+
setGroupByState(group);
|
|
213
|
+
handleColumnPreferences(cols, { density: densityState, groupBy: group !== null && group !== void 0 ? group : null });
|
|
137
214
|
};
|
|
138
215
|
var _filteredData = (0, react_1.useMemo)(function () {
|
|
139
216
|
return (0, table_1.searchAndSortData)(filteredData, columnsSearch);
|
|
140
217
|
}, [columnsSearch, filteredData]);
|
|
141
|
-
// --- Monday-style grouping
|
|
142
|
-
//
|
|
143
|
-
|
|
218
|
+
// --- Monday-style grouping. Active whenever the user has picked a group column
|
|
219
|
+
// (in Settings > Group). When active, the numbered pager / infinite scroll are
|
|
220
|
+
// hidden and the body renders colored, collapsible groups over the loaded rows.
|
|
221
|
+
// `groupLoadMore` adds a "Load more" button on top to fetch more into the groups. ---
|
|
222
|
+
var isGrouped = !!groupByState;
|
|
144
223
|
// Infinite scroll (server mode, not grouped): load more on scroll-near-bottom.
|
|
145
224
|
var canInfinite = infiniteScroll && !isGrouped;
|
|
225
|
+
// Grouped "Load more": the accumulated pages back the grouped board so loading
|
|
226
|
+
// more grows the groups instead of replacing them.
|
|
227
|
+
var loadMoreBase = isGrouped && groupLoadMore ? accumulatedRows : tableData;
|
|
228
|
+
var hasMoreEffective = typeof hasMore === "boolean"
|
|
229
|
+
? hasMore
|
|
230
|
+
: isServerPagination
|
|
231
|
+
? loadMoreBase.length < totalRecords
|
|
232
|
+
: false;
|
|
233
|
+
var groupLoadMoreActive = isGrouped && groupLoadMore;
|
|
234
|
+
// Keep the button while a load is in flight (so a transient empty `data` during
|
|
235
|
+
// fetching doesn't make it flicker); hide it once loading settles with no more.
|
|
236
|
+
var canGroupLoadMore = groupLoadMoreActive && (hasMoreEffective || isLoadingMore);
|
|
146
237
|
var groupPalette = (0, react_1.useMemo)(function () { return (0, table_1.buildTablePalette)(theme); }, [theme]);
|
|
147
238
|
var groupedSource = (0, react_1.useMemo)(function () {
|
|
148
239
|
if (!isGrouped)
|
|
149
240
|
return [];
|
|
150
|
-
|
|
151
|
-
|
|
241
|
+
var src = groupLoadMore ? accumulatedRows : tableData;
|
|
242
|
+
return (0, table_1.searchAndSortData)((0, table_1.SortMultiColumnData)(src, columnsSort), columnsSearch);
|
|
243
|
+
}, [isGrouped, groupLoadMore, accumulatedRows, tableData, columnsSort, columnsSearch]);
|
|
152
244
|
var renderGroups = (0, react_1.useMemo)(function () {
|
|
153
245
|
if (!isGrouped)
|
|
154
246
|
return undefined;
|
|
155
|
-
return (0, table_1.groupRows)(groupedSource,
|
|
156
|
-
}, [isGrouped, groupedSource,
|
|
247
|
+
return (0, table_1.groupRows)(groupedSource, groupByState).map(function (g) { return (__assign(__assign({}, g), { color: (0, table_1.pickTableColor)(g.value, groupPalette, groupColors === null || groupColors === void 0 ? void 0 : groupColors[g.value]) })); });
|
|
248
|
+
}, [isGrouped, groupedSource, groupByState, groupPalette, groupColors]);
|
|
249
|
+
// "Select all" + header checkbox operate on the rows actually rendered: the
|
|
250
|
+
// accumulated grouped source when grouped, otherwise the table data.
|
|
251
|
+
var selectAllRows = isGrouped ? groupedSource : tableData;
|
|
252
|
+
selectAllRowsRef.current = isGrouped ? groupedSource : null;
|
|
253
|
+
var headerChecked = (0, react_1.useMemo)(function () {
|
|
254
|
+
if (selection.length === 0)
|
|
255
|
+
return false;
|
|
256
|
+
if (selectAllRows.length === 0)
|
|
257
|
+
return false;
|
|
258
|
+
var sel = new Set(selection);
|
|
259
|
+
return selectAllRows.every(function (r) { return sel.has(r.id); }) ? true : "indeterminate";
|
|
260
|
+
}, [selection, selectAllRows]);
|
|
157
261
|
var onPaginationRef = (0, react_1.useRef)(onPagination);
|
|
158
262
|
onPaginationRef.current = onPagination;
|
|
159
263
|
var prevPageRef = (0, react_1.useRef)(currentPage);
|
|
@@ -180,6 +284,35 @@ function Table(_a) {
|
|
|
180
284
|
prevPageRef.current = currentPage;
|
|
181
285
|
}
|
|
182
286
|
}, [currentPage, rowsPerPage]);
|
|
287
|
+
// Grouped "Load more": request the next chunk; parent appends it to `data` and
|
|
288
|
+
// the table re-groups so new rows land in their respective groups.
|
|
289
|
+
var handleGroupLoadMore = function () {
|
|
290
|
+
var _a;
|
|
291
|
+
if (isLoadingMore || isTableLoading || !hasMoreEffective)
|
|
292
|
+
return;
|
|
293
|
+
// Must request the SAME page size the data was loaded with — a page-count model
|
|
294
|
+
// breaks if pages have different sizes (e.g. page size 100 but a 20-row chunk
|
|
295
|
+
// re-requests already-loaded records). `loadMoreChunkSize` is only a last-resort
|
|
296
|
+
// fallback and is otherwise ignored.
|
|
297
|
+
var chunk = rowsPerPage || loadMoreChunkSize || 20;
|
|
298
|
+
// Advance by page COUNT (not by deduped row count) so overlapping/pinned rows
|
|
299
|
+
// across pages don't keep us stuck on the same page.
|
|
300
|
+
var nextPage = loadedPagesRef.current + 1;
|
|
301
|
+
loadedPagesRef.current = nextPage;
|
|
302
|
+
var lastRecord = loadMoreBase.length > 0 ? loadMoreBase[loadMoreBase.length - 1] : undefined;
|
|
303
|
+
pendingLoadMoreRef.current = true;
|
|
304
|
+
(_a = onPaginationRef.current) === null || _a === void 0 ? void 0 : _a.call(onPaginationRef, nextPage, chunk, lastRecord, "next");
|
|
305
|
+
};
|
|
306
|
+
// While more can load → live count; once everything's loaded → "Showing all
|
|
307
|
+
// records" (the running total isn't shown because de-duped/server totals can
|
|
308
|
+
// disagree, e.g. "250 of 250" would be misleading).
|
|
309
|
+
var groupLoadMoreCaption = !groupLoadMoreActive || isTableLoading || loadMoreBase.length === 0
|
|
310
|
+
? undefined
|
|
311
|
+
: canGroupLoadMore
|
|
312
|
+
? totalRecords > 0
|
|
313
|
+
? "Showing ".concat(loadMoreBase.length, " of ").concat(totalRecords)
|
|
314
|
+
: "Showing ".concat(loadMoreBase.length)
|
|
315
|
+
: "Showing all records";
|
|
183
316
|
var tablePaginationText = (0, react_1.useMemo)(function () { return isServerPagination
|
|
184
317
|
? "".concat(startRow + 1, " - ").concat(Math.min(startRow + rowsPerPage, totalRecords), " of ").concat(totalRecords)
|
|
185
318
|
: "".concat(startRow + 1, " - ").concat(endRow > tableData.length ? tableData.length : endRow, " of ").concat(tableData.length); }, [startRow, rowsPerPage, totalRecords, endRow, tableData.length]);
|
|
@@ -292,17 +425,20 @@ function Table(_a) {
|
|
|
292
425
|
react_1.default.createElement(TableSearch_1.default, { onSearch: onGlobalSearch }),
|
|
293
426
|
isTableSettings && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
294
427
|
react_1.default.createElement(Divider_1.default, null),
|
|
295
|
-
react_1.default.createElement(TableSettings_1.default, { columns: columnsList, onSave: function (cols) { return
|
|
428
|
+
react_1.default.createElement(TableSettings_1.default, { columns: columnsList, onSave: function (cols, group) { return handleSettingsSave(cols, group); }, tableSettings: tableSettings, density: densityState, onDensityChange: handleDensityChange, groupBy: groupByState }))),
|
|
296
429
|
headerActions && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
297
430
|
react_1.default.createElement(Divider_1.default, null),
|
|
298
431
|
react_1.default.createElement(HeaderActions_1.default, { actions: headerActions, selections: selection }))),
|
|
299
432
|
react_1.default.createElement(ActiveFilters_1.default, { columns: columnsList, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch }),
|
|
300
433
|
react_1.default.createElement(react_2.Box, { ml: "auto", display: "flex", alignItems: "center", gap: 2 },
|
|
434
|
+
groupLoadMoreActive && loadMorePosition === "top" && (groupLoadMoreCaption || canGroupLoadMore) && (react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 2, flex: "0 0 auto" },
|
|
435
|
+
groupLoadMoreCaption && (react_1.default.createElement(react_2.Box, { fontSize: "0.75rem", color: (_x = (_w = theme.colors) === null || _w === void 0 ? void 0 : _w.text) === null || _x === void 0 ? void 0 : _x[500], whiteSpace: "nowrap" }, groupLoadMoreCaption)),
|
|
436
|
+
canGroupLoadMore && (react_1.default.createElement(Button_1.default, { size: "xs", variant: "outline", colorScheme: "gray", isLoading: isLoadingMore, loadingText: loadMoreText, onClick: handleGroupLoadMore, label: loadMoreText })))),
|
|
301
437
|
(isPagination || isServerPagination) && !isGrouped && !canInfinite && !isCompactHeader && (react_1.default.createElement(react_2.Box, { flex: "0 0 auto" },
|
|
302
438
|
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, paginationSelectOptions: paginationSelectOptions, isVisiblity: true }))),
|
|
303
439
|
(isPagination || isServerPagination) && !isGrouped && !canInfinite && isCompactHeader && tableData.length > 0 && (react_1.default.createElement(react_2.Popover, { placement: "bottom-end" },
|
|
304
440
|
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
305
|
-
react_1.default.createElement(react_2.IconButton, { "aria-label": "More", size: "sm", variant: "ghost", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 18, color: (
|
|
441
|
+
react_1.default.createElement(react_2.IconButton, { "aria-label": "More", size: "sm", variant: "ghost", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 18, color: (_z = (_y = theme.colors) === null || _y === void 0 ? void 0 : _y.text) === null || _z === void 0 ? void 0 : _z[500] }) })),
|
|
306
442
|
react_1.default.createElement(react_2.PopoverContent, { maxW: "22rem", p: 2, overflow: "hidden" },
|
|
307
443
|
react_1.default.createElement(react_2.PopoverBody, { p: 0 },
|
|
308
444
|
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, paginationSelectOptions: paginationSelectOptions, isVisiblity: true }))))))),
|
|
@@ -349,15 +485,14 @@ function Table(_a) {
|
|
|
349
485
|
zIndex: 999,
|
|
350
486
|
},
|
|
351
487
|
} },
|
|
352
|
-
react_1.default.createElement(react_3.Thead, { position: "sticky", top: 0, zIndex: 4, bg: (
|
|
353
|
-
react_1.default.createElement(TableHeader_1.default, { columns: columnsList, isCheckbox: isCheckbox, headerBgColor: headerBgColor !== null && headerBgColor !== void 0 ? headerBgColor : theme.colors.backgroundColor.muted,
|
|
354
|
-
? true
|
|
355
|
-
: selection.length === 0
|
|
356
|
-
? false
|
|
357
|
-
: "indeterminate", isContent: isContent, isLink: isLink, isActionFreeze: isActionFreeze, setColumnsSearch: setColumnsSearch, columnsSearch: columnsSearch, isSelecting: isSelecting })),
|
|
488
|
+
react_1.default.createElement(react_3.Thead, { position: "sticky", top: 0, zIndex: 4, bg: (_2 = (_1 = (_0 = theme.colors.table) === null || _0 === void 0 ? void 0 : _0.hover) === null || _1 === void 0 ? void 0 : _1[200]) !== null && _2 !== void 0 ? _2 : (_3 = theme.colors.secondary) === null || _3 === void 0 ? void 0 : _3[50] },
|
|
489
|
+
react_1.default.createElement(TableHeader_1.default, { columns: columnsList, isCheckbox: isCheckbox, headerBgColor: headerBgColor !== null && headerBgColor !== void 0 ? headerBgColor : theme.colors.backgroundColor.muted, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_4 = theme.colors) === null || _4 === void 0 ? void 0 : _4.gray[600], handleSort: handleSort, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isTableLoading, checked: headerChecked, isContent: isContent, isLink: isLink, isActionFreeze: isActionFreeze, setColumnsSearch: setColumnsSearch, columnsSearch: columnsSearch, isSelecting: isSelecting })),
|
|
358
490
|
react_1.default.createElement(react_3.Tbody, null,
|
|
359
|
-
react_1.default.createElement(TableBody_1.default, { data: isGrouped ? groupedSource : _filteredData, groups: renderGroups, onAddItem: onAddItem, columns: columnsList, startRow: isGrouped ? 0 : startRow, endRow: endRow, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, noBorders: noBorders, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (
|
|
491
|
+
react_1.default.createElement(TableBody_1.default, { data: isGrouped ? groupedSource : _filteredData, groups: renderGroups, onAddItem: onAddItem, columns: columnsList, startRow: isGrouped ? 0 : startRow, endRow: endRow, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, noBorders: noBorders, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : (_5 = theme.colors) === null || _5 === void 0 ? void 0 : _5.gray[600], handleCheckbox: handleCheckbox, selections: selection, isLoading: isTableLoading, loadingSkeletonRows: loadingSkeletonRows, onRowClick: onRowClick, isContent: isContent, isLink: isLink, isActionFreeze: isActionFreeze, density: densityState, stripe: stripe, emptyState: emptyState }))),
|
|
360
492
|
canInfinite && isLoadingMore && (react_1.default.createElement(react_2.Flex, { justify: "center", align: "center", py: 3, gap: 2 },
|
|
361
|
-
react_1.default.createElement(react_2.Spinner, { size: "sm", color: (
|
|
362
|
-
react_1.default.createElement(react_2.Box, { fontSize: "0.75rem", color: (
|
|
493
|
+
react_1.default.createElement(react_2.Spinner, { size: "sm", color: (_7 = (_6 = theme.colors) === null || _6 === void 0 ? void 0 : _6.primary) === null || _7 === void 0 ? void 0 : _7[500] }),
|
|
494
|
+
react_1.default.createElement(react_2.Box, { fontSize: "0.75rem", color: (_9 = (_8 = theme.colors) === null || _8 === void 0 ? void 0 : _8.text) === null || _9 === void 0 ? void 0 : _9[500] }, "Loading more\u2026")))),
|
|
495
|
+
groupLoadMoreActive && loadMorePosition === "bottom" && (groupLoadMoreCaption || canGroupLoadMore) && (react_1.default.createElement(react_2.Flex, { justify: "center", align: "center", gap: 3, py: 3, borderTop: "0.063rem solid ".concat((_10 = theme.colors.border) === null || _10 === void 0 ? void 0 : _10[500]) },
|
|
496
|
+
groupLoadMoreCaption && (react_1.default.createElement(react_2.Box, { fontSize: "0.75rem", color: (_12 = (_11 = theme.colors) === null || _11 === void 0 ? void 0 : _11.text) === null || _12 === void 0 ? void 0 : _12[500] }, groupLoadMoreCaption)),
|
|
497
|
+
canGroupLoadMore && (react_1.default.createElement(Button_1.default, { size: "xs", variant: "outline", colorScheme: "gray", isLoading: isLoadingMore, loadingText: loadMoreText, onClick: handleGroupLoadMore, label: loadMoreText }))))))));
|
|
363
498
|
}
|
|
@@ -9,7 +9,6 @@ export type TableEmptyState = {
|
|
|
9
9
|
export type TableProps = {
|
|
10
10
|
data: DataObject[];
|
|
11
11
|
columns: TableHeaderProps[];
|
|
12
|
-
groupBy?: string | number;
|
|
13
12
|
groupColors?: Record<string | number, string>;
|
|
14
13
|
onAddItem?: (groupValue: string | number) => void;
|
|
15
14
|
density?: TableDensity;
|
|
@@ -36,6 +35,12 @@ export type TableProps = {
|
|
|
36
35
|
infiniteScroll?: boolean;
|
|
37
36
|
hasMore?: boolean;
|
|
38
37
|
isLoadingMore?: boolean;
|
|
38
|
+
groupLoadMore?: boolean;
|
|
39
|
+
loadMoreText?: string;
|
|
40
|
+
loadMorePosition?: "top" | "bottom";
|
|
41
|
+
/** @deprecated Ignored — load more always uses the current page size (`noOfRowsPerPage`)
|
|
42
|
+
* so page boundaries stay consistent. Kept only for backward compatibility. */
|
|
43
|
+
loadMoreChunkSize?: number;
|
|
39
44
|
noOfRowsPerPage?: number;
|
|
40
45
|
totalRecords?: number;
|
|
41
46
|
onPagination?: (page: number, noOfRecords: number, record: DataObject | undefined, direction: "next" | "prev" | "first" | "last") => void;
|
|
@@ -105,8 +110,11 @@ export type TableHeaderProps = {
|
|
|
105
110
|
isHidden?: boolean;
|
|
106
111
|
type?: "status";
|
|
107
112
|
statusColors?: Record<string, string>;
|
|
113
|
+
columnType?: TableColumnType;
|
|
108
114
|
node?: (data: DataObject) => JSX.Element | string | number | undefined;
|
|
109
115
|
};
|
|
116
|
+
/** Known field data-types (open-ended via the trailing string for forward-compat). */
|
|
117
|
+
export type TableColumnType = "text" | "singleline" | "multiLine" | "description" | "email" | "phone" | "website" | "number" | "integer" | "decimal" | "dropdown" | "multiSelectDropdown" | "user" | "date" | "date_time" | "time" | "not_assigned" | (string & {});
|
|
110
118
|
export type ExportOption = {
|
|
111
119
|
label: string;
|
|
112
120
|
id: string;
|
|
@@ -115,7 +123,7 @@ export type ColumnSortingProps = {
|
|
|
115
123
|
column: string | number;
|
|
116
124
|
direction: "asc" | "desc" | "none";
|
|
117
125
|
};
|
|
118
|
-
export type TableHeaderPageProps = Pick<TableProps, "columns" | "isCheckbox" | "headerBgColor" | "
|
|
126
|
+
export type TableHeaderPageProps = Pick<TableProps, "columns" | "isCheckbox" | "headerBgColor" | "freezedBgColor" | "freezedTextColor" | "noBorders" | "isLoading" | "isActionFreeze"> & {
|
|
119
127
|
handleSort: (label: string | number, type: "asc" | "desc" | "none") => void;
|
|
120
128
|
activeHeader?: string | null;
|
|
121
129
|
isPopoverOpen?: boolean;
|
|
@@ -164,7 +172,7 @@ export type TableFiltersProps = {
|
|
|
164
172
|
columnsSearch: string;
|
|
165
173
|
onClose: () => void;
|
|
166
174
|
};
|
|
167
|
-
export type ColumnHeaderProps = Pick<TableProps, "isCheckbox" | "headerBgColor" | "
|
|
175
|
+
export type ColumnHeaderProps = Pick<TableProps, "isCheckbox" | "headerBgColor" | "freezedBgColor" | "noBorders"> & Pick<TableHeaderPageProps, "handleSort" | "columnsSort"> & {
|
|
168
176
|
header: TableHeaderProps;
|
|
169
177
|
index: number;
|
|
170
178
|
columnWidths: number[];
|
|
@@ -49,7 +49,7 @@ var Pagination = react_1.default.memo(function (_a) {
|
|
|
49
49
|
var isLeftDisabled = dataLength === 0 || currentPage === 0;
|
|
50
50
|
var isRightDisabled = dataLength === 0 || currentPage >= pages - 1;
|
|
51
51
|
return (react_1.default.createElement(react_2.Flex, { justify: "flex-end", align: "center", flexWrap: "nowrap" },
|
|
52
|
-
(!isServerPagination || paginationSelectOptions) && (react_1.default.createElement(react_2.Select, { onChange: handlePageSizeChange, value: rowsPerPage, size: "xs", borderRadius: 3, width:
|
|
52
|
+
(!isServerPagination || paginationSelectOptions) && (react_1.default.createElement(react_2.Select, { onChange: handlePageSizeChange, value: rowsPerPage, size: "xs", borderRadius: 3, width: "auto", minW: "4.5rem", isDisabled: dataLength === 0 },
|
|
53
53
|
!paginationSelectOptions && dataLength < 100 ? react_1.default.createElement("option", { value: 0 }) : null,
|
|
54
54
|
computedOptions.map(function (size, index) { return (react_1.default.createElement("option", { key: index, value: size }, String(size))); }))),
|
|
55
55
|
dataLength > 0 && (react_1.default.createElement(react_2.Flex, { w: "100%" },
|
|
@@ -6,7 +6,7 @@ type TableRowActions = {
|
|
|
6
6
|
actions?: () => ReactNode;
|
|
7
7
|
[key: string]: any;
|
|
8
8
|
};
|
|
9
|
-
declare const TableActions: ({ row }: {
|
|
9
|
+
declare const TableActions: React.MemoExoticComponent<({ row }: {
|
|
10
10
|
row?: TableRowActions;
|
|
11
|
-
}) => React.JSX.Element | null
|
|
11
|
+
}) => React.JSX.Element | null>;
|
|
12
12
|
export default TableActions;
|
|
@@ -37,7 +37,7 @@ var react_1 = __importStar(require("react"));
|
|
|
37
37
|
var react_2 = require("@chakra-ui/react");
|
|
38
38
|
var lucide_react_1 = require("lucide-react");
|
|
39
39
|
var useCustomTheme_1 = require("../../../Theme/useCustomTheme");
|
|
40
|
-
var TableActions = function (_a) {
|
|
40
|
+
var TableActions = react_1.default.memo(function (_a) {
|
|
41
41
|
var _b, _c, _d;
|
|
42
42
|
var row = _a.row;
|
|
43
43
|
var _e = (0, react_1.useState)(false), isOpen = _e[0], setIsOpen = _e[1];
|
|
@@ -76,7 +76,7 @@ var TableActions = function (_a) {
|
|
|
76
76
|
react_1.default.createElement("div", { ref: ref },
|
|
77
77
|
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
78
78
|
react_1.default.createElement(react_2.IconButton, { "aria-label": "Actions", color: "black", icon: react_1.default.createElement(lucide_react_1.EllipsisVertical, { size: 17 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" }, onClick: function () { return (isOpen ? handleClose() : handleOpen()); } })),
|
|
79
|
-
react_1.default.createElement(react_2.Portal, null,
|
|
79
|
+
isOpen && (react_1.default.createElement(react_2.Portal, null,
|
|
80
80
|
react_1.default.createElement(react_2.PopoverContent, { w: "auto", minW: "100px", boxShadow: "lg", p: 0, zIndex: 999 },
|
|
81
81
|
react_1.default.createElement(react_2.PopoverBody, { p: 0, m: 0 },
|
|
82
82
|
react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1, p: 0, m: 0 },
|
|
@@ -102,6 +102,7 @@ var TableActions = function (_a) {
|
|
|
102
102
|
react_1.default.createElement(lucide_react_1.Trash2, { size: 17 }),
|
|
103
103
|
" Delete")),
|
|
104
104
|
row.actions && ((_d = row === null || row === void 0 ? void 0 : row.actions) === null || _d === void 0 ? void 0 : _d.call(row)),
|
|
105
|
-
!row.onLink && !row.onEdit && !row.onDelete && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", isDisabled: true, justifyContent: "center" }, "No actions")))))))));
|
|
106
|
-
};
|
|
105
|
+
!row.onLink && !row.onEdit && !row.onDelete && (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", isDisabled: true, justifyContent: "center" }, "No actions"))))))))));
|
|
106
|
+
});
|
|
107
|
+
TableActions.displayName = "TableActions";
|
|
107
108
|
exports.default = TableActions;
|