@bsol-oss/react-datatable5 12.0.0-beta.45 → 12.0.0-beta.47
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 +88 -23
- package/dist/index.js +107 -45
- package/dist/index.mjs +107 -45
- package/dist/types/components/DataTable/context/DataTableContext.d.ts +14 -0
- package/dist/types/components/DataTable/controls/ReloadButton.d.ts +1 -2
- package/dist/types/components/DataTable/controls/ResetFilteringButton.d.ts +1 -4
- package/dist/types/components/DataTable/controls/ResetSelectionButton.d.ts +1 -4
- package/dist/types/components/DataTable/controls/ResetSortingButton.d.ts +1 -4
- package/dist/types/components/DataTable/controls/TableControls.d.ts +4 -1
- package/dist/types/components/DataTable/display/TableBody.d.ts +1 -2
- package/dist/types/components/DataTable/display/TableCardContainer.d.ts +6 -3
- package/dist/types/components/DataTable/display/TableHeader.d.ts +43 -1
- package/dist/types/index.d.ts +16 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Row, RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionSta
|
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import React__default, { ReactNode, Dispatch, SetStateAction } from 'react';
|
|
5
5
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
6
|
-
import { ImageProps, GridProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps,
|
|
6
|
+
import { ImageProps, GridProps, TableRootProps, TableHeaderProps as TableHeaderProps$1, TableRowProps, BoxProps, FlexProps, CardBodyProps, TextProps } from '@chakra-ui/react';
|
|
7
7
|
import { IconType } from 'react-icons';
|
|
8
8
|
import * as react_i18next from 'react-i18next';
|
|
9
9
|
import { UseTranslationResponse } from 'react-i18next';
|
|
@@ -41,20 +41,11 @@ declare const PageSizeControl: ({ pageSizes, }: PageSizeControlProps) => react_j
|
|
|
41
41
|
|
|
42
42
|
declare const Pagination: () => react_jsx_runtime.JSX.Element;
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
text?: string;
|
|
46
|
-
}
|
|
47
|
-
declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => react_jsx_runtime.JSX.Element;
|
|
44
|
+
declare const ResetFilteringButton: () => react_jsx_runtime.JSX.Element;
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
text?: string;
|
|
51
|
-
}
|
|
52
|
-
declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => react_jsx_runtime.JSX.Element;
|
|
46
|
+
declare const ResetSelectionButton: () => react_jsx_runtime.JSX.Element;
|
|
53
47
|
|
|
54
|
-
|
|
55
|
-
text?: string;
|
|
56
|
-
}
|
|
57
|
-
declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => react_jsx_runtime.JSX.Element;
|
|
48
|
+
declare const ResetSortingButton: () => react_jsx_runtime.JSX.Element;
|
|
58
49
|
|
|
59
50
|
declare const RowCountText: () => react_jsx_runtime.JSX.Element;
|
|
60
51
|
|
|
@@ -172,6 +163,20 @@ interface DataTableContext<TData = unknown> extends DataTableProps {
|
|
|
172
163
|
setGlobalFilter: OnChangeFn<string>;
|
|
173
164
|
type: "client" | "server";
|
|
174
165
|
translate: UseTranslationResponse<any, unknown>;
|
|
166
|
+
tableLabel: {
|
|
167
|
+
view: string;
|
|
168
|
+
edit: string;
|
|
169
|
+
filterButtonText: string;
|
|
170
|
+
filterTitle: string;
|
|
171
|
+
filterReset: string;
|
|
172
|
+
filterClose: string;
|
|
173
|
+
reloadTooltip: string;
|
|
174
|
+
reloadButtonText: string;
|
|
175
|
+
resetSelection: string;
|
|
176
|
+
resetSorting: string;
|
|
177
|
+
rowCountText: string;
|
|
178
|
+
hasErrorText: string;
|
|
179
|
+
};
|
|
175
180
|
}
|
|
176
181
|
declare const DataTableContext: React$1.Context<DataTableContext<unknown>>;
|
|
177
182
|
|
|
@@ -304,7 +309,10 @@ interface TableControlsProps {
|
|
|
304
309
|
showPageSizeControl?: boolean;
|
|
305
310
|
showPageCountText?: boolean;
|
|
306
311
|
showView?: boolean;
|
|
307
|
-
filterOptions?:
|
|
312
|
+
filterOptions?: {
|
|
313
|
+
label: string;
|
|
314
|
+
value: string;
|
|
315
|
+
}[];
|
|
308
316
|
extraItems?: ReactNode;
|
|
309
317
|
loading?: boolean;
|
|
310
318
|
hasError?: boolean;
|
|
@@ -338,9 +346,8 @@ interface TableRowSelectorProps<TData> {
|
|
|
338
346
|
light: string;
|
|
339
347
|
dark: string;
|
|
340
348
|
};
|
|
341
|
-
alwaysShowSelector?: boolean;
|
|
342
349
|
}
|
|
343
|
-
declare const TableBody: ({ showSelector,
|
|
350
|
+
declare const TableBody: ({ showSelector, canResize, }: TableBodyProps) => react_jsx_runtime.JSX.Element;
|
|
344
351
|
|
|
345
352
|
interface TableFooterProps {
|
|
346
353
|
showSelector?: boolean;
|
|
@@ -348,14 +355,56 @@ interface TableFooterProps {
|
|
|
348
355
|
}
|
|
349
356
|
declare const TableFooter: ({ showSelector, alwaysShowSelector, }: TableFooterProps) => react_jsx_runtime.JSX.Element;
|
|
350
357
|
|
|
358
|
+
interface TableHeaderTexts {
|
|
359
|
+
pinColumn?: string;
|
|
360
|
+
cancelPin?: string;
|
|
361
|
+
sortAscending?: string;
|
|
362
|
+
sortDescending?: string;
|
|
363
|
+
clearSorting?: string;
|
|
364
|
+
}
|
|
351
365
|
interface TableHeaderProps {
|
|
352
366
|
canResize?: boolean;
|
|
353
367
|
showSelector?: boolean;
|
|
354
368
|
isSticky?: boolean;
|
|
355
369
|
tableHeaderProps?: TableHeaderProps$1;
|
|
356
370
|
tableRowProps?: TableRowProps;
|
|
371
|
+
/**
|
|
372
|
+
* Default text configuration for all columns.
|
|
373
|
+
* Can be overridden per column via meta.headerTexts.
|
|
374
|
+
*/
|
|
375
|
+
defaultTexts?: TableHeaderTexts;
|
|
357
376
|
}
|
|
358
|
-
|
|
377
|
+
/**
|
|
378
|
+
* TableHeader component with configurable text strings.
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* // Using default texts
|
|
382
|
+
* <TableHeader />
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* // Customizing default texts for all columns
|
|
386
|
+
* <TableHeader
|
|
387
|
+
* defaultTexts={{
|
|
388
|
+
* pinColumn: "Pin This Column",
|
|
389
|
+
* sortAscending: "Sort A-Z"
|
|
390
|
+
* }}
|
|
391
|
+
* />
|
|
392
|
+
*
|
|
393
|
+
* @example
|
|
394
|
+
* // Customizing texts per column via meta
|
|
395
|
+
* const columns = [
|
|
396
|
+
* columnHelper.accessor("name", {
|
|
397
|
+
* header: "Name",
|
|
398
|
+
* meta: {
|
|
399
|
+
* headerTexts: {
|
|
400
|
+
* pinColumn: "Pin Name Column",
|
|
401
|
+
* sortAscending: "Sort Names A-Z"
|
|
402
|
+
* }
|
|
403
|
+
* }
|
|
404
|
+
* })
|
|
405
|
+
* ];
|
|
406
|
+
*/
|
|
407
|
+
declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, defaultTexts, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
359
408
|
|
|
360
409
|
interface DefaultTableProps {
|
|
361
410
|
showFooter?: boolean;
|
|
@@ -369,16 +418,18 @@ interface DefaultTableProps {
|
|
|
369
418
|
declare const DefaultTable: ({ showFooter, tableProps, tableHeaderProps, tableBodyProps, tableFooterProps, controlProps, variant, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
|
|
370
419
|
|
|
371
420
|
interface ReloadButtonProps {
|
|
372
|
-
text?: string;
|
|
373
421
|
variant?: string;
|
|
374
422
|
}
|
|
375
|
-
declare const ReloadButton: ({
|
|
423
|
+
declare const ReloadButton: ({ variant, }: ReloadButtonProps) => react_jsx_runtime.JSX.Element;
|
|
376
424
|
|
|
377
|
-
interface TableCardContainerProps extends
|
|
425
|
+
interface TableCardContainerProps extends BoxProps {
|
|
378
426
|
children: ReactNode;
|
|
379
427
|
variant?: "carousel" | "";
|
|
428
|
+
gap?: string;
|
|
429
|
+
gridTemplateColumns?: string;
|
|
430
|
+
direction?: FlexProps["direction"];
|
|
380
431
|
}
|
|
381
|
-
declare const TableCardContainer: ({ children, variant, ...props }: TableCardContainerProps) => react_jsx_runtime.JSX.Element;
|
|
432
|
+
declare const TableCardContainer: ({ children, variant, gap, gridTemplateColumns, direction, ...props }: TableCardContainerProps) => react_jsx_runtime.JSX.Element;
|
|
382
433
|
|
|
383
434
|
interface TableCardsProps<TData> {
|
|
384
435
|
isSelectable?: boolean;
|
|
@@ -595,6 +646,17 @@ declare module "@tanstack/react-table" {
|
|
|
595
646
|
* The display name of the column, used for rendering headers.
|
|
596
647
|
*/
|
|
597
648
|
displayName?: string;
|
|
649
|
+
/**
|
|
650
|
+
* Text configuration for the column header menu items.
|
|
651
|
+
* These strings can be customized per column.
|
|
652
|
+
*/
|
|
653
|
+
headerTexts?: {
|
|
654
|
+
pinColumn?: string;
|
|
655
|
+
cancelPin?: string;
|
|
656
|
+
sortAscending?: string;
|
|
657
|
+
sortDescending?: string;
|
|
658
|
+
clearSorting?: string;
|
|
659
|
+
};
|
|
598
660
|
/**
|
|
599
661
|
* Specifies the type of filter to be used for the column.
|
|
600
662
|
*
|
|
@@ -615,7 +677,10 @@ declare module "@tanstack/react-table" {
|
|
|
615
677
|
/**
|
|
616
678
|
* Options for the select filter variant, if applicable.
|
|
617
679
|
*/
|
|
618
|
-
filterOptions?:
|
|
680
|
+
filterOptions?: {
|
|
681
|
+
label: string;
|
|
682
|
+
value: string;
|
|
683
|
+
}[];
|
|
619
684
|
/**
|
|
620
685
|
* Configuration for the range filter variant, if applicable.
|
|
621
686
|
*
|
|
@@ -641,4 +706,4 @@ declare module "@tanstack/react-table" {
|
|
|
641
706
|
}
|
|
642
707
|
}
|
|
643
708
|
|
|
644
|
-
export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultForm, type DefaultFormProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, type EditFilterButtonProps, EditSortingButton, type EditSortingButtonProps, type EditViewButtonProps, EmptyState, type EmptyStateProps, ErrorAlert, type ErrorAlertProps, FilterDialog, FilterOptions, type FilterOptionsProps, FormBody, FormRoot, type FormRootProps, FormTitle, 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,
|
|
709
|
+
export { type CalendarProps, CardHeader, type CardHeaderProps, type CustomJSONSchema7Definition, DataDisplay, type DataDisplayProps, type DataResponse, DataTable, type DataTableDefaultState, type DataTableProps, DataTableServer, type DataTableServerProps, type DatePickerProps, DefaultCardTitle, DefaultForm, type DefaultFormProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, type EditFilterButtonProps, EditSortingButton, type EditSortingButtonProps, type EditViewButtonProps, EmptyState, type EmptyStateProps, ErrorAlert, type ErrorAlertProps, FilterDialog, FilterOptions, type FilterOptionsProps, FormBody, FormRoot, type FormRootProps, FormTitle, 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, ResetSelectionButton, ResetSortingButton, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableControls, type TableControlsProps, TableDataDisplay, type TableDataDisplayProps, TableFilter, TableFilterTags, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, type TableHeaderTexts, TableLoadingComponent, type TableLoadingComponentProps, 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, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
|
package/dist/index.js
CHANGED
|
@@ -91,6 +91,10 @@ const DataTableContext = React.createContext({
|
|
|
91
91
|
},
|
|
92
92
|
rowSelection: {},
|
|
93
93
|
columnVisibility: {},
|
|
94
|
+
tableLabel: {
|
|
95
|
+
view: "View",
|
|
96
|
+
edit: "Edit",
|
|
97
|
+
},
|
|
94
98
|
});
|
|
95
99
|
|
|
96
100
|
const useDataTableContext = () => {
|
|
@@ -146,11 +150,13 @@ const TableSorter = () => {
|
|
|
146
150
|
}) }))) }));
|
|
147
151
|
};
|
|
148
152
|
|
|
149
|
-
const ResetSortingButton = (
|
|
153
|
+
const ResetSortingButton = () => {
|
|
150
154
|
const { table } = useDataTableContext();
|
|
155
|
+
const { tableLabel } = useDataTableContext();
|
|
156
|
+
const { resetSorting } = tableLabel;
|
|
151
157
|
return (jsxRuntime.jsx(react.Button, { onClick: () => {
|
|
152
158
|
table.resetSorting();
|
|
153
|
-
}, children:
|
|
159
|
+
}, children: resetSorting }));
|
|
154
160
|
};
|
|
155
161
|
|
|
156
162
|
const EditSortingButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineSort, {}), title = "Edit Sorting", }) => {
|
|
@@ -361,10 +367,11 @@ const Filter = ({ column }) => {
|
|
|
361
367
|
if (filterVariant === "select") {
|
|
362
368
|
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(RadioGroup, { value: column.getFilterValue() ? String(column.getFilterValue()) : "", onValueChange: (details) => {
|
|
363
369
|
column.setFilterValue(details.value);
|
|
364
|
-
}, children: jsxRuntime.
|
|
370
|
+
}, children: jsxRuntime.jsxs(react.Flex, { flexFlow: "wrap", gap: "0.5rem", children: [filterOptions.length === 0 && jsxRuntime.jsx(react.Text, { children: "No filter options" }), filterOptions.length > 0 &&
|
|
371
|
+
filterOptions.map((item) => (jsxRuntime.jsx(Radio, { value: item.value, children: item.label }, item.value)))] }) })] }, column.id));
|
|
365
372
|
}
|
|
366
373
|
if (filterVariant === "tag") {
|
|
367
|
-
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(TagFilter, { availableTags: filterOptions, selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
|
|
374
|
+
return (jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(react.Text, { children: displayName }), jsxRuntime.jsx(TagFilter, { availableTags: filterOptions.map((item) => item.value), selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
|
|
368
375
|
if (tags.length === 0) {
|
|
369
376
|
return column.setFilterValue(undefined);
|
|
370
377
|
}
|
|
@@ -427,17 +434,20 @@ const TableFilter = () => {
|
|
|
427
434
|
}) }));
|
|
428
435
|
};
|
|
429
436
|
|
|
430
|
-
const ResetFilteringButton = (
|
|
437
|
+
const ResetFilteringButton = () => {
|
|
431
438
|
const { table } = useDataTableContext();
|
|
439
|
+
const { tableLabel } = useDataTableContext();
|
|
440
|
+
const { filterReset } = tableLabel;
|
|
432
441
|
return (jsxRuntime.jsx(react.Button, { onClick: () => {
|
|
433
442
|
table.resetColumnFilters();
|
|
434
|
-
}, children:
|
|
443
|
+
}, children: filterReset }));
|
|
435
444
|
};
|
|
436
445
|
|
|
437
446
|
const FilterDialog = ({ icon = jsxRuntime.jsx(md.MdFilterAlt, {}), }) => {
|
|
438
447
|
const filterModal = react.useDisclosure();
|
|
439
|
-
const {
|
|
440
|
-
|
|
448
|
+
const { tableLabel } = useDataTableContext();
|
|
449
|
+
const { filterButtonText, filterTitle, filterClose } = tableLabel;
|
|
450
|
+
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, " ", filterButtonText] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: filterTitle }) }), jsxRuntime.jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsxRuntime.jsx(TableFilter, {}) }), jsxRuntime.jsxs(DialogFooter, { children: [jsxRuntime.jsx(ResetFilteringButton, {}), jsxRuntime.jsx(react.Button, { onClick: filterModal.onClose, variant: "subtle", children: filterClose })] }), jsxRuntime.jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
441
451
|
};
|
|
442
452
|
|
|
443
453
|
const MenuContent = React__namespace.forwardRef(function MenuContent(props, ref) {
|
|
@@ -556,11 +566,13 @@ const Pagination = () => {
|
|
|
556
566
|
}, children: jsxRuntime.jsxs(react.HStack, { children: [jsxRuntime.jsx(PaginationPrevTrigger, {}), jsxRuntime.jsx(PaginationItems, {}), jsxRuntime.jsx(PaginationNextTrigger, {})] }) }));
|
|
557
567
|
};
|
|
558
568
|
|
|
559
|
-
const ResetSelectionButton = (
|
|
569
|
+
const ResetSelectionButton = () => {
|
|
560
570
|
const { table } = useDataTableContext();
|
|
571
|
+
const { tableLabel } = useDataTableContext();
|
|
572
|
+
const { resetSelection } = tableLabel;
|
|
561
573
|
return (jsxRuntime.jsx(react.Button, { onClick: () => {
|
|
562
574
|
table.resetRowSelection();
|
|
563
|
-
}, children:
|
|
575
|
+
}, children: resetSelection }));
|
|
564
576
|
};
|
|
565
577
|
|
|
566
578
|
const RowCountText = () => {
|
|
@@ -2571,8 +2583,9 @@ const TableViewer = () => {
|
|
|
2571
2583
|
|
|
2572
2584
|
const ViewDialog = ({ icon = jsxRuntime.jsx(io.IoMdEye, {}) }) => {
|
|
2573
2585
|
const viewModel = react.useDisclosure();
|
|
2574
|
-
const {
|
|
2575
|
-
|
|
2586
|
+
const { tableLabel } = useDataTableContext();
|
|
2587
|
+
const { view } = tableLabel;
|
|
2588
|
+
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, " ", view] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsx(DialogHeader, { children: jsxRuntime.jsx(DialogTitle, { children: view }) }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }));
|
|
2576
2589
|
};
|
|
2577
2590
|
|
|
2578
2591
|
const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
|
|
@@ -2848,7 +2861,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2848
2861
|
setGlobalFilter,
|
|
2849
2862
|
type: "client",
|
|
2850
2863
|
translate,
|
|
2851
|
-
columns,
|
|
2864
|
+
columns: columns,
|
|
2852
2865
|
sorting,
|
|
2853
2866
|
setSorting,
|
|
2854
2867
|
columnFilters,
|
|
@@ -2864,6 +2877,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2864
2877
|
columnVisibility,
|
|
2865
2878
|
setColumnVisibility,
|
|
2866
2879
|
data,
|
|
2880
|
+
tableLabel: {
|
|
2881
|
+
view: "View",
|
|
2882
|
+
edit: "Edit",
|
|
2883
|
+
},
|
|
2867
2884
|
}, children: children }));
|
|
2868
2885
|
}
|
|
2869
2886
|
|
|
@@ -2881,7 +2898,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2881
2898
|
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, }) {
|
|
2882
2899
|
const table = reactTable.useReactTable({
|
|
2883
2900
|
_features: [DensityFeature],
|
|
2884
|
-
data: query.data?.data ?? [],
|
|
2901
|
+
data: (query.data?.data ?? []),
|
|
2885
2902
|
rowCount: query.data?.count ?? 0,
|
|
2886
2903
|
columns: columns,
|
|
2887
2904
|
getCoreRowModel: reactTable.getCoreRowModel(),
|
|
@@ -2927,12 +2944,12 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2927
2944
|
// for tanstack-table ts bug end
|
|
2928
2945
|
});
|
|
2929
2946
|
return (jsxRuntime.jsx(DataTableContext.Provider, { value: {
|
|
2930
|
-
table:
|
|
2947
|
+
table: table,
|
|
2931
2948
|
globalFilter,
|
|
2932
2949
|
setGlobalFilter,
|
|
2933
2950
|
type: "server",
|
|
2934
2951
|
translate,
|
|
2935
|
-
columns,
|
|
2952
|
+
columns: columns,
|
|
2936
2953
|
sorting,
|
|
2937
2954
|
setSorting,
|
|
2938
2955
|
columnFilters,
|
|
@@ -2985,17 +3002,19 @@ const GlobalFilter = () => {
|
|
|
2985
3002
|
} }) }) }));
|
|
2986
3003
|
};
|
|
2987
3004
|
|
|
2988
|
-
const ReloadButton = ({
|
|
3005
|
+
const ReloadButton = ({ variant = "icon", }) => {
|
|
2989
3006
|
const { url } = useDataTableServerContext();
|
|
2990
3007
|
const queryClient = reactQuery.useQueryClient();
|
|
3008
|
+
const { tableLabel } = useDataTableContext();
|
|
3009
|
+
const { reloadTooltip, reloadButtonText } = tableLabel;
|
|
2991
3010
|
if (variant === "icon") {
|
|
2992
|
-
return (jsxRuntime.jsx(Tooltip, { showArrow: true, content:
|
|
3011
|
+
return (jsxRuntime.jsx(Tooltip, { showArrow: true, content: reloadTooltip, children: jsxRuntime.jsx(Button, { variant: "ghost", onClick: () => {
|
|
2993
3012
|
queryClient.invalidateQueries({ queryKey: [url] });
|
|
2994
3013
|
}, "aria-label": "refresh", children: jsxRuntime.jsx(io5.IoReload, {}) }) }));
|
|
2995
3014
|
}
|
|
2996
3015
|
return (jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
2997
3016
|
queryClient.invalidateQueries({ queryKey: [url] });
|
|
2998
|
-
}, children: [jsxRuntime.jsx(io5.IoReload, {}), " ",
|
|
3017
|
+
}, children: [jsxRuntime.jsx(io5.IoReload, {}), " ", reloadButtonText] }));
|
|
2999
3018
|
};
|
|
3000
3019
|
|
|
3001
3020
|
const FilterOptions = ({ column }) => {
|
|
@@ -3004,6 +3023,7 @@ const FilterOptions = ({ column }) => {
|
|
|
3004
3023
|
const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
|
|
3005
3024
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: options.map((option) => {
|
|
3006
3025
|
const selected = table.getColumn(column)?.getFilterValue() === option;
|
|
3026
|
+
const { label, value } = option;
|
|
3007
3027
|
return (jsxRuntime.jsxs(react.Button, { size: "sm", onClick: () => {
|
|
3008
3028
|
if (selected) {
|
|
3009
3029
|
table.setColumnFilters((state) => {
|
|
@@ -3013,8 +3033,8 @@ const FilterOptions = ({ column }) => {
|
|
|
3013
3033
|
});
|
|
3014
3034
|
return;
|
|
3015
3035
|
}
|
|
3016
|
-
table.getColumn(column)?.setFilterValue(
|
|
3017
|
-
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [
|
|
3036
|
+
table.getColumn(column)?.setFilterValue(value);
|
|
3037
|
+
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsxRuntime.jsx(md.MdClose, {})] }, option.value));
|
|
3018
3038
|
}) }));
|
|
3019
3039
|
};
|
|
3020
3040
|
|
|
@@ -3030,10 +3050,12 @@ const TableFilterTags = () => {
|
|
|
3030
3050
|
};
|
|
3031
3051
|
|
|
3032
3052
|
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, gridProps = {}, }) => {
|
|
3033
|
-
const {
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3053
|
+
const { tableLabel } = useDataTableContext();
|
|
3054
|
+
const { rowCountText, hasErrorText } = tableLabel;
|
|
3055
|
+
return (jsxRuntime.jsxs(react.Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, 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: hasErrorText, 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((option) => {
|
|
3056
|
+
const { label, value } = option;
|
|
3057
|
+
return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [label, ":"] }), jsxRuntime.jsx(FilterOptions, { column: value })] }, value));
|
|
3058
|
+
}) })), showFilterTags && (jsxRuntime.jsx(react.Flex, { children: jsxRuntime.jsx(TableFilterTags, {}) }))] }), jsxRuntime.jsx(react.Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (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: rowCountText }), jsxRuntime.jsx(RowCountText, {})] }))] }), jsxRuntime.jsx(react.Box, { justifySelf: "end", children: showPagination && jsxRuntime.jsx(Pagination, {}) })] }))] }));
|
|
3037
3059
|
};
|
|
3038
3060
|
|
|
3039
3061
|
const EmptyState = React__namespace.forwardRef(function EmptyState(props, ref) {
|
|
@@ -3055,7 +3077,7 @@ const Checkbox = React__namespace.forwardRef(function Checkbox(props, ref) {
|
|
|
3055
3077
|
return (jsxRuntime.jsxs(react.Checkbox.Root, { ref: rootRef, ...rest, children: [jsxRuntime.jsx(react.Checkbox.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsx(react.Checkbox.Control, { children: icon || jsxRuntime.jsx(react.Checkbox.Indicator, {}) }), children != null && (jsxRuntime.jsx(react.Checkbox.Label, { children: children }))] }));
|
|
3056
3078
|
});
|
|
3057
3079
|
|
|
3058
|
-
const TableBody = ({ showSelector = false,
|
|
3080
|
+
const TableBody = ({ showSelector = false, canResize = true, }) => {
|
|
3059
3081
|
"use no memo";
|
|
3060
3082
|
const { table } = useDataTableContext();
|
|
3061
3083
|
const SELECTION_BOX_WIDTH = 20;
|
|
@@ -3099,7 +3121,7 @@ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize
|
|
|
3099
3121
|
})] }, `chakra-table-row-${row.id}`));
|
|
3100
3122
|
}) }));
|
|
3101
3123
|
};
|
|
3102
|
-
const TableRowSelector = ({
|
|
3124
|
+
const TableRowSelector = ({ row, }) => {
|
|
3103
3125
|
const { table } = useDataTableContext();
|
|
3104
3126
|
const SELECTION_BOX_WIDTH = 20;
|
|
3105
3127
|
return (jsxRuntime.jsx(react.Table.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
@@ -3136,14 +3158,57 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
|
3136
3158
|
// styling resize and pinning start
|
|
3137
3159
|
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsxRuntime.jsx(react.MenuRoot, { children: jsxRuntime.jsx(react.MenuTrigger, { asChild: true, children: jsxRuntime.jsx(react.Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxRuntime.jsxs(react.Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3138
3160
|
? null
|
|
3139
|
-
: reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3140
|
-
// <UpDownIcon />
|
|
3141
|
-
jsxRuntime.jsx(jsxRuntime.Fragment, {})), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3161
|
+
: reactTable.flexRender(header.column.columnDef.footer, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3142
3162
|
};
|
|
3143
3163
|
|
|
3144
|
-
|
|
3164
|
+
// Default text values
|
|
3165
|
+
const DEFAULT_HEADER_TEXTS = {
|
|
3166
|
+
pinColumn: "Pin Column",
|
|
3167
|
+
cancelPin: "Cancel Pin",
|
|
3168
|
+
sortAscending: "Sort Ascending",
|
|
3169
|
+
sortDescending: "Sort Descending",
|
|
3170
|
+
clearSorting: "Clear Sorting",
|
|
3171
|
+
};
|
|
3172
|
+
/**
|
|
3173
|
+
* TableHeader component with configurable text strings.
|
|
3174
|
+
*
|
|
3175
|
+
* @example
|
|
3176
|
+
* // Using default texts
|
|
3177
|
+
* <TableHeader />
|
|
3178
|
+
*
|
|
3179
|
+
* @example
|
|
3180
|
+
* // Customizing default texts for all columns
|
|
3181
|
+
* <TableHeader
|
|
3182
|
+
* defaultTexts={{
|
|
3183
|
+
* pinColumn: "Pin This Column",
|
|
3184
|
+
* sortAscending: "Sort A-Z"
|
|
3185
|
+
* }}
|
|
3186
|
+
* />
|
|
3187
|
+
*
|
|
3188
|
+
* @example
|
|
3189
|
+
* // Customizing texts per column via meta
|
|
3190
|
+
* const columns = [
|
|
3191
|
+
* columnHelper.accessor("name", {
|
|
3192
|
+
* header: "Name",
|
|
3193
|
+
* meta: {
|
|
3194
|
+
* headerTexts: {
|
|
3195
|
+
* pinColumn: "Pin Name Column",
|
|
3196
|
+
* sortAscending: "Sort Names A-Z"
|
|
3197
|
+
* }
|
|
3198
|
+
* }
|
|
3199
|
+
* })
|
|
3200
|
+
* ];
|
|
3201
|
+
*/
|
|
3202
|
+
const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
|
|
3145
3203
|
const { table } = useDataTableContext();
|
|
3146
3204
|
const SELECTION_BOX_WIDTH = 20;
|
|
3205
|
+
// Merge default texts with provided defaults
|
|
3206
|
+
const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
|
|
3207
|
+
// Helper function to get text for a specific header
|
|
3208
|
+
const getHeaderText = (header, key) => {
|
|
3209
|
+
const columnMeta = header.column.columnDef.meta;
|
|
3210
|
+
return columnMeta?.headerTexts?.[key] || mergedDefaultTexts[key];
|
|
3211
|
+
};
|
|
3147
3212
|
const getThProps = (header) => {
|
|
3148
3213
|
const thProps = header.column.getIsPinned()
|
|
3149
3214
|
? {
|
|
@@ -3197,9 +3262,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3197
3262
|
? null
|
|
3198
3263
|
: reactTable.flexRender(header.column.columnDef.header, header.getContext()), jsxRuntime.jsx(react.Box, { children: header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [header.column.getIsSorted() === false && jsxRuntime.jsx(jsxRuntime.Fragment, {}), header.column.getIsSorted() === "asc" && (jsxRuntime.jsx(bi.BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsxRuntime.jsx(bi.BiDownArrow, {}))] })) }), jsxRuntime.jsx(react.Box, { children: header.column.getIsFiltered() && jsxRuntime.jsx(md.MdFilterListAlt, {}) })] }) }) }), jsxRuntime.jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3199
3264
|
header.column.pin("left");
|
|
3200
|
-
}, children: [jsxRuntime.jsx(md.MdPushPin, {}),
|
|
3265
|
+
}, children: [jsxRuntime.jsx(md.MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3201
3266
|
header.column.pin(false);
|
|
3202
|
-
}, children: [jsxRuntime.jsx(md.MdCancel, {}),
|
|
3267
|
+
}, children: [jsxRuntime.jsx(md.MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3203
3268
|
table.setSorting((state) => {
|
|
3204
3269
|
return [
|
|
3205
3270
|
...state.filter((column) => {
|
|
@@ -3208,7 +3273,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3208
3273
|
{ id: header.id, desc: false },
|
|
3209
3274
|
];
|
|
3210
3275
|
});
|
|
3211
|
-
}, children: [jsxRuntime.jsx(gr.GrAscend, {}),
|
|
3276
|
+
}, children: [jsxRuntime.jsx(gr.GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsxRuntime.jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3212
3277
|
table.setSorting((state) => {
|
|
3213
3278
|
return [
|
|
3214
3279
|
...state.filter((column) => {
|
|
@@ -3217,9 +3282,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3217
3282
|
{ id: header.id, desc: true },
|
|
3218
3283
|
];
|
|
3219
3284
|
});
|
|
3220
|
-
}, children: [jsxRuntime.jsx(gr.GrDescend, {}),
|
|
3285
|
+
}, children: [jsxRuntime.jsx(gr.GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsxRuntime.jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxRuntime.jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3221
3286
|
header.column.clearSorting();
|
|
3222
|
-
}, children: [jsxRuntime.jsx(md.MdClear, {}),
|
|
3287
|
+
}, children: [jsxRuntime.jsx(md.MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsxRuntime.jsx(react.Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3223
3288
|
? "colorPalette.700"
|
|
3224
3289
|
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3225
3290
|
borderRightColor: header.column.getIsResizing()
|
|
@@ -3236,11 +3301,11 @@ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps =
|
|
|
3236
3301
|
return (jsxRuntime.jsx(TableControls, { ...controlProps, children: jsxRuntime.jsxs(Table, { ...tableProps, children: [jsxRuntime.jsx(TableHeader, { ...tableHeaderProps }), jsxRuntime.jsx(TableBody, { ...tableBodyProps }), showFooter && jsxRuntime.jsx(TableFooter, { ...tableFooterProps })] }) }));
|
|
3237
3302
|
};
|
|
3238
3303
|
|
|
3239
|
-
const TableCardContainer = ({ children, variant = "", ...props }) => {
|
|
3304
|
+
const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
|
|
3240
3305
|
if (variant === "carousel") {
|
|
3241
|
-
return (jsxRuntime.jsx(react.Flex, { overflow: "
|
|
3306
|
+
return (jsxRuntime.jsx(react.Flex, { overflow: "auto", gap: gap, direction: direction, ...props, children: children }));
|
|
3242
3307
|
}
|
|
3243
|
-
return (jsxRuntime.jsx(react.Grid, { gridTemplateColumns:
|
|
3308
|
+
return (jsxRuntime.jsx(react.Grid, { gridTemplateColumns: gridTemplateColumns, gap: gap, ...props, children: children }));
|
|
3244
3309
|
};
|
|
3245
3310
|
|
|
3246
3311
|
const DefaultCardTitle = () => {
|
|
@@ -3269,8 +3334,8 @@ const TableComponent = ({ render = () => {
|
|
|
3269
3334
|
};
|
|
3270
3335
|
|
|
3271
3336
|
const TableLoadingComponent = ({ render, }) => {
|
|
3272
|
-
const {
|
|
3273
|
-
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: render(
|
|
3337
|
+
const { query } = useDataTableServerContext();
|
|
3338
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: render(query.isLoading) });
|
|
3274
3339
|
};
|
|
3275
3340
|
|
|
3276
3341
|
const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText = "", clearAllText = "", }) => {
|
|
@@ -3490,10 +3555,7 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
|
|
|
3490
3555
|
};
|
|
3491
3556
|
|
|
3492
3557
|
const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
|
|
3493
|
-
const {
|
|
3494
|
-
const columnDef = table._getColumnDefs();
|
|
3495
|
-
console.log(columnDef, "glp");
|
|
3496
|
-
console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
|
|
3558
|
+
const { columns, translate, data } = useDataTableContext();
|
|
3497
3559
|
const columnsMap = Object.fromEntries(columns.map((def) => {
|
|
3498
3560
|
const { accessorKey, id } = def;
|
|
3499
3561
|
if (accessorKey) {
|
package/dist/index.mjs
CHANGED
|
@@ -71,6 +71,10 @@ const DataTableContext = createContext({
|
|
|
71
71
|
},
|
|
72
72
|
rowSelection: {},
|
|
73
73
|
columnVisibility: {},
|
|
74
|
+
tableLabel: {
|
|
75
|
+
view: "View",
|
|
76
|
+
edit: "Edit",
|
|
77
|
+
},
|
|
74
78
|
});
|
|
75
79
|
|
|
76
80
|
const useDataTableContext = () => {
|
|
@@ -126,11 +130,13 @@ const TableSorter = () => {
|
|
|
126
130
|
}) }))) }));
|
|
127
131
|
};
|
|
128
132
|
|
|
129
|
-
const ResetSortingButton = (
|
|
133
|
+
const ResetSortingButton = () => {
|
|
130
134
|
const { table } = useDataTableContext();
|
|
135
|
+
const { tableLabel } = useDataTableContext();
|
|
136
|
+
const { resetSorting } = tableLabel;
|
|
131
137
|
return (jsx(Button$1, { onClick: () => {
|
|
132
138
|
table.resetSorting();
|
|
133
|
-
}, children:
|
|
139
|
+
}, children: resetSorting }));
|
|
134
140
|
};
|
|
135
141
|
|
|
136
142
|
const EditSortingButton = ({ text, icon = jsx(MdOutlineSort, {}), title = "Edit Sorting", }) => {
|
|
@@ -341,10 +347,11 @@ const Filter = ({ column }) => {
|
|
|
341
347
|
if (filterVariant === "select") {
|
|
342
348
|
return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(RadioGroup, { value: column.getFilterValue() ? String(column.getFilterValue()) : "", onValueChange: (details) => {
|
|
343
349
|
column.setFilterValue(details.value);
|
|
344
|
-
}, children:
|
|
350
|
+
}, children: jsxs(Flex, { flexFlow: "wrap", gap: "0.5rem", children: [filterOptions.length === 0 && jsx(Text, { children: "No filter options" }), filterOptions.length > 0 &&
|
|
351
|
+
filterOptions.map((item) => (jsx(Radio, { value: item.value, children: item.label }, item.value)))] }) })] }, column.id));
|
|
345
352
|
}
|
|
346
353
|
if (filterVariant === "tag") {
|
|
347
|
-
return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(TagFilter, { availableTags: filterOptions, selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
|
|
354
|
+
return (jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(Text, { children: displayName }), jsx(TagFilter, { availableTags: filterOptions.map((item) => item.value), selectedTags: (column.getFilterValue() ?? []), onTagChange: (tags) => {
|
|
348
355
|
if (tags.length === 0) {
|
|
349
356
|
return column.setFilterValue(undefined);
|
|
350
357
|
}
|
|
@@ -407,17 +414,20 @@ const TableFilter = () => {
|
|
|
407
414
|
}) }));
|
|
408
415
|
};
|
|
409
416
|
|
|
410
|
-
const ResetFilteringButton = (
|
|
417
|
+
const ResetFilteringButton = () => {
|
|
411
418
|
const { table } = useDataTableContext();
|
|
419
|
+
const { tableLabel } = useDataTableContext();
|
|
420
|
+
const { filterReset } = tableLabel;
|
|
412
421
|
return (jsx(Button$1, { onClick: () => {
|
|
413
422
|
table.resetColumnFilters();
|
|
414
|
-
}, children:
|
|
423
|
+
}, children: filterReset }));
|
|
415
424
|
};
|
|
416
425
|
|
|
417
426
|
const FilterDialog = ({ icon = jsx(MdFilterAlt, {}), }) => {
|
|
418
427
|
const filterModal = useDisclosure();
|
|
419
|
-
const {
|
|
420
|
-
|
|
428
|
+
const { tableLabel } = useDataTableContext();
|
|
429
|
+
const { filterButtonText, filterTitle, filterClose } = tableLabel;
|
|
430
|
+
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, " ", filterButtonText] }) }), jsxs(DialogContent, { children: [jsx(DialogHeader, { children: jsx(DialogTitle, { children: filterTitle }) }), jsx(DialogBody, { display: "flex", flexFlow: "column", children: jsx(TableFilter, {}) }), jsxs(DialogFooter, { children: [jsx(ResetFilteringButton, {}), jsx(Button$1, { onClick: filterModal.onClose, variant: "subtle", children: filterClose })] }), jsx(DialogCloseTrigger, { onClick: filterModal.onClose })] })] }));
|
|
421
431
|
};
|
|
422
432
|
|
|
423
433
|
const MenuContent = React.forwardRef(function MenuContent(props, ref) {
|
|
@@ -536,11 +546,13 @@ const Pagination = () => {
|
|
|
536
546
|
}, children: jsxs(HStack, { children: [jsx(PaginationPrevTrigger, {}), jsx(PaginationItems, {}), jsx(PaginationNextTrigger, {})] }) }));
|
|
537
547
|
};
|
|
538
548
|
|
|
539
|
-
const ResetSelectionButton = (
|
|
549
|
+
const ResetSelectionButton = () => {
|
|
540
550
|
const { table } = useDataTableContext();
|
|
551
|
+
const { tableLabel } = useDataTableContext();
|
|
552
|
+
const { resetSelection } = tableLabel;
|
|
541
553
|
return (jsx(Button$1, { onClick: () => {
|
|
542
554
|
table.resetRowSelection();
|
|
543
|
-
}, children:
|
|
555
|
+
}, children: resetSelection }));
|
|
544
556
|
};
|
|
545
557
|
|
|
546
558
|
const RowCountText = () => {
|
|
@@ -2551,8 +2563,9 @@ const TableViewer = () => {
|
|
|
2551
2563
|
|
|
2552
2564
|
const ViewDialog = ({ icon = jsx(IoMdEye, {}) }) => {
|
|
2553
2565
|
const viewModel = useDisclosure();
|
|
2554
|
-
const {
|
|
2555
|
-
|
|
2566
|
+
const { tableLabel } = useDataTableContext();
|
|
2567
|
+
const { view } = tableLabel;
|
|
2568
|
+
return (jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", view] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsx(DialogHeader, { children: jsx(DialogTitle, { children: view }) }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }));
|
|
2556
2569
|
};
|
|
2557
2570
|
|
|
2558
2571
|
const CardHeader = ({ row, imageColumnId = undefined, titleColumnId = undefined, tagColumnId = undefined, tagIcon = undefined, showTag = true, imageProps = {}, }) => {
|
|
@@ -2828,7 +2841,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2828
2841
|
setGlobalFilter,
|
|
2829
2842
|
type: "client",
|
|
2830
2843
|
translate,
|
|
2831
|
-
columns,
|
|
2844
|
+
columns: columns,
|
|
2832
2845
|
sorting,
|
|
2833
2846
|
setSorting,
|
|
2834
2847
|
columnFilters,
|
|
@@ -2844,6 +2857,10 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2844
2857
|
columnVisibility,
|
|
2845
2858
|
setColumnVisibility,
|
|
2846
2859
|
data,
|
|
2860
|
+
tableLabel: {
|
|
2861
|
+
view: "View",
|
|
2862
|
+
edit: "Edit",
|
|
2863
|
+
},
|
|
2847
2864
|
}, children: children }));
|
|
2848
2865
|
}
|
|
2849
2866
|
|
|
@@ -2861,7 +2878,7 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2861
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, }) {
|
|
2862
2879
|
const table = useReactTable({
|
|
2863
2880
|
_features: [DensityFeature],
|
|
2864
|
-
data: query.data?.data ?? [],
|
|
2881
|
+
data: (query.data?.data ?? []),
|
|
2865
2882
|
rowCount: query.data?.count ?? 0,
|
|
2866
2883
|
columns: columns,
|
|
2867
2884
|
getCoreRowModel: getCoreRowModel(),
|
|
@@ -2907,12 +2924,12 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2907
2924
|
// for tanstack-table ts bug end
|
|
2908
2925
|
});
|
|
2909
2926
|
return (jsx(DataTableContext.Provider, { value: {
|
|
2910
|
-
table:
|
|
2927
|
+
table: table,
|
|
2911
2928
|
globalFilter,
|
|
2912
2929
|
setGlobalFilter,
|
|
2913
2930
|
type: "server",
|
|
2914
2931
|
translate,
|
|
2915
|
-
columns,
|
|
2932
|
+
columns: columns,
|
|
2916
2933
|
sorting,
|
|
2917
2934
|
setSorting,
|
|
2918
2935
|
columnFilters,
|
|
@@ -2965,17 +2982,19 @@ const GlobalFilter = () => {
|
|
|
2965
2982
|
} }) }) }));
|
|
2966
2983
|
};
|
|
2967
2984
|
|
|
2968
|
-
const ReloadButton = ({
|
|
2985
|
+
const ReloadButton = ({ variant = "icon", }) => {
|
|
2969
2986
|
const { url } = useDataTableServerContext();
|
|
2970
2987
|
const queryClient = useQueryClient();
|
|
2988
|
+
const { tableLabel } = useDataTableContext();
|
|
2989
|
+
const { reloadTooltip, reloadButtonText } = tableLabel;
|
|
2971
2990
|
if (variant === "icon") {
|
|
2972
|
-
return (jsx(Tooltip, { showArrow: true, content:
|
|
2991
|
+
return (jsx(Tooltip, { showArrow: true, content: reloadTooltip, children: jsx(Button, { variant: "ghost", onClick: () => {
|
|
2973
2992
|
queryClient.invalidateQueries({ queryKey: [url] });
|
|
2974
2993
|
}, "aria-label": "refresh", children: jsx(IoReload, {}) }) }));
|
|
2975
2994
|
}
|
|
2976
2995
|
return (jsxs(Button, { variant: "ghost", onClick: () => {
|
|
2977
2996
|
queryClient.invalidateQueries({ queryKey: [url] });
|
|
2978
|
-
}, children: [jsx(IoReload, {}), " ",
|
|
2997
|
+
}, children: [jsx(IoReload, {}), " ", reloadButtonText] }));
|
|
2979
2998
|
};
|
|
2980
2999
|
|
|
2981
3000
|
const FilterOptions = ({ column }) => {
|
|
@@ -2984,6 +3003,7 @@ const FilterOptions = ({ column }) => {
|
|
|
2984
3003
|
const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
|
|
2985
3004
|
return (jsx(Fragment, { children: options.map((option) => {
|
|
2986
3005
|
const selected = table.getColumn(column)?.getFilterValue() === option;
|
|
3006
|
+
const { label, value } = option;
|
|
2987
3007
|
return (jsxs(Button$1, { size: "sm", onClick: () => {
|
|
2988
3008
|
if (selected) {
|
|
2989
3009
|
table.setColumnFilters((state) => {
|
|
@@ -2993,8 +3013,8 @@ const FilterOptions = ({ column }) => {
|
|
|
2993
3013
|
});
|
|
2994
3014
|
return;
|
|
2995
3015
|
}
|
|
2996
|
-
table.getColumn(column)?.setFilterValue(
|
|
2997
|
-
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [
|
|
3016
|
+
table.getColumn(column)?.setFilterValue(value);
|
|
3017
|
+
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsx(MdClose, {})] }, option.value));
|
|
2998
3018
|
}) }));
|
|
2999
3019
|
};
|
|
3000
3020
|
|
|
@@ -3010,10 +3030,12 @@ const TableFilterTags = () => {
|
|
|
3010
3030
|
};
|
|
3011
3031
|
|
|
3012
3032
|
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, gridProps = {}, }) => {
|
|
3013
|
-
const {
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3033
|
+
const { tableLabel } = useDataTableContext();
|
|
3034
|
+
const { rowCountText, hasErrorText } = tableLabel;
|
|
3035
|
+
return (jsxs(Grid, { templateRows: "auto 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", gap: "0.5rem", ...gridProps, 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: hasErrorText, 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((option) => {
|
|
3036
|
+
const { label, value } = option;
|
|
3037
|
+
return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [label, ":"] }), jsx(FilterOptions, { column: value })] }, value));
|
|
3038
|
+
}) })), showFilterTags && (jsx(Flex, { children: jsx(TableFilterTags, {}) }))] }), jsx(Grid, { overflow: "auto", bg: { base: "colorPalette.50", _dark: "colorPalette.950" }, children: children }), (showPageSizeControl || showPageCountText || showPagination) && (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: rowCountText }), jsx(RowCountText, {})] }))] }), jsx(Box, { justifySelf: "end", children: showPagination && jsx(Pagination, {}) })] }))] }));
|
|
3017
3039
|
};
|
|
3018
3040
|
|
|
3019
3041
|
const EmptyState = React.forwardRef(function EmptyState(props, ref) {
|
|
@@ -3035,7 +3057,7 @@ const Checkbox = React.forwardRef(function Checkbox(props, ref) {
|
|
|
3035
3057
|
return (jsxs(Checkbox$1.Root, { ref: rootRef, ...rest, children: [jsx(Checkbox$1.HiddenInput, { ref: ref, ...inputProps }), jsx(Checkbox$1.Control, { children: icon || jsx(Checkbox$1.Indicator, {}) }), children != null && (jsx(Checkbox$1.Label, { children: children }))] }));
|
|
3036
3058
|
});
|
|
3037
3059
|
|
|
3038
|
-
const TableBody = ({ showSelector = false,
|
|
3060
|
+
const TableBody = ({ showSelector = false, canResize = true, }) => {
|
|
3039
3061
|
"use no memo";
|
|
3040
3062
|
const { table } = useDataTableContext();
|
|
3041
3063
|
const SELECTION_BOX_WIDTH = 20;
|
|
@@ -3079,7 +3101,7 @@ const TableBody = ({ showSelector = false, alwaysShowSelector = true, canResize
|
|
|
3079
3101
|
})] }, `chakra-table-row-${row.id}`));
|
|
3080
3102
|
}) }));
|
|
3081
3103
|
};
|
|
3082
|
-
const TableRowSelector = ({
|
|
3104
|
+
const TableRowSelector = ({ row, }) => {
|
|
3083
3105
|
const { table } = useDataTableContext();
|
|
3084
3106
|
const SELECTION_BOX_WIDTH = 20;
|
|
3085
3107
|
return (jsx(Table$1.Cell, { padding: `${table.getDensityValue()}px`, display: "grid", color: {
|
|
@@ -3116,14 +3138,57 @@ const TableFooter = ({ showSelector = false, alwaysShowSelector = true, }) => {
|
|
|
3116
3138
|
// styling resize and pinning start
|
|
3117
3139
|
maxWidth: `${header.getSize()}px`, width: `${header.getSize()}px`, display: "grid", children: jsx(MenuRoot$1, { children: jsx(MenuTrigger$1, { asChild: true, children: jsx(Box, { padding: `${table.getDensityValue()}px`, display: "flex", alignItems: "center", justifyContent: "start", borderRadius: "0rem", children: jsxs(Flex, { gap: "0.5rem", alignItems: "center", children: [header.isPlaceholder
|
|
3118
3140
|
? null
|
|
3119
|
-
: flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && (
|
|
3120
|
-
// <UpDownIcon />
|
|
3121
|
-
jsx(Fragment, {})), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3141
|
+
: flexRender(header.column.columnDef.footer, header.getContext()), jsx(Box, { children: header.column.getCanSort() && (jsxs(Fragment, { children: [header.column.getIsSorted() === false && jsx(Fragment, {}), header.column.getIsSorted() === "asc" && (jsx(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) })] }) }) }) }) }, `chakra-table-footer-${header.column.id}-${footerGroup.id}`)))] }, `chakra-table-footergroup-${footerGroup.id}`))) }));
|
|
3122
3142
|
};
|
|
3123
3143
|
|
|
3124
|
-
|
|
3144
|
+
// Default text values
|
|
3145
|
+
const DEFAULT_HEADER_TEXTS = {
|
|
3146
|
+
pinColumn: "Pin Column",
|
|
3147
|
+
cancelPin: "Cancel Pin",
|
|
3148
|
+
sortAscending: "Sort Ascending",
|
|
3149
|
+
sortDescending: "Sort Descending",
|
|
3150
|
+
clearSorting: "Clear Sorting",
|
|
3151
|
+
};
|
|
3152
|
+
/**
|
|
3153
|
+
* TableHeader component with configurable text strings.
|
|
3154
|
+
*
|
|
3155
|
+
* @example
|
|
3156
|
+
* // Using default texts
|
|
3157
|
+
* <TableHeader />
|
|
3158
|
+
*
|
|
3159
|
+
* @example
|
|
3160
|
+
* // Customizing default texts for all columns
|
|
3161
|
+
* <TableHeader
|
|
3162
|
+
* defaultTexts={{
|
|
3163
|
+
* pinColumn: "Pin This Column",
|
|
3164
|
+
* sortAscending: "Sort A-Z"
|
|
3165
|
+
* }}
|
|
3166
|
+
* />
|
|
3167
|
+
*
|
|
3168
|
+
* @example
|
|
3169
|
+
* // Customizing texts per column via meta
|
|
3170
|
+
* const columns = [
|
|
3171
|
+
* columnHelper.accessor("name", {
|
|
3172
|
+
* header: "Name",
|
|
3173
|
+
* meta: {
|
|
3174
|
+
* headerTexts: {
|
|
3175
|
+
* pinColumn: "Pin Name Column",
|
|
3176
|
+
* sortAscending: "Sort Names A-Z"
|
|
3177
|
+
* }
|
|
3178
|
+
* }
|
|
3179
|
+
* })
|
|
3180
|
+
* ];
|
|
3181
|
+
*/
|
|
3182
|
+
const TableHeader = ({ canResize = true, showSelector = false, isSticky = true, tableHeaderProps = {}, tableRowProps = {}, defaultTexts = {}, }) => {
|
|
3125
3183
|
const { table } = useDataTableContext();
|
|
3126
3184
|
const SELECTION_BOX_WIDTH = 20;
|
|
3185
|
+
// Merge default texts with provided defaults
|
|
3186
|
+
const mergedDefaultTexts = { ...DEFAULT_HEADER_TEXTS, ...defaultTexts };
|
|
3187
|
+
// Helper function to get text for a specific header
|
|
3188
|
+
const getHeaderText = (header, key) => {
|
|
3189
|
+
const columnMeta = header.column.columnDef.meta;
|
|
3190
|
+
return columnMeta?.headerTexts?.[key] || mergedDefaultTexts[key];
|
|
3191
|
+
};
|
|
3127
3192
|
const getThProps = (header) => {
|
|
3128
3193
|
const thProps = header.column.getIsPinned()
|
|
3129
3194
|
? {
|
|
@@ -3177,9 +3242,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3177
3242
|
? null
|
|
3178
3243
|
: 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(BiUpArrow, {})), header.column.getIsSorted() === "desc" && (jsx(BiDownArrow, {}))] })) }), jsx(Box, { children: header.column.getIsFiltered() && jsx(MdFilterListAlt, {}) })] }) }) }), jsxs(MenuContent, { children: [!header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "pin-column", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3179
3244
|
header.column.pin("left");
|
|
3180
|
-
}, children: [jsx(MdPushPin, {}),
|
|
3245
|
+
}, children: [jsx(MdPushPin, {}), getHeaderText(header, "pinColumn")] }) })), header.column.getIsPinned() && (jsx(MenuItem, { asChild: true, value: "cancel-pin", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3181
3246
|
header.column.pin(false);
|
|
3182
|
-
}, children: [jsx(MdCancel, {}),
|
|
3247
|
+
}, children: [jsx(MdCancel, {}), getHeaderText(header, "cancelPin")] }) })), header.column.getCanSort() && (jsxs(Fragment, { children: [jsx(MenuItem, { asChild: true, value: "sort-ascend", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3183
3248
|
table.setSorting((state) => {
|
|
3184
3249
|
return [
|
|
3185
3250
|
...state.filter((column) => {
|
|
@@ -3188,7 +3253,7 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3188
3253
|
{ id: header.id, desc: false },
|
|
3189
3254
|
];
|
|
3190
3255
|
});
|
|
3191
|
-
}, children: [jsx(GrAscend, {}),
|
|
3256
|
+
}, children: [jsx(GrAscend, {}), getHeaderText(header, "sortAscending")] }) }), jsx(MenuItem, { asChild: true, value: "sort-descend", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3192
3257
|
table.setSorting((state) => {
|
|
3193
3258
|
return [
|
|
3194
3259
|
...state.filter((column) => {
|
|
@@ -3197,9 +3262,9 @@ const TableHeader = ({ canResize = true, showSelector = false, isSticky = true,
|
|
|
3197
3262
|
{ id: header.id, desc: true },
|
|
3198
3263
|
];
|
|
3199
3264
|
});
|
|
3200
|
-
}, children: [jsx(GrDescend, {}),
|
|
3265
|
+
}, children: [jsx(GrDescend, {}), getHeaderText(header, "sortDescending")] }) }), header.column.getIsSorted() && (jsx(MenuItem, { asChild: true, value: "clear-sorting", children: jsxs(Button, { variant: "ghost", onClick: () => {
|
|
3201
3266
|
header.column.clearSorting();
|
|
3202
|
-
}, children: [jsx(MdClear, {}),
|
|
3267
|
+
}, children: [jsx(MdClear, {}), getHeaderText(header, "clearSorting")] }) }))] }))] })] }), canResize && (jsx(Box, { borderRight: "0.2rem solid", borderRightColor: header.column.getIsResizing()
|
|
3203
3268
|
? "colorPalette.700"
|
|
3204
3269
|
: "transparent", position: "relative", right: "0.1rem", width: "2px", height: "100%", userSelect: "none", style: { touchAction: "none" }, _hover: {
|
|
3205
3270
|
borderRightColor: header.column.getIsResizing()
|
|
@@ -3216,11 +3281,11 @@ const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps =
|
|
|
3216
3281
|
return (jsx(TableControls, { ...controlProps, children: jsxs(Table, { ...tableProps, children: [jsx(TableHeader, { ...tableHeaderProps }), jsx(TableBody, { ...tableBodyProps }), showFooter && jsx(TableFooter, { ...tableFooterProps })] }) }));
|
|
3217
3282
|
};
|
|
3218
3283
|
|
|
3219
|
-
const TableCardContainer = ({ children, variant = "", ...props }) => {
|
|
3284
|
+
const TableCardContainer = ({ children, variant = "", gap = "1rem", gridTemplateColumns = "repeat(auto-fit, minmax(20rem, 1fr))", direction = "row", ...props }) => {
|
|
3220
3285
|
if (variant === "carousel") {
|
|
3221
|
-
return (jsx(Flex, { overflow: "
|
|
3286
|
+
return (jsx(Flex, { overflow: "auto", gap: gap, direction: direction, ...props, children: children }));
|
|
3222
3287
|
}
|
|
3223
|
-
return (jsx(Grid, { gridTemplateColumns:
|
|
3288
|
+
return (jsx(Grid, { gridTemplateColumns: gridTemplateColumns, gap: gap, ...props, children: children }));
|
|
3224
3289
|
};
|
|
3225
3290
|
|
|
3226
3291
|
const DefaultCardTitle = () => {
|
|
@@ -3249,8 +3314,8 @@ const TableComponent = ({ render = () => {
|
|
|
3249
3314
|
};
|
|
3250
3315
|
|
|
3251
3316
|
const TableLoadingComponent = ({ render, }) => {
|
|
3252
|
-
const {
|
|
3253
|
-
return jsx(Fragment, { children: render(
|
|
3317
|
+
const { query } = useDataTableServerContext();
|
|
3318
|
+
return jsx(Fragment, { children: render(query.isLoading) });
|
|
3254
3319
|
};
|
|
3255
3320
|
|
|
3256
3321
|
const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText = "", clearAllText = "", }) => {
|
|
@@ -3470,10 +3535,7 @@ const getColumns = ({ schema, include = [], ignore = [], width = [], meta = {},
|
|
|
3470
3535
|
};
|
|
3471
3536
|
|
|
3472
3537
|
const TableDataDisplay = ({ colorPalette, emptyComponent, }) => {
|
|
3473
|
-
const {
|
|
3474
|
-
const columnDef = table._getColumnDefs();
|
|
3475
|
-
console.log(columnDef, "glp");
|
|
3476
|
-
console.log(columnDef, columns, table.getState().columnOrder, data, "glp");
|
|
3538
|
+
const { columns, translate, data } = useDataTableContext();
|
|
3477
3539
|
const columnsMap = Object.fromEntries(columns.map((def) => {
|
|
3478
3540
|
const { accessorKey, id } = def;
|
|
3479
3541
|
if (accessorKey) {
|
|
@@ -8,5 +8,19 @@ export interface DataTableContext<TData = unknown> extends DataTableProps {
|
|
|
8
8
|
setGlobalFilter: OnChangeFn<string>;
|
|
9
9
|
type: "client" | "server";
|
|
10
10
|
translate: UseTranslationResponse<any, unknown>;
|
|
11
|
+
tableLabel: {
|
|
12
|
+
view: string;
|
|
13
|
+
edit: string;
|
|
14
|
+
filterButtonText: string;
|
|
15
|
+
filterTitle: string;
|
|
16
|
+
filterReset: string;
|
|
17
|
+
filterClose: string;
|
|
18
|
+
reloadTooltip: string;
|
|
19
|
+
reloadButtonText: string;
|
|
20
|
+
resetSelection: string;
|
|
21
|
+
resetSorting: string;
|
|
22
|
+
rowCountText: string;
|
|
23
|
+
hasErrorText: string;
|
|
24
|
+
};
|
|
11
25
|
}
|
|
12
26
|
export declare const DataTableContext: import("react").Context<DataTableContext<unknown>>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export interface ReloadButtonProps {
|
|
2
|
-
text?: string;
|
|
3
2
|
variant?: string;
|
|
4
3
|
}
|
|
5
|
-
export declare const ReloadButton: ({
|
|
4
|
+
export declare const ReloadButton: ({ variant, }: ReloadButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
text?: string;
|
|
3
|
-
}
|
|
4
|
-
export declare const ResetFilteringButton: ({ text, }: ResetFilteringButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export declare const ResetFilteringButton: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
text?: string;
|
|
3
|
-
}
|
|
4
|
-
export declare const ResetSelectionButton: ({ text, }: ResetSelectionButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export declare const ResetSelectionButton: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
text?: string;
|
|
3
|
-
}
|
|
4
|
-
export declare const ResetSortingButton: ({ text, }: ResetSortingButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export declare const ResetSortingButton: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -14,7 +14,10 @@ export interface TableControlsProps {
|
|
|
14
14
|
showPageSizeControl?: boolean;
|
|
15
15
|
showPageCountText?: boolean;
|
|
16
16
|
showView?: boolean;
|
|
17
|
-
filterOptions?:
|
|
17
|
+
filterOptions?: {
|
|
18
|
+
label: string;
|
|
19
|
+
value: string;
|
|
20
|
+
}[];
|
|
18
21
|
extraItems?: ReactNode;
|
|
19
22
|
loading?: boolean;
|
|
20
23
|
hasError?: boolean;
|
|
@@ -16,6 +16,5 @@ export interface TableRowSelectorProps<TData> {
|
|
|
16
16
|
light: string;
|
|
17
17
|
dark: string;
|
|
18
18
|
};
|
|
19
|
-
alwaysShowSelector?: boolean;
|
|
20
19
|
}
|
|
21
|
-
export declare const TableBody: ({ showSelector,
|
|
20
|
+
export declare const TableBody: ({ showSelector, canResize, }: TableBodyProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BoxProps, FlexProps } from "@chakra-ui/react";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
|
-
export interface TableCardContainerProps extends
|
|
3
|
+
export interface TableCardContainerProps extends BoxProps {
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
variant?: "carousel" | "";
|
|
6
|
+
gap?: string;
|
|
7
|
+
gridTemplateColumns?: string;
|
|
8
|
+
direction?: FlexProps["direction"];
|
|
6
9
|
}
|
|
7
|
-
export declare const TableCardContainer: ({ children, variant, ...props }: TableCardContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare const TableCardContainer: ({ children, variant, gap, gridTemplateColumns, direction, ...props }: TableCardContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,51 @@
|
|
|
1
1
|
import { TableHeaderProps as ChakraTableHeaderProps, TableRowProps } from "@chakra-ui/react";
|
|
2
|
+
export interface TableHeaderTexts {
|
|
3
|
+
pinColumn?: string;
|
|
4
|
+
cancelPin?: string;
|
|
5
|
+
sortAscending?: string;
|
|
6
|
+
sortDescending?: string;
|
|
7
|
+
clearSorting?: string;
|
|
8
|
+
}
|
|
2
9
|
export interface TableHeaderProps {
|
|
3
10
|
canResize?: boolean;
|
|
4
11
|
showSelector?: boolean;
|
|
5
12
|
isSticky?: boolean;
|
|
6
13
|
tableHeaderProps?: ChakraTableHeaderProps;
|
|
7
14
|
tableRowProps?: TableRowProps;
|
|
15
|
+
/**
|
|
16
|
+
* Default text configuration for all columns.
|
|
17
|
+
* Can be overridden per column via meta.headerTexts.
|
|
18
|
+
*/
|
|
19
|
+
defaultTexts?: TableHeaderTexts;
|
|
8
20
|
}
|
|
9
|
-
|
|
21
|
+
/**
|
|
22
|
+
* TableHeader component with configurable text strings.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Using default texts
|
|
26
|
+
* <TableHeader />
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Customizing default texts for all columns
|
|
30
|
+
* <TableHeader
|
|
31
|
+
* defaultTexts={{
|
|
32
|
+
* pinColumn: "Pin This Column",
|
|
33
|
+
* sortAscending: "Sort A-Z"
|
|
34
|
+
* }}
|
|
35
|
+
* />
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Customizing texts per column via meta
|
|
39
|
+
* const columns = [
|
|
40
|
+
* columnHelper.accessor("name", {
|
|
41
|
+
* header: "Name",
|
|
42
|
+
* meta: {
|
|
43
|
+
* headerTexts: {
|
|
44
|
+
* pinColumn: "Pin Name Column",
|
|
45
|
+
* sortAscending: "Sort Names A-Z"
|
|
46
|
+
* }
|
|
47
|
+
* }
|
|
48
|
+
* })
|
|
49
|
+
* ];
|
|
50
|
+
*/
|
|
51
|
+
export declare const TableHeader: ({ canResize, showSelector, isSticky, tableHeaderProps, tableRowProps, defaultTexts, }: TableHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,6 +12,17 @@ declare module "@tanstack/react-table" {
|
|
|
12
12
|
* The display name of the column, used for rendering headers.
|
|
13
13
|
*/
|
|
14
14
|
displayName?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Text configuration for the column header menu items.
|
|
17
|
+
* These strings can be customized per column.
|
|
18
|
+
*/
|
|
19
|
+
headerTexts?: {
|
|
20
|
+
pinColumn?: string;
|
|
21
|
+
cancelPin?: string;
|
|
22
|
+
sortAscending?: string;
|
|
23
|
+
sortDescending?: string;
|
|
24
|
+
clearSorting?: string;
|
|
25
|
+
};
|
|
15
26
|
/**
|
|
16
27
|
* Specifies the type of filter to be used for the column.
|
|
17
28
|
*
|
|
@@ -32,7 +43,10 @@ declare module "@tanstack/react-table" {
|
|
|
32
43
|
/**
|
|
33
44
|
* Options for the select filter variant, if applicable.
|
|
34
45
|
*/
|
|
35
|
-
filterOptions?:
|
|
46
|
+
filterOptions?: {
|
|
47
|
+
label: string;
|
|
48
|
+
value: string;
|
|
49
|
+
}[];
|
|
36
50
|
/**
|
|
37
51
|
* Configuration for the range filter variant, if applicable.
|
|
38
52
|
*
|
|
@@ -86,6 +100,7 @@ export * from "./components/DataTable/controls/TableFilters";
|
|
|
86
100
|
export * from "./components/DataTable/controls/TableFilterTags";
|
|
87
101
|
export * from "./components/DataTable/display/TableFooter";
|
|
88
102
|
export * from "./components/DataTable/display/TableHeader";
|
|
103
|
+
export type { TableHeaderTexts } from "./components/DataTable/display/TableHeader";
|
|
89
104
|
export * from "./components/DataTable/display/TableLoadingComponent";
|
|
90
105
|
export * from "./components/DataTable/controls/TableSelector";
|
|
91
106
|
export * from "./components/DataTable/controls/TableSorter";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsol-oss/react-datatable5",
|
|
3
|
-
"version": "12.0.0-beta.
|
|
3
|
+
"version": "12.0.0-beta.47",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@atlaskit/pragmatic-drag-and-drop": "^1.4.0",
|
|
39
39
|
"@bsol-oss/dayzed-react19": "^0.0.4",
|
|
40
|
-
"@chakra-ui/react": "^3.
|
|
40
|
+
"@chakra-ui/react": "^3.19.1",
|
|
41
41
|
"@emotion/react": "^11.13.5",
|
|
42
42
|
"@tanstack/match-sorter-utils": "^8.15.1",
|
|
43
43
|
"@tanstack/react-query": "^5.66.9",
|