@bsol-oss/react-datatable5 1.0.38 → 1.0.40
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 +63 -14
- package/dist/index.js +174 -149
- package/dist/index.mjs +174 -152
- package/dist/types/components/DefaultTable.d.ts +3 -0
- package/dist/types/components/DensityToggleButton.d.ts +6 -1
- package/dist/types/components/EditFilterButton.d.ts +9 -1
- package/dist/types/components/EditOrderButton.d.ts +7 -1
- package/dist/types/components/EditSortingButton.d.ts +7 -1
- package/dist/types/components/EditViewButton.d.ts +7 -1
- package/dist/types/components/GlobalFilter.d.ts +3 -1
- package/dist/types/components/ResetFilteringButton.d.ts +4 -1
- package/dist/types/components/ResetSelectionButton.d.ts +4 -1
- package/dist/types/components/ResetSortingButton.d.ts +4 -1
- package/dist/types/components/RowCountText.d.ts +1 -0
- package/dist/types/components/SelectAllRowsToggle.d.ts +8 -1
- package/dist/types/components/Table.d.ts +2 -1
- package/dist/types/components/TableComponentRenderer.d.ts +6 -0
- package/dist/types/index.d.ts +3 -0
- package/package.json +1 -1
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
|
-
import { ReactNode } from 'react';
|
|
6
|
-
import
|
|
5
|
+
import React$1, { ReactNode } from '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,30 +93,73 @@ 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
|
|
|
95
|
-
declare const
|
|
96
|
+
declare const DefaultTable: ({ totalText }: {
|
|
97
|
+
totalText?: string | undefined;
|
|
98
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
96
99
|
|
|
97
|
-
|
|
100
|
+
interface DensityToggleButtonProps {
|
|
101
|
+
icon?: React$1.ReactElement;
|
|
102
|
+
text?: string;
|
|
103
|
+
}
|
|
104
|
+
declare const DensityToggleButton: ({ text, icon, }: DensityToggleButtonProps) => react_jsx_runtime.JSX.Element;
|
|
105
|
+
|
|
106
|
+
interface EditFilterButtonProps {
|
|
107
|
+
text?: string;
|
|
108
|
+
title?: string;
|
|
109
|
+
closeText?: string;
|
|
110
|
+
resetText?: string;
|
|
111
|
+
icon?: React.ReactElement;
|
|
112
|
+
}
|
|
113
|
+
declare const EditFilterButton: ({ text, title, closeText, resetText, icon, ...props }: EditFilterButtonProps) => react_jsx_runtime.JSX.Element;
|
|
98
114
|
|
|
99
|
-
|
|
115
|
+
interface EditOrderButtonProps {
|
|
116
|
+
title?: string;
|
|
117
|
+
icon?: React$1.ReactElement;
|
|
118
|
+
text?: string;
|
|
119
|
+
}
|
|
120
|
+
declare const EditOrderButton: ({ text, icon, title, }: EditOrderButtonProps) => react_jsx_runtime.JSX.Element;
|
|
100
121
|
|
|
101
|
-
|
|
122
|
+
interface EditSortingButtonProps {
|
|
123
|
+
title?: string;
|
|
124
|
+
icon?: React.ReactElement;
|
|
125
|
+
text?: string;
|
|
126
|
+
}
|
|
127
|
+
declare const EditSortingButton: ({ text, icon, title, }: EditSortingButtonProps) => react_jsx_runtime.JSX.Element;
|
|
102
128
|
|
|
103
|
-
|
|
129
|
+
interface EditViewButtonProps {
|
|
130
|
+
text?: string;
|
|
131
|
+
icon?: React$1.ReactElement;
|
|
132
|
+
title?: string;
|
|
133
|
+
}
|
|
134
|
+
declare const EditViewButton: ({ text, icon, title, }: EditViewButtonProps) => react_jsx_runtime.JSX.Element;
|
|
104
135
|
|
|
105
|
-
declare const GlobalFilter: (
|
|
136
|
+
declare const GlobalFilter: ({ icon }: {
|
|
137
|
+
icon?: react_icons_lib.IconType | undefined;
|
|
138
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
106
139
|
|
|
107
140
|
interface PageSizeControlProps {
|
|
108
141
|
pageSizes?: number[];
|
|
109
142
|
}
|
|
110
143
|
declare const PageSizeControl: ({ pageSizes, }: PageSizeControlProps) => react_jsx_runtime.JSX.Element;
|
|
111
144
|
|
|
112
|
-
|
|
145
|
+
interface ResetFilteringButtonProps {
|
|
146
|
+
text?: string;
|
|
147
|
+
}
|
|
148
|
+
declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => react_jsx_runtime.JSX.Element;
|
|
149
|
+
|
|
150
|
+
interface ResetSelectionButtonProps {
|
|
151
|
+
text?: string;
|
|
152
|
+
}
|
|
153
|
+
declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => react_jsx_runtime.JSX.Element;
|
|
113
154
|
|
|
114
|
-
|
|
155
|
+
interface ResetSortingButtonProps {
|
|
156
|
+
text?: string;
|
|
157
|
+
}
|
|
158
|
+
declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => react_jsx_runtime.JSX.Element;
|
|
115
159
|
|
|
116
|
-
declare const
|
|
160
|
+
declare const RowCountText: () => react_jsx_runtime.JSX.Element;
|
|
117
161
|
|
|
118
|
-
interface TableProps {
|
|
162
|
+
interface TableProps extends TableProps$1 {
|
|
119
163
|
showLoading?: boolean;
|
|
120
164
|
loadingComponent?: JSX.Element;
|
|
121
165
|
children: ReactNode;
|
|
@@ -148,6 +192,11 @@ interface TableCardsProps {
|
|
|
148
192
|
}
|
|
149
193
|
declare const TableCards: ({}: TableCardsProps) => react_jsx_runtime.JSX.Element;
|
|
150
194
|
|
|
195
|
+
interface TableRendererProps<TData> {
|
|
196
|
+
render: (render: Table$1<TData>) => React$1.ReactElement;
|
|
197
|
+
}
|
|
198
|
+
declare const TableComponentRenderer: <TData>({ render, }: TableRendererProps<TData>) => React$1.ReactElement<any, string | React$1.JSXElementConstructor<any>>;
|
|
199
|
+
|
|
151
200
|
declare const TableFilter: () => react_jsx_runtime.JSX.Element;
|
|
152
201
|
|
|
153
202
|
interface TableFooterProps {
|
|
@@ -209,4 +258,4 @@ declare const useDataTable: () => {
|
|
|
209
258
|
loading: boolean;
|
|
210
259
|
};
|
|
211
260
|
|
|
212
|
-
export { type DataResponse, DataTable, type DataTableProps, DataTableServer, type DataTableServerProps, DensityToggleButton, EditFilterButton, EditOrderButton, EditSortingButton, EditViewButton, GlobalFilter, PageSizeControl, type PageSizeControlProps, type PaginationProps, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, 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 };
|
|
261
|
+
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: {},
|
|
@@ -129,7 +129,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
129
129
|
columnOrder,
|
|
130
130
|
globalFilter,
|
|
131
131
|
density: densityState,
|
|
132
|
-
rowSelection
|
|
132
|
+
rowSelection,
|
|
133
133
|
},
|
|
134
134
|
onColumnOrderChange: (state) => {
|
|
135
135
|
setColumnOrder(state);
|
|
@@ -166,7 +166,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
166
166
|
},
|
|
167
167
|
globalFilter: globalFilter,
|
|
168
168
|
setGlobalFilter: setGlobalFilter,
|
|
169
|
-
loading: false
|
|
169
|
+
loading: false,
|
|
170
170
|
}, children: children }));
|
|
171
171
|
};
|
|
172
172
|
|
|
@@ -297,23 +297,16 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
|
|
|
297
297
|
}, children: children }));
|
|
298
298
|
};
|
|
299
299
|
|
|
300
|
-
const
|
|
301
|
-
const { table } = react.useContext(TableContext);
|
|
302
|
-
return
|
|
303
|
-
table.toggleDensity();
|
|
304
|
-
} }) }));
|
|
300
|
+
const useDataTable = () => {
|
|
301
|
+
const { table, refreshData, globalFilter, setGlobalFilter, loading } = react.useContext(TableContext);
|
|
302
|
+
return { table, refreshData, globalFilter, setGlobalFilter, loading };
|
|
305
303
|
};
|
|
306
304
|
|
|
307
|
-
const ResetFilteringButton = () => {
|
|
308
|
-
const { table } =
|
|
305
|
+
const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
306
|
+
const { table } = useDataTable();
|
|
309
307
|
return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
|
|
310
308
|
table.resetColumnFilters();
|
|
311
|
-
}, children:
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
const useDataTable = () => {
|
|
315
|
-
const { table, refreshData, globalFilter, setGlobalFilter, loading } = react.useContext(TableContext);
|
|
316
|
-
return { table, refreshData, globalFilter, setGlobalFilter, loading };
|
|
309
|
+
}, children: text }));
|
|
317
310
|
};
|
|
318
311
|
|
|
319
312
|
const TableFilter = () => {
|
|
@@ -330,96 +323,9 @@ const TableFilter = () => {
|
|
|
330
323
|
}) }));
|
|
331
324
|
};
|
|
332
325
|
|
|
333
|
-
const EditFilterButton = () => {
|
|
334
|
-
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
const ColumnOrderChanger = ({ columns }) => {
|
|
338
|
-
const [order, setOrder] = react.useState([]);
|
|
339
|
-
const [originalOrder, setOriginalOrder] = react.useState([]);
|
|
340
|
-
const { table } = useDataTable();
|
|
341
|
-
const handleChangeOrder = (startIndex, endIndex) => {
|
|
342
|
-
const newOrder = Array.from(order);
|
|
343
|
-
const [removed] = newOrder.splice(startIndex, 1);
|
|
344
|
-
newOrder.splice(endIndex, 0, removed);
|
|
345
|
-
setOrder(newOrder);
|
|
346
|
-
};
|
|
347
|
-
react.useEffect(() => {
|
|
348
|
-
setOrder(columns);
|
|
349
|
-
}, [columns]);
|
|
350
|
-
react.useEffect(() => {
|
|
351
|
-
if (originalOrder.length > 0) {
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
if (columns.length <= 0) {
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
setOriginalOrder(columns);
|
|
358
|
-
}, [columns]);
|
|
359
|
-
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: () => {
|
|
360
|
-
const prevIndex = index - 1;
|
|
361
|
-
if (prevIndex >= 0) {
|
|
362
|
-
handleChangeOrder(index, prevIndex);
|
|
363
|
-
}
|
|
364
|
-
}, disabled: index === 0, "aria-label": "", children: jsxRuntime.jsx(md.MdArrowUpward, {}) }), table
|
|
365
|
-
.getAllFlatColumns()
|
|
366
|
-
.filter((column) => {
|
|
367
|
-
return column.id === columnId;
|
|
368
|
-
})
|
|
369
|
-
.map((column) => {
|
|
370
|
-
const displayName = column.columnDef.meta === undefined
|
|
371
|
-
? column.id
|
|
372
|
-
: column.columnDef.meta.displayName;
|
|
373
|
-
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: displayName });
|
|
374
|
-
}), jsxRuntime.jsx(react$1.IconButton, { onClick: () => {
|
|
375
|
-
const nextIndex = index + 1;
|
|
376
|
-
if (nextIndex < order.length) {
|
|
377
|
-
handleChangeOrder(index, nextIndex);
|
|
378
|
-
}
|
|
379
|
-
}, 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: () => {
|
|
380
|
-
table.setColumnOrder(order);
|
|
381
|
-
}, children: "Apply" }), jsxRuntime.jsx(react$1.Button, { onClick: () => {
|
|
382
|
-
table.setColumnOrder(originalOrder);
|
|
383
|
-
}, children: "Reset" })] })] }));
|
|
384
|
-
};
|
|
385
|
-
const TableOrderer = () => {
|
|
386
|
-
const { table } = useDataTable();
|
|
387
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
|
|
388
|
-
};
|
|
389
|
-
|
|
390
|
-
const EditOrderButton = () => {
|
|
391
|
-
return (jsxRuntime.jsxs(react$1.Popover, { placement: "auto", children: [jsxRuntime.jsx(react$1.Tooltip, { label: "Change Order", children: jsxRuntime.jsx(react$1.PopoverTrigger, { children: jsxRuntime.jsx(react$1.IconButton, { "aria-label": "filter", variant: "ghost", icon: jsxRuntime.jsx(md.MdOutlineMoveDown, {}) }) }) }), jsxRuntime.jsxs(react$1.PopoverContent, { width: "auto", children: [jsxRuntime.jsx(react$1.PopoverArrow, {}), jsxRuntime.jsx(react$1.PopoverBody, { children: jsxRuntime.jsx(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: jsxRuntime.jsx(TableOrderer, {}) }) })] })] }));
|
|
392
|
-
};
|
|
393
|
-
|
|
394
|
-
const ResetSortingButton = () => {
|
|
395
|
-
const { table } = react.useContext(TableContext);
|
|
396
|
-
return (jsxRuntime.jsx(react$1.Button, { onClick: () => {
|
|
397
|
-
table.resetSorting();
|
|
398
|
-
}, children: "Reset Sorting" }));
|
|
399
|
-
};
|
|
400
|
-
|
|
401
|
-
const TableSorter = () => {
|
|
402
|
-
const { table } = useDataTable();
|
|
403
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsxRuntime.jsx(jsxRuntime.Fragment, { children: headerGroup.headers.map((header) => {
|
|
404
|
-
const displayName = header.column.columnDef.meta === undefined
|
|
405
|
-
? header.column.id
|
|
406
|
-
: header.column.columnDef.meta.displayName;
|
|
407
|
-
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) => {
|
|
408
|
-
header.column.toggleSorting();
|
|
409
|
-
}, children: [header.column.getIsSorted() === false && (
|
|
410
|
-
// <Text>To No sort</Text>
|
|
411
|
-
jsxRuntime.jsx(icons.UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
|
|
412
|
-
// <Text>To asc</Text>
|
|
413
|
-
jsxRuntime.jsx(icons.ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
|
|
414
|
-
// <Text>To desc</Text>
|
|
415
|
-
jsxRuntime.jsx(icons.ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsxRuntime.jsx(react$1.Button, { onClick: (e) => {
|
|
416
|
-
header.column.clearSorting();
|
|
417
|
-
}, children: jsxRuntime.jsx(icons.CloseIcon, {}) }))] })) }));
|
|
418
|
-
}) }))) }));
|
|
419
|
-
};
|
|
420
|
-
|
|
421
|
-
const EditSortingButton = () => {
|
|
422
|
-
return (jsxRuntime.jsxs(react$1.Popover, { placement: "auto", children: [jsxRuntime.jsx(react$1.Tooltip, { label: "Filter", children: jsxRuntime.jsx(react$1.PopoverTrigger, { children: jsxRuntime.jsx(react$1.IconButton, { "aria-label": "filter", variant: "ghost", icon: jsxRuntime.jsx(md.MdOutlineSort, {}) }) }) }), jsxRuntime.jsxs(react$1.PopoverContent, { width: "auto", children: [jsxRuntime.jsx(react$1.PopoverArrow, {}), jsxRuntime.jsx(react$1.PopoverBody, { children: jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(TableSorter, {}), jsxRuntime.jsx(ResetSortingButton, {})] }) })] })] }));
|
|
326
|
+
const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsxRuntime.jsx(md.MdFilterAlt, {}), ...props }) => {
|
|
327
|
+
const filterModal = react$1.useDisclosure();
|
|
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 }) })] })] })] }));
|
|
423
329
|
};
|
|
424
330
|
|
|
425
331
|
const TableViewer = () => {
|
|
@@ -432,37 +338,28 @@ const TableViewer = () => {
|
|
|
432
338
|
}) }));
|
|
433
339
|
};
|
|
434
340
|
|
|
435
|
-
const EditViewButton = () => {
|
|
436
|
-
|
|
341
|
+
const EditViewButton = ({ text, icon = jsxRuntime.jsx(io.IoMdEye, {}), title = "Edit View", }) => {
|
|
342
|
+
const viewModel = react$1.useDisclosure();
|
|
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, {}) })] })] })] }));
|
|
437
344
|
};
|
|
438
345
|
|
|
439
|
-
const GlobalFilter = () => {
|
|
346
|
+
const GlobalFilter = ({ icon = md.MdSearch }) => {
|
|
440
347
|
const { globalFilter, setGlobalFilter } = useDataTable();
|
|
441
|
-
return (jsxRuntime.jsx(react$1.Input, { value: globalFilter, onChange: (e) => {
|
|
442
|
-
|
|
443
|
-
|
|
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
|
+
} })] }) }) }));
|
|
444
351
|
};
|
|
445
352
|
|
|
446
353
|
const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
|
|
447
|
-
const { table } =
|
|
354
|
+
const { table } = useDataTable();
|
|
448
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: () => {
|
|
449
356
|
table.setPageSize(Number(pageSize));
|
|
450
357
|
}, children: pageSize }))) })] }) }));
|
|
451
358
|
};
|
|
452
359
|
|
|
453
|
-
const
|
|
360
|
+
const RowCountText = () => {
|
|
454
361
|
const { table } = react.useContext(TableContext);
|
|
455
|
-
return
|
|
456
|
-
table.resetRowSelection();
|
|
457
|
-
}, children: "Reset Selection" }));
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
const Table = ({ children, showLoading = false, loadingComponent = jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Loading..." }), ...props }) => {
|
|
461
|
-
const { table, loading } = useDataTable();
|
|
462
|
-
if (showLoading) {
|
|
463
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [loading && loadingComponent, !loading && (jsxRuntime.jsx(react$1.Table, { width: table.getCenterTotalSize(), overflowX: "scroll", ...props, children: children }))] }));
|
|
464
|
-
}
|
|
465
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(react$1.Table, { width: table.getCenterTotalSize(), overflowX: "scroll", ...props, children: children }) }));
|
|
362
|
+
return jsxRuntime.jsx(react$1.Text, { children: table.getRowCount() });
|
|
466
363
|
};
|
|
467
364
|
|
|
468
365
|
const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
|
|
@@ -514,22 +411,6 @@ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gr
|
|
|
514
411
|
onChange: row.getToggleSelectedHandler() }) }))] }));
|
|
515
412
|
};
|
|
516
413
|
|
|
517
|
-
const TableCardContainer = ({ children, ...props }) => {
|
|
518
|
-
return (jsxRuntime.jsx(react$1.Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
|
|
519
|
-
};
|
|
520
|
-
|
|
521
|
-
const TableCards = ({}) => {
|
|
522
|
-
const { table } = react.useContext(TableContext);
|
|
523
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: table.getRowModel().rows.map((row) => {
|
|
524
|
-
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(),
|
|
525
|
-
disabled: !row.getCanSelect(),
|
|
526
|
-
// indeterminate: row.getIsSomeSelected(),
|
|
527
|
-
onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
|
|
528
|
-
return (jsxRuntime.jsx(react$1.Box, { children: reactTable.flexRender(cell.column.columnDef.cell, cell.getContext()) }));
|
|
529
|
-
})] }) }, crypto.randomUUID()));
|
|
530
|
-
}) }));
|
|
531
|
-
};
|
|
532
|
-
|
|
533
414
|
const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
|
|
534
415
|
const table = useDataTable().table;
|
|
535
416
|
const SELECTION_BOX_WIDTH = 20;
|
|
@@ -628,9 +509,7 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
|
|
|
628
509
|
// styling resize and pinning end
|
|
629
510
|
display: "grid", children: [jsxRuntime.jsxs(react$1.Menu, { children: [jsxRuntime.jsx(react$1.MenuButton, { as: react$1.Box, padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", _hover: { backgroundColor: "gray.100" }, children: jsxRuntime.jsxs(react$1.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
630
511
|
? null
|
|
631
|
-
: reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react$1.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
|
|
632
|
-
// <UpDownIcon />
|
|
633
|
-
jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(icons.ChevronUpIcon, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(icons.ChevronDownIcon, {}))] })) }), jsxRuntime.jsx(react$1.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }), jsxRuntime.jsx(react$1.Portal, { children: jsxRuntime.jsxs(react$1.MenuList, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(react$1.MenuItem, { icon: jsxRuntime.jsx(md.MdPushPin, {}), onClick: () => {
|
|
512
|
+
: reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react$1.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$1.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }), jsxRuntime.jsx(react$1.Portal, { children: jsxRuntime.jsxs(react$1.MenuList, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(react$1.MenuItem, { icon: jsxRuntime.jsx(md.MdPushPin, {}), onClick: () => {
|
|
634
513
|
header.column.pin("left");
|
|
635
514
|
}, children: "Pin Column" })), header.column.getIsPinned() && (jsxRuntime.jsx(react$1.MenuItem, { icon: jsxRuntime.jsx(md.MdCancel, {}), onClick: () => {
|
|
636
515
|
header.column.pin(false);
|
|
@@ -651,11 +530,154 @@ const TablePagination = ({}) => {
|
|
|
651
530
|
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, {}) })] }));
|
|
652
531
|
};
|
|
653
532
|
|
|
654
|
-
const
|
|
533
|
+
const Table = ({ children, showLoading = false, loadingComponent = jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Loading..." }), ...props }) => {
|
|
534
|
+
const { table, loading } = useDataTable();
|
|
535
|
+
if (showLoading) {
|
|
536
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [loading && loadingComponent, !loading && (jsxRuntime.jsx(react$1.Table, { width: table.getCenterTotalSize(), overflowX: "auto", ...props, children: children }))] }));
|
|
537
|
+
}
|
|
538
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(react$1.Table, { width: table.getCenterTotalSize(), overflowX: "auto", ...props, children: children }) }));
|
|
539
|
+
};
|
|
540
|
+
|
|
541
|
+
const DefaultTable = ({ totalText = "Total:" }) => {
|
|
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" }) }), jsxRuntime.jsxs(react$1.Flex, { gap: "1rem", justifySelf: "end", 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
|
+
|
|
674
|
+
const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText, clearAllText, }) => {
|
|
655
675
|
const { table } = react.useContext(TableContext);
|
|
656
|
-
return (jsxRuntime.
|
|
657
|
-
|
|
658
|
-
|
|
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) => {
|
|
677
|
+
table.getToggleAllRowsSelectedHandler()(event);
|
|
678
|
+
} })), !!selectAllText !== false && (jsxRuntime.jsx(react$1.Button, { leftIcon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", onClick: (event) => {
|
|
679
|
+
table.getToggleAllRowsSelectedHandler()(event);
|
|
680
|
+
}, children: table.getIsAllRowsSelected() ? clearAllText : selectAllText }))] }));
|
|
659
681
|
};
|
|
660
682
|
|
|
661
683
|
const TableSelector = () => {
|
|
@@ -674,6 +696,7 @@ const TextCell = ({ label, noOfLines = [1], padding = "0rem", children, tooltipP
|
|
|
674
696
|
|
|
675
697
|
exports.DataTable = DataTable;
|
|
676
698
|
exports.DataTableServer = DataTableServer;
|
|
699
|
+
exports.DefaultTable = DefaultTable;
|
|
677
700
|
exports.DensityToggleButton = DensityToggleButton;
|
|
678
701
|
exports.EditFilterButton = EditFilterButton;
|
|
679
702
|
exports.EditOrderButton = EditOrderButton;
|
|
@@ -684,10 +707,12 @@ exports.PageSizeControl = PageSizeControl;
|
|
|
684
707
|
exports.ResetFilteringButton = ResetFilteringButton;
|
|
685
708
|
exports.ResetSelectionButton = ResetSelectionButton;
|
|
686
709
|
exports.ResetSortingButton = ResetSortingButton;
|
|
710
|
+
exports.RowCountText = RowCountText;
|
|
687
711
|
exports.Table = Table;
|
|
688
712
|
exports.TableBody = TableBody;
|
|
689
713
|
exports.TableCardContainer = TableCardContainer;
|
|
690
714
|
exports.TableCards = TableCards;
|
|
715
|
+
exports.TableComponentRenderer = TableComponentRenderer;
|
|
691
716
|
exports.TableFilter = TableFilter;
|
|
692
717
|
exports.TableFooter = TableFooter;
|
|
693
718
|
exports.TableHeader = TableHeader;
|
package/dist/index.mjs
CHANGED
|
@@ -3,12 +3,12 @@ import { makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, get
|
|
|
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 {
|
|
7
|
-
import {
|
|
8
|
-
import { MdFilterAlt, MdArrowUpward, MdArrowDownward, MdOutlineMoveDown, MdOutlineSort, MdFilterListAlt, MdPushPin, MdCancel, MdSort, MdFirstPage, MdArrowBack, MdArrowForward, MdLastPage, MdClear, MdOutlineChecklist } 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, FormLabel, Checkbox, Tfoot, Tr as Tr$1, Th, Thead, Portal, ButtonGroup, Table as Table$1, Grid, Card, CardBody, Tooltip } from '@chakra-ui/react';
|
|
7
|
+
import { MdFilterAlt, MdSearch, MdFilterListAlt, MdPushPin, MdCancel, MdSort, MdFirstPage, MdArrowBack, MdArrowForward, MdLastPage, 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: {},
|
|
@@ -127,7 +127,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
127
127
|
columnOrder,
|
|
128
128
|
globalFilter,
|
|
129
129
|
density: densityState,
|
|
130
|
-
rowSelection
|
|
130
|
+
rowSelection,
|
|
131
131
|
},
|
|
132
132
|
onColumnOrderChange: (state) => {
|
|
133
133
|
setColumnOrder(state);
|
|
@@ -164,7 +164,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
164
164
|
},
|
|
165
165
|
globalFilter: globalFilter,
|
|
166
166
|
setGlobalFilter: setGlobalFilter,
|
|
167
|
-
loading: false
|
|
167
|
+
loading: false,
|
|
168
168
|
}, children: children }));
|
|
169
169
|
};
|
|
170
170
|
|
|
@@ -295,23 +295,16 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
|
|
|
295
295
|
}, children: children }));
|
|
296
296
|
};
|
|
297
297
|
|
|
298
|
-
const
|
|
299
|
-
const { table } = useContext(TableContext);
|
|
300
|
-
return
|
|
301
|
-
table.toggleDensity();
|
|
302
|
-
} }) }));
|
|
298
|
+
const useDataTable = () => {
|
|
299
|
+
const { table, refreshData, globalFilter, setGlobalFilter, loading } = useContext(TableContext);
|
|
300
|
+
return { table, refreshData, globalFilter, setGlobalFilter, loading };
|
|
303
301
|
};
|
|
304
302
|
|
|
305
|
-
const ResetFilteringButton = () => {
|
|
306
|
-
const { table } =
|
|
303
|
+
const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
304
|
+
const { table } = useDataTable();
|
|
307
305
|
return (jsx(Button, { onClick: () => {
|
|
308
306
|
table.resetColumnFilters();
|
|
309
|
-
}, children:
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
const useDataTable = () => {
|
|
313
|
-
const { table, refreshData, globalFilter, setGlobalFilter, loading } = useContext(TableContext);
|
|
314
|
-
return { table, refreshData, globalFilter, setGlobalFilter, loading };
|
|
307
|
+
}, children: text }));
|
|
315
308
|
};
|
|
316
309
|
|
|
317
310
|
const TableFilter = () => {
|
|
@@ -328,96 +321,9 @@ const TableFilter = () => {
|
|
|
328
321
|
}) }));
|
|
329
322
|
};
|
|
330
323
|
|
|
331
|
-
const EditFilterButton = () => {
|
|
332
|
-
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
const ColumnOrderChanger = ({ columns }) => {
|
|
336
|
-
const [order, setOrder] = useState([]);
|
|
337
|
-
const [originalOrder, setOriginalOrder] = useState([]);
|
|
338
|
-
const { table } = useDataTable();
|
|
339
|
-
const handleChangeOrder = (startIndex, endIndex) => {
|
|
340
|
-
const newOrder = Array.from(order);
|
|
341
|
-
const [removed] = newOrder.splice(startIndex, 1);
|
|
342
|
-
newOrder.splice(endIndex, 0, removed);
|
|
343
|
-
setOrder(newOrder);
|
|
344
|
-
};
|
|
345
|
-
useEffect(() => {
|
|
346
|
-
setOrder(columns);
|
|
347
|
-
}, [columns]);
|
|
348
|
-
useEffect(() => {
|
|
349
|
-
if (originalOrder.length > 0) {
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
if (columns.length <= 0) {
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
setOriginalOrder(columns);
|
|
356
|
-
}, [columns]);
|
|
357
|
-
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: () => {
|
|
358
|
-
const prevIndex = index - 1;
|
|
359
|
-
if (prevIndex >= 0) {
|
|
360
|
-
handleChangeOrder(index, prevIndex);
|
|
361
|
-
}
|
|
362
|
-
}, disabled: index === 0, "aria-label": "", children: jsx(MdArrowUpward, {}) }), table
|
|
363
|
-
.getAllFlatColumns()
|
|
364
|
-
.filter((column) => {
|
|
365
|
-
return column.id === columnId;
|
|
366
|
-
})
|
|
367
|
-
.map((column) => {
|
|
368
|
-
const displayName = column.columnDef.meta === undefined
|
|
369
|
-
? column.id
|
|
370
|
-
: column.columnDef.meta.displayName;
|
|
371
|
-
return jsx(Fragment, { children: displayName });
|
|
372
|
-
}), jsx(IconButton, { onClick: () => {
|
|
373
|
-
const nextIndex = index + 1;
|
|
374
|
-
if (nextIndex < order.length) {
|
|
375
|
-
handleChangeOrder(index, nextIndex);
|
|
376
|
-
}
|
|
377
|
-
}, disabled: index === order.length - 1, "aria-label": "", children: jsx(MdArrowDownward, {}) })] }, columnId))) }), jsxs(Flex, { gap: "0.25rem", children: [jsx(Button, { onClick: () => {
|
|
378
|
-
table.setColumnOrder(order);
|
|
379
|
-
}, children: "Apply" }), jsx(Button, { onClick: () => {
|
|
380
|
-
table.setColumnOrder(originalOrder);
|
|
381
|
-
}, children: "Reset" })] })] }));
|
|
382
|
-
};
|
|
383
|
-
const TableOrderer = () => {
|
|
384
|
-
const { table } = useDataTable();
|
|
385
|
-
return (jsx(Fragment, { children: jsx(ColumnOrderChanger, { columns: table.getState().columnOrder }) }));
|
|
386
|
-
};
|
|
387
|
-
|
|
388
|
-
const EditOrderButton = () => {
|
|
389
|
-
return (jsxs(Popover, { placement: "auto", children: [jsx(Tooltip, { label: "Change Order", children: jsx(PopoverTrigger, { children: jsx(IconButton, { "aria-label": "filter", variant: "ghost", icon: jsx(MdOutlineMoveDown, {}) }) }) }), jsxs(PopoverContent, { width: "auto", children: [jsx(PopoverArrow, {}), jsx(PopoverBody, { children: jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: jsx(TableOrderer, {}) }) })] })] }));
|
|
390
|
-
};
|
|
391
|
-
|
|
392
|
-
const ResetSortingButton = () => {
|
|
393
|
-
const { table } = useContext(TableContext);
|
|
394
|
-
return (jsx(Button, { onClick: () => {
|
|
395
|
-
table.resetSorting();
|
|
396
|
-
}, children: "Reset Sorting" }));
|
|
397
|
-
};
|
|
398
|
-
|
|
399
|
-
const TableSorter = () => {
|
|
400
|
-
const { table } = useDataTable();
|
|
401
|
-
return (jsx(Fragment, { children: table.getHeaderGroups().map((headerGroup) => (jsx(Fragment, { children: headerGroup.headers.map((header) => {
|
|
402
|
-
const displayName = header.column.columnDef.meta === undefined
|
|
403
|
-
? header.column.id
|
|
404
|
-
: header.column.columnDef.meta.displayName;
|
|
405
|
-
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) => {
|
|
406
|
-
header.column.toggleSorting();
|
|
407
|
-
}, children: [header.column.getIsSorted() === false && (
|
|
408
|
-
// <Text>To No sort</Text>
|
|
409
|
-
jsx(UpDownIcon, {})), header.column.getIsSorted() === "asc" && (
|
|
410
|
-
// <Text>To asc</Text>
|
|
411
|
-
jsx(ChevronDownIcon, {})), header.column.getIsSorted() === "desc" && (
|
|
412
|
-
// <Text>To desc</Text>
|
|
413
|
-
jsx(ChevronUpIcon, {}))] }), header.column.getIsSorted() && (jsx(Button, { onClick: (e) => {
|
|
414
|
-
header.column.clearSorting();
|
|
415
|
-
}, children: jsx(CloseIcon, {}) }))] })) }));
|
|
416
|
-
}) }))) }));
|
|
417
|
-
};
|
|
418
|
-
|
|
419
|
-
const EditSortingButton = () => {
|
|
420
|
-
return (jsxs(Popover, { placement: "auto", children: [jsx(Tooltip, { label: "Filter", children: jsx(PopoverTrigger, { children: jsx(IconButton, { "aria-label": "filter", variant: "ghost", icon: jsx(MdOutlineSort, {}) }) }) }), jsxs(PopoverContent, { width: "auto", children: [jsx(PopoverArrow, {}), jsx(PopoverBody, { children: jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(TableSorter, {}), jsx(ResetSortingButton, {})] }) })] })] }));
|
|
324
|
+
const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", resetText = "Reset", icon = jsx(MdFilterAlt, {}), ...props }) => {
|
|
325
|
+
const filterModal = useDisclosure();
|
|
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 }) })] })] })] }));
|
|
421
327
|
};
|
|
422
328
|
|
|
423
329
|
const TableViewer = () => {
|
|
@@ -430,37 +336,28 @@ const TableViewer = () => {
|
|
|
430
336
|
}) }));
|
|
431
337
|
};
|
|
432
338
|
|
|
433
|
-
const EditViewButton = () => {
|
|
434
|
-
|
|
339
|
+
const EditViewButton = ({ text, icon = jsx(IoMdEye, {}), title = "Edit View", }) => {
|
|
340
|
+
const viewModel = useDisclosure();
|
|
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, {}) })] })] })] }));
|
|
435
342
|
};
|
|
436
343
|
|
|
437
|
-
const GlobalFilter = () => {
|
|
344
|
+
const GlobalFilter = ({ icon = MdSearch }) => {
|
|
438
345
|
const { globalFilter, setGlobalFilter } = useDataTable();
|
|
439
|
-
return (jsx(Input, { value: globalFilter, onChange: (e) => {
|
|
440
|
-
|
|
441
|
-
|
|
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
|
+
} })] }) }) }));
|
|
442
349
|
};
|
|
443
350
|
|
|
444
351
|
const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
|
|
445
|
-
const { table } =
|
|
352
|
+
const { table } = useDataTable();
|
|
446
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: () => {
|
|
447
354
|
table.setPageSize(Number(pageSize));
|
|
448
355
|
}, children: pageSize }))) })] }) }));
|
|
449
356
|
};
|
|
450
357
|
|
|
451
|
-
const
|
|
358
|
+
const RowCountText = () => {
|
|
452
359
|
const { table } = useContext(TableContext);
|
|
453
|
-
return
|
|
454
|
-
table.resetRowSelection();
|
|
455
|
-
}, children: "Reset Selection" }));
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
const Table = ({ children, showLoading = false, loadingComponent = jsx(Fragment, { children: "Loading..." }), ...props }) => {
|
|
459
|
-
const { table, loading } = useDataTable();
|
|
460
|
-
if (showLoading) {
|
|
461
|
-
return (jsxs(Fragment, { children: [loading && loadingComponent, !loading && (jsx(Table$1, { width: table.getCenterTotalSize(), overflowX: "scroll", ...props, children: children }))] }));
|
|
462
|
-
}
|
|
463
|
-
return (jsx(Fragment, { children: jsx(Table$1, { width: table.getCenterTotalSize(), overflowX: "scroll", ...props, children: children }) }));
|
|
360
|
+
return jsx(Text, { children: table.getRowCount() });
|
|
464
361
|
};
|
|
465
362
|
|
|
466
363
|
const TableBody = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
|
|
@@ -512,22 +409,6 @@ const TableRowSelector = ({ index, row, hoveredRow, pinnedBgColor = { light: "gr
|
|
|
512
409
|
onChange: row.getToggleSelectedHandler() }) }))] }));
|
|
513
410
|
};
|
|
514
411
|
|
|
515
|
-
const TableCardContainer = ({ children, ...props }) => {
|
|
516
|
-
return (jsx(Grid, { gridTemplateColumns: ["1fr", "1fr 1fr", "1fr 1fr 1fr"], gap: "0.5rem", ...props, children: children }));
|
|
517
|
-
};
|
|
518
|
-
|
|
519
|
-
const TableCards = ({}) => {
|
|
520
|
-
const { table } = useContext(TableContext);
|
|
521
|
-
return (jsx(Fragment, { children: table.getRowModel().rows.map((row) => {
|
|
522
|
-
return (jsx(Card, { children: jsxs(CardBody, { display: "flex", flexFlow: "column", gap: "0.5rem", children: [jsx(Checkbox, { isChecked: row.getIsSelected(),
|
|
523
|
-
disabled: !row.getCanSelect(),
|
|
524
|
-
// indeterminate: row.getIsSomeSelected(),
|
|
525
|
-
onChange: row.getToggleSelectedHandler() }), row.getVisibleCells().map((cell) => {
|
|
526
|
-
return (jsx(Box, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }));
|
|
527
|
-
})] }) }, crypto.randomUUID()));
|
|
528
|
-
}) }));
|
|
529
|
-
};
|
|
530
|
-
|
|
531
412
|
const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, }) => {
|
|
532
413
|
const table = useDataTable().table;
|
|
533
414
|
const SELECTION_BOX_WIDTH = 20;
|
|
@@ -626,9 +507,7 @@ const TableHeader = ({ canResize, pinnedBgColor = { light: "gray.50", dark: "gra
|
|
|
626
507
|
// styling resize and pinning end
|
|
627
508
|
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
|
|
628
509
|
? null
|
|
629
|
-
: flexRender(header.column.columnDef.header, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
|
|
630
|
-
// <UpDownIcon />
|
|
631
|
-
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: () => {
|
|
510
|
+
: 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: () => {
|
|
632
511
|
header.column.pin("left");
|
|
633
512
|
}, children: "Pin Column" })), header.column.getIsPinned() && (jsx(MenuItem, { icon: jsx(MdCancel, {}), onClick: () => {
|
|
634
513
|
header.column.pin(false);
|
|
@@ -649,11 +528,154 @@ const TablePagination = ({}) => {
|
|
|
649
528
|
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, {}) })] }));
|
|
650
529
|
};
|
|
651
530
|
|
|
652
|
-
const
|
|
531
|
+
const Table = ({ children, showLoading = false, loadingComponent = jsx(Fragment, { children: "Loading..." }), ...props }) => {
|
|
532
|
+
const { table, loading } = useDataTable();
|
|
533
|
+
if (showLoading) {
|
|
534
|
+
return (jsxs(Fragment, { children: [loading && loadingComponent, !loading && (jsx(Table$1, { width: table.getCenterTotalSize(), overflowX: "auto", ...props, children: children }))] }));
|
|
535
|
+
}
|
|
536
|
+
return (jsx(Fragment, { children: jsx(Table$1, { width: table.getCenterTotalSize(), overflowX: "auto", ...props, children: children }) }));
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
const DefaultTable = ({ totalText = "Total:" }) => {
|
|
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" }) }), jsxs(Flex, { gap: "1rem", justifySelf: "end", 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
|
+
|
|
672
|
+
const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText, clearAllText, }) => {
|
|
653
673
|
const { table } = useContext(TableContext);
|
|
654
|
-
return (
|
|
655
|
-
|
|
656
|
-
|
|
674
|
+
return (jsxs(Fragment, { children: [!!selectAllText === false && (jsx(IconButton, { icon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
|
|
675
|
+
table.getToggleAllRowsSelectedHandler()(event);
|
|
676
|
+
} })), !!selectAllText !== false && (jsx(Button, { leftIcon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", onClick: (event) => {
|
|
677
|
+
table.getToggleAllRowsSelectedHandler()(event);
|
|
678
|
+
}, children: table.getIsAllRowsSelected() ? clearAllText : selectAllText }))] }));
|
|
657
679
|
};
|
|
658
680
|
|
|
659
681
|
const TableSelector = () => {
|
|
@@ -670,4 +692,4 @@ const TextCell = ({ label, noOfLines = [1], padding = "0rem", children, tooltipP
|
|
|
670
692
|
return (jsx(Box, { padding: padding, children: jsx(Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", wordBreak: "break-all", noOfLines: noOfLines, ...props, children: children }) }));
|
|
671
693
|
};
|
|
672
694
|
|
|
673
|
-
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 };
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface DensityToggleButtonProps {
|
|
3
|
+
icon?: React.ReactElement;
|
|
4
|
+
text?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const DensityToggleButton: ({ text, icon, }: DensityToggleButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface EditFilterButtonProps {
|
|
3
|
+
text?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
closeText?: string;
|
|
6
|
+
resetText?: string;
|
|
7
|
+
icon?: React.ReactElement;
|
|
8
|
+
}
|
|
9
|
+
export declare const EditFilterButton: ({ text, title, closeText, resetText, icon, ...props }: EditFilterButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface EditOrderButtonProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
icon?: React.ReactElement;
|
|
5
|
+
text?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const EditOrderButton: ({ text, icon, title, }: EditOrderButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface EditSortingButtonProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
icon?: React.ReactElement;
|
|
5
|
+
text?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const EditSortingButton: ({ text, icon, title, }: EditSortingButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface EditViewButtonProps {
|
|
3
|
+
text?: string;
|
|
4
|
+
icon?: React.ReactElement;
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const EditViewButton: ({ text, icon, title, }: EditViewButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ResetFilteringButtonProps {
|
|
2
|
+
text?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ResetSelectionButtonProps {
|
|
2
|
+
text?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface ResetSortingButtonProps {
|
|
2
|
+
text?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const RowCountText: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface SelectAllRowsToggleProps {
|
|
3
|
+
selectAllIcon: React.ReactElement;
|
|
4
|
+
clearAllIcon: React.ReactElement;
|
|
5
|
+
selectAllText: string;
|
|
6
|
+
clearAllText: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const SelectAllRowsToggle: ({ selectAllIcon, clearAllIcon, selectAllText, clearAllText, }: SelectAllRowsToggleProps) => 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>>;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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";
|