@bsol-oss/react-datatable5 3.1.0 → 3.1.1

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/index.d.ts CHANGED
@@ -229,8 +229,9 @@ declare const TableControls: ({ totalText, showFilter, fitTableWidth, fitTableHe
229
229
  interface DefaultTableProps extends TableControlsProps {
230
230
  showFooter?: boolean;
231
231
  showSelector?: boolean;
232
+ tableProps?: Omit<TableProps, "children">;
232
233
  }
233
- declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, filterOptions, showFilterTags, showFilterName, showReload, showSelector, extraItems, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
234
+ declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, filterOptions, showFilterTags, showFilterName, showReload, showSelector, extraItems, tableProps, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
234
235
 
235
236
  interface TableProps extends TableProps$1 {
236
237
  showLoading?: boolean;
@@ -245,6 +246,7 @@ interface TableBodyProps {
245
246
  dark: string;
246
247
  };
247
248
  showSelector?: boolean;
249
+ alwaysShowSelector?: boolean;
248
250
  }
249
251
  interface TableRowSelectorProps<TData> {
250
252
  index: number;
@@ -254,8 +256,9 @@ interface TableRowSelectorProps<TData> {
254
256
  light: string;
255
257
  dark: string;
256
258
  };
259
+ alwaysShowSelector?: boolean;
257
260
  }
258
- declare const TableBody: ({ pinnedBgColor, showSelector, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
261
+ declare const TableBody: ({ pinnedBgColor, showSelector, alwaysShowSelector, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
259
262
 
260
263
  interface TableCardContainerProps extends GridProps {
261
264
  children: JSX.Element;
@@ -282,8 +285,9 @@ interface TableFooterProps {
282
285
  dark: string;
283
286
  };
284
287
  showSelector?: boolean;
288
+ alwaysShowSelector?: boolean;
285
289
  }
286
- declare const TableFooter: ({ pinnedBgColor, showSelector, }: TableFooterProps) => react_jsx_runtime.JSX.Element;
290
+ declare const TableFooter: ({ pinnedBgColor, showSelector, alwaysShowSelector, }: TableFooterProps) => react_jsx_runtime.JSX.Element;
287
291
 
288
292
  interface TableHeaderProps {
289
293
  canResize?: boolean;
@@ -292,8 +296,9 @@ interface TableHeaderProps {
292
296
  dark: string;
293
297
  };
294
298
  showSelector?: boolean;
299
+ alwaysShowSelector?: boolean;
295
300
  }
296
- declare const TableHeader: ({ canResize, pinnedBgColor, showSelector, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
301
+ declare const TableHeader: ({ canResize, pinnedBgColor, showSelector, alwaysShowSelector, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
297
302
 
298
303
  interface TableLoadingComponentProps {
299
304
  render: (loading: boolean) => JSX.Element;
package/dist/index.js CHANGED
@@ -330,31 +330,44 @@ const DataTableServer = ({ columns, enableRowSelection = true, enableMultiRowSel
330
330
  }, children: children }));
331
331
  };
332
332
 
333
- const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, }) => {
333
+ const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
334
334
  const { table: table$1 } = react$1.useContext(TableContext);
335
335
  const SELECTION_BOX_WIDTH = 20;
336
336
  const [hoveredRow, setHoveredRow] = react$1.useState(-1);
337
337
  const handleRowHover = (index) => {
338
338
  setHoveredRow(index);
339
339
  };
340
+ const getTdProps = (cell) => {
341
+ const tdProps = cell.column.getIsPinned()
342
+ ? {
343
+ left: showSelector
344
+ ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table$1.getDensityValue() * 2}px`
345
+ : `${cell.column.getStart("left") + table$1.getDensityValue() * 2}px`,
346
+ background: pinnedBgColor.light,
347
+ position: "sticky",
348
+ zIndex: 1,
349
+ _dark: {
350
+ backgroundColor: pinnedBgColor.dark,
351
+ },
352
+ }
353
+ : {};
354
+ return tdProps;
355
+ };
340
356
  return (jsxRuntime.jsx(table.Tbody, { children: table$1.getRowModel().rows.map((row, index) => {
341
- return (jsxRuntime.jsxs(table.Tr, { display: "flex", _hover: { backgroundColor: "rgba(178,178,178,0.1)" }, zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
357
+ return (jsxRuntime.jsxs(table.Tr, { display: "flex", _hover: { backgroundColor: "rgba(178,178,178,0.1)" }, zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), children: [showSelector && (jsxRuntime.jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
342
358
  return (jsxRuntime.jsx(table.Td, { padding: `${table$1.getDensityValue()}px`,
343
359
  // styling resize and pinning start
344
- maxWidth: `${cell.column.getSize()}px`, width: `${cell.column.getSize()}px`, left: cell.column.getIsPinned()
345
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table$1.getDensityValue() * 2}px`
346
- : undefined, backgroundColor: cell.column.getIsPinned() ? pinnedBgColor.light : undefined, position: cell.column.getIsPinned() ? "sticky" : "relative", zIndex: cell.column.getIsPinned() ? 1 : 0, _dark: {
347
- backgroundColor: cell.column.getIsPinned()
348
- ? pinnedBgColor.dark
349
- : undefined,
350
- }, children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
360
+ maxWidth: `${cell.column.getSize()}px`, width: `${cell.column.getSize()}px`, ...getTdProps(cell), children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
351
361
  })] }, `chakra-table-row-${row.id}`));
352
362
  }) }));
353
363
  };
354
- const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
364
+ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
355
365
  const { table: table$1 } = react$1.useContext(TableContext);
356
366
  const SELECTION_BOX_WIDTH = 20;
357
367
  const isCheckBoxVisible = (current_index, current_row) => {
368
+ if (alwaysShowSelector) {
369
+ return true;
370
+ }
358
371
  if (current_row.getIsSelected()) {
359
372
  return true;
360
373
  }
@@ -386,7 +399,7 @@ const TableControls = ({ totalText = "Total:", showFilter = false, fitTableWidth
386
399
  }) }), jsxRuntime.jsx(react.Flex, { gridColumn: "1 / span 2", children: showFilterTags && jsxRuntime.jsx(TableFilterTags, {}) }), jsxRuntime.jsx(react.Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: children }), jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [jsxRuntime.jsx(PageSizeControl, {}), jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: totalText }), jsxRuntime.jsx(RowCountText, {})] })] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: jsxRuntime.jsx(TablePagination, {}) })] }));
387
400
  };
388
401
 
389
- const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, }) => {
402
+ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
390
403
  const table = useDataTableContext().table;
391
404
  const SELECTION_BOX_WIDTH = 20;
392
405
  const [hoveredCheckBox, setHoveredCheckBox] = react$1.useState(false);
@@ -394,6 +407,9 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
394
407
  setHoveredCheckBox(isHovered);
395
408
  };
396
409
  const isCheckBoxVisible = () => {
410
+ if (alwaysShowSelector) {
411
+ return true;
412
+ }
397
413
  if (table.getIsAllRowsSelected()) {
398
414
  return true;
399
415
  }
@@ -402,6 +418,22 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
402
418
  }
403
419
  return false;
404
420
  };
421
+ const getThProps = (header) => {
422
+ const thProps = header.column.getIsPinned()
423
+ ? {
424
+ left: showSelector
425
+ ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
426
+ : `${header.getStart("left") + table.getDensityValue() * 2}px`,
427
+ background: pinnedBgColor.light,
428
+ position: "sticky",
429
+ zIndex: 1,
430
+ _dark: {
431
+ backgroundColor: pinnedBgColor.dark,
432
+ },
433
+ }
434
+ : {};
435
+ return thProps;
436
+ };
405
437
  return (jsxRuntime.jsx(react.Tfoot, { children: table.getFooterGroups().map((footerGroup) => (jsxRuntime.jsxs(react.Tr, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Th
406
438
  // styling resize and pinning start
407
439
  , {
@@ -420,22 +452,14 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
420
452
  // indeterminate: table.getIsSomeRowsSelected(),
421
453
  onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsxRuntime.jsx(react.Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsxRuntime.jsx(react.Th, { padding: "0", colSpan: header.colSpan,
422
454
  // styling resize and pinning start
423
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, left: header.column.getIsPinned()
424
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
425
- : undefined, backgroundColor: header.column.getIsPinned() ? pinnedBgColor.light : undefined, position: header.column.getIsPinned() ? "sticky" : "relative", zIndex: header.column.getIsPinned() ? 1 : undefined, _dark: {
426
- backgroundColor: header.column.getIsPinned()
427
- ? pinnedBgColor.dark
428
- : undefined,
429
- },
430
- // styling resize and pinning end
431
- display: "grid", children: jsxRuntime.jsx(react.Menu, { children: jsxRuntime.jsx(react.MenuButton, { as: react.Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
455
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), children: jsxRuntime.jsx(react.Menu, { children: jsxRuntime.jsx(react.MenuButton, { as: react.Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
432
456
  ? null
433
457
  : reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
434
458
  // <UpDownIcon />
435
459
  jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(icons.ChevronUpIcon, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(icons.ChevronDownIcon, {}))] })) })] }) }) }) }, `chakra-table-footer-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
436
460
  };
437
461
 
438
- const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector, }) => {
462
+ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector, alwaysShowSelector = true, }) => {
439
463
  const { table } = useDataTableContext();
440
464
  const SELECTION_BOX_WIDTH = 20;
441
465
  const [hoveredCheckBox, setHoveredCheckBox] = react$1.useState(false);
@@ -443,6 +467,9 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
443
467
  setHoveredCheckBox(isHovered);
444
468
  };
445
469
  const isCheckBoxVisible = () => {
470
+ if (alwaysShowSelector) {
471
+ return true;
472
+ }
446
473
  if (table.getIsAllRowsSelected()) {
447
474
  return true;
448
475
  }
@@ -451,6 +478,22 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
451
478
  }
452
479
  return false;
453
480
  };
481
+ const getThProps = (header) => {
482
+ const thProps = header.column.getIsPinned()
483
+ ? {
484
+ left: showSelector
485
+ ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
486
+ : `${header.getStart("left") + table.getDensityValue() * 2}px`,
487
+ background: pinnedBgColor.light,
488
+ position: "sticky",
489
+ zIndex: 1,
490
+ _dark: {
491
+ backgroundColor: pinnedBgColor.dark,
492
+ },
493
+ }
494
+ : {};
495
+ return thProps;
496
+ };
454
497
  return (jsxRuntime.jsx(react.Thead, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsxs(react.Tr, { display: "flex", children: [showSelector && (jsxRuntime.jsxs(react.Th
455
498
  // styling resize and pinning start
456
499
  , { ...(table.getIsSomeColumnsPinned("left")
@@ -474,15 +517,7 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
474
517
  };
475
518
  return (jsxRuntime.jsxs(react.Th, { padding: "0rem", colSpan: header.colSpan,
476
519
  // styling resize and pinning start
477
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, left: header.column.getIsPinned()
478
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
479
- : undefined, backgroundColor: header.column.getIsPinned() ? pinnedBgColor.light : undefined, position: header.column.getIsPinned() ? "sticky" : "relative", zIndex: header.column.getIsPinned() ? 1 : undefined, _dark: {
480
- backgroundColor: header.column.getIsPinned()
481
- ? pinnedBgColor.dark
482
- : undefined,
483
- },
484
- // styling resize and pinning end
485
- display: "grid", children: [jsxRuntime.jsxs(react.Menu, { children: [jsxRuntime.jsx(react.MenuButton, { as: react.Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
520
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), children: [jsxRuntime.jsxs(react.Menu, { children: [jsxRuntime.jsx(react.MenuButton, { as: react.Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
486
521
  ? null
487
522
  : reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(icons.ChevronUpIcon, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(icons.ChevronDownIcon, {}))] })) }), jsxRuntime.jsx(react.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }), jsxRuntime.jsx(react.Portal, { children: jsxRuntime.jsxs(react.MenuList, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(react.MenuItem, { icon: jsxRuntime.jsx(md.MdPushPin, {}), onClick: () => {
488
523
  header.column.pin("left");
@@ -516,8 +551,8 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
516
551
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
517
552
  };
518
553
 
519
- const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, filterOptions = [], showFilterTags = false, showFilterName = false, showReload = false, showSelector = false, extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), }) => {
520
- return (jsxRuntime.jsx(TableControls, { totalText: totalText, showFilter: showFilter, fitTableWidth: fitTableWidth, fitTableHeight: fitTableHeight, isMobile: isMobile, filterOptions: filterOptions, showFilterName: showFilterName, showFilterTags: showFilterTags, showReload: showReload, extraItems: extraItems, children: jsxRuntime.jsxs(Table, { variant: "striped", children: [jsxRuntime.jsx(TableHeader, { canResize: true, showSelector: showSelector }), jsxRuntime.jsx(TableBody, { showSelector: showSelector }), showFooter && jsxRuntime.jsx(TableFooter, { showSelector: showSelector })] }) }));
554
+ const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, filterOptions = [], showFilterTags = false, showFilterName = false, showReload = false, showSelector = false, extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), tableProps = {}, }) => {
555
+ return (jsxRuntime.jsx(TableControls, { totalText: totalText, showFilter: showFilter, fitTableWidth: fitTableWidth, fitTableHeight: fitTableHeight, isMobile: isMobile, filterOptions: filterOptions, showFilterName: showFilterName, showFilterTags: showFilterTags, showReload: showReload, extraItems: extraItems, children: jsxRuntime.jsxs(Table, { ...tableProps, children: [jsxRuntime.jsx(TableHeader, { canResize: true, showSelector: showSelector }), jsxRuntime.jsx(TableBody, { showSelector: showSelector }), showFooter && jsxRuntime.jsx(TableFooter, { showSelector: showSelector })] }) }));
521
556
  };
522
557
 
523
558
  const Table = ({ children, showLoading = false, loadingComponent = jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Loading..." }), ...props }) => {
package/dist/index.mjs CHANGED
@@ -328,31 +328,44 @@ const DataTableServer = ({ columns, enableRowSelection = true, enableMultiRowSel
328
328
  }, children: children }));
329
329
  };
330
330
 
331
- const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, }) => {
331
+ const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
332
332
  const { table } = useContext(TableContext);
333
333
  const SELECTION_BOX_WIDTH = 20;
334
334
  const [hoveredRow, setHoveredRow] = useState(-1);
335
335
  const handleRowHover = (index) => {
336
336
  setHoveredRow(index);
337
337
  };
338
+ const getTdProps = (cell) => {
339
+ const tdProps = cell.column.getIsPinned()
340
+ ? {
341
+ left: showSelector
342
+ ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
343
+ : `${cell.column.getStart("left") + table.getDensityValue() * 2}px`,
344
+ background: pinnedBgColor.light,
345
+ position: "sticky",
346
+ zIndex: 1,
347
+ _dark: {
348
+ backgroundColor: pinnedBgColor.dark,
349
+ },
350
+ }
351
+ : {};
352
+ return tdProps;
353
+ };
338
354
  return (jsx(Tbody, { children: table.getRowModel().rows.map((row, index) => {
339
- return (jsxs(Tr, { display: "flex", _hover: { backgroundColor: "rgba(178,178,178,0.1)" }, zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow })), row.getVisibleCells().map((cell, index) => {
355
+ return (jsxs(Tr, { display: "flex", _hover: { backgroundColor: "rgba(178,178,178,0.1)" }, zIndex: 1, onMouseEnter: () => handleRowHover(index), onMouseLeave: () => handleRowHover(-1), children: [showSelector && (jsx(TableRowSelector, { index: index, row: row, hoveredRow: hoveredRow, alwaysShowSelector: alwaysShowSelector })), row.getVisibleCells().map((cell, index) => {
340
356
  return (jsx(Td, { padding: `${table.getDensityValue()}px`,
341
357
  // styling resize and pinning start
342
- maxWidth: `${cell.column.getSize()}px`, width: `${cell.column.getSize()}px`, left: cell.column.getIsPinned()
343
- ? `${cell.column.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
344
- : undefined, backgroundColor: cell.column.getIsPinned() ? pinnedBgColor.light : undefined, position: cell.column.getIsPinned() ? "sticky" : "relative", zIndex: cell.column.getIsPinned() ? 1 : 0, _dark: {
345
- backgroundColor: cell.column.getIsPinned()
346
- ? pinnedBgColor.dark
347
- : undefined,
348
- }, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
358
+ maxWidth: `${cell.column.getSize()}px`, width: `${cell.column.getSize()}px`, ...getTdProps(cell), children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, `chakra-table-rowcell-${cell.id}-${index}`));
349
359
  })] }, `chakra-table-row-${row.id}`));
350
360
  }) }));
351
361
  };
352
- const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
362
+ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, alwaysShowSelector = true, }) => {
353
363
  const { table } = useContext(TableContext);
354
364
  const SELECTION_BOX_WIDTH = 20;
355
365
  const isCheckBoxVisible = (current_index, current_row) => {
366
+ if (alwaysShowSelector) {
367
+ return true;
368
+ }
356
369
  if (current_row.getIsSelected()) {
357
370
  return true;
358
371
  }
@@ -384,7 +397,7 @@ const TableControls = ({ totalText = "Total:", showFilter = false, fitTableWidth
384
397
  }) }), jsx(Flex, { gridColumn: "1 / span 2", children: showFilterTags && jsx(TableFilterTags, {}) }), jsx(Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: children }), jsxs(Flex, { gap: "1rem", alignItems: "center", children: [jsx(PageSizeControl, {}), jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: totalText }), jsx(RowCountText, {})] })] }), jsx(Box, { justifySelf: "end", children: jsx(TablePagination, {}) })] }));
385
398
  };
386
399
 
387
- const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, }) => {
400
+ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
388
401
  const table = useDataTableContext().table;
389
402
  const SELECTION_BOX_WIDTH = 20;
390
403
  const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
@@ -392,6 +405,9 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
392
405
  setHoveredCheckBox(isHovered);
393
406
  };
394
407
  const isCheckBoxVisible = () => {
408
+ if (alwaysShowSelector) {
409
+ return true;
410
+ }
395
411
  if (table.getIsAllRowsSelected()) {
396
412
  return true;
397
413
  }
@@ -400,6 +416,22 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
400
416
  }
401
417
  return false;
402
418
  };
419
+ const getThProps = (header) => {
420
+ const thProps = header.column.getIsPinned()
421
+ ? {
422
+ left: showSelector
423
+ ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
424
+ : `${header.getStart("left") + table.getDensityValue() * 2}px`,
425
+ background: pinnedBgColor.light,
426
+ position: "sticky",
427
+ zIndex: 1,
428
+ _dark: {
429
+ backgroundColor: pinnedBgColor.dark,
430
+ },
431
+ }
432
+ : {};
433
+ return thProps;
434
+ };
403
435
  return (jsx(Tfoot, { children: table.getFooterGroups().map((footerGroup) => (jsxs(Tr$1, { display: "flex", children: [showSelector && (jsxs(Th
404
436
  // styling resize and pinning start
405
437
  , {
@@ -418,22 +450,14 @@ const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, s
418
450
  // indeterminate: table.getIsSomeRowsSelected(),
419
451
  onChange: table.getToggleAllRowsSelectedHandler() }) })), !isCheckBoxVisible() && (jsx(Box, { as: "span", margin: "0rem", display: "grid", justifyItems: "center", alignItems: "center", width: `${SELECTION_BOX_WIDTH}px`, height: `${SELECTION_BOX_WIDTH}px` }))] })), footerGroup.headers.map((header) => (jsx(Th, { padding: "0", colSpan: header.colSpan,
420
452
  // styling resize and pinning start
421
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, left: header.column.getIsPinned()
422
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
423
- : undefined, backgroundColor: header.column.getIsPinned() ? pinnedBgColor.light : undefined, position: header.column.getIsPinned() ? "sticky" : "relative", zIndex: header.column.getIsPinned() ? 1 : undefined, _dark: {
424
- backgroundColor: header.column.getIsPinned()
425
- ? pinnedBgColor.dark
426
- : undefined,
427
- },
428
- // styling resize and pinning end
429
- display: "grid", children: jsx(Menu, { children: jsx(MenuButton, { as: Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
453
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), children: jsx(Menu, { children: jsx(MenuButton, { as: Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
430
454
  ? null
431
455
  : flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
432
456
  // <UpDownIcon />
433
457
  jsx(Fragment, {})), header.column.getIsSorted() === "asc" && (jsx(ChevronUpIcon, {})), header.column.getIsSorted() === "desc" && (jsx(ChevronDownIcon, {}))] })) })] }) }) }) }, `chakra-table-footer-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
434
458
  };
435
459
 
436
- const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector, }) => {
460
+ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector, alwaysShowSelector = true, }) => {
437
461
  const { table } = useDataTableContext();
438
462
  const SELECTION_BOX_WIDTH = 20;
439
463
  const [hoveredCheckBox, setHoveredCheckBox] = useState(false);
@@ -441,6 +465,9 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
441
465
  setHoveredCheckBox(isHovered);
442
466
  };
443
467
  const isCheckBoxVisible = () => {
468
+ if (alwaysShowSelector) {
469
+ return true;
470
+ }
444
471
  if (table.getIsAllRowsSelected()) {
445
472
  return true;
446
473
  }
@@ -449,6 +476,22 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
449
476
  }
450
477
  return false;
451
478
  };
479
+ const getThProps = (header) => {
480
+ const thProps = header.column.getIsPinned()
481
+ ? {
482
+ left: showSelector
483
+ ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
484
+ : `${header.getStart("left") + table.getDensityValue() * 2}px`,
485
+ background: pinnedBgColor.light,
486
+ position: "sticky",
487
+ zIndex: 1,
488
+ _dark: {
489
+ backgroundColor: pinnedBgColor.dark,
490
+ },
491
+ }
492
+ : {};
493
+ return thProps;
494
+ };
452
495
  return (jsx(Thead, { children: table.getHeaderGroups().map((headerGroup) => (jsxs(Tr$1, { display: "flex", children: [showSelector && (jsxs(Th
453
496
  // styling resize and pinning start
454
497
  , { ...(table.getIsSomeColumnsPinned("left")
@@ -472,15 +515,7 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
472
515
  };
473
516
  return (jsxs(Th, { padding: "0rem", colSpan: header.colSpan,
474
517
  // styling resize and pinning start
475
- maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, left: header.column.getIsPinned()
476
- ? `${header.getStart("left") + SELECTION_BOX_WIDTH + table.getDensityValue() * 2}px`
477
- : undefined, backgroundColor: header.column.getIsPinned() ? pinnedBgColor.light : undefined, position: header.column.getIsPinned() ? "sticky" : "relative", zIndex: header.column.getIsPinned() ? 1 : undefined, _dark: {
478
- backgroundColor: header.column.getIsPinned()
479
- ? pinnedBgColor.dark
480
- : undefined,
481
- },
482
- // styling resize and pinning end
483
- display: "grid", children: [jsxs(Menu, { children: [jsx(MenuButton, { as: Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
518
+ maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", ...getThProps(header), children: [jsxs(Menu, { children: [jsx(MenuButton, { as: Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
484
519
  ? null
485
520
  : flexRender(header.column.columnDef.header, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(ChevronUpIcon, {})), header.column.getIsSorted() === "desc" && (jsx(ChevronDownIcon, {}))] })) }), jsx(Box, { children: header.column.getIsFiltered() && jsx(MdFilterListAlt, {}) })] }) }), jsx(Portal, { children: jsxs(MenuList, { children: [!header.column.getIsPinned() && (jsx(MenuItem, { icon: jsx(MdPushPin, {}), onClick: () => {
486
521
  header.column.pin("left");
@@ -514,8 +549,8 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
514
549
  })] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
515
550
  };
516
551
 
517
- const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, filterOptions = [], showFilterTags = false, showFilterName = false, showReload = false, showSelector = false, extraItems = jsx(Fragment, {}), }) => {
518
- return (jsx(TableControls, { totalText: totalText, showFilter: showFilter, fitTableWidth: fitTableWidth, fitTableHeight: fitTableHeight, isMobile: isMobile, filterOptions: filterOptions, showFilterName: showFilterName, showFilterTags: showFilterTags, showReload: showReload, extraItems: extraItems, children: jsxs(Table, { variant: "striped", children: [jsx(TableHeader, { canResize: true, showSelector: showSelector }), jsx(TableBody, { showSelector: showSelector }), showFooter && jsx(TableFooter, { showSelector: showSelector })] }) }));
552
+ const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, filterOptions = [], showFilterTags = false, showFilterName = false, showReload = false, showSelector = false, extraItems = jsx(Fragment, {}), tableProps = {}, }) => {
553
+ return (jsx(TableControls, { totalText: totalText, showFilter: showFilter, fitTableWidth: fitTableWidth, fitTableHeight: fitTableHeight, isMobile: isMobile, filterOptions: filterOptions, showFilterName: showFilterName, showFilterTags: showFilterTags, showReload: showReload, extraItems: extraItems, children: jsxs(Table, { ...tableProps, children: [jsx(TableHeader, { canResize: true, showSelector: showSelector }), jsx(TableBody, { showSelector: showSelector }), showFooter && jsx(TableFooter, { showSelector: showSelector })] }) }));
519
554
  };
520
555
 
521
556
  const Table = ({ children, showLoading = false, loadingComponent = jsx(Fragment, { children: "Loading..." }), ...props }) => {
@@ -1,6 +1,8 @@
1
+ import { TableProps } from "../../index";
1
2
  import { TableControlsProps } from "./TableControls";
2
3
  export interface DefaultTableProps extends TableControlsProps {
3
4
  showFooter?: boolean;
4
5
  showSelector?: boolean;
6
+ tableProps?: Omit<TableProps, "children">;
5
7
  }
6
- export declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, filterOptions, showFilterTags, showFilterName, showReload, showSelector, extraItems, }: DefaultTableProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, filterOptions, showFilterTags, showFilterName, showReload, showSelector, extraItems, tableProps, }: DefaultTableProps) => import("react/jsx-runtime").JSX.Element;
@@ -5,6 +5,7 @@ export interface TableBodyProps {
5
5
  dark: string;
6
6
  };
7
7
  showSelector?: boolean;
8
+ alwaysShowSelector?: boolean;
8
9
  }
9
10
  export interface TableRowSelectorProps<TData> {
10
11
  index: number;
@@ -14,5 +15,6 @@ export interface TableRowSelectorProps<TData> {
14
15
  light: string;
15
16
  dark: string;
16
17
  };
18
+ alwaysShowSelector?: boolean;
17
19
  }
18
- export declare const TableBody: ({ pinnedBgColor, showSelector, }: TableBodyProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const TableBody: ({ pinnedBgColor, showSelector, alwaysShowSelector, }: TableBodyProps) => import("react/jsx-runtime").JSX.Element;
@@ -4,5 +4,6 @@ export interface TableFooterProps {
4
4
  dark: string;
5
5
  };
6
6
  showSelector?: boolean;
7
+ alwaysShowSelector?: boolean;
7
8
  }
8
- export declare const TableFooter: ({ pinnedBgColor, showSelector, }: TableFooterProps) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const TableFooter: ({ pinnedBgColor, showSelector, alwaysShowSelector, }: TableFooterProps) => import("react/jsx-runtime").JSX.Element;
@@ -5,5 +5,6 @@ export interface TableHeaderProps {
5
5
  dark: string;
6
6
  };
7
7
  showSelector?: boolean;
8
+ alwaysShowSelector?: boolean;
8
9
  }
9
- export declare const TableHeader: ({ canResize, pinnedBgColor, showSelector, }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const TableHeader: ({ canResize, pinnedBgColor, showSelector, alwaysShowSelector, }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",