@bsol-oss/react-datatable5 12.0.0-beta.50 → 12.0.0-beta.52
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 +11 -12
- package/dist/index.js +43 -36
- package/dist/index.mjs +46 -38
- package/dist/types/components/DataTable/DataTable.d.ts +1 -1
- package/dist/types/components/DataTable/DataTableServer.d.ts +3 -1
- package/dist/types/components/DataTable/controls/TableControls.d.ts +7 -4
- package/dist/types/components/Filter/TagFilter.d.ts +1 -0
- package/dist/types/index.d.ts +0 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -144,7 +144,7 @@ interface DataTableProps<TData = unknown> {
|
|
|
144
144
|
setDensity: OnChangeFn<DensityState>;
|
|
145
145
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
146
146
|
translate: UseTranslationResponse<any, any>;
|
|
147
|
-
tableLabel
|
|
147
|
+
tableLabel?: DataTableLabel;
|
|
148
148
|
}
|
|
149
149
|
/**
|
|
150
150
|
* DataTable will create a context to hold all values to
|
|
@@ -282,6 +282,7 @@ interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown
|
|
|
282
282
|
query: UseQueryResult<TData>;
|
|
283
283
|
url: string;
|
|
284
284
|
translate: UseTranslationResponse<any, any>;
|
|
285
|
+
tableLabel: DataTableLabel;
|
|
285
286
|
}
|
|
286
287
|
/**
|
|
287
288
|
* DataTableServer will create a context to hold all values to
|
|
@@ -294,7 +295,7 @@ interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown
|
|
|
294
295
|
*
|
|
295
296
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
296
297
|
*/
|
|
297
|
-
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;
|
|
298
|
+
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, tableLabel, }: DataTableServerProps<TData>): react_jsx_runtime.JSX.Element;
|
|
298
299
|
|
|
299
300
|
interface TableControlsProps {
|
|
300
301
|
totalText?: string;
|
|
@@ -310,16 +311,19 @@ interface TableControlsProps {
|
|
|
310
311
|
showPageSizeControl?: boolean;
|
|
311
312
|
showPageCountText?: boolean;
|
|
312
313
|
showView?: boolean;
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
314
|
+
filterTagsOptions?: {
|
|
315
|
+
column: string;
|
|
316
|
+
options: {
|
|
317
|
+
label: string;
|
|
318
|
+
value: string;
|
|
319
|
+
}[];
|
|
316
320
|
}[];
|
|
317
321
|
extraItems?: ReactNode;
|
|
318
322
|
loading?: boolean;
|
|
319
323
|
hasError?: boolean;
|
|
320
324
|
gridProps?: GridProps;
|
|
321
325
|
}
|
|
322
|
-
declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView,
|
|
326
|
+
declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterTagsOptions, extraItems, loading, hasError, gridProps, }: TableControlsProps) => react_jsx_runtime.JSX.Element;
|
|
323
327
|
|
|
324
328
|
interface TableProps extends TableRootProps {
|
|
325
329
|
showLoading?: boolean;
|
|
@@ -490,11 +494,6 @@ interface TableDataDisplayProps {
|
|
|
490
494
|
}
|
|
491
495
|
declare const TableDataDisplay: ({ colorPalette, emptyComponent, }: TableDataDisplayProps) => react_jsx_runtime.JSX.Element;
|
|
492
496
|
|
|
493
|
-
interface FilterOptionsProps {
|
|
494
|
-
column: string;
|
|
495
|
-
}
|
|
496
|
-
declare const FilterOptions: ({ column }: FilterOptionsProps) => react_jsx_runtime.JSX.Element;
|
|
497
|
-
|
|
498
497
|
declare const GlobalFilter: () => react_jsx_runtime.JSX.Element;
|
|
499
498
|
|
|
500
499
|
interface ForeignKeyProps {
|
|
@@ -707,4 +706,4 @@ declare module "@tanstack/react-table" {
|
|
|
707
706
|
}
|
|
708
707
|
}
|
|
709
708
|
|
|
710
|
-
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,
|
|
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, 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
|
@@ -350,8 +350,17 @@ const Tag = React__namespace.forwardRef(function Tag(props, ref) {
|
|
|
350
350
|
return (jsxRuntime.jsxs(react.Tag.Root, { ref: ref, ...rest, children: [startElement && (jsxRuntime.jsx(react.Tag.StartElement, { children: startElement })), jsxRuntime.jsx(react.Tag.Label, { children: children }), endElement && (jsxRuntime.jsx(react.Tag.EndElement, { children: endElement })), closable && (jsxRuntime.jsx(react.Tag.EndElement, { children: jsxRuntime.jsx(react.Tag.CloseTrigger, { onClick: onClose }) }))] }));
|
|
351
351
|
});
|
|
352
352
|
|
|
353
|
-
const TagFilter = ({ availableTags, selectedTags, onTagChange, }) => {
|
|
353
|
+
const TagFilter = ({ availableTags, selectedTags, onTagChange, selectOne = false, }) => {
|
|
354
354
|
const toggleTag = (tag) => {
|
|
355
|
+
if (selectOne) {
|
|
356
|
+
if (selectedTags.includes(tag)) {
|
|
357
|
+
onTagChange([]);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
onTagChange([tag]);
|
|
361
|
+
}
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
355
364
|
if (selectedTags.includes(tag)) {
|
|
356
365
|
onTagChange(selectedTags.filter((t) => t !== tag));
|
|
357
366
|
}
|
|
@@ -2915,7 +2924,20 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2915
2924
|
*
|
|
2916
2925
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2917
2926
|
*/
|
|
2918
|
-
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,
|
|
2927
|
+
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, tableLabel = {
|
|
2928
|
+
view: "View",
|
|
2929
|
+
edit: "Edit",
|
|
2930
|
+
filterButtonText: "Filter",
|
|
2931
|
+
filterTitle: "Filter",
|
|
2932
|
+
filterReset: "Reset",
|
|
2933
|
+
filterClose: "Close",
|
|
2934
|
+
reloadTooltip: "Reload",
|
|
2935
|
+
reloadButtonText: "Reload",
|
|
2936
|
+
resetSelection: "Reset Selection",
|
|
2937
|
+
resetSorting: "Reset Sorting",
|
|
2938
|
+
rowCountText: "Row Count",
|
|
2939
|
+
hasErrorText: "Has Error",
|
|
2940
|
+
}, }) {
|
|
2919
2941
|
const table = reactTable.useReactTable({
|
|
2920
2942
|
_features: [DensityFeature],
|
|
2921
2943
|
data: (query.data?.data ?? []),
|
|
@@ -2985,16 +3007,10 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2985
3007
|
columnVisibility,
|
|
2986
3008
|
setColumnVisibility,
|
|
2987
3009
|
data: query.data?.data ?? [],
|
|
3010
|
+
tableLabel,
|
|
2988
3011
|
}, children: jsxRuntime.jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2989
3012
|
}
|
|
2990
3013
|
|
|
2991
|
-
const Tooltip = React__namespace.forwardRef(function Tooltip(props, ref) {
|
|
2992
|
-
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
2993
|
-
if (disabled)
|
|
2994
|
-
return children;
|
|
2995
|
-
return (jsxRuntime.jsxs(react.Tooltip.Root, { ...rest, children: [jsxRuntime.jsx(react.Tooltip.Trigger, { asChild: true, children: children }), jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.Tooltip.Positioner, { children: jsxRuntime.jsxs(react.Tooltip.Content, { ref: ref, ...contentProps, children: [showArrow && (jsxRuntime.jsx(react.Tooltip.Arrow, { children: jsxRuntime.jsx(react.Tooltip.ArrowTip, {}) })), content] }) }) })] }));
|
|
2996
|
-
});
|
|
2997
|
-
|
|
2998
3014
|
const InputGroup = React__namespace.forwardRef(function InputGroup(props, ref) {
|
|
2999
3015
|
const { startElement, startElementProps, endElement, endElementProps, children, startOffset = "6px", endOffset = "6px", ...rest } = props;
|
|
3000
3016
|
return (jsxRuntime.jsxs(react.Group, { ref: ref, ...rest, children: [startElement && (jsxRuntime.jsx(react.InputElement, { pointerEvents: "none", ...startElementProps, children: startElement })), React__namespace.cloneElement(children, {
|
|
@@ -3022,6 +3038,13 @@ const GlobalFilter = () => {
|
|
|
3022
3038
|
} }) }) }));
|
|
3023
3039
|
};
|
|
3024
3040
|
|
|
3041
|
+
const Tooltip = React__namespace.forwardRef(function Tooltip(props, ref) {
|
|
3042
|
+
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
3043
|
+
if (disabled)
|
|
3044
|
+
return children;
|
|
3045
|
+
return (jsxRuntime.jsxs(react.Tooltip.Root, { ...rest, children: [jsxRuntime.jsx(react.Tooltip.Trigger, { asChild: true, children: children }), jsxRuntime.jsx(react.Portal, { disabled: !portalled, container: portalRef, children: jsxRuntime.jsx(react.Tooltip.Positioner, { children: jsxRuntime.jsxs(react.Tooltip.Content, { ref: ref, ...contentProps, children: [showArrow && (jsxRuntime.jsx(react.Tooltip.Arrow, { children: jsxRuntime.jsx(react.Tooltip.ArrowTip, {}) })), content] }) }) })] }));
|
|
3046
|
+
});
|
|
3047
|
+
|
|
3025
3048
|
const ReloadButton = ({ variant = "icon", }) => {
|
|
3026
3049
|
const { url } = useDataTableServerContext();
|
|
3027
3050
|
const queryClient = reactQuery.useQueryClient();
|
|
@@ -3037,27 +3060,6 @@ const ReloadButton = ({ variant = "icon", }) => {
|
|
|
3037
3060
|
}, children: [jsxRuntime.jsx(io5.IoReload, {}), " ", reloadButtonText] }));
|
|
3038
3061
|
};
|
|
3039
3062
|
|
|
3040
|
-
const FilterOptions = ({ column }) => {
|
|
3041
|
-
const { table } = useDataTableContext();
|
|
3042
|
-
const tableColumn = table.getColumn(column);
|
|
3043
|
-
const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
|
|
3044
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: options.map((option) => {
|
|
3045
|
-
const selected = table.getColumn(column)?.getFilterValue() === option;
|
|
3046
|
-
const { label, value } = option;
|
|
3047
|
-
return (jsxRuntime.jsxs(react.Button, { size: "sm", onClick: () => {
|
|
3048
|
-
if (selected) {
|
|
3049
|
-
table.setColumnFilters((state) => {
|
|
3050
|
-
return state.filter((filter) => {
|
|
3051
|
-
return filter.id !== column;
|
|
3052
|
-
});
|
|
3053
|
-
});
|
|
3054
|
-
return;
|
|
3055
|
-
}
|
|
3056
|
-
table.getColumn(column)?.setFilterValue(value);
|
|
3057
|
-
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsxRuntime.jsx(md.MdClose, {})] }, option.value));
|
|
3058
|
-
}) }));
|
|
3059
|
-
};
|
|
3060
|
-
|
|
3061
3063
|
const TableFilterTags = () => {
|
|
3062
3064
|
const { table } = useDataTableContext();
|
|
3063
3065
|
return (jsxRuntime.jsx(react.Flex, { gap: "0.5rem", flexFlow: "wrap", children: table.getState().columnFilters.map(({ id, value }) => {
|
|
@@ -3069,12 +3071,18 @@ const TableFilterTags = () => {
|
|
|
3069
3071
|
}) }));
|
|
3070
3072
|
};
|
|
3071
3073
|
|
|
3072
|
-
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,
|
|
3073
|
-
const { tableLabel } = useDataTableContext();
|
|
3074
|
+
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, filterTagsOptions = [], extraItems = jsxRuntime.jsx(jsxRuntime.Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
|
|
3075
|
+
const { tableLabel, table } = useDataTableContext();
|
|
3074
3076
|
const { rowCountText, hasErrorText } = tableLabel;
|
|
3075
|
-
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] })] }),
|
|
3076
|
-
const {
|
|
3077
|
-
|
|
3077
|
+
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] })] }), filterTagsOptions.length > 0 && (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.5rem", children: filterTagsOptions.map((option) => {
|
|
3078
|
+
const { column, options } = option;
|
|
3079
|
+
const tableColumn = table.getColumn(column);
|
|
3080
|
+
return (jsxRuntime.jsxs(react.Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxRuntime.jsxs(react.Text, { children: [column, ":"] }), jsxRuntime.jsx(TagFilter, { availableTags: options.map((item) => item.value), selectedTags: tableColumn?.getFilterValue() ?? [], selectOne: true, onTagChange: (tags) => {
|
|
3081
|
+
if (tags.length === 0) {
|
|
3082
|
+
return tableColumn?.setFilterValue(undefined);
|
|
3083
|
+
}
|
|
3084
|
+
tableColumn?.setFilterValue(tags);
|
|
3085
|
+
} })] }, column));
|
|
3078
3086
|
}) })), 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, {}) })] }))] }));
|
|
3079
3087
|
};
|
|
3080
3088
|
|
|
@@ -5599,7 +5607,6 @@ exports.EditSortingButton = EditSortingButton;
|
|
|
5599
5607
|
exports.EmptyState = EmptyState$1;
|
|
5600
5608
|
exports.ErrorAlert = ErrorAlert;
|
|
5601
5609
|
exports.FilterDialog = FilterDialog;
|
|
5602
|
-
exports.FilterOptions = FilterOptions;
|
|
5603
5610
|
exports.FormBody = FormBody;
|
|
5604
5611
|
exports.FormRoot = FormRoot;
|
|
5605
5612
|
exports.FormTitle = FormTitle;
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex, Text, useDisclosure, DialogBackdrop, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Tag as Tag$1, Input, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, CheckboxCard as CheckboxCard$1, Image, EmptyState as EmptyState$2, VStack, Alert, Card, Tooltip as Tooltip$1,
|
|
2
|
+
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, Flex, Text, useDisclosure, DialogBackdrop, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Tag as Tag$1, Input, Menu, createRecipeContext, createContext as createContext$1, Pagination as Pagination$1, usePaginationContext, CheckboxCard as CheckboxCard$1, Image, EmptyState as EmptyState$2, VStack, Alert, Card, Group, InputElement, Tooltip as Tooltip$1, Icon, List, Table as Table$1, Checkbox as Checkbox$1, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, Accordion, Field as Field$1, Popover, NumberInput, Show, RadioCard, CheckboxGroup, Textarea, Center, Heading } 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';
|
|
6
6
|
import { LuX, LuCheck, LuChevronRight, LuChevronDown } from 'react-icons/lu';
|
|
7
|
-
import { MdOutlineSort, MdFilterAlt, MdSearch,
|
|
7
|
+
import { MdOutlineSort, MdFilterAlt, MdSearch, MdOutlineViewColumn, MdFilterListAlt, MdPushPin, MdCancel, MdClear, MdOutlineChecklist, MdDateRange } from 'react-icons/md';
|
|
8
8
|
import { FaUpDown, FaGripLinesVertical } from 'react-icons/fa6';
|
|
9
9
|
import { BiDownArrow, BiUpArrow, BiError } from 'react-icons/bi';
|
|
10
10
|
import { CgClose, CgTrash } from 'react-icons/cg';
|
|
@@ -330,8 +330,17 @@ const Tag = React.forwardRef(function Tag(props, ref) {
|
|
|
330
330
|
return (jsxs(Tag$1.Root, { ref: ref, ...rest, children: [startElement && (jsx(Tag$1.StartElement, { children: startElement })), jsx(Tag$1.Label, { children: children }), endElement && (jsx(Tag$1.EndElement, { children: endElement })), closable && (jsx(Tag$1.EndElement, { children: jsx(Tag$1.CloseTrigger, { onClick: onClose }) }))] }));
|
|
331
331
|
});
|
|
332
332
|
|
|
333
|
-
const TagFilter = ({ availableTags, selectedTags, onTagChange, }) => {
|
|
333
|
+
const TagFilter = ({ availableTags, selectedTags, onTagChange, selectOne = false, }) => {
|
|
334
334
|
const toggleTag = (tag) => {
|
|
335
|
+
if (selectOne) {
|
|
336
|
+
if (selectedTags.includes(tag)) {
|
|
337
|
+
onTagChange([]);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
onTagChange([tag]);
|
|
341
|
+
}
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
335
344
|
if (selectedTags.includes(tag)) {
|
|
336
345
|
onTagChange(selectedTags.filter((t) => t !== tag));
|
|
337
346
|
}
|
|
@@ -2895,7 +2904,20 @@ function DataTable({ columns, data, enableRowSelection = true, enableMultiRowSel
|
|
|
2895
2904
|
*
|
|
2896
2905
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
2897
2906
|
*/
|
|
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,
|
|
2907
|
+
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, tableLabel = {
|
|
2908
|
+
view: "View",
|
|
2909
|
+
edit: "Edit",
|
|
2910
|
+
filterButtonText: "Filter",
|
|
2911
|
+
filterTitle: "Filter",
|
|
2912
|
+
filterReset: "Reset",
|
|
2913
|
+
filterClose: "Close",
|
|
2914
|
+
reloadTooltip: "Reload",
|
|
2915
|
+
reloadButtonText: "Reload",
|
|
2916
|
+
resetSelection: "Reset Selection",
|
|
2917
|
+
resetSorting: "Reset Sorting",
|
|
2918
|
+
rowCountText: "Row Count",
|
|
2919
|
+
hasErrorText: "Has Error",
|
|
2920
|
+
}, }) {
|
|
2899
2921
|
const table = useReactTable({
|
|
2900
2922
|
_features: [DensityFeature],
|
|
2901
2923
|
data: (query.data?.data ?? []),
|
|
@@ -2965,16 +2987,10 @@ function DataTableServer({ columns, enableRowSelection = true, enableMultiRowSel
|
|
|
2965
2987
|
columnVisibility,
|
|
2966
2988
|
setColumnVisibility,
|
|
2967
2989
|
data: query.data?.data ?? [],
|
|
2990
|
+
tableLabel,
|
|
2968
2991
|
}, children: jsx(DataTableServerContext.Provider, { value: { url, query }, children: children }) }));
|
|
2969
2992
|
}
|
|
2970
2993
|
|
|
2971
|
-
const Tooltip = React.forwardRef(function Tooltip(props, ref) {
|
|
2972
|
-
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
2973
|
-
if (disabled)
|
|
2974
|
-
return children;
|
|
2975
|
-
return (jsxs(Tooltip$1.Root, { ...rest, children: [jsx(Tooltip$1.Trigger, { asChild: true, children: children }), jsx(Portal, { disabled: !portalled, container: portalRef, children: jsx(Tooltip$1.Positioner, { children: jsxs(Tooltip$1.Content, { ref: ref, ...contentProps, children: [showArrow && (jsx(Tooltip$1.Arrow, { children: jsx(Tooltip$1.ArrowTip, {}) })), content] }) }) })] }));
|
|
2976
|
-
});
|
|
2977
|
-
|
|
2978
2994
|
const InputGroup = React.forwardRef(function InputGroup(props, ref) {
|
|
2979
2995
|
const { startElement, startElementProps, endElement, endElementProps, children, startOffset = "6px", endOffset = "6px", ...rest } = props;
|
|
2980
2996
|
return (jsxs(Group, { ref: ref, ...rest, children: [startElement && (jsx(InputElement, { pointerEvents: "none", ...startElementProps, children: startElement })), React.cloneElement(children, {
|
|
@@ -3002,6 +3018,13 @@ const GlobalFilter = () => {
|
|
|
3002
3018
|
} }) }) }));
|
|
3003
3019
|
};
|
|
3004
3020
|
|
|
3021
|
+
const Tooltip = React.forwardRef(function Tooltip(props, ref) {
|
|
3022
|
+
const { showArrow, children, disabled, portalled, content, contentProps, portalRef, ...rest } = props;
|
|
3023
|
+
if (disabled)
|
|
3024
|
+
return children;
|
|
3025
|
+
return (jsxs(Tooltip$1.Root, { ...rest, children: [jsx(Tooltip$1.Trigger, { asChild: true, children: children }), jsx(Portal, { disabled: !portalled, container: portalRef, children: jsx(Tooltip$1.Positioner, { children: jsxs(Tooltip$1.Content, { ref: ref, ...contentProps, children: [showArrow && (jsx(Tooltip$1.Arrow, { children: jsx(Tooltip$1.ArrowTip, {}) })), content] }) }) })] }));
|
|
3026
|
+
});
|
|
3027
|
+
|
|
3005
3028
|
const ReloadButton = ({ variant = "icon", }) => {
|
|
3006
3029
|
const { url } = useDataTableServerContext();
|
|
3007
3030
|
const queryClient = useQueryClient();
|
|
@@ -3017,27 +3040,6 @@ const ReloadButton = ({ variant = "icon", }) => {
|
|
|
3017
3040
|
}, children: [jsx(IoReload, {}), " ", reloadButtonText] }));
|
|
3018
3041
|
};
|
|
3019
3042
|
|
|
3020
|
-
const FilterOptions = ({ column }) => {
|
|
3021
|
-
const { table } = useDataTableContext();
|
|
3022
|
-
const tableColumn = table.getColumn(column);
|
|
3023
|
-
const options = tableColumn?.columnDef.meta?.filterOptions ?? [];
|
|
3024
|
-
return (jsx(Fragment, { children: options.map((option) => {
|
|
3025
|
-
const selected = table.getColumn(column)?.getFilterValue() === option;
|
|
3026
|
-
const { label, value } = option;
|
|
3027
|
-
return (jsxs(Button$1, { size: "sm", onClick: () => {
|
|
3028
|
-
if (selected) {
|
|
3029
|
-
table.setColumnFilters((state) => {
|
|
3030
|
-
return state.filter((filter) => {
|
|
3031
|
-
return filter.id !== column;
|
|
3032
|
-
});
|
|
3033
|
-
});
|
|
3034
|
-
return;
|
|
3035
|
-
}
|
|
3036
|
-
table.getColumn(column)?.setFilterValue(value);
|
|
3037
|
-
}, variant: selected ? "solid" : "outline", display: "flex", gap: "0.25rem", children: [label, selected && jsx(MdClose, {})] }, option.value));
|
|
3038
|
-
}) }));
|
|
3039
|
-
};
|
|
3040
|
-
|
|
3041
3043
|
const TableFilterTags = () => {
|
|
3042
3044
|
const { table } = useDataTableContext();
|
|
3043
3045
|
return (jsx(Flex, { gap: "0.5rem", flexFlow: "wrap", children: table.getState().columnFilters.map(({ id, value }) => {
|
|
@@ -3049,12 +3051,18 @@ const TableFilterTags = () => {
|
|
|
3049
3051
|
}) }));
|
|
3050
3052
|
};
|
|
3051
3053
|
|
|
3052
|
-
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,
|
|
3053
|
-
const { tableLabel } = useDataTableContext();
|
|
3054
|
+
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, filterTagsOptions = [], extraItems = jsx(Fragment, {}), loading = false, hasError = false, gridProps = {}, }) => {
|
|
3055
|
+
const { tableLabel, table } = useDataTableContext();
|
|
3054
3056
|
const { rowCountText, hasErrorText } = tableLabel;
|
|
3055
|
-
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] })] }),
|
|
3056
|
-
const {
|
|
3057
|
-
|
|
3057
|
+
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] })] }), filterTagsOptions.length > 0 && (jsx(Flex, { flexFlow: "column", gap: "0.5rem", children: filterTagsOptions.map((option) => {
|
|
3058
|
+
const { column, options } = option;
|
|
3059
|
+
const tableColumn = table.getColumn(column);
|
|
3060
|
+
return (jsxs(Flex, { alignItems: "center", flexFlow: "wrap", gap: "0.5rem", children: [showFilterName && jsxs(Text, { children: [column, ":"] }), jsx(TagFilter, { availableTags: options.map((item) => item.value), selectedTags: tableColumn?.getFilterValue() ?? [], selectOne: true, onTagChange: (tags) => {
|
|
3061
|
+
if (tags.length === 0) {
|
|
3062
|
+
return tableColumn?.setFilterValue(undefined);
|
|
3063
|
+
}
|
|
3064
|
+
tableColumn?.setFilterValue(tags);
|
|
3065
|
+
} })] }, column));
|
|
3058
3066
|
}) })), 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, {}) })] }))] }));
|
|
3059
3067
|
};
|
|
3060
3068
|
|
|
@@ -5567,4 +5575,4 @@ const getMultiDates = ({ selected, selectedDate, selectedDates, selectable, }) =
|
|
|
5567
5575
|
}
|
|
5568
5576
|
};
|
|
5569
5577
|
|
|
5570
|
-
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton, EditSortingButton, EmptyState$1 as EmptyState, ErrorAlert, FilterDialog,
|
|
5578
|
+
export { CardHeader, DataDisplay, DataTable, DataTableServer, DefaultCardTitle, DefaultForm, DefaultTable, DensityToggleButton, EditSortingButton, EmptyState$1 as EmptyState, ErrorAlert, FilterDialog, FormBody, FormRoot, FormTitle, GlobalFilter, PageSizeControl, Pagination, RecordDisplay, ReloadButton, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableControls, TableDataDisplay, TableFilter, TableFilterTags, TableFooter, TableHeader, TableLoadingComponent, TableSelector, TableSorter, TableViewer, TextCell, ViewDialog, getColumns, getMultiDates, getRangeDates, idPickerSanityCheck, useDataTable, useDataTableContext, useDataTableServer, useForm, widthSanityCheck };
|
|
@@ -50,7 +50,7 @@ export interface DataTableProps<TData = unknown> {
|
|
|
50
50
|
setDensity: OnChangeFn<DensityState>;
|
|
51
51
|
setColumnVisibility: OnChangeFn<VisibilityState>;
|
|
52
52
|
translate: UseTranslationResponse<any, any>;
|
|
53
|
-
tableLabel
|
|
53
|
+
tableLabel?: DataTableLabel;
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* DataTable will create a context to hold all values to
|
|
@@ -2,6 +2,7 @@ import { ReactNode } from "react";
|
|
|
2
2
|
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
|
+
import { DataTableLabel } from "./context/DataTableContext";
|
|
5
6
|
import { DataResponse } from "./useDataTableServer";
|
|
6
7
|
import { UseTranslationResponse } from "react-i18next";
|
|
7
8
|
export interface DataTableServerProps<TData extends DataResponse = DataResponse<unknown>> {
|
|
@@ -36,6 +37,7 @@ export interface DataTableServerProps<TData extends DataResponse = DataResponse<
|
|
|
36
37
|
query: UseQueryResult<TData>;
|
|
37
38
|
url: string;
|
|
38
39
|
translate: UseTranslationResponse<any, any>;
|
|
40
|
+
tableLabel: DataTableLabel;
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
43
|
* DataTableServer will create a context to hold all values to
|
|
@@ -48,4 +50,4 @@ export interface DataTableServerProps<TData extends DataResponse = DataResponse<
|
|
|
48
50
|
*
|
|
49
51
|
* @link https://tanstack.com/table/latest/docs/guide/column-defs
|
|
50
52
|
*/
|
|
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;
|
|
53
|
+
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, tableLabel, }: DataTableServerProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -14,13 +14,16 @@ export interface TableControlsProps {
|
|
|
14
14
|
showPageSizeControl?: boolean;
|
|
15
15
|
showPageCountText?: boolean;
|
|
16
16
|
showView?: boolean;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
filterTagsOptions?: {
|
|
18
|
+
column: string;
|
|
19
|
+
options: {
|
|
20
|
+
label: string;
|
|
21
|
+
value: string;
|
|
22
|
+
}[];
|
|
20
23
|
}[];
|
|
21
24
|
extraItems?: ReactNode;
|
|
22
25
|
loading?: boolean;
|
|
23
26
|
hasError?: boolean;
|
|
24
27
|
gridProps?: GridProps;
|
|
25
28
|
}
|
|
26
|
-
export declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView,
|
|
29
|
+
export declare const TableControls: ({ fitTableWidth, fitTableHeight, children, showGlobalFilter, showFilter, showFilterName, showFilterTags, showReload, showPagination, showPageSizeControl, showPageCountText, showView, filterTagsOptions, extraItems, loading, hasError, gridProps, }: TableControlsProps) => import("react/jsx-runtime").JSX.Element;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -110,7 +110,6 @@ export * from "./components/DataTable/useDataTable";
|
|
|
110
110
|
export * from "./components/DataTable/useDataTableServer";
|
|
111
111
|
export * from "./components/DataTable/utils/getColumns";
|
|
112
112
|
export * from "./components/DataTable/display/TableDataDisplay";
|
|
113
|
-
export * from "./components/Filter/FilterOptions";
|
|
114
113
|
export * from "./components/Filter/GlobalFilter";
|
|
115
114
|
export * from "./components/Form/components/core/DefaultForm";
|
|
116
115
|
export * from "./components/Form/components/core/FormRoot";
|