@ackplus/react-tanstack-data-table 1.1.3 → 1.1.6

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.
@@ -52,7 +52,7 @@ function TableHeader(props) {
52
52
  align: alignment,
53
53
  sx: {
54
54
  ...(0, utils_1.getPinnedColumnStyle)({
55
- width: (fitToScreen && !enableColumnResizing) ? 'auto' : header.getSize(),
55
+ width: fitToScreen ? 'auto' : header.getSize(),
56
56
  isPinned,
57
57
  pinnedPosition,
58
58
  isLastLeftPinnedColumn: isPinned === 'left' && header.column.getIsLastColumn('left'),
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-row.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/rows/data-table-row.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAiC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AACvH,OAAO,EAAc,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMhD,MAAM,WAAW,iBAAiB,CAAC,CAAC,CAAE,SAAQ,aAAa;IACvD,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,YAAY,CAqKzE"}
1
+ {"version":3,"file":"data-table-row.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/rows/data-table-row.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAiC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AACvH,OAAO,EAAc,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMhD,MAAM,WAAW,iBAAiB,CAAC,CAAC,CAAE,SAAQ,aAAa;IACvD,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACjF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,YAAY,CA+KzE"}
@@ -34,15 +34,23 @@ function DataTableRow(props) {
34
34
  const handleRowClick = (event) => {
35
35
  // Check if click target is a checkbox, button, or interactive element
36
36
  const target = event.target;
37
+ // Check for various interactive elements
37
38
  const isCheckboxClick = target.closest('input[type="checkbox"]') !== null;
38
39
  const isButtonClick = target.closest('button') !== null;
39
40
  const isLinkClick = target.closest('a') !== null;
40
- // If selectOnRowClick is enabled and it's not a checkbox/interactive element click, toggle selection
41
- if (selectOnRowClick && !isCheckboxClick && !isButtonClick && !isLinkClick && (table === null || table === void 0 ? void 0 : table.toggleRowSelected)) {
41
+ // Check for elements with interactive roles (button, checkbox, switch, etc.)
42
+ const isInteractiveRole = target.closest('[role="button"]') !== null ||
43
+ target.closest('[role="checkbox"]') !== null ||
44
+ target.closest('[role="switch"]') !== null ||
45
+ target.closest('[role="menuitem"]') !== null;
46
+ // Determine if this is an interactive element click
47
+ const isInteractiveClick = isCheckboxClick || isButtonClick || isLinkClick || isInteractiveRole;
48
+ // If selectOnRowClick is enabled and it's not an interactive element click, toggle selection
49
+ if (selectOnRowClick && !isInteractiveClick && (table === null || table === void 0 ? void 0 : table.toggleRowSelected)) {
42
50
  table.toggleRowSelected(row.id);
43
51
  }
44
- // Always call onRowClick if provided
45
- if (onRowClick) {
52
+ // Only call onRowClick if it's not an interactive element click
53
+ if (onRowClick && !isInteractiveClick) {
46
54
  onRowClick(event, row);
47
55
  }
48
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/lib/data-table.tsx"],"names":[],"mappings":"AA6EA;;GAEG;AACH,eAAO,MAAM,SAAS,KAsyDpB,CAAC"}
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/lib/data-table.tsx"],"names":[],"mappings":"AA6EA;;GAEG;AACH,eAAO,MAAM,SAAS,KA2yDpB,CAAC"}
@@ -113,7 +113,7 @@ enableGlobalFilter = true, enableColumnFilter = false, filterMode = 'client',
113
113
  // Sorting props
114
114
  enableSorting = true, sortingMode = 'client', onSortingChange, exportFilename = 'export', onExportProgress, onExportComplete, onExportError, onServerExport, onExportCancel,
115
115
  // Styling props
116
- enableHover = true, enableStripes = false, tableProps = {}, fitToScreen = true, tableSize: initialTableSize = 'medium',
116
+ enableHover = true, enableStripes = false, tableProps = {}, fitToScreen = false, tableSize: initialTableSize = 'medium',
117
117
  // Sticky header/footer props
118
118
  enableStickyHeaderOrFooter = false, maxHeight = '400px',
119
119
  // Virtualization props
@@ -601,7 +601,7 @@ logging, }, ref) {
601
601
  // Row model
602
602
  getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
603
603
  ...(enableSorting ? { getSortedRowModel: (0, react_table_1.getSortedRowModel)() } : {}),
604
- ...(enableColumnFilter ? { getFilteredRowModel: (0, column_filter_feature_1.getCombinedFilteredRowModel)() } : {}),
604
+ ...(enableColumnFilter || enableGlobalFilter ? { getFilteredRowModel: (0, column_filter_feature_1.getCombinedFilteredRowModel)() } : {}),
605
605
  ...(enablePagination ? { getPaginationRowModel: (0, react_table_1.getPaginationRowModel)() } : {}),
606
606
  // Sorting
607
607
  enableSorting: enableSorting,
@@ -642,8 +642,13 @@ logging, }, ref) {
642
642
  // -------------------------------
643
643
  // Virtualization and row memo
644
644
  // -------------------------------
645
- // eslint-disable-next-line react-hooks/exhaustive-deps
646
- const rows = (0, react_1.useMemo)(() => { var _a; return ((_a = table.getRowModel()) === null || _a === void 0 ? void 0 : _a.rows) || []; }, [table, tableData]);
645
+ // Note: globalFilter is needed in dependencies to trigger recalculation when filter changes
646
+ // The table object is stable, so we need to depend on the filter state directly
647
+ const rows = (0, react_1.useMemo)(() => {
648
+ const rowModel = table.getRowModel();
649
+ return (rowModel === null || rowModel === void 0 ? void 0 : rowModel.rows) || [];
650
+ // eslint-disable-next-line react-hooks/exhaustive-deps
651
+ }, [table, tableData, globalFilter, enableGlobalFilter, enableColumnFilter, enablePagination]);
647
652
  const rowVirtualizer = (0, react_virtual_1.useVirtualizer)({
648
653
  count: rows.length,
649
654
  getScrollElement: () => tableContainerRef.current,
@@ -1 +1 @@
1
- {"version":3,"file":"column-filter.feature.d.ts","sourceRoot":"","sources":["../../../src/lib/features/column-filter.feature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACH,KAAK,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EAGP,QAAQ,EAGX,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAErE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5D;AAGD,OAAO,QAAQ,uBAAuB,CAAC;IACnC,UAAU,UAAU;QAChB,YAAY,EAAE,iBAAiB,CAAC;KACnC;IAED,UAAU,oBAAoB,CAAC,KAAK,SAAS,OAAO;QAChD,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;QACrE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;KAC5D;IAED,UAAU,KAAK,CAAC,KAAK,SAAS,OAAO;QACjC,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;QAGpE,sBAAsB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;QACjF,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QAC1F,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,4BAA4B,EAAE,MAAM,IAAI,CAAC;QACzC,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;QAGrD,yBAAyB,EAAE,MAAM,IAAI,CAAC;QAGtC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;QAC1E,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QACnF,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/C,qBAAqB,EAAE,MAAM,IAAI,CAAC;QAClC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;QAG9C,sBAAsB,EAAE,MAAM,gBAAgB,EAAE,CAAC;QACjD,uBAAuB,EAAE,MAAM,gBAAgB,EAAE,CAAC;QAClD,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;KACjD;CACJ;AA8BD,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,GAAG,CAqLjD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,GAAE,KAAK,GAAG,IAAY,GAC5B,OAAO,CA2BT;AAED,eAAO,MAAM,2BAA2B,GAAI,KAAK,QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,WAAS,QAAQ,CAAC,KAAK,CAsCrD,CAAC"}
1
+ {"version":3,"file":"column-filter.feature.d.ts","sourceRoot":"","sources":["../../../src/lib/features/column-filter.feature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACH,KAAK,EACL,YAAY,EACZ,OAAO,EACP,OAAO,EAGP,QAAQ,EAGX,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAChC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAErE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5D;AAGD,OAAO,QAAQ,uBAAuB,CAAC;IACnC,UAAU,UAAU;QAChB,YAAY,EAAE,iBAAiB,CAAC;KACnC;IAED,UAAU,oBAAoB,CAAC,KAAK,SAAS,OAAO;QAChD,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;QACrE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;KAC5D;IAED,UAAU,KAAK,CAAC,KAAK,SAAS,OAAO;QACjC,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;QAGpE,sBAAsB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;QACjF,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QAC1F,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,4BAA4B,EAAE,MAAM,IAAI,CAAC;QACzC,qBAAqB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;QAGrD,yBAAyB,EAAE,MAAM,IAAI,CAAC;QAGtC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;QAC1E,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;QACnF,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/C,qBAAqB,EAAE,MAAM,IAAI,CAAC;QAClC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;QAG9C,sBAAsB,EAAE,MAAM,gBAAgB,EAAE,CAAC;QACjD,uBAAuB,EAAE,MAAM,gBAAgB,EAAE,CAAC;QAClD,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;KACjD;CACJ;AA8BD,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,GAAG,CAqLjD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,GAAE,KAAK,GAAG,IAAY,GAC5B,OAAO,CA2BT;AAED,eAAO,MAAM,2BAA2B,GAAI,KAAK,QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,WAAS,QAAQ,CAAC,KAAK,CAwCrD,CAAC"}
@@ -254,8 +254,9 @@ const getCombinedFilteredRowModel = () => {
254
254
  filters: [],
255
255
  logic: 'AND',
256
256
  };
257
- if (!filters.length || !table.options.enableAdvanceColumnFilter)
257
+ if (!filters.length || !table.options.enableAdvanceColumnFilter) {
258
258
  return baseFilteredModel;
259
+ }
259
260
  // Apply custom column filters to pre-filtered rows
260
261
  const filteredRows = baseFilteredModel.rows.filter(row => matchesCustomColumnFilters(row, filters, logic));
261
262
  const flatRows = [];
@@ -1 +1 @@
1
- {"version":3,"file":"special-columns.utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/special-columns.utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAgE,MAAM,UAAU,CAAC;AAEzG;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;CAEzB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,QAAQ,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAG,eAAe,CAAC,CAAC,EAAE,GAAG,CAqD9H,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,QAAQ,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAG,eAAe,CAAC,CAAC,CAkB9F,CAAC"}
1
+ {"version":3,"file":"special-columns.utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/special-columns.utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAgE,MAAM,UAAU,CAAC;AAEzG;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;CAEzB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,QAAQ,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,KAAG,eAAe,CAAC,CAAC,EAAE,GAAG,CAyD9H,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,QAAQ,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAG,eAAe,CAAC,CAAC,CAqB9F,CAAC"}
@@ -10,7 +10,7 @@ const types_1 = require("../types");
10
10
  */
11
11
  const createSelectionColumn = (config) => ({
12
12
  id: types_1.DEFAULT_SELECTION_COLUMN_NAME,
13
- size: 60,
13
+ maxSize: 60,
14
14
  minSize: 60,
15
15
  align: 'center',
16
16
  filterable: false,
@@ -36,6 +36,8 @@ const createSelectionColumn = (config) => ({
36
36
  },
37
37
  size: 'small',
38
38
  sx: { p: 0 },
39
+ role: 'checkbox',
40
+ 'aria-checked': allSelected ? 'true' : (someSelected ? 'mixed' : 'false'),
39
41
  });
40
42
  },
41
43
  cell: ({ row, table }) => {
@@ -58,6 +60,8 @@ const createSelectionColumn = (config) => ({
58
60
  p: 0,
59
61
  opacity: canSelect ? 1 : 0.5
60
62
  },
63
+ role: 'checkbox',
64
+ 'aria-checked': checked ? 'true' : 'false',
61
65
  });
62
66
  },
63
67
  ...config,
@@ -68,7 +72,7 @@ exports.createSelectionColumn = createSelectionColumn;
68
72
  */
69
73
  const createExpandingColumn = (config) => ({
70
74
  id: types_1.DEFAULT_EXPANDING_COLUMN_NAME,
71
- size: 60,
75
+ maxSize: 60,
72
76
  minSize: 60,
73
77
  align: 'center',
74
78
  filterable: false,
@@ -82,6 +86,9 @@ const createExpandingColumn = (config) => ({
82
86
  onClick: row.getToggleExpandedHandler(),
83
87
  size: 'small',
84
88
  sx: { p: 0 },
89
+ role: 'button',
90
+ 'aria-label': row.getIsExpanded() ? 'Collapse row' : 'Expand row',
91
+ 'aria-expanded': row.getIsExpanded(),
85
92
  }, row.getIsExpanded() ? (0, react_1.createElement)(icons_material_1.KeyboardArrowUpOutlined) : (0, react_1.createElement)(icons_material_1.KeyboardArrowDownOutlined)),
86
93
  ...config,
87
94
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ackplus/react-tanstack-data-table",
3
3
  "type": "commonjs",
4
- "version": "1.1.3",
4
+ "version": "1.1.6",
5
5
  "description": "A powerful React data table component built with MUI and TanStack Table",
6
6
  "keywords": [
7
7
  "react",
@@ -92,7 +92,7 @@ export function TableHeader<T>(props: TableHeaderProps): ReactElement {
92
92
  align: alignment,
93
93
  sx: {
94
94
  ...getPinnedColumnStyle({
95
- width: (fitToScreen && !enableColumnResizing) ? 'auto' : header.getSize(),
95
+ width: fitToScreen ? 'auto' : header.getSize(),
96
96
  isPinned,
97
97
  pinnedPosition,
98
98
  isLastLeftPinnedColumn: isPinned === 'left' && header.column.getIsLastColumn('left'),
@@ -74,17 +74,27 @@ export function DataTableRow<T>(props: DataTableRowProps<T>): ReactElement {
74
74
  const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {
75
75
  // Check if click target is a checkbox, button, or interactive element
76
76
  const target = event.target as HTMLElement;
77
+
78
+ // Check for various interactive elements
77
79
  const isCheckboxClick = target.closest('input[type="checkbox"]') !== null;
78
80
  const isButtonClick = target.closest('button') !== null;
79
81
  const isLinkClick = target.closest('a') !== null;
82
+ // Check for elements with interactive roles (button, checkbox, switch, etc.)
83
+ const isInteractiveRole = target.closest('[role="button"]') !== null ||
84
+ target.closest('[role="checkbox"]') !== null ||
85
+ target.closest('[role="switch"]') !== null ||
86
+ target.closest('[role="menuitem"]') !== null;
87
+
88
+ // Determine if this is an interactive element click
89
+ const isInteractiveClick = isCheckboxClick || isButtonClick || isLinkClick || isInteractiveRole;
80
90
 
81
- // If selectOnRowClick is enabled and it's not a checkbox/interactive element click, toggle selection
82
- if (selectOnRowClick && !isCheckboxClick && !isButtonClick && !isLinkClick && table?.toggleRowSelected) {
91
+ // If selectOnRowClick is enabled and it's not an interactive element click, toggle selection
92
+ if (selectOnRowClick && !isInteractiveClick && table?.toggleRowSelected) {
83
93
  table.toggleRowSelected(row.id);
84
94
  }
85
95
 
86
- // Always call onRowClick if provided
87
- if (onRowClick) {
96
+ // Only call onRowClick if it's not an interactive element click
97
+ if (onRowClick && !isInteractiveClick) {
88
98
  onRowClick(event, row);
89
99
  }
90
100
  };
@@ -154,7 +154,7 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
154
154
  enableHover = true,
155
155
  enableStripes = false,
156
156
  tableProps = {},
157
- fitToScreen = true,
157
+ fitToScreen = false,
158
158
  tableSize: initialTableSize = 'medium',
159
159
 
160
160
  // Sticky header/footer props
@@ -710,7 +710,7 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
710
710
  // Row model
711
711
  getCoreRowModel: getCoreRowModel(),
712
712
  ...(enableSorting ? { getSortedRowModel: getSortedRowModel() } : {}),
713
- ...(enableColumnFilter ? { getFilteredRowModel: getCombinedFilteredRowModel<T>() } : {}),
713
+ ...(enableColumnFilter || enableGlobalFilter ? { getFilteredRowModel: getCombinedFilteredRowModel<T>() } : {}),
714
714
  ...(enablePagination ? { getPaginationRowModel: getPaginationRowModel() } : {}),
715
715
  // Sorting
716
716
  enableSorting: enableSorting,
@@ -755,8 +755,13 @@ export const DataTable = forwardRef<DataTableApi<any>, DataTableProps<any>>(func
755
755
  // -------------------------------
756
756
  // Virtualization and row memo
757
757
  // -------------------------------
758
- // eslint-disable-next-line react-hooks/exhaustive-deps
759
- const rows = useMemo(() => table.getRowModel()?.rows || [], [table, tableData]);
758
+ // Note: globalFilter is needed in dependencies to trigger recalculation when filter changes
759
+ // The table object is stable, so we need to depend on the filter state directly
760
+ const rows = useMemo(() => {
761
+ const rowModel = table.getRowModel();
762
+ return rowModel?.rows || [];
763
+ // eslint-disable-next-line react-hooks/exhaustive-deps
764
+ }, [table, tableData, globalFilter, enableGlobalFilter, enableColumnFilter, enablePagination]);
760
765
  const rowVirtualizer = useVirtualizer({
761
766
  count: rows.length,
762
767
  getScrollElement: () => tableContainerRef.current,
@@ -338,7 +338,9 @@ export const getCombinedFilteredRowModel = <TData,>() => {
338
338
  logic: 'AND',
339
339
  };
340
340
 
341
- if (!filters.length || !table.options.enableAdvanceColumnFilter) return baseFilteredModel;
341
+ if (!filters.length || !table.options.enableAdvanceColumnFilter) {
342
+ return baseFilteredModel;
343
+ }
342
344
 
343
345
  // Apply custom column filters to pre-filtered rows
344
346
  const filteredRows = baseFilteredModel.rows.filter(row =>
@@ -17,7 +17,7 @@ export interface SelectionColumnConfig<T> {
17
17
  */
18
18
  export const createSelectionColumn = <T>(config: Partial<DataTableColumn<T>> & SelectionColumnConfig<T>): DataTableColumn<T, any> => ({
19
19
  id: DEFAULT_SELECTION_COLUMN_NAME,
20
- size: 60,
20
+ maxSize: 60,
21
21
  minSize: 60,
22
22
  align: 'center',
23
23
  filterable: false,
@@ -42,6 +42,8 @@ export const createSelectionColumn = <T>(config: Partial<DataTableColumn<T>> & S
42
42
  },
43
43
  size: 'small',
44
44
  sx: { p: 0 },
45
+ role: 'checkbox',
46
+ 'aria-checked': allSelected ? 'true' : (someSelected ? 'mixed' : 'false'),
45
47
  });
46
48
  },
47
49
 
@@ -65,6 +67,8 @@ export const createSelectionColumn = <T>(config: Partial<DataTableColumn<T>> & S
65
67
  p: 0,
66
68
  opacity: canSelect ? 1 : 0.5
67
69
  },
70
+ role: 'checkbox',
71
+ 'aria-checked': checked ? 'true' : 'false',
68
72
  });
69
73
  },
70
74
  ...config,
@@ -75,7 +79,7 @@ export const createSelectionColumn = <T>(config: Partial<DataTableColumn<T>> & S
75
79
  */
76
80
  export const createExpandingColumn = <T>(config: Partial<DataTableColumn<T>>): DataTableColumn<T> => ({
77
81
  id: DEFAULT_EXPANDING_COLUMN_NAME,
78
- size: 60,
82
+ maxSize: 60,
79
83
  minSize: 60,
80
84
  align: 'center',
81
85
  filterable: false,
@@ -89,6 +93,9 @@ export const createExpandingColumn = <T>(config: Partial<DataTableColumn<T>>): D
89
93
  onClick: row.getToggleExpandedHandler(),
90
94
  size: 'small',
91
95
  sx: { p: 0 },
96
+ role: 'button',
97
+ 'aria-label': row.getIsExpanded() ? 'Collapse row' : 'Expand row',
98
+ 'aria-expanded': row.getIsExpanded(),
92
99
  }, row.getIsExpanded() ? createElement(KeyboardArrowUpOutlined) : createElement(KeyboardArrowDownOutlined)),
93
100
  ...config,
94
101
  });