@bsol-oss/react-datatable5 1.0.39 → 1.0.41

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
@@ -1,9 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- import { RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionState, ColumnFiltersState, SortingState, Row } from '@tanstack/react-table';
3
+ import { RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionState, ColumnFiltersState, SortingState, Row, Table as Table$1 } from '@tanstack/react-table';
4
4
  import { RankingInfo } from '@tanstack/match-sorter-utils';
5
5
  import React$1, { ReactNode } from 'react';
6
- import { TextProps, TooltipProps } from '@chakra-ui/react';
6
+ import * as react_icons_lib from 'react-icons/lib';
7
+ import { TableProps as TableProps$1, TextProps, TooltipProps } from '@chakra-ui/react';
7
8
  import * as _tanstack_table_core from '@tanstack/table-core';
8
9
 
9
10
  type DensityState = "sm" | "md" | "lg";
@@ -92,6 +93,11 @@ declare module "@tanstack/react-table" {
92
93
  }
93
94
  declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, onRowSelect, columnOrder: defaultColumnOrder, columnFilters: defaultColumnFilter, density, globalFilter: defaultGlobalFilter, pagination: defaultPagination, sorting: defaultSorting, rowSelection: defaultRowSelection, children, }: DataTableServerProps<TData>) => react_jsx_runtime.JSX.Element;
94
95
 
96
+ declare const DefaultTable: ({ totalText, showFilter }: {
97
+ totalText?: string | undefined;
98
+ showFilter?: boolean | undefined;
99
+ }) => react_jsx_runtime.JSX.Element;
100
+
95
101
  interface DensityToggleButtonProps {
96
102
  icon?: React$1.ReactElement;
97
103
  text?: string;
@@ -105,7 +111,7 @@ interface EditFilterButtonProps {
105
111
  resetText?: string;
106
112
  icon?: React.ReactElement;
107
113
  }
108
- declare const EditFilterButton: ({ text, title, closeText, resetText, icon, }: EditFilterButtonProps) => react_jsx_runtime.JSX.Element;
114
+ declare const EditFilterButton: ({ text, title, closeText, resetText, icon, ...props }: EditFilterButtonProps) => react_jsx_runtime.JSX.Element;
109
115
 
110
116
  interface EditOrderButtonProps {
111
117
  title?: string;
@@ -128,7 +134,9 @@ interface EditViewButtonProps {
128
134
  }
129
135
  declare const EditViewButton: ({ text, icon, title, }: EditViewButtonProps) => react_jsx_runtime.JSX.Element;
130
136
 
131
- declare const GlobalFilter: () => react_jsx_runtime.JSX.Element;
137
+ declare const GlobalFilter: ({ icon }: {
138
+ icon?: react_icons_lib.IconType | undefined;
139
+ }) => react_jsx_runtime.JSX.Element;
132
140
 
133
141
  interface PageSizeControlProps {
134
142
  pageSizes?: number[];
@@ -150,7 +158,9 @@ interface ResetSortingButtonProps {
150
158
  }
151
159
  declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => react_jsx_runtime.JSX.Element;
152
160
 
153
- interface TableProps {
161
+ declare const RowCountText: () => react_jsx_runtime.JSX.Element;
162
+
163
+ interface TableProps extends TableProps$1 {
154
164
  showLoading?: boolean;
155
165
  loadingComponent?: JSX.Element;
156
166
  children: ReactNode;
@@ -183,6 +193,11 @@ interface TableCardsProps {
183
193
  }
184
194
  declare const TableCards: ({}: TableCardsProps) => react_jsx_runtime.JSX.Element;
185
195
 
196
+ interface TableRendererProps<TData> {
197
+ render: (render: Table$1<TData>) => React$1.ReactElement;
198
+ }
199
+ declare const TableComponentRenderer: <TData>({ render, }: TableRendererProps<TData>) => React$1.ReactElement<any, string | React$1.JSXElementConstructor<any>>;
200
+
186
201
  declare const TableFilter: () => react_jsx_runtime.JSX.Element;
187
202
 
188
203
  interface TableFooterProps {
@@ -244,4 +259,4 @@ declare const useDataTable: () => {
244
259
  loading: boolean;
245
260
  };
246
261
 
247
- export { type DataResponse, DataTable, type DataTableProps, DataTableServer, type DataTableServerProps, DensityToggleButton, type DensityToggleButtonProps, EditFilterButton, type EditFilterButtonProps, EditOrderButton, type EditOrderButtonProps, EditSortingButton, type EditSortingButtonProps, EditViewButton, type EditViewButtonProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, type PaginationProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableFilter, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableOrderer, TablePagination, type TableProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, useDataFromUrl, type useDataFromUrlProps, type useDataFromUrlReturn, useDataTable };
262
+ export { type DataResponse, DataTable, type DataTableProps, DataTableServer, type DataTableServerProps, DefaultTable, DensityToggleButton, type DensityToggleButtonProps, EditFilterButton, type EditFilterButtonProps, EditOrderButton, type EditOrderButtonProps, EditSortingButton, type EditSortingButtonProps, EditViewButton, type EditViewButtonProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, type PaginationProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponentRenderer, TableFilter, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableOrderer, TablePagination, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, useDataFromUrl, type useDataFromUrlProps, type useDataFromUrlReturn, useDataTable };
package/dist/index.js CHANGED
@@ -6,11 +6,11 @@ var react = require('react');
6
6
  var matchSorterUtils = require('@tanstack/match-sorter-utils');
7
7
  var axios = require('axios');
8
8
  var react$1 = require('@chakra-ui/react');
9
- var ai = require('react-icons/ai');
10
9
  var md = require('react-icons/md');
11
- var icons = require('@chakra-ui/icons');
12
10
  var io = require('react-icons/io');
11
+ var icons = require('@chakra-ui/icons');
13
12
  var table = require('@chakra-ui/table');
13
+ var ai = require('react-icons/ai');
14
14
 
15
15
  const TableContext = react.createContext({
16
16
  table: {},
@@ -297,27 +297,18 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
297
297
  }, children: children }));
298
298
  };
299
299
 
300
- const DensityToggleButton = ({ text, icon = jsxRuntime.jsx(ai.AiOutlineColumnWidth, {}), }) => {
301
- const { table } = react.useContext(TableContext);
302
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { variant: "ghost", "aria-label": "Toggle Density", icon: icon, onClick: () => {
303
- table.toggleDensity();
304
- } })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", "aria-label": "Toggle Density", onClick: () => {
305
- table.toggleDensity();
306
- }, children: text }))] }));
300
+ const useDataTable = () => {
301
+ const { table, refreshData, globalFilter, setGlobalFilter, loading } = react.useContext(TableContext);
302
+ return { table, refreshData, globalFilter, setGlobalFilter, loading };
307
303
  };
308
304
 
309
305
  const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
310
- const { table } = react.useContext(TableContext);
306
+ const { table } = useDataTable();
311
307
  return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
312
308
  table.resetColumnFilters();
313
309
  }, children: text }));
314
310
  };
315
311
 
316
- const useDataTable = () => {
317
- const { table, refreshData, globalFilter, setGlobalFilter, loading } = react.useContext(TableContext);
318
- return { table, refreshData, globalFilter, setGlobalFilter, loading };
319
- };
320
-
321
312
  const TableFilter = () => {
322
313
  const { table } = useDataTable();
323
314
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getLeafHeaders().map((header) => {
@@ -332,99 +323,9 @@ const TableFilter = () => {
332
323
  }) }));
333
324
  };
334
325
 
335
- const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
326
+ const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsxRuntime.jsx(md.MdFilterAlt, {}), ...props }) => {
336
327
  const filterModal = react$1.useDisclosure();
337
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: filterModal.onOpen, "aria-label": "filter" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: filterModal.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: filterModal.isOpen, onClose: filterModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "1rem", children: [jsxRuntime.jsx(TableFilter, {}), jsxRuntime.jsx(ResetFilteringButton, { text: resetText })] }) }), jsxRuntime.jsx(react$1.ModalFooter, { children: jsxRuntime.jsx(react$1.Button, { onClick: filterModal.onClose, children: closeText }) })] })] })] }));
338
- };
339
-
340
- const ColumnOrderChanger = ({ columns }) => {
341
- const [order, setOrder] = react.useState([]);
342
- const [originalOrder, setOriginalOrder] = react.useState([]);
343
- const { table } = useDataTable();
344
- const handleChangeOrder = (startIndex, endIndex) => {
345
- const newOrder = Array.from(order);
346
- const [removed] = newOrder.splice(startIndex, 1);
347
- newOrder.splice(endIndex, 0, removed);
348
- setOrder(newOrder);
349
- };
350
- react.useEffect(() => {
351
- setOrder(columns);
352
- }, [columns]);
353
- react.useEffect(() => {
354
- if (originalOrder.length > 0) {
355
- return;
356
- }
357
- if (columns.length <= 0) {
358
- return;
359
- }
360
- setOriginalOrder(columns);
361
- }, [columns]);
362
- return (jsxRuntime.jsxs(react$1.Flex, { gap: "0.5rem", flexFlow: "column", children: [jsxRuntime.jsx(react$1.Flex, { gap: "0.5rem", flexFlow: "column", children: order.map((columnId, index) => (jsxRuntime.jsxs(react$1.Flex, { gap: "0.5rem", alignItems: "center", justifyContent: "space-between", children: [jsxRuntime.jsx(react$1.IconButton, { onClick: () => {
363
- const prevIndex = index - 1;
364
- if (prevIndex >= 0) {
365
- handleChangeOrder(index, prevIndex);
366
- }
367
- }, disabled: index === 0, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowUpward, {}) }), table
368
- .getAllFlatColumns()
369
- .filter((column) => {
370
- return column.id === columnId;
371
- })
372
- .map((column) => {
373
- const displayName = column.columnDef.meta === undefined
374
- ? column.id
375
- : column.columnDef.meta.displayName;
376
- return jsxRuntime.jsx(jsxRuntime.Fragment, { children: displayName });
377
- }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => {
378
- const nextIndex = index + 1;
379
- if (nextIndex < order.length) {
380
- handleChangeOrder(index, nextIndex);
381
- }
382
- }, disabled: index === order.length - 1, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowDownward, {}) })] }, columnId))) }), jsxRuntime.jsxs(react$1.Flex, { gap: "0.25rem", children: [jsxRuntime.jsx(react$1.Button, { onClick: () => {
383
- table.setColumnOrder(order);
384
- }, children: "Apply" }), jsxRuntime.jsx(react$1.Button, { onClick: () => {
385
- table.setColumnOrder(originalOrder);
386
- }, children: "Reset" })] })] }));
387
- };
388
- const TableOrderer = () => {
389
- const { table } = useDataTable();
390
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
391
- };
392
-
393
- const EditOrderButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineMoveDown, {}), title = "Change Order", }) => {
394
- const orderModal = react$1.useDisclosure();
395
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: orderModal.onOpen, "aria-label": "change order" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: orderModal.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: orderModal.isOpen, onClose: orderModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { padding: "0 0 1rem 0", children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsx(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: jsxRuntime.jsx(TableOrderer, {}) }) })] })] })] }));
396
- };
397
-
398
- const ResetSortingButton = ({ text = "Reset Sorting", }) => {
399
- const { table } = react.useContext(TableContext);
400
- return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
401
- table.resetSorting();
402
- }, children: text }));
403
- };
404
-
405
- const TableSorter = () => {
406
- const { table } = useDataTable();
407
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: headerGroup.headers.map((header) => {
408
- const displayName = header.column.columnDef.meta === undefined
409
- ? header.column.id
410
- : header.column.columnDef.meta.displayName;
411
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: header.column.getCanSort() && (jsxRuntime.jsxs(react$1.Flex, { alignItems: "center", gap: "0.5rem", padding: "0.5rem", children: [jsxRuntime.jsx(react$1.Text, { children: displayName }), jsxRuntime.jsxs(react$1.Button, { variant: "ghost", onClick: (e) => {
412
- header.column.toggleSorting();
413
- }, children: [header.column.getIsSorted() === false && (
414
- // <Text>To No sort</Text>
415
- jsxRuntime.jsx(icons.UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
416
- // <Text>To asc</Text>
417
- jsxRuntime.jsx(icons.ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
418
- // <Text>To desc</Text>
419
- jsxRuntime.jsx(icons.ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsxRuntime.jsx(react$1.Button, { onClick: (e) => {
420
- header.column.clearSorting();
421
- }, children: jsxRuntime.jsx(icons.CloseIcon, {}) }))] })) }));
422
- }) }))) }));
423
- };
424
-
425
- const EditSortingButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineSort, {}), title = "Edit Sorting", }) => {
426
- const sortingModal = react$1.useDisclosure();
427
- return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: sortingModal.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: sortingModal.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: sortingModal.isOpen, onClose: sortingModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { padding: "0 0 1rem 0", children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(TableSorter, {}), jsxRuntime.jsx(ResetSortingButton, {})] }) })] })] })] }));
328
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: filterModal.onOpen, "aria-label": "filter", ...props })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: filterModal.onOpen, ...props, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: filterModal.isOpen, onClose: filterModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "1rem", children: [jsxRuntime.jsx(TableFilter, {}), jsxRuntime.jsx(ResetFilteringButton, { text: resetText })] }) }), jsxRuntime.jsx(react$1.ModalFooter, { children: jsxRuntime.jsx(react$1.Button, { onClick: filterModal.onClose, children: closeText }) })] })] })] }));
428
329
  };
429
330
 
430
331
  const TableViewer = () => {
@@ -442,25 +343,23 @@ const EditViewButton = ({ text, icon = jsxRuntime.jsx(io.IoMdEye, {}), title = "
442
343
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: viewModel.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: viewModel.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: viewModel.isOpen, onClose: viewModel.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { padding: "0 0 1rem 0", children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsx(TableViewer, {}) })] })] })] }));
443
344
  };
444
345
 
445
- const GlobalFilter = () => {
346
+ const GlobalFilter = ({ icon = md.MdSearch }) => {
446
347
  const { globalFilter, setGlobalFilter } = useDataTable();
447
- return (jsxRuntime.jsx(react$1.Input, { value: globalFilter, onChange: (e) => {
448
- setGlobalFilter(e.target.value);
449
- } }));
348
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(react$1.Box, { children: jsxRuntime.jsxs(react$1.InputGroup, { children: [jsxRuntime.jsx(react$1.InputLeftElement, { pointerEvents: "none", children: jsxRuntime.jsx(react$1.Icon, { as: icon, color: "gray.300" }) }), jsxRuntime.jsx(react$1.Input, { value: globalFilter, onChange: (e) => {
349
+ setGlobalFilter(e.target.value);
350
+ } })] }) }) }));
450
351
  };
451
352
 
452
353
  const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
453
- const { table } = react.useContext(TableContext);
354
+ const { table } = useDataTable();
454
355
  return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(react$1.Menu, { children: [jsxRuntime.jsx(react$1.MenuButton, { as: react$1.Button, variant: "ghost", rightIcon: jsxRuntime.jsx(icons.ChevronDownIcon, {}), gap: "0.5rem", children: table.getState().pagination.pageSize }), jsxRuntime.jsx(react$1.MenuList, { children: pageSizes.map((pageSize) => (jsxRuntime.jsx(react$1.MenuItem, { onClick: () => {
455
356
  table.setPageSize(Number(pageSize));
456
357
  }, children: pageSize }))) })] }) }));
457
358
  };
458
359
 
459
- const ResetSelectionButton = ({ text = "Reset Selection", }) => {
360
+ const RowCountText = () => {
460
361
  const { table } = react.useContext(TableContext);
461
- return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
462
- table.resetRowSelection();
463
- }, children: text }));
362
+ return jsxRuntime.jsx(react$1.Text, { children: table.getRowCount() });
464
363
  };
465
364
 
466
365
  const Table = ({ children, showLoading = false, loadingComponent = jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Loading..." }), ...props }) => {
@@ -520,22 +419,6 @@ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gr
520
419
  onChange: row.getToggleSelectedHandler() }) }))] }));
521
420
  };
522
421
 
523
- const TableCardContainer = ({ children, ...props }) => {
524
- return (jsxRuntime.jsx(react$1.Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
525
- };
526
-
527
- const TableCards = ({}) => {
528
- const { table } = react.useContext(TableContext);
529
- return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getRowModel().rows.map((row) => {
530
- return (jsxRuntime.jsx(react$1.Card, { children: jsxRuntime.jsxs(react$1.CardBody, { display: "flex", flexFlow: "column", gap: "0.5rem", children: [jsxRuntime.jsx(react$1.Checkbox, { isChecked: row.getIsSelected(),
531
- disabled: !row.getCanSelect(),
532
- // indeterminate: row.getIsSomeSelected(),
533
- onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
534
- return (jsxRuntime.jsx(react$1.Box, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }));
535
- })] }) }, crypto.randomUUID()));
536
- }) }));
537
- };
538
-
539
422
  const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
540
423
  const table = useDataTable().table;
541
424
  const SELECTION_BOX_WIDTH = 20;
@@ -655,6 +538,139 @@ const TablePagination = ({}) => {
655
538
  return (jsxRuntime.jsxs(react$1.ButtonGroup, { isAttached: true, children: [jsxRuntime.jsx(react$1.IconButton, { icon: jsxRuntime.jsx(md.MdFirstPage, {}), onClick: () => firstPage(), isDisabled: !getCanPreviousPage(), "aria-label": "first-page", variant: "ghost" }), jsxRuntime.jsx(react$1.IconButton, { icon: jsxRuntime.jsx(md.MdArrowBack, {}), onClick: () => previousPage(), isDisabled: !getCanPreviousPage(), "aria-label": "previous-page", variant: "ghost" }), jsxRuntime.jsx(react$1.Button, { variant: "ghost", onClick: () => { }, disabled: !getCanPreviousPage(), children: getState().pagination.pageIndex + 1 }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => nextPage(), isDisabled: !getCanNextPage(), "aria-label": "next-page", variant: "ghost", children: jsxRuntime.jsx(md.MdArrowForward, {}) }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => lastPage(), isDisabled: !getCanNextPage(), "aria-label": "last-page", variant: "ghost", children: jsxRuntime.jsx(md.MdLastPage, {}) })] }));
656
539
  };
657
540
 
541
+ const DefaultTable = ({ totalText = "Total:", showFilter = false }) => {
542
+ return (jsxRuntime.jsxs(react$1.Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", children: [jsxRuntime.jsxs(react$1.Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsxRuntime.jsx(react$1.Box, { children: jsxRuntime.jsx(EditViewButton, { text: "View", icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsx(react$1.Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(GlobalFilter, {}), jsxRuntime.jsx(EditFilterButton, { text: "Advanced Filter" })] })) })] }), jsxRuntime.jsx(react$1.Flex, { overflow: "auto", gridColumn: "1 / span 2", justifyContent: "center", children: jsxRuntime.jsxs(Table, { variant: "striped", alignSelf: "center", children: [jsxRuntime.jsx(TableHeader, { canResize: true }), jsxRuntime.jsx(TableBody, {}), jsxRuntime.jsx(TableFooter, {})] }) }), jsxRuntime.jsxs(react$1.Flex, { gap: "1rem", alignItems: "center", children: [jsxRuntime.jsx(PageSizeControl, { pageSizes: [25, 50] }), jsxRuntime.jsxs(react$1.Flex, { children: [jsxRuntime.jsx(react$1.Text, { paddingRight: "0.5rem", children: totalText }), jsxRuntime.jsx(RowCountText, {})] })] }), jsxRuntime.jsx(react$1.Box, { justifySelf: "end", children: jsxRuntime.jsx(TablePagination, {}) })] }));
543
+ };
544
+
545
+ const DensityToggleButton = ({ text, icon = jsxRuntime.jsx(ai.AiOutlineColumnWidth, {}), }) => {
546
+ const { table } = useDataTable();
547
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { variant: "ghost", "aria-label": "Toggle Density", icon: icon, onClick: () => {
548
+ table.toggleDensity();
549
+ } })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", "aria-label": "Toggle Density", onClick: () => {
550
+ table.toggleDensity();
551
+ }, children: text }))] }));
552
+ };
553
+
554
+ const ColumnOrderChanger = ({ columns }) => {
555
+ const [order, setOrder] = react.useState([]);
556
+ const [originalOrder, setOriginalOrder] = react.useState([]);
557
+ const { table } = useDataTable();
558
+ const handleChangeOrder = (startIndex, endIndex) => {
559
+ const newOrder = Array.from(order);
560
+ const [removed] = newOrder.splice(startIndex, 1);
561
+ newOrder.splice(endIndex, 0, removed);
562
+ setOrder(newOrder);
563
+ };
564
+ react.useEffect(() => {
565
+ setOrder(columns);
566
+ }, [columns]);
567
+ react.useEffect(() => {
568
+ if (originalOrder.length > 0) {
569
+ return;
570
+ }
571
+ if (columns.length <= 0) {
572
+ return;
573
+ }
574
+ setOriginalOrder(columns);
575
+ }, [columns]);
576
+ return (jsxRuntime.jsxs(react$1.Flex, { gap: "0.5rem", flexFlow: "column", children: [jsxRuntime.jsx(react$1.Flex, { gap: "0.5rem", flexFlow: "column", children: order.map((columnId, index) => (jsxRuntime.jsxs(react$1.Flex, { gap: "0.5rem", alignItems: "center", justifyContent: "space-between", children: [jsxRuntime.jsx(react$1.IconButton, { onClick: () => {
577
+ const prevIndex = index - 1;
578
+ if (prevIndex >= 0) {
579
+ handleChangeOrder(index, prevIndex);
580
+ }
581
+ }, disabled: index === 0, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowUpward, {}) }), table
582
+ .getAllFlatColumns()
583
+ .filter((column) => {
584
+ return column.id === columnId;
585
+ })
586
+ .map((column) => {
587
+ const displayName = column.columnDef.meta === undefined
588
+ ? column.id
589
+ : column.columnDef.meta.displayName;
590
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: displayName });
591
+ }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => {
592
+ const nextIndex = index + 1;
593
+ if (nextIndex < order.length) {
594
+ handleChangeOrder(index, nextIndex);
595
+ }
596
+ }, disabled: index === order.length - 1, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowDownward, {}) })] }, columnId))) }), jsxRuntime.jsxs(react$1.Flex, { gap: "0.25rem", children: [jsxRuntime.jsx(react$1.Button, { onClick: () => {
597
+ table.setColumnOrder(order);
598
+ }, children: "Apply" }), jsxRuntime.jsx(react$1.Button, { onClick: () => {
599
+ table.setColumnOrder(originalOrder);
600
+ }, children: "Reset" })] })] }));
601
+ };
602
+ const TableOrderer = () => {
603
+ const { table } = useDataTable();
604
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
605
+ };
606
+
607
+ const EditOrderButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineMoveDown, {}), title = "Change Order", }) => {
608
+ const orderModal = react$1.useDisclosure();
609
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: orderModal.onOpen, "aria-label": "change order" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: orderModal.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: orderModal.isOpen, onClose: orderModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { padding: "0 0 1rem 0", children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsx(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: jsxRuntime.jsx(TableOrderer, {}) }) })] })] })] }));
610
+ };
611
+
612
+ const ResetSortingButton = ({ text = "Reset Sorting", }) => {
613
+ const { table } = useDataTable();
614
+ return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
615
+ table.resetSorting();
616
+ }, children: text }));
617
+ };
618
+
619
+ const TableSorter = () => {
620
+ const { table } = useDataTable();
621
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: headerGroup.headers.map((header) => {
622
+ const displayName = header.column.columnDef.meta === undefined
623
+ ? header.column.id
624
+ : header.column.columnDef.meta.displayName;
625
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: header.column.getCanSort() && (jsxRuntime.jsxs(react$1.Flex, { alignItems: "center", gap: "0.5rem", padding: "0.5rem", children: [jsxRuntime.jsx(react$1.Text, { children: displayName }), jsxRuntime.jsxs(react$1.Button, { variant: "ghost", onClick: (e) => {
626
+ header.column.toggleSorting();
627
+ }, children: [header.column.getIsSorted() === false && (
628
+ // <Text>To No sort</Text>
629
+ jsxRuntime.jsx(icons.UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
630
+ // <Text>To asc</Text>
631
+ jsxRuntime.jsx(icons.ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
632
+ // <Text>To desc</Text>
633
+ jsxRuntime.jsx(icons.ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsxRuntime.jsx(react$1.Button, { onClick: (e) => {
634
+ header.column.clearSorting();
635
+ }, children: jsxRuntime.jsx(icons.CloseIcon, {}) }))] })) }));
636
+ }) }))) }));
637
+ };
638
+
639
+ const EditSortingButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineSort, {}), title = "Edit Sorting", }) => {
640
+ const sortingModal = react$1.useDisclosure();
641
+ return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!text === false && (jsxRuntime.jsx(react$1.IconButton, { icon: icon, variant: "ghost", onClick: sortingModal.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: icon, variant: "ghost", onClick: sortingModal.onOpen, children: text })), jsxRuntime.jsxs(react$1.Modal, { isOpen: sortingModal.isOpen, onClose: sortingModal.onClose, size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react$1.ModalOverlay, {}), jsxRuntime.jsxs(react$1.ModalContent, { padding: "0 0 1rem 0", children: [jsxRuntime.jsx(react$1.ModalHeader, { children: title }), jsxRuntime.jsx(react$1.ModalCloseButton, {}), jsxRuntime.jsx(react$1.ModalBody, { children: jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(TableSorter, {}), jsxRuntime.jsx(ResetSortingButton, {})] }) })] })] })] }));
642
+ };
643
+
644
+ const ResetSelectionButton = ({ text = "Reset Selection", }) => {
645
+ const { table } = useDataTable();
646
+ return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
647
+ table.resetRowSelection();
648
+ }, children: text }));
649
+ };
650
+
651
+ const TableCardContainer = ({ children, ...props }) => {
652
+ return (jsxRuntime.jsx(react$1.Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
653
+ };
654
+
655
+ const TableCards = ({}) => {
656
+ const { table } = react.useContext(TableContext);
657
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getRowModel().rows.map((row) => {
658
+ return (jsxRuntime.jsx(react$1.Card, { children: jsxRuntime.jsxs(react$1.CardBody, { display: "flex", flexFlow: "column", gap: "0.5rem", children: [jsxRuntime.jsx(react$1.Checkbox, { isChecked: row.getIsSelected(),
659
+ disabled: !row.getCanSelect(),
660
+ // indeterminate: row.getIsSomeSelected(),
661
+ onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
662
+ return (jsxRuntime.jsx(react$1.Box, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }));
663
+ })] }) }, crypto.randomUUID()));
664
+ }) }));
665
+ };
666
+
667
+ const TableComponentRenderer = ({ render = () => {
668
+ throw Error("Not Implemented");
669
+ }, }) => {
670
+ const { table } = useDataTable();
671
+ return render(table);
672
+ };
673
+
658
674
  const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText, clearAllText, }) => {
659
675
  const { table } = react.useContext(TableContext);
660
676
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!selectAllText === false && (jsxRuntime.jsx(react$1.IconButton, { icon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
@@ -680,6 +696,7 @@ const TextCell = ({ label, noOfLines = [1], padding = "0rem", children, tooltipP
680
696
 
681
697
  exports.DataTable = DataTable;
682
698
  exports.DataTableServer = DataTableServer;
699
+ exports.DefaultTable = DefaultTable;
683
700
  exports.DensityToggleButton = DensityToggleButton;
684
701
  exports.EditFilterButton = EditFilterButton;
685
702
  exports.EditOrderButton = EditOrderButton;
@@ -690,10 +707,12 @@ exports.PageSizeControl = PageSizeControl;
690
707
  exports.ResetFilteringButton = ResetFilteringButton;
691
708
  exports.ResetSelectionButton = ResetSelectionButton;
692
709
  exports.ResetSortingButton = ResetSortingButton;
710
+ exports.RowCountText = RowCountText;
693
711
  exports.Table = Table;
694
712
  exports.TableBody = TableBody;
695
713
  exports.TableCardContainer = TableCardContainer;
696
714
  exports.TableCards = TableCards;
715
+ exports.TableComponentRenderer = TableComponentRenderer;
697
716
  exports.TableFilter = TableFilter;
698
717
  exports.TableFooter = TableFooter;
699
718
  exports.TableHeader = TableHeader;
package/dist/index.mjs CHANGED
@@ -1,14 +1,14 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
1
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, flexRender } from '@tanstack/react-table';
3
3
  import { createContext, useState, useEffect, useContext } from 'react';
4
4
  import { rankItem } from '@tanstack/match-sorter-utils';
5
5
  import axios from 'axios';
6
- import { IconButton, Button, Box, Text, Input, useDisclosure, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Flex, ModalFooter, Switch, Menu, MenuButton, MenuList, MenuItem, Table as Table$1, FormLabel, Checkbox, Grid, Card, CardBody, Tfoot, Tr as Tr$1, Th, Thead, Portal, ButtonGroup, Icon, Tooltip } from '@chakra-ui/react';
7
- import { AiOutlineColumnWidth } from 'react-icons/ai';
8
- import { MdFilterAlt, MdArrowUpward, MdArrowDownward, MdOutlineMoveDown, MdOutlineSort, MdFilterListAlt, MdPushPin, MdCancel, MdSort, MdFirstPage, MdArrowBack, MdArrowForward, MdLastPage, MdOutlineChecklist, MdClear } from 'react-icons/md';
9
- import { UpDownIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon } from '@chakra-ui/icons';
6
+ import { Button, Box, Text, Input, useDisclosure, IconButton, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Flex, ModalFooter, Switch, InputGroup, InputLeftElement, Icon, Menu, MenuButton, MenuList, MenuItem, Table as Table$1, FormLabel, Checkbox, Tfoot, Tr as Tr$1, Th, Thead, Portal, ButtonGroup, Grid, Card, CardBody, Tooltip } from '@chakra-ui/react';
7
+ import { MdFilterAlt, MdSearch, MdFilterListAlt, MdPushPin, MdCancel, MdSort, MdFirstPage, MdArrowBack, MdArrowForward, MdLastPage, MdOutlineViewColumn, MdArrowUpward, MdArrowDownward, MdOutlineMoveDown, MdOutlineSort, MdOutlineChecklist, MdClear } from 'react-icons/md';
10
8
  import { IoMdEye, IoMdClose, IoMdCheckbox } from 'react-icons/io';
9
+ import { ChevronDownIcon, ChevronUpIcon, UpDownIcon, CloseIcon } from '@chakra-ui/icons';
11
10
  import { Tbody, Tr, Td } from '@chakra-ui/table';
11
+ import { AiOutlineColumnWidth } from 'react-icons/ai';
12
12
 
13
13
  const TableContext = createContext({
14
14
  table: {},
@@ -295,27 +295,18 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
295
295
  }, children: children }));
296
296
  };
297
297
 
298
- const DensityToggleButton = ({ text, icon = jsx(AiOutlineColumnWidth, {}), }) => {
299
- const { table } = useContext(TableContext);
300
- return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { variant: "ghost", "aria-label": "Toggle Density", icon: icon, onClick: () => {
301
- table.toggleDensity();
302
- } })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", "aria-label": "Toggle Density", onClick: () => {
303
- table.toggleDensity();
304
- }, children: text }))] }));
298
+ const useDataTable = () => {
299
+ const { table, refreshData, globalFilter, setGlobalFilter, loading } = useContext(TableContext);
300
+ return { table, refreshData, globalFilter, setGlobalFilter, loading };
305
301
  };
306
302
 
307
303
  const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
308
- const { table } = useContext(TableContext);
304
+ const { table } = useDataTable();
309
305
  return (jsx(Button, { onClick: () => {
310
306
  table.resetColumnFilters();
311
307
  }, children: text }));
312
308
  };
313
309
 
314
- const useDataTable = () => {
315
- const { table, refreshData, globalFilter, setGlobalFilter, loading } = useContext(TableContext);
316
- return { table, refreshData, globalFilter, setGlobalFilter, loading };
317
- };
318
-
319
310
  const TableFilter = () => {
320
311
  const { table } = useDataTable();
321
312
  return (jsx(Fragment, { children: table.getLeafHeaders().map((header) => {
@@ -330,99 +321,9 @@ const TableFilter = () => {
330
321
  }) }));
331
322
  };
332
323
 
333
- const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsx(MdFilterAlt, {}), }) => {
324
+ const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsx(MdFilterAlt, {}), ...props }) => {
334
325
  const filterModal = useDisclosure();
335
- return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: filterModal.onOpen, "aria-label": "filter" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: filterModal.onOpen, children: text })), jsxs(Modal, { isOpen: filterModal.isOpen, onClose: filterModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsxs(Flex, { flexFlow: "column", gap: "1rem", children: [jsx(TableFilter, {}), jsx(ResetFilteringButton, { text: resetText })] }) }), jsx(ModalFooter, { children: jsx(Button, { onClick: filterModal.onClose, children: closeText }) })] })] })] }));
336
- };
337
-
338
- const ColumnOrderChanger = ({ columns }) => {
339
- const [order, setOrder] = useState([]);
340
- const [originalOrder, setOriginalOrder] = useState([]);
341
- const { table } = useDataTable();
342
- const handleChangeOrder = (startIndex, endIndex) => {
343
- const newOrder = Array.from(order);
344
- const [removed] = newOrder.splice(startIndex, 1);
345
- newOrder.splice(endIndex, 0, removed);
346
- setOrder(newOrder);
347
- };
348
- useEffect(() => {
349
- setOrder(columns);
350
- }, [columns]);
351
- useEffect(() => {
352
- if (originalOrder.length > 0) {
353
- return;
354
- }
355
- if (columns.length <= 0) {
356
- return;
357
- }
358
- setOriginalOrder(columns);
359
- }, [columns]);
360
- return (jsxs(Flex, { gap: "0.5rem", flexFlow: "column", children: [jsx(Flex, { gap: "0.5rem", flexFlow: "column", children: order.map((columnId, index) => (jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifyContent: "space-between", children: [jsx(IconButton, { onClick: () => {
361
- const prevIndex = index - 1;
362
- if (prevIndex >= 0) {
363
- handleChangeOrder(index, prevIndex);
364
- }
365
- }, disabled: index === 0, "aria-label": "", children: jsx(MdArrowUpward, {}) }), table
366
- .getAllFlatColumns()
367
- .filter((column) => {
368
- return column.id === columnId;
369
- })
370
- .map((column) => {
371
- const displayName = column.columnDef.meta === undefined
372
- ? column.id
373
- : column.columnDef.meta.displayName;
374
- return jsx(Fragment, { children: displayName });
375
- }), jsx(IconButton, { onClick: () => {
376
- const nextIndex = index + 1;
377
- if (nextIndex < order.length) {
378
- handleChangeOrder(index, nextIndex);
379
- }
380
- }, disabled: index === order.length - 1, "aria-label": "", children: jsx(MdArrowDownward, {}) })] }, columnId))) }), jsxs(Flex, { gap: "0.25rem", children: [jsx(Button, { onClick: () => {
381
- table.setColumnOrder(order);
382
- }, children: "Apply" }), jsx(Button, { onClick: () => {
383
- table.setColumnOrder(originalOrder);
384
- }, children: "Reset" })] })] }));
385
- };
386
- const TableOrderer = () => {
387
- const { table } = useDataTable();
388
- return (jsx(Fragment, { children: jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
389
- };
390
-
391
- const EditOrderButton = ({ text, icon = jsx(MdOutlineMoveDown, {}), title = "Change Order", }) => {
392
- const orderModal = useDisclosure();
393
- return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: orderModal.onOpen, "aria-label": "change order" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: orderModal.onOpen, children: text })), jsxs(Modal, { isOpen: orderModal.isOpen, onClose: orderModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { padding: "0 0 1rem 0", children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: jsx(TableOrderer, {}) }) })] })] })] }));
394
- };
395
-
396
- const ResetSortingButton = ({ text = "Reset Sorting", }) => {
397
- const { table } = useContext(TableContext);
398
- return (jsx(Button, { onClick: () => {
399
- table.resetSorting();
400
- }, children: text }));
401
- };
402
-
403
- const TableSorter = () => {
404
- const { table } = useDataTable();
405
- return (jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsx(Fragment, { children: headerGroup.headers.map((header) => {
406
- const displayName = header.column.columnDef.meta === undefined
407
- ? header.column.id
408
- : header.column.columnDef.meta.displayName;
409
- return (jsx(Fragment, { children: header.column.getCanSort() && (jsxs(Flex, { alignItems: "center", gap: "0.5rem", padding: "0.5rem", children: [jsx(Text, { children: displayName }), jsxs(Button, { variant: "ghost", onClick: (e) => {
410
- header.column.toggleSorting();
411
- }, children: [header.column.getIsSorted() === false && (
412
- // <Text>To No sort</Text>
413
- jsx(UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
414
- // <Text>To asc</Text>
415
- jsx(ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
416
- // <Text>To desc</Text>
417
- jsx(ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsx(Button, { onClick: (e) => {
418
- header.column.clearSorting();
419
- }, children: jsx(CloseIcon, {}) }))] })) }));
420
- }) }))) }));
421
- };
422
-
423
- const EditSortingButton = ({ text, icon = jsx(MdOutlineSort, {}), title = "Edit Sorting", }) => {
424
- const sortingModal = useDisclosure();
425
- return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: sortingModal.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: sortingModal.onOpen, children: text })), jsxs(Modal, { isOpen: sortingModal.isOpen, onClose: sortingModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { padding: "0 0 1rem 0", children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(TableSorter, {}), jsx(ResetSortingButton, {})] }) })] })] })] }));
326
+ return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: filterModal.onOpen, "aria-label": "filter", ...props })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: filterModal.onOpen, ...props, children: text })), jsxs(Modal, { isOpen: filterModal.isOpen, onClose: filterModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsxs(Flex, { flexFlow: "column", gap: "1rem", children: [jsx(TableFilter, {}), jsx(ResetFilteringButton, { text: resetText })] }) }), jsx(ModalFooter, { children: jsx(Button, { onClick: filterModal.onClose, children: closeText }) })] })] })] }));
426
327
  };
427
328
 
428
329
  const TableViewer = () => {
@@ -440,25 +341,23 @@ const EditViewButton = ({ text, icon = jsx(IoMdEye, {}), title = "Edit View", })
440
341
  return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: viewModel.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: viewModel.onOpen, children: text })), jsxs(Modal, { isOpen: viewModel.isOpen, onClose: viewModel.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { padding: "0 0 1rem 0", children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsx(TableViewer, {}) })] })] })] }));
441
342
  };
442
343
 
443
- const GlobalFilter = () => {
344
+ const GlobalFilter = ({ icon = MdSearch }) => {
444
345
  const { globalFilter, setGlobalFilter } = useDataTable();
445
- return (jsx(Input, { value: globalFilter, onChange: (e) => {
446
- setGlobalFilter(e.target.value);
447
- } }));
346
+ return (jsx(Fragment, { children: jsx(Box, { children: jsxs(InputGroup, { children: [jsx(InputLeftElement, { pointerEvents: "none", children: jsx(Icon, { as: icon, color: "gray.300" }) }), jsx(Input, { value: globalFilter, onChange: (e) => {
347
+ setGlobalFilter(e.target.value);
348
+ } })] }) }) }));
448
349
  };
449
350
 
450
351
  const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
451
- const { table } = useContext(TableContext);
352
+ const { table } = useDataTable();
452
353
  return (jsx(Fragment, { children: jsxs(Menu, { children: [jsx(MenuButton, { as: Button, variant: "ghost", rightIcon: jsx(ChevronDownIcon, {}), gap: "0.5rem", children: table.getState().pagination.pageSize }), jsx(MenuList, { children: pageSizes.map((pageSize) => (jsx(MenuItem, { onClick: () => {
453
354
  table.setPageSize(Number(pageSize));
454
355
  }, children: pageSize }))) })] }) }));
455
356
  };
456
357
 
457
- const ResetSelectionButton = ({ text = "Reset Selection", }) => {
358
+ const RowCountText = () => {
458
359
  const { table } = useContext(TableContext);
459
- return (jsx(Button, { onClick: () => {
460
- table.resetRowSelection();
461
- }, children: text }));
360
+ return jsx(Text, { children: table.getRowCount() });
462
361
  };
463
362
 
464
363
  const Table = ({ children, showLoading = false, loadingComponent = jsx(Fragment, { children: "Loading..." }), ...props }) => {
@@ -518,22 +417,6 @@ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gr
518
417
  onChange: row.getToggleSelectedHandler() }) }))] }));
519
418
  };
520
419
 
521
- const TableCardContainer = ({ children, ...props }) => {
522
- return (jsx(Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
523
- };
524
-
525
- const TableCards = ({}) => {
526
- const { table } = useContext(TableContext);
527
- return (jsx(Fragment, { children: table.getRowModel().rows.map((row) => {
528
- return (jsx(Card, { children: jsxs(CardBody, { display: "flex", flexFlow: "column", gap: "0.5rem", children: [jsx(Checkbox, { isChecked: row.getIsSelected(),
529
- disabled: !row.getCanSelect(),
530
- // indeterminate: row.getIsSomeSelected(),
531
- onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
532
- return (jsx(Box, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }));
533
- })] }) }, crypto.randomUUID()));
534
- }) }));
535
- };
536
-
537
420
  const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
538
421
  const table = useDataTable().table;
539
422
  const SELECTION_BOX_WIDTH = 20;
@@ -653,6 +536,139 @@ const TablePagination = ({}) => {
653
536
  return (jsxs(ButtonGroup, { isAttached: true, children: [jsx(IconButton, { icon: jsx(MdFirstPage, {}), onClick: () => firstPage(), isDisabled: !getCanPreviousPage(), "aria-label": "first-page", variant: "ghost" }), jsx(IconButton, { icon: jsx(MdArrowBack, {}), onClick: () => previousPage(), isDisabled: !getCanPreviousPage(), "aria-label": "previous-page", variant: "ghost" }), jsx(Button, { variant: "ghost", onClick: () => { }, disabled: !getCanPreviousPage(), children: getState().pagination.pageIndex + 1 }), jsx(IconButton, { onClick: () => nextPage(), isDisabled: !getCanNextPage(), "aria-label": "next-page", variant: "ghost", children: jsx(MdArrowForward, {}) }), jsx(IconButton, { onClick: () => lastPage(), isDisabled: !getCanNextPage(), "aria-label": "last-page", variant: "ghost", children: jsx(MdLastPage, {}) })] }));
654
537
  };
655
538
 
539
+ const DefaultTable = ({ totalText = "Total:", showFilter = false }) => {
540
+ return (jsxs(Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", children: [jsxs(Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsx(Box, { children: jsx(EditViewButton, { text: "View", icon: jsx(MdOutlineViewColumn, {}) }) }), jsx(Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxs(Fragment, { children: [jsx(GlobalFilter, {}), jsx(EditFilterButton, { text: "Advanced Filter" })] })) })] }), jsx(Flex, { overflow: "auto", gridColumn: "1 / span 2", justifyContent: "center", children: jsxs(Table, { variant: "striped", alignSelf: "center", children: [jsx(TableHeader, { canResize: true }), jsx(TableBody, {}), jsx(TableFooter, {})] }) }), jsxs(Flex, { gap: "1rem", alignItems: "center", children: [jsx(PageSizeControl, { pageSizes: [25, 50] }), jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: totalText }), jsx(RowCountText, {})] })] }), jsx(Box, { justifySelf: "end", children: jsx(TablePagination, {}) })] }));
541
+ };
542
+
543
+ const DensityToggleButton = ({ text, icon = jsx(AiOutlineColumnWidth, {}), }) => {
544
+ const { table } = useDataTable();
545
+ return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { variant: "ghost", "aria-label": "Toggle Density", icon: icon, onClick: () => {
546
+ table.toggleDensity();
547
+ } })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", "aria-label": "Toggle Density", onClick: () => {
548
+ table.toggleDensity();
549
+ }, children: text }))] }));
550
+ };
551
+
552
+ const ColumnOrderChanger = ({ columns }) => {
553
+ const [order, setOrder] = useState([]);
554
+ const [originalOrder, setOriginalOrder] = useState([]);
555
+ const { table } = useDataTable();
556
+ const handleChangeOrder = (startIndex, endIndex) => {
557
+ const newOrder = Array.from(order);
558
+ const [removed] = newOrder.splice(startIndex, 1);
559
+ newOrder.splice(endIndex, 0, removed);
560
+ setOrder(newOrder);
561
+ };
562
+ useEffect(() => {
563
+ setOrder(columns);
564
+ }, [columns]);
565
+ useEffect(() => {
566
+ if (originalOrder.length > 0) {
567
+ return;
568
+ }
569
+ if (columns.length <= 0) {
570
+ return;
571
+ }
572
+ setOriginalOrder(columns);
573
+ }, [columns]);
574
+ return (jsxs(Flex, { gap: "0.5rem", flexFlow: "column", children: [jsx(Flex, { gap: "0.5rem", flexFlow: "column", children: order.map((columnId, index) => (jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifyContent: "space-between", children: [jsx(IconButton, { onClick: () => {
575
+ const prevIndex = index - 1;
576
+ if (prevIndex >= 0) {
577
+ handleChangeOrder(index, prevIndex);
578
+ }
579
+ }, disabled: index === 0, "aria-label": "", children: jsx(MdArrowUpward, {}) }), table
580
+ .getAllFlatColumns()
581
+ .filter((column) => {
582
+ return column.id === columnId;
583
+ })
584
+ .map((column) => {
585
+ const displayName = column.columnDef.meta === undefined
586
+ ? column.id
587
+ : column.columnDef.meta.displayName;
588
+ return jsx(Fragment, { children: displayName });
589
+ }), jsx(IconButton, { onClick: () => {
590
+ const nextIndex = index + 1;
591
+ if (nextIndex < order.length) {
592
+ handleChangeOrder(index, nextIndex);
593
+ }
594
+ }, disabled: index === order.length - 1, "aria-label": "", children: jsx(MdArrowDownward, {}) })] }, columnId))) }), jsxs(Flex, { gap: "0.25rem", children: [jsx(Button, { onClick: () => {
595
+ table.setColumnOrder(order);
596
+ }, children: "Apply" }), jsx(Button, { onClick: () => {
597
+ table.setColumnOrder(originalOrder);
598
+ }, children: "Reset" })] })] }));
599
+ };
600
+ const TableOrderer = () => {
601
+ const { table } = useDataTable();
602
+ return (jsx(Fragment, { children: jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
603
+ };
604
+
605
+ const EditOrderButton = ({ text, icon = jsx(MdOutlineMoveDown, {}), title = "Change Order", }) => {
606
+ const orderModal = useDisclosure();
607
+ return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: orderModal.onOpen, "aria-label": "change order" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: orderModal.onOpen, children: text })), jsxs(Modal, { isOpen: orderModal.isOpen, onClose: orderModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { padding: "0 0 1rem 0", children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: jsx(TableOrderer, {}) }) })] })] })] }));
608
+ };
609
+
610
+ const ResetSortingButton = ({ text = "Reset Sorting", }) => {
611
+ const { table } = useDataTable();
612
+ return (jsx(Button, { onClick: () => {
613
+ table.resetSorting();
614
+ }, children: text }));
615
+ };
616
+
617
+ const TableSorter = () => {
618
+ const { table } = useDataTable();
619
+ return (jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsx(Fragment, { children: headerGroup.headers.map((header) => {
620
+ const displayName = header.column.columnDef.meta === undefined
621
+ ? header.column.id
622
+ : header.column.columnDef.meta.displayName;
623
+ return (jsx(Fragment, { children: header.column.getCanSort() && (jsxs(Flex, { alignItems: "center", gap: "0.5rem", padding: "0.5rem", children: [jsx(Text, { children: displayName }), jsxs(Button, { variant: "ghost", onClick: (e) => {
624
+ header.column.toggleSorting();
625
+ }, children: [header.column.getIsSorted() === false && (
626
+ // <Text>To No sort</Text>
627
+ jsx(UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
628
+ // <Text>To asc</Text>
629
+ jsx(ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
630
+ // <Text>To desc</Text>
631
+ jsx(ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsx(Button, { onClick: (e) => {
632
+ header.column.clearSorting();
633
+ }, children: jsx(CloseIcon, {}) }))] })) }));
634
+ }) }))) }));
635
+ };
636
+
637
+ const EditSortingButton = ({ text, icon = jsx(MdOutlineSort, {}), title = "Edit Sorting", }) => {
638
+ const sortingModal = useDisclosure();
639
+ return (jsxs(Fragment, { children: [!!text === false && (jsx(IconButton, { icon: icon, variant: "ghost", onClick: sortingModal.onOpen, "aria-label": "change sorting" })), !!text !== false && (jsx(Button, { leftIcon: icon, variant: "ghost", onClick: sortingModal.onOpen, children: text })), jsxs(Modal, { isOpen: sortingModal.isOpen, onClose: sortingModal.onClose, size: ["full", "full", "md", "md"], children: [jsx(ModalOverlay, {}), jsxs(ModalContent, { padding: "0 0 1rem 0", children: [jsx(ModalHeader, { children: title }), jsx(ModalCloseButton, {}), jsx(ModalBody, { children: jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(TableSorter, {}), jsx(ResetSortingButton, {})] }) })] })] })] }));
640
+ };
641
+
642
+ const ResetSelectionButton = ({ text = "Reset Selection", }) => {
643
+ const { table } = useDataTable();
644
+ return (jsx(Button, { onClick: () => {
645
+ table.resetRowSelection();
646
+ }, children: text }));
647
+ };
648
+
649
+ const TableCardContainer = ({ children, ...props }) => {
650
+ return (jsx(Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
651
+ };
652
+
653
+ const TableCards = ({}) => {
654
+ const { table } = useContext(TableContext);
655
+ return (jsx(Fragment, { children: table.getRowModel().rows.map((row) => {
656
+ return (jsx(Card, { children: jsxs(CardBody, { display: "flex", flexFlow: "column", gap: "0.5rem", children: [jsx(Checkbox, { isChecked: row.getIsSelected(),
657
+ disabled: !row.getCanSelect(),
658
+ // indeterminate: row.getIsSomeSelected(),
659
+ onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
660
+ return (jsx(Box, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }));
661
+ })] }) }, crypto.randomUUID()));
662
+ }) }));
663
+ };
664
+
665
+ const TableComponentRenderer = ({ render = () => {
666
+ throw Error("Not Implemented");
667
+ }, }) => {
668
+ const { table } = useDataTable();
669
+ return render(table);
670
+ };
671
+
656
672
  const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText, clearAllText, }) => {
657
673
  const { table } = useContext(TableContext);
658
674
  return (jsxs(Fragment, { children: [!!selectAllText === false && (jsx(IconButton, { icon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
@@ -676,4 +692,4 @@ const TextCell = ({ label, noOfLines = [1], padding = "0rem", children, tooltipP
676
692
  return (jsx(Box, { padding: padding, children: jsx(Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", wordBreak: "break-all", noOfLines: noOfLines, ...props, children: children }) }));
677
693
  };
678
694
 
679
- export { DataTable, DataTableServer, DensityToggleButton, EditFilterButton, EditOrderButton, EditSortingButton, EditViewButton, GlobalFilter, PageSizeControl, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, Table, TableBody, TableCardContainer, TableCards, TableFilter, TableFooter, TableHeader, TableOrderer, TablePagination, TableSelector, TableSorter, TableViewer, TextCell, useDataFromUrl, useDataTable };
695
+ export { DataTable, DataTableServer, DefaultTable, DensityToggleButton, EditFilterButton, EditOrderButton, EditSortingButton, EditViewButton, GlobalFilter, PageSizeControl, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponentRenderer, TableFilter, TableFooter, TableHeader, TableOrderer, TablePagination, TableSelector, TableSorter, TableViewer, TextCell, useDataFromUrl, useDataTable };
@@ -0,0 +1,4 @@
1
+ export declare const DefaultTable: ({ totalText, showFilter }: {
2
+ totalText?: string | undefined;
3
+ showFilter?: boolean | undefined;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -6,4 +6,4 @@ export interface EditFilterButtonProps {
6
6
  resetText?: string;
7
7
  icon?: React.ReactElement;
8
8
  }
9
- export declare const EditFilterButton: ({ text, title, closeText, resetText, icon, }: EditFilterButtonProps) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const EditFilterButton: ({ text, title, closeText, resetText, icon, ...props }: EditFilterButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1,3 @@
1
- export declare const GlobalFilter: () => import("react/jsx-runtime").JSX.Element;
1
+ export declare const GlobalFilter: ({ icon }: {
2
+ icon?: import("react-icons/lib").IconType | undefined;
3
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const RowCountText: () => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
+ import { TableProps as ChakraTableProps } from "@chakra-ui/react";
1
2
  import { ReactNode } from "react";
2
- export interface TableProps {
3
+ export interface TableProps extends ChakraTableProps {
3
4
  showLoading?: boolean;
4
5
  loadingComponent?: JSX.Element;
5
6
  children: ReactNode;
@@ -0,0 +1,6 @@
1
+ import { Table } from "@tanstack/react-table";
2
+ import React from "react";
3
+ export interface TableRendererProps<TData> {
4
+ render: (render: Table<TData>) => React.ReactElement;
5
+ }
6
+ export declare const TableComponentRenderer: <TData>({ render, }: TableRendererProps<TData>) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
@@ -1,5 +1,6 @@
1
1
  export * from "./components/DataTable";
2
2
  export * from "./components/DataTableServer";
3
+ export * from "./components/DefaultTable";
3
4
  export * from "./components/DensityToggleButton";
4
5
  export * from "./components/EditFilterButton";
5
6
  export * from "./components/EditOrderButton";
@@ -10,10 +11,12 @@ export * from "./components/PageSizeControl";
10
11
  export * from "./components/ResetFilteringButton";
11
12
  export * from "./components/ResetSelectionButton";
12
13
  export * from "./components/ResetSortingButton";
14
+ export * from "./components/RowCountText";
13
15
  export * from "./components/Table";
14
16
  export * from "./components/TableBody";
15
17
  export * from "./components/TableCardContainer";
16
18
  export * from "./components/TableCards";
19
+ export * from "./components/TableComponentRenderer";
17
20
  export * from "./components/TableFilter";
18
21
  export * from "./components/TableFooter";
19
22
  export * from "./components/TableHeader";
@@ -22,6 +25,7 @@ export * from "./components/TablePagination";
22
25
  export * from "./components/TableSelector";
23
26
  export * from "./components/TableSorter";
24
27
  export * from "./components/TableViewer";
28
+ export * from "./components/TableComponentRenderer";
25
29
  export * from "./components/TextCell";
26
30
  export * from "./components/useDataFromUrl";
27
31
  export * from "./components/useDataTable";
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "repository": "https://github.com/bsol-oss/react-datatable5.git",
9
- "homepage": "https://github.com/bsol-oss/react-datatabl5#react-datatable5",
9
+ "homepage": "https://github.com/bsol-oss/react-datatable5#react-datatable5",
10
10
  "author": "screw123",
11
11
  "license": "MIT",
12
12
  "keywords": [