@bsol-oss/react-datatable5 9.1.0 → 10.0.0
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/README.md +3 -40
- package/dist/index.d.ts +20 -18
- package/dist/index.js +50 -31
- package/dist/index.mjs +55 -36
- package/dist/types/components/Controls/FilterDialog.d.ts +5 -0
- package/dist/types/components/Controls/Pagination.d.ts +1 -0
- package/dist/types/components/Controls/ViewDialog.d.ts +5 -0
- package/dist/types/components/DataTable/DataTable.d.ts +3 -1
- package/dist/types/components/DataTable/DataTableServer.d.ts +3 -1
- package/dist/types/components/DataTable/TableControls.d.ts +2 -2
- package/dist/types/components/DataTable/components/RecordDisplay.d.ts +4 -1
- package/dist/types/components/DataTable/context/DataTableContext.d.ts +2 -0
- package/dist/types/components/DataTable/useDataTable.d.ts +4 -1
- package/dist/types/components/DataTable/useDataTableServer.d.ts +1 -1
- package/dist/types/components/DataTable/utils/getColumns.d.ts +3 -1
- package/dist/types/index.d.ts +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# React Datatable
|
|
2
2
|
|
|
3
|
-
The datetable package is built on top of `@tanstack/react-table` and `chakra-ui` to create a
|
|
3
|
+
The datetable package is built on top of `@tanstack/react-table` and `chakra-ui` to create a datatable. This hook simplifies to initialize the state management for controlling the datatable, and it offers several predefined tables and controls in to enhance data visualization.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -23,22 +23,7 @@ const datatableServer = useDataTableServer({ url: "<some-url>" });
|
|
|
23
23
|
|
|
24
24
|
```tsx
|
|
25
25
|
<DataTable columns={columns} data={data} {...datatable}>
|
|
26
|
-
<
|
|
27
|
-
<TablePagination />
|
|
28
|
-
<EditViewButton />
|
|
29
|
-
<EditFilterButton />
|
|
30
|
-
<EditOrderButton />
|
|
31
|
-
<PageSizeControl />
|
|
32
|
-
<TableSelector />
|
|
33
|
-
<GlobalFilter />
|
|
34
|
-
</Flex>
|
|
35
|
-
<Table>
|
|
36
|
-
<TableHeader canResize />
|
|
37
|
-
<TableBody />
|
|
38
|
-
<TableFooter />
|
|
39
|
-
</Table>
|
|
40
|
-
<PageSizeControl />
|
|
41
|
-
<TablePagination />
|
|
26
|
+
<DataDisplay />
|
|
42
27
|
</DataTable>
|
|
43
28
|
```
|
|
44
29
|
|
|
@@ -46,29 +31,7 @@ const datatableServer = useDataTableServer({ url: "<some-url>" });
|
|
|
46
31
|
|
|
47
32
|
```tsx
|
|
48
33
|
<DataTableServer columns={columns} {...datatable}>
|
|
49
|
-
<
|
|
50
|
-
<TablePagination />
|
|
51
|
-
<EditViewButton />
|
|
52
|
-
<EditFilterButton />
|
|
53
|
-
<DensityToggleButton />
|
|
54
|
-
<EditOrderButton />
|
|
55
|
-
<PageSizeControl />
|
|
56
|
-
<TableSelector />
|
|
57
|
-
<GlobalFilter />
|
|
58
|
-
</Flex>
|
|
59
|
-
<Table>
|
|
60
|
-
<TableHeader canResize />
|
|
61
|
-
<TableBody />
|
|
62
|
-
<TableFooter />
|
|
63
|
-
</Table>
|
|
64
|
-
<Flex>
|
|
65
|
-
<TablePagination />
|
|
66
|
-
<EditViewButton />
|
|
67
|
-
<EditFilterButton />
|
|
68
|
-
<EditOrderButton />
|
|
69
|
-
<PageSizeControl />
|
|
70
|
-
<TableSelector />
|
|
71
|
-
</Flex>
|
|
34
|
+
<DataDisplay />
|
|
72
35
|
</DataTableServer>
|
|
73
36
|
```
|
|
74
37
|
|
package/dist/index.d.ts
CHANGED
|
@@ -22,13 +22,9 @@ interface DensityToggleButtonProps {
|
|
|
22
22
|
declare const DensityToggleButton: ({ text, icon, }: DensityToggleButtonProps) => react_jsx_runtime.JSX.Element;
|
|
23
23
|
|
|
24
24
|
interface EditFilterButtonProps {
|
|
25
|
-
text?: string;
|
|
26
|
-
title?: string;
|
|
27
|
-
closeText?: string;
|
|
28
|
-
resetText?: string;
|
|
29
25
|
icon?: React.ReactElement;
|
|
30
26
|
}
|
|
31
|
-
declare const
|
|
27
|
+
declare const FilterDialog: ({ icon, }: EditFilterButtonProps) => react_jsx_runtime.JSX.Element;
|
|
32
28
|
|
|
33
29
|
interface EditOrderButtonProps {
|
|
34
30
|
title?: string;
|
|
@@ -45,11 +41,9 @@ interface EditSortingButtonProps {
|
|
|
45
41
|
declare const EditSortingButton: ({ text, icon, title, }: EditSortingButtonProps) => react_jsx_runtime.JSX.Element;
|
|
46
42
|
|
|
47
43
|
interface EditViewButtonProps {
|
|
48
|
-
text?: string;
|
|
49
44
|
icon?: React__default.ReactElement;
|
|
50
|
-
title?: string;
|
|
51
45
|
}
|
|
52
|
-
declare const
|
|
46
|
+
declare const ViewDialog: ({ icon }: EditViewButtonProps) => react_jsx_runtime.JSX.Element;
|
|
53
47
|
|
|
54
48
|
interface PageSizeControlProps {
|
|
55
49
|
pageSizes?: number[];
|
|
@@ -73,7 +67,7 @@ declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => react_
|
|
|
73
67
|
|
|
74
68
|
declare const RowCountText: () => react_jsx_runtime.JSX.Element;
|
|
75
69
|
|
|
76
|
-
declare const
|
|
70
|
+
declare const Pagination: () => react_jsx_runtime.JSX.Element;
|
|
77
71
|
|
|
78
72
|
interface CardHeaderProps<TData> {
|
|
79
73
|
row: Row<TData>;
|
|
@@ -159,6 +153,7 @@ interface DataTableProps<TData = unknown> {
|
|
|
159
153
|
setColumnOrder: OnChangeFn<ColumnOrderState>;
|
|
160
154
|
setDensity: OnChangeFn<DensityState>;
|
|
161
155
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
156
|
+
translate: UseTranslationResponse<any, any>;
|
|
162
157
|
}
|
|
163
158
|
/**
|
|
164
159
|
* DataTable will create a context to hold all values to
|
|
@@ -170,7 +165,7 @@ interface DataTableProps<TData = unknown> {
|
|
|
170
165
|
*
|
|
171
166
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
172
167
|
*/
|
|
173
|
-
declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
|
|
168
|
+
declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, translate, children, }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
|
|
174
169
|
|
|
175
170
|
interface DataTableDefaultState {
|
|
176
171
|
sorting?: SortingState;
|
|
@@ -184,6 +179,7 @@ interface DataTableDefaultState {
|
|
|
184
179
|
}
|
|
185
180
|
interface UseDataTableProps {
|
|
186
181
|
default?: DataTableDefaultState;
|
|
182
|
+
keyPrefix?: string;
|
|
187
183
|
}
|
|
188
184
|
interface UseDataTableReturn {
|
|
189
185
|
sorting: SortingState;
|
|
@@ -202,8 +198,9 @@ interface UseDataTableReturn {
|
|
|
202
198
|
setColumnOrder: OnChangeFn<ColumnOrderState>;
|
|
203
199
|
setDensity: OnChangeFn<DensityState>;
|
|
204
200
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
201
|
+
translate: UseTranslationResponse<any, any>;
|
|
205
202
|
}
|
|
206
|
-
declare const useDataTable: ({ default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, }?: UseDataTableProps) => UseDataTableReturn;
|
|
203
|
+
declare const useDataTable: ({ default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, keyPrefix, }?: UseDataTableProps) => UseDataTableReturn;
|
|
207
204
|
|
|
208
205
|
interface UseDataTableServerProps extends UseDataTableProps {
|
|
209
206
|
/**
|
|
@@ -229,7 +226,7 @@ interface Result<T = unknown> {
|
|
|
229
226
|
interface DataResponse<T = unknown> extends Result<T> {
|
|
230
227
|
count: number;
|
|
231
228
|
}
|
|
232
|
-
declare const useDataTableServer: <TData>({ url, default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, }: UseDataTableServerProps) => UseDataTableServerReturn<TData>;
|
|
229
|
+
declare const useDataTableServer: <TData>({ url, default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, keyPrefix, }: UseDataTableServerProps) => UseDataTableServerReturn<TData>;
|
|
233
230
|
|
|
234
231
|
interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown>> {
|
|
235
232
|
children: ReactNode | ReactNode[];
|
|
@@ -262,6 +259,7 @@ interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown
|
|
|
262
259
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
263
260
|
query: UseQueryResult<TData>;
|
|
264
261
|
url: string;
|
|
262
|
+
translate: UseTranslationResponse<any, any>;
|
|
265
263
|
}
|
|
266
264
|
/**
|
|
267
265
|
* DataTableServer will create a context to hold all values to
|
|
@@ -274,7 +272,7 @@ interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown
|
|
|
274
272
|
*
|
|
275
273
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
276
274
|
*/
|
|
277
|
-
declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query,
|
|
275
|
+
declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }: DataTableServerProps<TData>): react_jsx_runtime.JSX.Element;
|
|
278
276
|
|
|
279
277
|
interface TableBodyProps {
|
|
280
278
|
pinnedBgColor?: {
|
|
@@ -301,7 +299,6 @@ interface TableControlsProps {
|
|
|
301
299
|
totalText?: string;
|
|
302
300
|
fitTableWidth?: boolean;
|
|
303
301
|
fitTableHeight?: boolean;
|
|
304
|
-
isMobile?: boolean;
|
|
305
302
|
children?: ReactNode;
|
|
306
303
|
showGlobalFilter?: boolean;
|
|
307
304
|
showFilter?: boolean;
|
|
@@ -311,12 +308,13 @@ interface TableControlsProps {
|
|
|
311
308
|
showPagination?: boolean;
|
|
312
309
|
showPageSizeControl?: boolean;
|
|
313
310
|
showPageCountText?: boolean;
|
|
311
|
+
showView?: boolean;
|
|
314
312
|
filterOptions?: string[];
|
|
315
313
|
extraItems?: ReactNode;
|
|
316
314
|
loading?: boolean;
|
|
317
315
|
hasError?: boolean;
|
|
318
316
|
}
|
|
319
|
-
declare const TableControls: ({
|
|
317
|
+
declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, }: TableControlsProps) => react_jsx_runtime.JSX.Element;
|
|
320
318
|
|
|
321
319
|
interface TableFooterProps {
|
|
322
320
|
pinnedBgColor?: {
|
|
@@ -420,6 +418,7 @@ interface DataTableContext<TData = unknown> {
|
|
|
420
418
|
globalFilter: string;
|
|
421
419
|
setGlobalFilter: OnChangeFn<string>;
|
|
422
420
|
type: "client" | "server";
|
|
421
|
+
translate: UseTranslationResponse<any, any>;
|
|
423
422
|
}
|
|
424
423
|
declare const DataTableContext: React$1.Context<DataTableContext<unknown>>;
|
|
425
424
|
|
|
@@ -433,9 +432,10 @@ interface GetColumnsConfigs<K extends RowData> {
|
|
|
433
432
|
[key in K as string]?: object;
|
|
434
433
|
};
|
|
435
434
|
defaultWidth?: number;
|
|
435
|
+
translate?: UseTranslationResponse<any, any>;
|
|
436
436
|
}
|
|
437
437
|
declare const widthSanityCheck: <K extends unknown>(widthList: number[], ignoreList: K[], properties: { [key in K as string]?: object | undefined; }) => void;
|
|
438
|
-
declare const getColumns: <TData extends unknown>({ schema, ignore, width, meta, defaultWidth, }: GetColumnsConfigs<TData>) => ColumnDef<TData>[];
|
|
438
|
+
declare const getColumns: <TData extends unknown>({ schema, ignore, width, meta, defaultWidth, translate, }: GetColumnsConfigs<TData>) => ColumnDef<TData>[];
|
|
439
439
|
|
|
440
440
|
interface EmptyStateProps {
|
|
441
441
|
title?: string;
|
|
@@ -537,8 +537,10 @@ interface RangeDatePickerProps extends Props, RangeCalendarProps {
|
|
|
537
537
|
interface RecordDisplayProps {
|
|
538
538
|
object: object | null;
|
|
539
539
|
boxProps?: BoxProps;
|
|
540
|
+
translate?: UseTranslationResponse<any, any>;
|
|
541
|
+
prefix?: string;
|
|
540
542
|
}
|
|
541
|
-
declare const RecordDisplay: ({ object, boxProps }: RecordDisplayProps) => react_jsx_runtime.JSX.Element;
|
|
543
|
+
declare const RecordDisplay: ({ object, boxProps, translate, prefix, }: RecordDisplayProps) => react_jsx_runtime.JSX.Element;
|
|
542
544
|
|
|
543
545
|
declare module "@tanstack/react-table" {
|
|
544
546
|
interface ColumnMeta<TData extends RowData, TValue> {
|
|
@@ -598,4 +600,4 @@ declare module "@tanstack/react-table" {
|
|
|
598
600
|
}
|
|
599
601
|
}
|
|
600
602
|
|
|
601
|
-
export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps,
|
|
603
|
+
export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, type EditFilterButtonProps, EditOrderButton, type EditOrderButtonProps, EditSortingButton, type EditSortingButtonProps, type EditViewButtonProps, EmptyState, type EmptyStateProps, ErrorAlert, type ErrorAlertProps, FilterDialog, FilterOptions, type FilterOptionsProps, Form, type FormProps, type GetColumnsConfigs, type GetDateColorProps, type GetMultiDatesProps, type GetRangeDatesProps, type GetStyleProps, type GetVariantProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, Pagination, type RangeCalendarProps, type RangeDatePickerProps, RecordDisplay, type RecordDisplayProps, ReloadButton, type ReloadButtonProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableControls, type TableControlsProps, TableFilter, TableFilterTags, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableLoadingComponent, type TableLoadingComponentProps, TableOrderer, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, type UseDataTableProps, type UseDataTableReturn, type UseDataTableServerProps, type UseDataTableServerReturn, type UseFormProps, ViewDialog, getColumns, getMultiDates, getRangeDates, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
|
package/dist/index.js
CHANGED
|
@@ -26,11 +26,11 @@ var reactQuery = require('@tanstack/react-query');
|
|
|
26
26
|
var io5 = require('react-icons/io5');
|
|
27
27
|
var gr = require('react-icons/gr');
|
|
28
28
|
var hi = require('react-icons/hi');
|
|
29
|
+
var reactI18next = require('react-i18next');
|
|
29
30
|
var axios = require('axios');
|
|
30
31
|
var reactHookForm = require('react-hook-form');
|
|
31
32
|
var dayjs = require('dayjs');
|
|
32
33
|
var ti = require('react-icons/ti');
|
|
33
|
-
var reactI18next = require('react-i18next');
|
|
34
34
|
|
|
35
35
|
function _interopNamespaceDefault(e) {
|
|
36
36
|
var n = Object.create(null);
|
|
@@ -56,6 +56,7 @@ const DataTableContext = React.createContext({
|
|
|
56
56
|
globalFilter: "",
|
|
57
57
|
setGlobalFilter: () => { },
|
|
58
58
|
type: "client",
|
|
59
|
+
translate: {},
|
|
59
60
|
});
|
|
60
61
|
|
|
61
62
|
const useDataTableContext = () => {
|
|
@@ -95,7 +96,7 @@ react.Dialog.Backdrop;
|
|
|
95
96
|
const DialogTitle = react.Dialog.Title;
|
|
96
97
|
react.Dialog.Description;
|
|
97
98
|
const DialogTrigger = react.Dialog.Trigger;
|
|
98
|
-
|
|
99
|
+
react.Dialog.ActionTrigger;
|
|
99
100
|
|
|
100
101
|
const Radio = React__namespace.forwardRef(function Radio(props, ref) {
|
|
101
102
|
const { children, inputProps, rootRef, ...rest } = props;
|
|
@@ -373,9 +374,10 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
|
373
374
|
}, children: text }));
|
|
374
375
|
};
|
|
375
376
|
|
|
376
|
-
const
|
|
377
|
+
const FilterDialog = ({ icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
|
|
377
378
|
const filterModal = react.useDisclosure();
|
|
378
|
-
|
|
379
|
+
const { translate } = useDataTableContext();
|
|
380
|
+
return (jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filterDialog.buttonText")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("filterDialog.title") }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, { text: translate.t("filterDialog.reset") }), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filterDialog.close") })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
379
381
|
};
|
|
380
382
|
|
|
381
383
|
const ColumnOrderChanger = ({ columns }) => {
|
|
@@ -2452,9 +2454,10 @@ const TableViewer = () => {
|
|
|
2452
2454
|
}) }));
|
|
2453
2455
|
};
|
|
2454
2456
|
|
|
2455
|
-
const
|
|
2457
|
+
const ViewDialog = ({ icon = jsxRuntime.jsx(io.IoMdEye, {}) }) => {
|
|
2456
2458
|
const viewModel = react.useDisclosure();
|
|
2457
|
-
|
|
2459
|
+
const { translate } = useDataTableContext();
|
|
2460
|
+
return (jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("viewDialog.buttonText")] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: translate.t("viewDialog.title") }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
|
|
2458
2461
|
};
|
|
2459
2462
|
|
|
2460
2463
|
const MenuContent = React__namespace.forwardRef(function MenuContent(props, ref) {
|
|
@@ -2490,9 +2493,9 @@ const MenuTrigger = react.Menu.Trigger;
|
|
|
2490
2493
|
|
|
2491
2494
|
const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
|
|
2492
2495
|
const { table } = useDataTableContext();
|
|
2493
|
-
return (jsxRuntime.
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
+
return (jsxRuntime.jsxs(MenuRoot, { children: [jsxRuntime.jsx(MenuTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { variant: "ghost", gap: "0.5rem", children: [table.getState().pagination.pageSize, " ", jsxRuntime.jsx(bi.BiDownArrow, {})] }) }), jsxRuntime.jsx(MenuContent, { children: pageSizes.map((pageSize) => (jsxRuntime.jsx(MenuItem, { value: `chakra-table-pageSize-${pageSize}`, onClick: () => {
|
|
2497
|
+
table.setPageSize(Number(pageSize));
|
|
2498
|
+
}, children: pageSize }, `chakra-table-pageSize-${pageSize}`))) })] }));
|
|
2496
2499
|
};
|
|
2497
2500
|
|
|
2498
2501
|
const ResetSelectionButton = ({ text = "Reset Selection", }) => {
|
|
@@ -2578,7 +2581,7 @@ const PaginationPageText = React__namespace.forwardRef(function PaginationPageTe
|
|
|
2578
2581
|
});
|
|
2579
2582
|
|
|
2580
2583
|
// TODO: not working in client side
|
|
2581
|
-
const
|
|
2584
|
+
const Pagination = () => {
|
|
2582
2585
|
const { table, type } = useDataTableContext();
|
|
2583
2586
|
const getCount = () => {
|
|
2584
2587
|
if (type === "client") {
|
|
@@ -2606,12 +2609,18 @@ const snakeToLabel = (str) => {
|
|
|
2606
2609
|
.join(" "); // Join with space
|
|
2607
2610
|
};
|
|
2608
2611
|
|
|
2609
|
-
const RecordDisplay = ({ object, boxProps }) => {
|
|
2612
|
+
const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
2613
|
+
const getColumn = ({ field }) => {
|
|
2614
|
+
if (translate !== undefined) {
|
|
2615
|
+
return translate.t(`${prefix}${field}`);
|
|
2616
|
+
}
|
|
2617
|
+
return snakeToLabel(field);
|
|
2618
|
+
};
|
|
2610
2619
|
if (object === null) {
|
|
2611
2620
|
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: "null" });
|
|
2612
2621
|
}
|
|
2613
2622
|
return (jsxRuntime.jsx(react.Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2614
|
-
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "gray.400", children:
|
|
2623
|
+
return (jsxRuntime.jsxs(react.Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsxRuntime.jsx(react.Text, { color: "gray.400", children: getColumn({ field }) }), typeof value === "object" ? (jsxRuntime.jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsxRuntime.jsx(react.Text, { children: JSON.stringify(value) }))] }, field));
|
|
2615
2624
|
}) }));
|
|
2616
2625
|
};
|
|
2617
2626
|
|
|
@@ -2795,7 +2804,7 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
|
|
|
2795
2804
|
*
|
|
2796
2805
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2797
2806
|
*/
|
|
2798
|
-
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }) {
|
|
2807
|
+
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, translate, children, }) {
|
|
2799
2808
|
const table = reactTable.useReactTable({
|
|
2800
2809
|
_features: [DensityFeature],
|
|
2801
2810
|
data: data,
|
|
@@ -2844,9 +2853,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2844
2853
|
});
|
|
2845
2854
|
return (jsxRuntime.jsx(DataTableContext.Provider, { value: {
|
|
2846
2855
|
table: table,
|
|
2847
|
-
globalFilter
|
|
2848
|
-
setGlobalFilter
|
|
2856
|
+
globalFilter,
|
|
2857
|
+
setGlobalFilter,
|
|
2849
2858
|
type: "client",
|
|
2859
|
+
translate,
|
|
2850
2860
|
}, children: children }));
|
|
2851
2861
|
}
|
|
2852
2862
|
|
|
@@ -2865,7 +2875,7 @@ const DataTableServerContext = React.createContext({
|
|
|
2865
2875
|
*
|
|
2866
2876
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2867
2877
|
*/
|
|
2868
|
-
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query,
|
|
2878
|
+
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }) {
|
|
2869
2879
|
const table = reactTable.useReactTable({
|
|
2870
2880
|
_features: [DensityFeature],
|
|
2871
2881
|
data: query.data?.data ?? [],
|
|
@@ -2918,6 +2928,7 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2918
2928
|
globalFilter,
|
|
2919
2929
|
setGlobalFilter,
|
|
2920
2930
|
type: "server",
|
|
2931
|
+
translate,
|
|
2921
2932
|
}, children: jsxRuntime.jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2922
2933
|
}
|
|
2923
2934
|
|
|
@@ -3087,12 +3098,13 @@ const TableFilterTags = () => {
|
|
|
3087
3098
|
}) }));
|
|
3088
3099
|
};
|
|
3089
3100
|
|
|
3090
|
-
const TableControls = ({
|
|
3091
|
-
|
|
3101
|
+
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsxRuntime.jsx(jsxRuntime.Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, }) => {
|
|
3102
|
+
const { translate } = useDataTableContext();
|
|
3103
|
+
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr auto", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", children: [jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: 2, children: [jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsx(react.Box, { children: showView && jsxRuntime.jsx(ViewDialog, { icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsxRuntime.jsx(react.Spinner, { size: "sm" }), hasError && (jsxRuntime.jsx(Tooltip, { content: translate.t("hasError"), children: jsxRuntime.jsx(react.Icon, { as: bs.BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsxRuntime.jsx(GlobalFilter, {}), showFilter && jsxRuntime.jsx(FilterDialog, {}), showReload && jsxRuntime.jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3092
3104
|
return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(FilterOptions, { column: column })] }, column));
|
|
3093
3105
|
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", backgroundColor: "gray.50", _dark: {
|
|
3094
3106
|
backgroundColor: "gray.900",
|
|
3095
|
-
}, children: children }), jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children:
|
|
3107
|
+
}, children: children }), jsxRuntime.jsxs(react.Flex, { justifyContent: "space-between", children: [jsxRuntime.jsxs(react.Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsxRuntime.jsx(PageSizeControl, {}), showPageCountText && (jsxRuntime.jsxs(react.Flex, { children: [jsxRuntime.jsx(react.Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] })] }));
|
|
3096
3108
|
};
|
|
3097
3109
|
|
|
3098
3110
|
const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
|
|
@@ -3351,7 +3363,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3351
3363
|
columnVisibility: {},
|
|
3352
3364
|
globalFilter: "",
|
|
3353
3365
|
density: "sm",
|
|
3354
|
-
}, } = {
|
|
3366
|
+
}, keyPrefix = "", } = {
|
|
3355
3367
|
default: {
|
|
3356
3368
|
sorting: [],
|
|
3357
3369
|
pagination: {
|
|
@@ -3374,6 +3386,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3374
3386
|
const [globalFilter, setGlobalFilter] = React.useState(defaultGlobalFilter);
|
|
3375
3387
|
const [density, setDensity] = React.useState(defaultDensity);
|
|
3376
3388
|
const [columnVisibility, setColumnVisibility] = React.useState(defaultColumnVisibility);
|
|
3389
|
+
const translate = reactI18next.useTranslation("", { keyPrefix });
|
|
3377
3390
|
return {
|
|
3378
3391
|
sorting,
|
|
3379
3392
|
setSorting,
|
|
@@ -3391,6 +3404,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3391
3404
|
setDensity,
|
|
3392
3405
|
columnVisibility,
|
|
3393
3406
|
setColumnVisibility,
|
|
3407
|
+
translate,
|
|
3394
3408
|
};
|
|
3395
3409
|
};
|
|
3396
3410
|
|
|
@@ -3409,10 +3423,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3409
3423
|
columnVisibility: {},
|
|
3410
3424
|
globalFilter: "",
|
|
3411
3425
|
density: "sm",
|
|
3412
|
-
},
|
|
3413
|
-
// debounce = true,
|
|
3414
|
-
// debounceDelay = 1000,
|
|
3415
|
-
}) => {
|
|
3426
|
+
}, keyPrefix, }) => {
|
|
3416
3427
|
const [sorting, setSorting] = React.useState(defaultSorting);
|
|
3417
3428
|
const [columnFilters, setColumnFilters] = React.useState(defaultColumnFilters); // can set initial column filter state here
|
|
3418
3429
|
const [pagination, setPagination] = React.useState(defaultPagination);
|
|
@@ -3442,6 +3453,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3442
3453
|
data: [],
|
|
3443
3454
|
},
|
|
3444
3455
|
});
|
|
3456
|
+
const translate = reactI18next.useTranslation("", { keyPrefix });
|
|
3445
3457
|
return {
|
|
3446
3458
|
sorting,
|
|
3447
3459
|
setSorting,
|
|
@@ -3460,6 +3472,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3460
3472
|
columnVisibility,
|
|
3461
3473
|
setColumnVisibility,
|
|
3462
3474
|
query,
|
|
3475
|
+
translate,
|
|
3463
3476
|
};
|
|
3464
3477
|
};
|
|
3465
3478
|
|
|
@@ -3481,11 +3494,17 @@ const widthSanityCheck = (widthList, ignoreList, properties) => {
|
|
|
3481
3494
|
throw new Error(`The width list is too long given from the number of remaining properties after ignore some.`);
|
|
3482
3495
|
}
|
|
3483
3496
|
};
|
|
3484
|
-
const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth = 400, }) => {
|
|
3497
|
+
const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth = 400, translate, }) => {
|
|
3485
3498
|
const { properties } = schema;
|
|
3486
3499
|
idListSanityCheck("ignore", ignore, properties);
|
|
3487
3500
|
widthSanityCheck(width, ignore, properties);
|
|
3488
3501
|
idListSanityCheck("meta", Object.keys(meta), properties);
|
|
3502
|
+
const getColumn = ({ column }) => {
|
|
3503
|
+
if (translate !== undefined) {
|
|
3504
|
+
return translate.t(`${column}`);
|
|
3505
|
+
}
|
|
3506
|
+
return snakeToLabel(column);
|
|
3507
|
+
};
|
|
3489
3508
|
const keys = Object.keys(properties);
|
|
3490
3509
|
const ignored = keys.filter((key) => {
|
|
3491
3510
|
return !ignore.some((shouldIgnoreKey) => key === shouldIgnoreKey);
|
|
@@ -3499,18 +3518,18 @@ const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth =
|
|
|
3499
3518
|
// @ts-expect-error find type for unknown
|
|
3500
3519
|
const value = props.row.original[column];
|
|
3501
3520
|
if (typeof value === "object") {
|
|
3502
|
-
return (jsxRuntime.jsx(react.Grid, { overflow: "auto", children: jsxRuntime.jsx(RecordDisplay, { object: value }) }));
|
|
3521
|
+
return (jsxRuntime.jsx(react.Grid, { overflow: "auto", children: jsxRuntime.jsx(RecordDisplay, { object: value, translate }) }));
|
|
3503
3522
|
}
|
|
3504
3523
|
return jsxRuntime.jsx(TextCell, { children: value });
|
|
3505
3524
|
},
|
|
3506
3525
|
header: (columnHeader) => {
|
|
3507
3526
|
const displayName = columnHeader.column.columnDef.meta?.displayName ??
|
|
3508
|
-
|
|
3527
|
+
getColumn({ column });
|
|
3509
3528
|
return jsxRuntime.jsx("span", { children: displayName });
|
|
3510
3529
|
},
|
|
3511
3530
|
footer: (columnFooter) => {
|
|
3512
3531
|
const displayName = columnFooter.column.columnDef.meta?.displayName ??
|
|
3513
|
-
|
|
3532
|
+
getColumn({ column });
|
|
3514
3533
|
return jsxRuntime.jsx("span", { children: displayName });
|
|
3515
3534
|
},
|
|
3516
3535
|
size: width[index] ?? defaultWidth,
|
|
@@ -4807,16 +4826,16 @@ exports.DataTableServer = DataTableServer;
|
|
|
4807
4826
|
exports.DefaultCardTitle = DefaultCardTitle;
|
|
4808
4827
|
exports.DefaultTable = DefaultTable;
|
|
4809
4828
|
exports.DensityToggleButton = DensityToggleButton;
|
|
4810
|
-
exports.EditFilterButton = EditFilterButton;
|
|
4811
4829
|
exports.EditOrderButton = EditOrderButton;
|
|
4812
4830
|
exports.EditSortingButton = EditSortingButton;
|
|
4813
|
-
exports.EditViewButton = EditViewButton;
|
|
4814
4831
|
exports.EmptyState = EmptyState;
|
|
4815
4832
|
exports.ErrorAlert = ErrorAlert;
|
|
4833
|
+
exports.FilterDialog = FilterDialog;
|
|
4816
4834
|
exports.FilterOptions = FilterOptions;
|
|
4817
4835
|
exports.Form = Form;
|
|
4818
4836
|
exports.GlobalFilter = GlobalFilter;
|
|
4819
4837
|
exports.PageSizeControl = PageSizeControl;
|
|
4838
|
+
exports.Pagination = Pagination;
|
|
4820
4839
|
exports.RecordDisplay = RecordDisplay;
|
|
4821
4840
|
exports.ReloadButton = ReloadButton;
|
|
4822
4841
|
exports.ResetFilteringButton = ResetFilteringButton;
|
|
@@ -4835,11 +4854,11 @@ exports.TableFooter = TableFooter;
|
|
|
4835
4854
|
exports.TableHeader = TableHeader;
|
|
4836
4855
|
exports.TableLoadingComponent = TableLoadingComponent;
|
|
4837
4856
|
exports.TableOrderer = TableOrderer;
|
|
4838
|
-
exports.TablePagination = TablePagination;
|
|
4839
4857
|
exports.TableSelector = TableSelector;
|
|
4840
4858
|
exports.TableSorter = TableSorter;
|
|
4841
4859
|
exports.TableViewer = TableViewer;
|
|
4842
4860
|
exports.TextCell = TextCell;
|
|
4861
|
+
exports.ViewDialog = ViewDialog;
|
|
4843
4862
|
exports.getColumns = getColumns;
|
|
4844
4863
|
exports.getMultiDates = getMultiDates;
|
|
4845
4864
|
exports.getRangeDates = getRangeDates;
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, CheckboxCard as CheckboxCard$1, Menu, createRecipeContext, createContext as createContext$1, Pagination, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Group, InputElement, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List, Alert, Popover, Field as Field$1, HoverCard, NumberInput, Accordion, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
|
|
2
|
+
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, CheckboxCard as CheckboxCard$1, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Group, InputElement, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List, Alert, Popover, Field as Field$1, HoverCard, NumberInput, Accordion, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
|
|
3
3
|
import { AiOutlineColumnWidth } from 'react-icons/ai';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import React__default, { createContext, useContext, useState, useEffect, useRef } from 'react';
|
|
@@ -25,17 +25,18 @@ import { useQueryClient, useQuery } from '@tanstack/react-query';
|
|
|
25
25
|
import { IoReload } from 'react-icons/io5';
|
|
26
26
|
import { GrAscend, GrDescend } from 'react-icons/gr';
|
|
27
27
|
import { HiColorSwatch, HiOutlineInformationCircle } from 'react-icons/hi';
|
|
28
|
+
import { useTranslation } from 'react-i18next';
|
|
28
29
|
import axios from 'axios';
|
|
29
30
|
import { useFormContext, FormProvider, useForm as useForm$1 } from 'react-hook-form';
|
|
30
31
|
import dayjs from 'dayjs';
|
|
31
32
|
import { TiDeleteOutline } from 'react-icons/ti';
|
|
32
|
-
import { useTranslation } from 'react-i18next';
|
|
33
33
|
|
|
34
34
|
const DataTableContext = createContext({
|
|
35
35
|
table: {},
|
|
36
36
|
globalFilter: "",
|
|
37
37
|
setGlobalFilter: () => { },
|
|
38
38
|
type: "client",
|
|
39
|
+
translate: {},
|
|
39
40
|
});
|
|
40
41
|
|
|
41
42
|
const useDataTableContext = () => {
|
|
@@ -75,7 +76,7 @@ Dialog.Backdrop;
|
|
|
75
76
|
const DialogTitle = Dialog.Title;
|
|
76
77
|
Dialog.Description;
|
|
77
78
|
const DialogTrigger = Dialog.Trigger;
|
|
78
|
-
|
|
79
|
+
Dialog.ActionTrigger;
|
|
79
80
|
|
|
80
81
|
const Radio = React.forwardRef(function Radio(props, ref) {
|
|
81
82
|
const { children, inputProps, rootRef, ...rest } = props;
|
|
@@ -353,9 +354,10 @@ const ResetFilteringButton = ({ text = "Reset Filtering", }) => {
|
|
|
353
354
|
}, children: text }));
|
|
354
355
|
};
|
|
355
356
|
|
|
356
|
-
const
|
|
357
|
+
const FilterDialog = ({ icon = jsx(MdFilterAlt, {}), }) => {
|
|
357
358
|
const filterModal = useDisclosure();
|
|
358
|
-
|
|
359
|
+
const { translate } = useDataTableContext();
|
|
360
|
+
return (jsxs(DialogRoot, { size: ["full", "full", "md", "md"], open: filterModal.open, children: [jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: filterModal.onOpen, children: [icon, " ", translate.t("filterDialog.buttonText")] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("filterDialog.title") }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, { text: translate.t("filterDialog.reset") }), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: translate.t("filterDialog.close") })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
359
361
|
};
|
|
360
362
|
|
|
361
363
|
const ColumnOrderChanger = ({ columns }) => {
|
|
@@ -2432,9 +2434,10 @@ const TableViewer = () => {
|
|
|
2432
2434
|
}) }));
|
|
2433
2435
|
};
|
|
2434
2436
|
|
|
2435
|
-
const
|
|
2437
|
+
const ViewDialog = ({ icon = jsx(IoMdEye, {}) }) => {
|
|
2436
2438
|
const viewModel = useDisclosure();
|
|
2437
|
-
|
|
2439
|
+
const { translate } = useDataTableContext();
|
|
2440
|
+
return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", translate.t("viewDialog.buttonText")] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: translate.t("viewDialog.title") }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
|
|
2438
2441
|
};
|
|
2439
2442
|
|
|
2440
2443
|
const MenuContent = React.forwardRef(function MenuContent(props, ref) {
|
|
@@ -2470,9 +2473,9 @@ const MenuTrigger = Menu.Trigger;
|
|
|
2470
2473
|
|
|
2471
2474
|
const PageSizeControl = ({ pageSizes = [10, 20, 30, 40, 50], }) => {
|
|
2472
2475
|
const { table } = useDataTableContext();
|
|
2473
|
-
return (
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
+
return (jsxs(MenuRoot, { children: [jsx(MenuTrigger, { asChild: true, children: jsxs(Button$1, { variant: "ghost", gap: "0.5rem", children: [table.getState().pagination.pageSize, " ", jsx(BiDownArrow, {})] }) }), jsx(MenuContent, { children: pageSizes.map((pageSize) => (jsx(MenuItem, { value: `chakra-table-pageSize-${pageSize}`, onClick: () => {
|
|
2477
|
+
table.setPageSize(Number(pageSize));
|
|
2478
|
+
}, children: pageSize }, `chakra-table-pageSize-${pageSize}`))) })] }));
|
|
2476
2479
|
};
|
|
2477
2480
|
|
|
2478
2481
|
const ResetSelectionButton = ({ text = "Reset Selection", }) => {
|
|
@@ -2507,11 +2510,11 @@ const variantMap = {
|
|
|
2507
2510
|
};
|
|
2508
2511
|
const PaginationRoot = React.forwardRef(function PaginationRoot(props, ref) {
|
|
2509
2512
|
const { size = "sm", variant = "outline", getHref, ...rest } = props;
|
|
2510
|
-
return (jsx(RootPropsProvider, { value: { size, variantMap: variantMap[variant], getHref }, children: jsx(Pagination.Root, { ref: ref, type: getHref ? "link" : "button", ...rest }) }));
|
|
2513
|
+
return (jsx(RootPropsProvider, { value: { size, variantMap: variantMap[variant], getHref }, children: jsx(Pagination$1.Root, { ref: ref, type: getHref ? "link" : "button", ...rest }) }));
|
|
2511
2514
|
});
|
|
2512
2515
|
const PaginationEllipsis = React.forwardRef(function PaginationEllipsis(props, ref) {
|
|
2513
2516
|
const { size, variantMap } = useRootProps();
|
|
2514
|
-
return (jsx(Pagination.Ellipsis, { ref: ref, ...props, asChild: true, children: jsx(Button$1, { as: "span", variant: variantMap.ellipsis, size: size, children: jsx(HiMiniEllipsisHorizontal, {}) }) }));
|
|
2517
|
+
return (jsx(Pagination$1.Ellipsis, { ref: ref, ...props, asChild: true, children: jsx(Button$1, { as: "span", variant: variantMap.ellipsis, size: size, children: jsx(HiMiniEllipsisHorizontal, {}) }) }));
|
|
2515
2518
|
});
|
|
2516
2519
|
const PaginationItem = React.forwardRef(function PaginationItem(props, ref) {
|
|
2517
2520
|
const { page } = usePaginationContext();
|
|
@@ -2521,7 +2524,7 @@ const PaginationItem = React.forwardRef(function PaginationItem(props, ref) {
|
|
|
2521
2524
|
if (getHref) {
|
|
2522
2525
|
return (jsx(LinkButton, { href: getHref(props.value), variant: variant, size: size, children: props.value }));
|
|
2523
2526
|
}
|
|
2524
|
-
return (jsx(Pagination.Item, { ref: ref, ...props, asChild: true, children: jsx(Button$1, { variant: variant, size: size, children: props.value }) }));
|
|
2527
|
+
return (jsx(Pagination$1.Item, { ref: ref, ...props, asChild: true, children: jsx(Button$1, { variant: variant, size: size, children: props.value }) }));
|
|
2525
2528
|
});
|
|
2526
2529
|
const PaginationPrevTrigger = React.forwardRef(function PaginationPrevTrigger(props, ref) {
|
|
2527
2530
|
const { size, variantMap, getHref } = useRootProps();
|
|
@@ -2529,7 +2532,7 @@ const PaginationPrevTrigger = React.forwardRef(function PaginationPrevTrigger(pr
|
|
|
2529
2532
|
if (getHref) {
|
|
2530
2533
|
return (jsx(LinkButton, { href: previousPage != null ? getHref(previousPage) : undefined, variant: variantMap.default, size: size, children: jsx(HiChevronLeft, {}) }));
|
|
2531
2534
|
}
|
|
2532
|
-
return (jsx(Pagination.PrevTrigger, { ref: ref, asChild: true, ...props, children: jsx(IconButton, { variant: variantMap.default, size: size, children: jsx(HiChevronLeft, {}) }) }));
|
|
2535
|
+
return (jsx(Pagination$1.PrevTrigger, { ref: ref, asChild: true, ...props, children: jsx(IconButton, { variant: variantMap.default, size: size, children: jsx(HiChevronLeft, {}) }) }));
|
|
2533
2536
|
});
|
|
2534
2537
|
const PaginationNextTrigger = React.forwardRef(function PaginationNextTrigger(props, ref) {
|
|
2535
2538
|
const { size, variantMap, getHref } = useRootProps();
|
|
@@ -2537,10 +2540,10 @@ const PaginationNextTrigger = React.forwardRef(function PaginationNextTrigger(pr
|
|
|
2537
2540
|
if (getHref) {
|
|
2538
2541
|
return (jsx(LinkButton, { href: nextPage != null ? getHref(nextPage) : undefined, variant: variantMap.default, size: size, children: jsx(HiChevronRight, {}) }));
|
|
2539
2542
|
}
|
|
2540
|
-
return (jsx(Pagination.NextTrigger, { ref: ref, asChild: true, ...props, children: jsx(IconButton, { variant: variantMap.default, size: size, children: jsx(HiChevronRight, {}) }) }));
|
|
2543
|
+
return (jsx(Pagination$1.NextTrigger, { ref: ref, asChild: true, ...props, children: jsx(IconButton, { variant: variantMap.default, size: size, children: jsx(HiChevronRight, {}) }) }));
|
|
2541
2544
|
});
|
|
2542
2545
|
const PaginationItems = (props) => {
|
|
2543
|
-
return (jsx(Pagination.Context, { children: ({ pages }) => pages.map((page, index) => {
|
|
2546
|
+
return (jsx(Pagination$1.Context, { children: ({ pages }) => pages.map((page, index) => {
|
|
2544
2547
|
return page.type === "ellipsis" ? (jsx(PaginationEllipsis, { index: index, ...props }, index)) : (jsx(PaginationItem, { type: "page", value: page.value, ...props }, index));
|
|
2545
2548
|
}) }));
|
|
2546
2549
|
};
|
|
@@ -2558,7 +2561,7 @@ const PaginationPageText = React.forwardRef(function PaginationPageText(props, r
|
|
|
2558
2561
|
});
|
|
2559
2562
|
|
|
2560
2563
|
// TODO: not working in client side
|
|
2561
|
-
const
|
|
2564
|
+
const Pagination = () => {
|
|
2562
2565
|
const { table, type } = useDataTableContext();
|
|
2563
2566
|
const getCount = () => {
|
|
2564
2567
|
if (type === "client") {
|
|
@@ -2586,12 +2589,18 @@ const snakeToLabel = (str) => {
|
|
|
2586
2589
|
.join(" "); // Join with space
|
|
2587
2590
|
};
|
|
2588
2591
|
|
|
2589
|
-
const RecordDisplay = ({ object, boxProps }) => {
|
|
2592
|
+
const RecordDisplay = ({ object, boxProps, translate, prefix = "", }) => {
|
|
2593
|
+
const getColumn = ({ field }) => {
|
|
2594
|
+
if (translate !== undefined) {
|
|
2595
|
+
return translate.t(`${prefix}${field}`);
|
|
2596
|
+
}
|
|
2597
|
+
return snakeToLabel(field);
|
|
2598
|
+
};
|
|
2590
2599
|
if (object === null) {
|
|
2591
2600
|
return jsx(Fragment, { children: "null" });
|
|
2592
2601
|
}
|
|
2593
2602
|
return (jsx(Grid, { rowGap: 1, padding: 1, overflow: "auto", ...boxProps, children: Object.entries(object).map(([field, value]) => {
|
|
2594
|
-
return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "gray.400", children:
|
|
2603
|
+
return (jsxs(Grid, { columnGap: 2, gridTemplateColumns: "auto 1fr", children: [jsx(Text, { color: "gray.400", children: getColumn({ field }) }), typeof value === "object" ? (jsx(RecordDisplay, { object: value, prefix: `${prefix}${field}.`, translate: translate })) : (jsx(Text, { children: JSON.stringify(value) }))] }, field));
|
|
2595
2604
|
}) }));
|
|
2596
2605
|
};
|
|
2597
2606
|
|
|
@@ -2775,7 +2784,7 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
|
|
|
2775
2784
|
*
|
|
2776
2785
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2777
2786
|
*/
|
|
2778
|
-
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }) {
|
|
2787
|
+
function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, translate, children, }) {
|
|
2779
2788
|
const table = useReactTable({
|
|
2780
2789
|
_features: [DensityFeature],
|
|
2781
2790
|
data: data,
|
|
@@ -2824,9 +2833,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2824
2833
|
});
|
|
2825
2834
|
return (jsx(DataTableContext.Provider, { value: {
|
|
2826
2835
|
table: table,
|
|
2827
|
-
globalFilter
|
|
2828
|
-
setGlobalFilter
|
|
2836
|
+
globalFilter,
|
|
2837
|
+
setGlobalFilter,
|
|
2829
2838
|
type: "client",
|
|
2839
|
+
translate,
|
|
2830
2840
|
}, children: children }));
|
|
2831
2841
|
}
|
|
2832
2842
|
|
|
@@ -2845,7 +2855,7 @@ const DataTableServerContext = createContext({
|
|
|
2845
2855
|
*
|
|
2846
2856
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2847
2857
|
*/
|
|
2848
|
-
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query,
|
|
2858
|
+
function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }) {
|
|
2849
2859
|
const table = useReactTable({
|
|
2850
2860
|
_features: [DensityFeature],
|
|
2851
2861
|
data: query.data?.data ?? [],
|
|
@@ -2898,6 +2908,7 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2898
2908
|
globalFilter,
|
|
2899
2909
|
setGlobalFilter,
|
|
2900
2910
|
type: "server",
|
|
2911
|
+
translate,
|
|
2901
2912
|
}, children: jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2902
2913
|
}
|
|
2903
2914
|
|
|
@@ -3067,12 +3078,13 @@ const TableFilterTags = () => {
|
|
|
3067
3078
|
}) }));
|
|
3068
3079
|
};
|
|
3069
3080
|
|
|
3070
|
-
const TableControls = ({
|
|
3071
|
-
|
|
3081
|
+
const TableControls = ({ fitTableWidth = false, fitTableHeight = false, children = jsx(Fragment, {}), showGlobalFilter = false, showFilter = false, showFilterName = false, showFilterTags = false, showReload = false, showPagination = true, showPageSizeControl = true, showPageCountText = true, showView = true, filterOptions = [], extraItems = jsx(Fragment, {}), loading = false, hasError = false, }) => {
|
|
3082
|
+
const { translate } = useDataTableContext();
|
|
3083
|
+
return (jsxs(Grid, { templateRows: "auto 1fr auto", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", children: [jsxs(Flex, { flexFlow: "column", gap: 2, children: [jsxs(Flex, { justifyContent: "space-between", children: [jsx(Box, { children: showView && jsx(ViewDialog, { icon: jsx(MdOutlineViewColumn, {}) }) }), jsxs(Flex, { gap: "0.5rem", alignItems: "center", justifySelf: "end", children: [loading && jsx(Spinner, { size: "sm" }), hasError && (jsx(Tooltip, { content: translate.t("hasError"), children: jsx(Icon, { as: BsExclamationCircleFill, color: "red.400" }) })), showGlobalFilter && jsx(GlobalFilter, {}), showFilter && jsx(FilterDialog, {}), showReload && jsx(ReloadButton, {}), extraItems] })] }), filterOptions.length > 0 && (jsx(Flex, { flexFlow: "column", gap: "0.5rem", children: filterOptions.map((column) => {
|
|
3072
3084
|
return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(FilterOptions, { column: column })] }, column));
|
|
3073
3085
|
}) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", backgroundColor: "gray.50", _dark: {
|
|
3074
3086
|
backgroundColor: "gray.900",
|
|
3075
|
-
}, children: children }), jsxs(Flex, { justifyContent: "space-between", children: [jsxs(Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsx(PageSizeControl, {}), showPageCountText && (jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children:
|
|
3087
|
+
}, children: children }), jsxs(Flex, { justifyContent: "space-between", children: [jsxs(Flex, { gap: "1rem", alignItems: "center", children: [showPageSizeControl && jsx(PageSizeControl, {}), showPageCountText && (jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: translate.t("rowcount.total") }), jsx(RowCountText, {})] }))] }), jsx(Box, { justifySelf: "end", children: showPagination && jsx(Pagination, {}) })] })] }));
|
|
3076
3088
|
};
|
|
3077
3089
|
|
|
3078
3090
|
const TableFooter = ({ pinnedBgColor = { light: "gray.50", dark: "gray.700" }, showSelector = false, alwaysShowSelector = true, }) => {
|
|
@@ -3331,7 +3343,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3331
3343
|
columnVisibility: {},
|
|
3332
3344
|
globalFilter: "",
|
|
3333
3345
|
density: "sm",
|
|
3334
|
-
}, } = {
|
|
3346
|
+
}, keyPrefix = "", } = {
|
|
3335
3347
|
default: {
|
|
3336
3348
|
sorting: [],
|
|
3337
3349
|
pagination: {
|
|
@@ -3354,6 +3366,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3354
3366
|
const [globalFilter, setGlobalFilter] = useState(defaultGlobalFilter);
|
|
3355
3367
|
const [density, setDensity] = useState(defaultDensity);
|
|
3356
3368
|
const [columnVisibility, setColumnVisibility] = useState(defaultColumnVisibility);
|
|
3369
|
+
const translate = useTranslation("", { keyPrefix });
|
|
3357
3370
|
return {
|
|
3358
3371
|
sorting,
|
|
3359
3372
|
setSorting,
|
|
@@ -3371,6 +3384,7 @@ const useDataTable = ({ default: { sorting: defaultSorting = [], pagination: def
|
|
|
3371
3384
|
setDensity,
|
|
3372
3385
|
columnVisibility,
|
|
3373
3386
|
setColumnVisibility,
|
|
3387
|
+
translate,
|
|
3374
3388
|
};
|
|
3375
3389
|
};
|
|
3376
3390
|
|
|
@@ -3389,10 +3403,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3389
3403
|
columnVisibility: {},
|
|
3390
3404
|
globalFilter: "",
|
|
3391
3405
|
density: "sm",
|
|
3392
|
-
},
|
|
3393
|
-
// debounce = true,
|
|
3394
|
-
// debounceDelay = 1000,
|
|
3395
|
-
}) => {
|
|
3406
|
+
}, keyPrefix, }) => {
|
|
3396
3407
|
const [sorting, setSorting] = useState(defaultSorting);
|
|
3397
3408
|
const [columnFilters, setColumnFilters] = useState(defaultColumnFilters); // can set initial column filter state here
|
|
3398
3409
|
const [pagination, setPagination] = useState(defaultPagination);
|
|
@@ -3422,6 +3433,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3422
3433
|
data: [],
|
|
3423
3434
|
},
|
|
3424
3435
|
});
|
|
3436
|
+
const translate = useTranslation("", { keyPrefix });
|
|
3425
3437
|
return {
|
|
3426
3438
|
sorting,
|
|
3427
3439
|
setSorting,
|
|
@@ -3440,6 +3452,7 @@ const useDataTableServer = ({ url, default: { sorting: defaultSorting = [], pagi
|
|
|
3440
3452
|
columnVisibility,
|
|
3441
3453
|
setColumnVisibility,
|
|
3442
3454
|
query,
|
|
3455
|
+
translate,
|
|
3443
3456
|
};
|
|
3444
3457
|
};
|
|
3445
3458
|
|
|
@@ -3461,11 +3474,17 @@ const widthSanityCheck = (widthList, ignoreList, properties) => {
|
|
|
3461
3474
|
throw new Error(`The width list is too long given from the number of remaining properties after ignore some.`);
|
|
3462
3475
|
}
|
|
3463
3476
|
};
|
|
3464
|
-
const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth = 400, }) => {
|
|
3477
|
+
const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth = 400, translate, }) => {
|
|
3465
3478
|
const { properties } = schema;
|
|
3466
3479
|
idListSanityCheck("ignore", ignore, properties);
|
|
3467
3480
|
widthSanityCheck(width, ignore, properties);
|
|
3468
3481
|
idListSanityCheck("meta", Object.keys(meta), properties);
|
|
3482
|
+
const getColumn = ({ column }) => {
|
|
3483
|
+
if (translate !== undefined) {
|
|
3484
|
+
return translate.t(`${column}`);
|
|
3485
|
+
}
|
|
3486
|
+
return snakeToLabel(column);
|
|
3487
|
+
};
|
|
3469
3488
|
const keys = Object.keys(properties);
|
|
3470
3489
|
const ignored = keys.filter((key) => {
|
|
3471
3490
|
return !ignore.some((shouldIgnoreKey) => key === shouldIgnoreKey);
|
|
@@ -3479,18 +3498,18 @@ const getColumns = ({ schema, ignore = [], width = [], meta = {}, defaultWidth =
|
|
|
3479
3498
|
// @ts-expect-error find type for unknown
|
|
3480
3499
|
const value = props.row.original[column];
|
|
3481
3500
|
if (typeof value === "object") {
|
|
3482
|
-
return (jsx(Grid, { overflow: "auto", children: jsx(RecordDisplay, { object: value }) }));
|
|
3501
|
+
return (jsx(Grid, { overflow: "auto", children: jsx(RecordDisplay, { object: value, translate }) }));
|
|
3483
3502
|
}
|
|
3484
3503
|
return jsx(TextCell, { children: value });
|
|
3485
3504
|
},
|
|
3486
3505
|
header: (columnHeader) => {
|
|
3487
3506
|
const displayName = columnHeader.column.columnDef.meta?.displayName ??
|
|
3488
|
-
|
|
3507
|
+
getColumn({ column });
|
|
3489
3508
|
return jsx("span", { children: displayName });
|
|
3490
3509
|
},
|
|
3491
3510
|
footer: (columnFooter) => {
|
|
3492
3511
|
const displayName = columnFooter.column.columnDef.meta?.displayName ??
|
|
3493
|
-
|
|
3512
|
+
getColumn({ column });
|
|
3494
3513
|
return jsx("span", { children: displayName });
|
|
3495
3514
|
},
|
|
3496
3515
|
size: width[index] ?? defaultWidth,
|
|
@@ -4780,4 +4799,4 @@ const getMultiDates = ({ selected, selectedDate, selectedDates, selectable, }) =
|
|
|
4780
4799
|
}
|
|
4781
4800
|
};
|
|
4782
4801
|
|
|
4783
|
-
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultTable, DensityToggleButton,
|
|
4802
|
+
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultTable, DensityToggleButton, EditOrderButton, EditSortingButton, EmptyState, ErrorAlert, FilterDialog, FilterOptions, Form, GlobalFilter, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableOrderer, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, getColumns, getMultiDates, getRangeDates, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Pagination: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,6 +2,7 @@ import { ColumnDef, ColumnFiltersState, ColumnOrderState, FilterFn, OnChangeFn,
|
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
import { RankingInfo } from "@tanstack/match-sorter-utils";
|
|
4
4
|
import { DensityState } from "../Controls/DensityFeature";
|
|
5
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
5
6
|
declare module "@tanstack/react-table" {
|
|
6
7
|
interface FilterFns {
|
|
7
8
|
fuzzy: FilterFn<unknown>;
|
|
@@ -47,6 +48,7 @@ export interface DataTableProps<TData = unknown> {
|
|
|
47
48
|
setColumnOrder: OnChangeFn<ColumnOrderState>;
|
|
48
49
|
setDensity: OnChangeFn<DensityState>;
|
|
49
50
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
51
|
+
translate: UseTranslationResponse<any, any>;
|
|
50
52
|
}
|
|
51
53
|
/**
|
|
52
54
|
* DataTable will create a context to hold all values to
|
|
@@ -58,4 +60,4 @@ export interface DataTableProps<TData = unknown> {
|
|
|
58
60
|
*
|
|
59
61
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
60
62
|
*/
|
|
61
|
-
export declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, children, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
63
|
+
export declare function DataTable<TData = unknown>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, translate, children, }: DataTableProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,6 +3,7 @@ import { UseQueryResult } from "@tanstack/react-query";
|
|
|
3
3
|
import { ColumnDef, ColumnFiltersState, ColumnOrderState, OnChangeFn, PaginationState, RowSelectionState, SortingState, VisibilityState } from "@tanstack/react-table";
|
|
4
4
|
import { DensityState } from "../Controls/DensityFeature";
|
|
5
5
|
import { DataResponse } from "./useDataTableServer";
|
|
6
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
6
7
|
export interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown>> {
|
|
7
8
|
children: ReactNode | ReactNode[];
|
|
8
9
|
/**
|
|
@@ -34,6 +35,7 @@ export interface DataTableServerProps<TData extends DataResponse = DataResponse<
|
|
|
34
35
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
35
36
|
query: UseQueryResult<TData>;
|
|
36
37
|
url: string;
|
|
38
|
+
translate: UseTranslationResponse<any, any>;
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
41
|
* DataTableServer will create a context to hold all values to
|
|
@@ -46,4 +48,4 @@ export interface DataTableServerProps<TData extends DataResponse = DataResponse<
|
|
|
46
48
|
*
|
|
47
49
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
48
50
|
*/
|
|
49
|
-
export declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query,
|
|
51
|
+
export declare function DataTableServer<TData extends DataResponse = DataResponse<unknown>>({ columns, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, columnOrder, columnFilters, columnVisibility, density, globalFilter, pagination, sorting, rowSelection, setPagination, setSorting, setColumnFilters, setRowSelection, setGlobalFilter, setColumnOrder, setDensity, setColumnVisibility, query, url, translate, children, }: DataTableServerProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -3,7 +3,6 @@ export interface TableControlsProps {
|
|
|
3
3
|
totalText?: string;
|
|
4
4
|
fitTableWidth?: boolean;
|
|
5
5
|
fitTableHeight?: boolean;
|
|
6
|
-
isMobile?: boolean;
|
|
7
6
|
children?: ReactNode;
|
|
8
7
|
showGlobalFilter?: boolean;
|
|
9
8
|
showFilter?: boolean;
|
|
@@ -13,9 +12,10 @@ export interface TableControlsProps {
|
|
|
13
12
|
showPagination?: boolean;
|
|
14
13
|
showPageSizeControl?: boolean;
|
|
15
14
|
showPageCountText?: boolean;
|
|
15
|
+
showView?: boolean;
|
|
16
16
|
filterOptions?: string[];
|
|
17
17
|
extraItems?: ReactNode;
|
|
18
18
|
loading?: boolean;
|
|
19
19
|
hasError?: boolean;
|
|
20
20
|
}
|
|
21
|
-
export declare const TableControls: ({
|
|
21
|
+
export declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterOptions, extraItems, loading, hasError, }: TableControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { BoxProps } from "@chakra-ui/react";
|
|
2
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
2
3
|
export interface RecordDisplayProps {
|
|
3
4
|
object: object | null;
|
|
4
5
|
boxProps?: BoxProps;
|
|
6
|
+
translate?: UseTranslationResponse<any, any>;
|
|
7
|
+
prefix?: string;
|
|
5
8
|
}
|
|
6
|
-
export declare const RecordDisplay: ({ object, boxProps }: RecordDisplayProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare const RecordDisplay: ({ object, boxProps, translate, prefix, }: RecordDisplayProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { OnChangeFn, Table } from "@tanstack/react-table";
|
|
3
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
3
4
|
export interface DataTableContext<TData = unknown> {
|
|
4
5
|
table: Table<TData>;
|
|
5
6
|
globalFilter: string;
|
|
6
7
|
setGlobalFilter: OnChangeFn<string>;
|
|
7
8
|
type: "client" | "server";
|
|
9
|
+
translate: UseTranslationResponse<any, any>;
|
|
8
10
|
}
|
|
9
11
|
export declare const DataTableContext: import("react").Context<DataTableContext<unknown>>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ColumnFiltersState, ColumnOrderState, OnChangeFn, PaginationState, RowSelectionState, SortingState, VisibilityState } from "@tanstack/react-table";
|
|
2
2
|
import { DensityState } from "../Controls/DensityFeature";
|
|
3
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
3
4
|
export interface DataTableDefaultState {
|
|
4
5
|
sorting?: SortingState;
|
|
5
6
|
columnFilters?: ColumnFiltersState;
|
|
@@ -12,6 +13,7 @@ export interface DataTableDefaultState {
|
|
|
12
13
|
}
|
|
13
14
|
export interface UseDataTableProps {
|
|
14
15
|
default?: DataTableDefaultState;
|
|
16
|
+
keyPrefix?: string;
|
|
15
17
|
}
|
|
16
18
|
export interface UseDataTableReturn {
|
|
17
19
|
sorting: SortingState;
|
|
@@ -30,5 +32,6 @@ export interface UseDataTableReturn {
|
|
|
30
32
|
setColumnOrder: OnChangeFn<ColumnOrderState>;
|
|
31
33
|
setDensity: OnChangeFn<DensityState>;
|
|
32
34
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
35
|
+
translate: UseTranslationResponse<any, any>;
|
|
33
36
|
}
|
|
34
|
-
export declare const useDataTable: ({ default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, }?: UseDataTableProps) => UseDataTableReturn;
|
|
37
|
+
export declare const useDataTable: ({ default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, keyPrefix, }?: UseDataTableProps) => UseDataTableReturn;
|
|
@@ -24,4 +24,4 @@ export interface Result<T = unknown> {
|
|
|
24
24
|
export interface DataResponse<T = unknown> extends Result<T> {
|
|
25
25
|
count: number;
|
|
26
26
|
}
|
|
27
|
-
export declare const useDataTableServer: <TData>({ url, default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, }: UseDataTableServerProps) => UseDataTableServerReturn<TData>;
|
|
27
|
+
export declare const useDataTableServer: <TData>({ url, default: { sorting: defaultSorting, pagination: defaultPagination, rowSelection: defaultRowSelection, columnFilters: defaultColumnFilters, columnOrder: defaultColumnOrder, columnVisibility: defaultColumnVisibility, globalFilter: defaultGlobalFilter, density: defaultDensity, }, keyPrefix, }: UseDataTableServerProps) => UseDataTableServerReturn<TData>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ColumnDef, RowData } from "@tanstack/react-table";
|
|
2
2
|
import { JSONSchema7 } from "json-schema";
|
|
3
|
+
import { UseTranslationResponse } from "react-i18next";
|
|
3
4
|
export interface GetColumnsConfigs<K extends RowData> {
|
|
4
5
|
schema: JSONSchema7;
|
|
5
6
|
ignore?: K[];
|
|
@@ -8,6 +9,7 @@ export interface GetColumnsConfigs<K extends RowData> {
|
|
|
8
9
|
[key in K as string]?: object;
|
|
9
10
|
};
|
|
10
11
|
defaultWidth?: number;
|
|
12
|
+
translate?: UseTranslationResponse<any, any>;
|
|
11
13
|
}
|
|
12
14
|
export declare const widthSanityCheck: <K extends unknown>(widthList: number[], ignoreList: K[], properties: { [key in K as string]?: object | undefined; }) => void;
|
|
13
|
-
export declare const getColumns: <TData extends unknown>({ schema, ignore, width, meta, defaultWidth, }: GetColumnsConfigs<TData>) => ColumnDef<TData>[];
|
|
15
|
+
export declare const getColumns: <TData extends unknown>({ schema, ignore, width, meta, defaultWidth, translate, }: GetColumnsConfigs<TData>) => ColumnDef<TData>[];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -58,16 +58,16 @@ declare module "@tanstack/react-table" {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
export * from "./components/Controls/DensityToggleButton";
|
|
61
|
-
export * from "./components/Controls/
|
|
61
|
+
export * from "./components/Controls/FilterDialog";
|
|
62
62
|
export * from "./components/Controls/EditOrderButton";
|
|
63
63
|
export * from "./components/Controls/EditSortingButton";
|
|
64
|
-
export * from "./components/Controls/
|
|
64
|
+
export * from "./components/Controls/ViewDialog";
|
|
65
65
|
export * from "./components/Controls/PageSizeControl";
|
|
66
66
|
export * from "./components/Controls/ResetFilteringButton";
|
|
67
67
|
export * from "./components/Controls/ResetSelectionButton";
|
|
68
68
|
export * from "./components/Controls/ResetSortingButton";
|
|
69
69
|
export * from "./components/Controls/RowCountText";
|
|
70
|
-
export * from "./components/Controls/
|
|
70
|
+
export * from "./components/Controls/Pagination";
|
|
71
71
|
export * from "./components/DataTable/CardHeader";
|
|
72
72
|
export * from "./components/DataTable/DataDisplay";
|
|
73
73
|
export * from "./components/DataTable/DataTable";
|