@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 +9 -4
- package/dist/index.js +67 -32
- package/dist/index.mjs +67 -32
- package/dist/types/components/DataTable/DefaultTable.d.ts +3 -1
- package/dist/types/components/DataTable/TableBody.d.ts +3 -1
- package/dist/types/components/DataTable/TableFooter.d.ts +2 -1
- package/dist/types/components/DataTable/TableHeader.d.ts +2 -1
- package/package.json +1 -1
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`,
|
|
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`,
|
|
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`,
|
|
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, {
|
|
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`,
|
|
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`,
|
|
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`,
|
|
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, {
|
|
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;
|