@coveord/plasma-mantine 49.3.3 → 49.3.5
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/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +29 -29
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/__tests__/VitestSetup.js.map +1 -1
- package/dist/cjs/components/collection/CollectionItem.js +6 -0
- package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
- package/dist/cjs/components/table/Table.js +42 -74
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/cjs/components/table/Table.styles.js +56 -0
- package/dist/cjs/components/table/Table.styles.js.map +1 -0
- package/dist/cjs/components/table/TableContext.js.map +1 -1
- package/dist/definitions/__tests__/VitestSetup.d.ts +7 -1
- package/dist/definitions/__tests__/VitestSetup.d.ts.map +1 -1
- package/dist/definitions/components/table/Table.d.ts.map +1 -1
- package/dist/definitions/components/table/Table.styles.d.ts +11 -0
- package/dist/definitions/components/table/Table.styles.d.ts.map +1 -0
- package/dist/definitions/components/table/TableContext.d.ts +5 -0
- package/dist/definitions/components/table/TableContext.d.ts.map +1 -1
- package/dist/definitions/components/table/useTable.d.ts +1 -0
- package/dist/definitions/components/table/useTable.d.ts.map +1 -1
- package/dist/esm/__tests__/VitestSetup.js.map +1 -1
- package/dist/esm/components/collection/CollectionItem.js +6 -0
- package/dist/esm/components/collection/CollectionItem.js.map +1 -1
- package/dist/esm/components/table/Table.js +43 -75
- package/dist/esm/components/table/Table.js.map +1 -1
- package/dist/esm/components/table/Table.styles.js +46 -0
- package/dist/esm/components/table/Table.styles.js.map +1 -0
- package/dist/esm/components/table/TableContext.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/VitestSetup.ts +6 -1
- package/src/components/collection/CollectionItem.tsx +2 -2
- package/src/components/table/Table.styles.ts +58 -0
- package/src/components/table/Table.tsx +36 -78
- package/src/components/table/TableContext.tsx +5 -0
- package/src/components/table/__tests__/Table.spec.tsx +62 -0
|
@@ -3,14 +3,15 @@ import _object_spread from "@swc/helpers/src/_object_spread.mjs";
|
|
|
3
3
|
import _object_spread_props from "@swc/helpers/src/_object_spread_props.mjs";
|
|
4
4
|
import _object_without_properties from "@swc/helpers/src/_object_without_properties.mjs";
|
|
5
5
|
import _sliced_to_array from "@swc/helpers/src/_sliced_to_array.mjs";
|
|
6
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
-
import { Box, Center, Collapse,
|
|
6
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
7
|
+
import { Box, Center, Collapse, Loader, Skeleton, Table as MantineTable } from "@mantine/core";
|
|
8
8
|
import { useForm } from "@mantine/form";
|
|
9
9
|
import { useClickOutside, useDidUpdate } from "@mantine/hooks";
|
|
10
10
|
import { defaultColumnSizing, flexRender, getCoreRowModel, useReactTable } from "@tanstack/react-table";
|
|
11
11
|
import debounce from "lodash.debounce";
|
|
12
12
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
13
13
|
import { Children, Fragment, useCallback, useEffect, useState } from "react";
|
|
14
|
+
import useStyles from "./Table.styles";
|
|
14
15
|
import { TableActions } from "./TableActions";
|
|
15
16
|
import { TableAccordionColumn, TableCollapsibleColumn } from "./TableCollapsibleColumn";
|
|
16
17
|
import { TableContext } from "./TableContext";
|
|
@@ -24,50 +25,9 @@ import { TablePredicate } from "./TablePredicate";
|
|
|
24
25
|
import { TableSelectableColumn } from "./TableSelectableColumn";
|
|
25
26
|
import { Th } from "./Th";
|
|
26
27
|
import { useRowSelection } from "./useRowSelection";
|
|
27
|
-
var useStyles = createStyles(function(theme, param) {
|
|
28
|
-
var hasHeader = param.hasHeader, multiRowSelectionEnabled = param.multiRowSelectionEnabled;
|
|
29
|
-
var rowBackgroundColor = theme.colorScheme === "dark" ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2) : theme.colors[theme.primaryColor][0];
|
|
30
|
-
return {
|
|
31
|
-
table: {
|
|
32
|
-
width: "100%",
|
|
33
|
-
"& td:first-of-type, th:first-of-type > *": {
|
|
34
|
-
paddingLeft: theme.spacing.xl
|
|
35
|
-
},
|
|
36
|
-
"& tbody td": {
|
|
37
|
-
verticalAlign: "top"
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
header: {
|
|
41
|
-
position: "sticky",
|
|
42
|
-
top: hasHeader ? 69 : 0,
|
|
43
|
-
backgroundColor: theme.colorScheme === "dark" ? theme.black : theme.white,
|
|
44
|
-
transition: "box-shadow 150ms ease",
|
|
45
|
-
zIndex: 12,
|
|
46
|
-
"&::after": {
|
|
47
|
-
content: '""',
|
|
48
|
-
position: "absolute",
|
|
49
|
-
left: 0,
|
|
50
|
-
right: 0,
|
|
51
|
-
bottom: 0,
|
|
52
|
-
borderBottom: "1px solid ".concat(theme.colors.gray[2])
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
rowSelected: {
|
|
56
|
-
backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor
|
|
57
|
-
},
|
|
58
|
-
rowCollapsibleButtonCell: {
|
|
59
|
-
textAlign: "right",
|
|
60
|
-
padding: "".concat(theme.spacing.xs / 2, "px ").concat(theme.spacing.sm, "px !important")
|
|
61
|
-
},
|
|
62
|
-
row: {
|
|
63
|
-
"&:hover": {
|
|
64
|
-
backgroundColor: rowBackgroundColor
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
28
|
export var Table = function(param) {
|
|
70
29
|
var data = param.data, getRowId = param.getRowId, noDataChildren = param.noDataChildren, getExpandChildren = param.getExpandChildren, _param_initialState = param.initialState, initialState = _param_initialState === void 0 ? {} : _param_initialState, columns = param.columns, onMount = param.onMount, onChange = param.onChange, children = param.children, _param_loading = param.loading, loading = _param_loading === void 0 ? false : _param_loading, doubleClickAction = param.doubleClickAction, multiRowSelectionEnabled = param.multiRowSelectionEnabled, _param_options = param.options, options = _param_options === void 0 ? {} : _param_options;
|
|
30
|
+
var _form_values, _form_values_dateRange, _form_values_dateRange1;
|
|
71
31
|
var convertedChildren = Children.toArray(children);
|
|
72
32
|
var header = convertedChildren.find(function(child) {
|
|
73
33
|
return child.type === TableHeader;
|
|
@@ -121,6 +81,10 @@ export var Table = function(param) {
|
|
|
121
81
|
});
|
|
122
82
|
});
|
|
123
83
|
var _useRowSelection = useRowSelection(table), clearSelection = _useRowSelection.clearSelection, getSelectedRow = _useRowSelection.getSelectedRow, getSelectedRows = _useRowSelection.getSelectedRows;
|
|
84
|
+
var _form_values_predicates;
|
|
85
|
+
var isFiltered = !!state.globalFilter || Object.keys((_form_values_predicates = (_form_values = form.values) === null || _form_values === void 0 ? void 0 : _form_values.predicates) !== null && _form_values_predicates !== void 0 ? _form_values_predicates : {}).some(function(predicate) {
|
|
86
|
+
return !!form.values.predicates[predicate];
|
|
87
|
+
}) || !!((_form_values_dateRange = form.values.dateRange) === null || _form_values_dateRange === void 0 ? void 0 : _form_values_dateRange[0]) || !!((_form_values_dateRange1 = form.values.dateRange) === null || _form_values_dateRange1 === void 0 ? void 0 : _form_values_dateRange1[1]);
|
|
124
88
|
var triggerChange = debounce(function() {
|
|
125
89
|
return onChange === null || onChange === void 0 ? void 0 : onChange(_object_spread({}, state, form.values));
|
|
126
90
|
}, 500);
|
|
@@ -142,7 +106,8 @@ export var Table = function(param) {
|
|
|
142
106
|
form.values
|
|
143
107
|
]);
|
|
144
108
|
var clearFilters = useCallback(function() {
|
|
145
|
-
|
|
109
|
+
var _initialState_predicates;
|
|
110
|
+
form.setFieldValue("predicates", (_initialState_predicates = initialState.predicates) !== null && _initialState_predicates !== void 0 ? _initialState_predicates : {});
|
|
146
111
|
setState(function(prevState) {
|
|
147
112
|
return _object_spread_props(_object_spread({}, prevState), {
|
|
148
113
|
globalFilter: ""
|
|
@@ -217,10 +182,11 @@ export var Table = function(param) {
|
|
|
217
182
|
});
|
|
218
183
|
return /*#__PURE__*/ _jsx(Box, {
|
|
219
184
|
ref: outsideClickRef,
|
|
220
|
-
children: /*#__PURE__*/
|
|
185
|
+
children: /*#__PURE__*/ _jsx(TableContext.Provider, {
|
|
221
186
|
value: {
|
|
222
187
|
onChange: triggerChange,
|
|
223
188
|
state: state,
|
|
189
|
+
isFiltered: isFiltered,
|
|
224
190
|
setState: setState,
|
|
225
191
|
clearFilters: clearFilters,
|
|
226
192
|
getSelectedRow: getSelectedRow,
|
|
@@ -231,38 +197,40 @@ export var Table = function(param) {
|
|
|
231
197
|
multiRowSelectionEnabled: multiRowSelectionEnabled,
|
|
232
198
|
getPageCount: table.getPageCount
|
|
233
199
|
},
|
|
234
|
-
children:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
200
|
+
children: !rows.length && !isFiltered && !loading ? noDataChildren : /*#__PURE__*/ _jsxs(_Fragment, {
|
|
201
|
+
children: [
|
|
202
|
+
header,
|
|
203
|
+
/*#__PURE__*/ _jsxs(MantineTable, {
|
|
204
|
+
className: classes.table,
|
|
205
|
+
horizontalSpacing: "sm",
|
|
206
|
+
verticalSpacing: "xs",
|
|
207
|
+
pb: "sm",
|
|
208
|
+
children: [
|
|
209
|
+
/*#__PURE__*/ _jsx("thead", {
|
|
210
|
+
className: classes.header,
|
|
211
|
+
children: table.getHeaderGroups().map(function(headerGroup) {
|
|
212
|
+
return /*#__PURE__*/ _jsx("tr", {
|
|
213
|
+
children: headerGroup.headers.map(function(columnHeader) {
|
|
214
|
+
return /*#__PURE__*/ _jsx(Th, {
|
|
215
|
+
header: columnHeader
|
|
216
|
+
}, columnHeader.id);
|
|
217
|
+
})
|
|
218
|
+
}, headerGroup.id);
|
|
219
|
+
})
|
|
220
|
+
}),
|
|
221
|
+
/*#__PURE__*/ _jsx("tbody", {
|
|
222
|
+
children: rows.length ? rows : /*#__PURE__*/ _jsx("tr", {
|
|
223
|
+
children: /*#__PURE__*/ _jsx("td", {
|
|
224
|
+
colSpan: columns.length,
|
|
225
|
+
children: noDataChildren
|
|
250
226
|
})
|
|
251
|
-
}, headerGroup.id);
|
|
252
|
-
})
|
|
253
|
-
}),
|
|
254
|
-
/*#__PURE__*/ _jsx("tbody", {
|
|
255
|
-
children: rows.length ? rows : /*#__PURE__*/ _jsx("tr", {
|
|
256
|
-
children: /*#__PURE__*/ _jsx("td", {
|
|
257
|
-
colSpan: columns.length,
|
|
258
|
-
children: noDataChildren
|
|
259
227
|
})
|
|
260
228
|
})
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
229
|
+
]
|
|
230
|
+
}),
|
|
231
|
+
footer
|
|
232
|
+
]
|
|
233
|
+
})
|
|
266
234
|
})
|
|
267
235
|
});
|
|
268
236
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, createStyles, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {CoreOptions, InitialTableState, TableOptions} from '@tanstack/table-core';\nimport debounce from 'lodash.debounce';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport {TableActions} from './TableActions';\nimport {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {TableSelectableColumn} from './TableSelectableColumn';\nimport {Th} from './Th';\nimport {useRowSelection} from './useRowSelection';\n\ninterface TableStylesParams {\n hasHeader: boolean;\n multiRowSelectionEnabled: boolean;\n}\n\nconst useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {\n const rowBackgroundColor =\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0];\n return {\n table: {\n width: '100%',\n '& td:first-of-type, th:first-of-type > *': {\n paddingLeft: theme.spacing.xl,\n },\n '& tbody td': {\n verticalAlign: 'top',\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,\n },\n\n rowCollapsibleButtonCell: {\n textAlign: 'right',\n padding: `${theme.spacing.xs / 2}px ${theme.spacing.sm}px !important`,\n },\n\n row: {\n '&:hover': {\n backgroundColor: rowBackgroundColor,\n },\n },\n };\n});\n\nexport interface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Defines how each row is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.\n */\n getRowId?: CoreOptions<T>['getRowId'];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n /**\n * Whether the user can select multiple rows in order to perform actions in bulk\n *\n * @default false\n */\n multiRowSelectionEnabled?: boolean;\n\n options?: Omit<\n Partial<TableOptions<T>>,\n | 'initialState'\n | 'data'\n | 'columns'\n | 'manualPagination'\n | 'enableMultiRowSelection'\n | 'getRowId'\n | 'getRowCanExpand'\n | 'enableRowSelection'\n >;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n DateRangePicker: typeof TableDateRangePicker;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n AccordionColumn: typeof TableAccordionColumn;\n}\n\nexport const Table: TableType = <T,>({\n data,\n getRowId,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n multiRowSelectionEnabled,\n options = {},\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n const {cx, classes} = useStyles({hasHeader: !!header, multiRowSelectionEnabled});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns: multiRowSelectionEnabled ? [TableSelectableColumn as ColumnDef<T>].concat(columns) : columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: options?.getPaginationRowModel === undefined,\n enableMultiRowSelection: !!multiRowSelectionEnabled,\n getRowId,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n enableRowSelection: !loading,\n ...options,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n const {clearSelection, getSelectedRow, getSelectedRows} = useRowSelection(table);\n\n const triggerChange = debounce(() => onChange?.({...state, ...form.values}), 500);\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n return () => {\n triggerChange.cancel();\n };\n }, []);\n\n useDidUpdate(() => {\n triggerChange();\n if (!multiRowSelectionEnabled) {\n clearSelection();\n }\n }, [state.globalFilter, state.pagination, state.sorting, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n if (!multiRowSelectionEnabled) {\n clearSelection();\n }\n });\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => row.toggleSelected()}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n aria-selected={row.getIsSelected()}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td\n key={cell.id}\n style={{width}}\n className={cx({\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n >\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{\n padding: 0,\n borderTop: row.getIsExpanded() ? undefined : 'none',\n borderBottom: row.getIsExpanded() ? undefined : 'none',\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n setState,\n clearFilters,\n getSelectedRow,\n getSelectedRows,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n multiRowSelectionEnabled,\n getPageCount: table.getPageCount,\n }}\n >\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.AccordionColumn = TableAccordionColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Box","Center","Collapse","createStyles","Loader","Skeleton","Table","MantineTable","useForm","useClickOutside","useDidUpdate","defaultColumnSizing","flexRender","getCoreRowModel","useReactTable","debounce","defaultsDeep","Children","Fragment","useCallback","useEffect","useState","TableActions","TableAccordionColumn","TableCollapsibleColumn","TableContext","TableDateRangePicker","TableFilter","TableFooter","TableHeader","TablePagination","TablePerPage","TablePredicate","TableSelectableColumn","Th","useRowSelection","useStyles","theme","hasHeader","multiRowSelectionEnabled","rowBackgroundColor","colorScheme","fn","rgba","colors","primaryColor","table","width","paddingLeft","spacing","xl","verticalAlign","header","position","top","backgroundColor","black","white","transition","zIndex","content","left","right","bottom","borderBottom","gray","rowSelected","undefined","rowCollapsibleButtonCell","textAlign","padding","xs","sm","row","data","getRowId","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","options","convertedChildren","toArray","find","child","type","footer","predicates","dateRange","initialStateWithoutForm","form","initialValues","cx","classes","pagination","pageSize","DEFAULT_SIZE","concat","manualPagination","getPaginationRowModel","enableMultiRowSelection","getRowCanExpand","original","enableRowSelection","state","setState","setOptions","prev","onStateChange","clearSelection","getSelectedRow","getSelectedRows","triggerChange","values","cancel","globalFilter","sorting","clearFilters","setFieldValue","prevState","outsideClickRef","sx","flexGrow","rows","getRowModel","map","rowChildren","tr","onClick","toggleSelected","onDoubleClick","className","getIsSelected","aria-selected","getVisibleCells","cell","size","column","getSize","td","style","id","visible","borderRadius","columnDef","getContext","colSpan","length","borderTop","getIsExpanded","in","px","py","ref","Provider","value","containerRef","getPageCount","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","tbody","Actions","Filter","Footer","Header","Pagination","Predicate","PerPage","CollapsibleColumn","AccordionColumn","DateRangePicker"],"mappings":";;;;;;AAAA,SAAQA,GAAG,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,YAAY,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,SAASC,YAAY,QAAO,gBAAgB;AAC3G,SAAQC,OAAO,QAAO,gBAAgB;AACtC,SAAQC,eAAe,EAAEC,YAAY,QAAO,iBAAiB;AAC7D,SAEIC,mBAAmB,EACnBC,UAAU,EACVC,eAAe,EAGfC,aAAa,QACV,wBAAwB;AAE/B,OAAOC,cAAc,kBAAkB;AACvC,OAAOC,kBAAkB,sBAAsB;AAC/C,SAAQC,QAAQ,EAAEC,QAAQ,EAA2BC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAO,QAAQ;AAEpG,SAAQC,YAAY,QAAO,iBAAiB;AAC5C,SAAQC,oBAAoB,EAAEC,sBAAsB,QAAO,2BAA2B;AACtF,SAA4BC,YAAY,QAAsB,iBAAiB;AAC/E,SAAQC,oBAAoB,QAAO,yBAAyB;AAC5D,SAAQC,WAAW,QAAO,gBAAgB;AAC1C,SAAQC,WAAW,QAAO,gBAAgB;AAC1C,SAAQC,WAAW,QAAO,gBAAgB;AAC1C,SAAQC,eAAe,QAAO,oBAAoB;AAClD,SAAQC,YAAY,QAAO,iBAAiB;AAC5C,SAAQC,cAAc,QAAO,mBAAmB;AAChD,SAAQC,qBAAqB,QAAO,0BAA0B;AAC9D,SAAQC,EAAE,QAAO,OAAO;AACxB,SAAQC,eAAe,QAAO,oBAAoB;AAOlD,IAAMC,YAAYjC,aAAwC,SAACkC,cAAiD;QAAzCC,kBAAAA,WAAWC,iCAAAA;IAC1E,IAAMC,qBACFH,MAAMI,WAAW,KAAK,SAChBJ,MAAMK,EAAE,CAACC,IAAI,CAACN,MAAMO,MAAM,CAACP,MAAMQ,YAAY,CAAC,CAAC,EAAE,EAAE,OACnDR,MAAMO,MAAM,CAACP,MAAMQ,YAAY,CAAC,CAAC,EAAE;IAC7C,OAAO;QACHC,OAAO;YACHC,OAAO;YACP,4CAA4C;gBACxCC,aAAaX,MAAMY,OAAO,CAACC,EAAE;YACjC;YACA,cAAc;gBACVC,eAAe;YACnB;QACJ;QAEAC,QAAQ;YACJC,UAAU;YACVC,KAAKhB,YAAY,KAAK,CAAC;YACvBiB,iBAAiBlB,MAAMI,WAAW,KAAK,SAASJ,MAAMmB,KAAK,GAAGnB,MAAMoB,KAAK;YACzEC,YAAY;YACZC,QAAQ;YAER,YAAY;gBACRC,SAAS;gBACTP,UAAU;gBACVQ,MAAM;gBACNC,OAAO;gBACPC,QAAQ;gBACRC,cAAc,AAAC,aAAiC,OAArB3B,MAAMO,MAAM,CAACqB,IAAI,CAAC,EAAE;YACnD;QACJ;QAEAC,aAAa;YACTX,iBAAiBhB,2BAA2B4B,YAAY3B,kBAAkB;QAC9E;QAEA4B,0BAA0B;YACtBC,WAAW;YACXC,SAAS,AAAC,GAA4BjC,OAA1BA,MAAMY,OAAO,CAACsB,EAAE,GAAG,GAAE,OAAsB,OAAjBlC,MAAMY,OAAO,CAACuB,EAAE,EAAC;QAC3D;QAEAC,KAAK;YACD,WAAW;gBACPlB,iBAAiBf;YACrB;QACJ;IACJ;AACJ;AAoGA,OAAO,IAAMlC,QAAmB,gBAcX;QAbjBoE,aAAAA,MACAC,iBAAAA,UACAC,uBAAAA,gBACAC,0BAAAA,+CACAC,cAAAA,gDAAe,CAAC,yBAChBC,gBAAAA,SACAC,gBAAAA,SACAC,iBAAAA,UACAC,iBAAAA,iCACAC,SAAAA,sCAAU,KAAK,mBACfC,0BAAAA,mBACA7C,iCAAAA,iDACA8C,SAAAA,sCAAU,CAAC;IAEX,IAAMC,oBAAoBrE,SAASsE,OAAO,CAACL;IAC3C,IAAM9B,SAASkC,kBAAkBE,IAAI,CAAC,SAACC;eAAUA,MAAMC,IAAI,KAAK7D;;IAChE,IAAM8D,SAASL,kBAAkBE,IAAI,CAAC,SAACC;eAAUA,MAAMC,IAAI,KAAK9D;;IAEhE,IAAOgE,aAAqDd,aAArDc,YAAYC,YAAyCf,aAAzCe,WAAcC,qDAA2BhB;QAArDc;QAAYC;;QAEaf,0BAA2CA;IAD3E,IAAMiB,OAAOvF,QAAuB;QAChCwF,eAAe;YAACJ,YAAYd,CAAAA,2BAAAA,yBAAAA,0BAAAA,KAAAA,IAAAA,aAAcc,UAAU,cAAxBd,sCAAAA,2BAA4B,CAAC,CAAC;YAAEe,WAAWf,CAAAA,0BAAAA,yBAAAA,0BAAAA,KAAAA,IAAAA,aAAce,SAAS,cAAvBf,qCAAAA,0BAA2B;gBAAC,IAAI;gBAAE,IAAI;aAAC;QAAA;IAClH;IACA,IAAsB1C,aAAAA,UAAU;QAACE,WAAW,CAAC,CAACc;QAAQb,0BAAAA;IAAwB,IAAvE0D,KAAe7D,WAAf6D,IAAIC,UAAW9D,WAAX8D;QAU2B;IARtC,IAAMpD,QAAQhC,cAAc;QACxBgE,cAAc9D,aAAa8E,yBAAyB;YAACK,YAAY;gBAACC,UAAUrE,aAAasE,YAAY;YAAA;QAAC;QACtG3B,MAAAA;QACAK,SAASxC,2BAA2B;YAACN;SAAsC,CAACqE,MAAM,CAACvB,WAAWA,OAAO;QACrGlE,iBAAiBA;QACjB0F,kBAAkBlB,CAAAA,oBAAAA,qBAAAA,KAAAA,IAAAA,QAASmB,qBAAqB,AAAD,MAAMrC;QACrDsC,yBAAyB,CAAC,CAAClE;QAC3BoC,UAAAA;QACA+B,iBAAiB,SAACjC;YAAgB,OAAA,CAAA,OAAA,CAAC,EAACI,8BAAAA,+BAAAA,KAAAA,IAAAA,kBAAoBJ,IAAIkC,QAAQ,gBAAlC,kBAAA,OAAuC,KAAK;;QAC9EC,oBAAoB,CAACzB;OAClBE;IAEP,IAA0BhE,6BAAAA,SAAqByB,MAAMgC,YAAY,OAA1D+B,QAAmBxF,cAAZyF,WAAYzF;IAC1ByB,MAAMiE,UAAU,CAAC,SAACC;eAAU,wCACrBA;YACHH,OAAAA;YACAI,eAAeH;;;IAEnB,IAA0D3E,mBAAAA,gBAAgBW,QAAnEoE,iBAAmD/E,iBAAnD+E,gBAAgBC,iBAAmChF,iBAAnCgF,gBAAgBC,kBAAmBjF,iBAAnBiF;IAEvC,IAAMC,gBAAgBtG,SAAS;QAAMkE,OAAAA,qBAAAA,sBAAAA,KAAAA,IAAAA,SAAW,mBAAI4B,OAAUd,KAAKuB,MAAM;OAAI;IAE7ElG,UAAU,WAAM;QACZ4D,oBAAAA,qBAAAA,KAAAA,IAAAA,QAAU,mBAAI6B,OAAUd,KAAKuB,MAAM;QACnC,OAAO,WAAM;YACTD,cAAcE,MAAM;QACxB;IACJ,GAAG,EAAE;IAEL7G,aAAa,WAAM;QACf2G;QACA,IAAI,CAAC9E,0BAA0B;YAC3B2E;QACJ,CAAC;IACL,GAAG;QAACL,MAAMW,YAAY;QAAEX,MAAMV,UAAU;QAAEU,MAAMY,OAAO;QAAE1B,KAAKuB,MAAM;KAAC;IAErE,IAAMI,eAAevG,YAAY,WAAM;QACnC4E,KAAK4B,aAAa,CAAC,cAAc,CAAC;QAClCb,SAAS,SAACc;mBAAe,wCAAIA;gBAAWJ,cAAc;;;IAC1D,GAAG,EAAE;IAEL,IAAMK,kBAAkBpH,gBAAgB,WAAM;QAC1C,IAAI,CAAC8B,0BAA0B;YAC3B2E;QACJ,CAAC;IACL;IAEA,IAAI,CAACxC,MAAM;QACP,qBACI,KAACzE;YAAO6H,IAAI;gBAACC,UAAU;YAAC;sBACpB,cAAA,KAAC3H;;IAGb,CAAC;IAED,IAAM4H,OAAOlF,MAAMmF,WAAW,GAAGD,IAAI,CAACE,GAAG,CAAC,SAACzD,KAAQ;YAC3BI;QAApB,IAAMsD,cAActD,CAAAA,qBAAAA,8BAAAA,+BAAAA,KAAAA,IAAAA,kBAAoBJ,IAAIkC,QAAQ,eAAhC9B,gCAAAA,qBAAqC,IAAI;QAE7D,qBACI,MAAC3D;;8BACG,KAACkH;oBACGC,SAAS;+BAAM5D,IAAI6D,cAAc;;oBACjCC,eAAe;wBAAMnD,OAAAA,8BAAAA,+BAAAA,KAAAA,IAAAA,kBAAoBX,IAAIkC,QAAQ;;oBACrD6B,WAAWvC,GAAGC,QAAQzB,GAAG,EAAG,qBAACyB,QAAQhC,WAAW,EAAGO,IAAIgE,aAAa;oBACpEC,iBAAejE,IAAIgE,aAAa;8BAE/BhE,IAAIkE,eAAe,GAAGT,GAAG,CAAC,SAACU,MAAS;wBACjC,IAAMC,OAAOD,KAAKE,MAAM,CAACC,OAAO;wBAChC,IAAMhG,QAAQ8F,SAASlI,oBAAoBkI,IAAI,GAAGA,OAAO1E,SAAS;wBAClE,qBACI,KAAC6E;4BAEGC,OAAO;gCAAClG,OAAAA;4BAAK;4BACbyF,WAAWvC,GACP,qBAACC,QAAQ9B,wBAAwB,EAAGwE,KAAKE,MAAM,CAACI,EAAE,KAAK1H,uBAAuB0H,EAAE;sCAGpF,cAAA,KAAC7I;gCAAS8I,SAAShE;gCAAS2C,IAAI,CAAC3C,UAAU;oCAACiE,cAAc;gCAAC,IAAIjF,SAAS;0CACnEvD,WAAWgI,KAAKE,MAAM,CAACO,SAAS,CAACT,IAAI,EAAEA,KAAKU,UAAU;;2BAPtDV,KAAKM,EAAE;oBAWxB;;gBAEHf,4BACG,KAACC;8BACG,cAAA,KAACY;wBACGO,SAASxE,QAAQyE,MAAM,GAAG;wBAC1BP,OAAO;4BACH3E,SAAS;4BACTmF,WAAWhF,IAAIiF,aAAa,KAAKvF,YAAY,MAAM;4BACnDH,cAAcS,IAAIiF,aAAa,KAAKvF,YAAY,MAAM;wBAC1D;kCAEA,cAAA,KAACjE;4BAASyJ,IAAIlF,IAAIiF,aAAa;sCAC3B,cAAA,KAAC1J;gCAAI4J,IAAG;gCAAKC,IAAG;0CACX1B;;;;qBAKjB,IAAI;;WA1CG1D,IAAIyE,EAAE;IA6C7B;IAEA,qBACI,KAAClJ;QAAI8J,KAAKjC;kBACN,cAAA,MAACpG,aAAasI,QAAQ;YAClBC,OAAO;gBACH/E,UAAUoC;gBACVR,OAAAA;gBACAC,UAAAA;gBACAY,cAAAA;gBACAP,gBAAAA;gBACAC,iBAAAA;gBACAF,gBAAAA;gBACAnB,MAAAA;gBACAkE,cAAcpC;gBACdtF,0BAAAA;gBACA2H,cAAcpH,MAAMoH,YAAY;YACpC;;gBAEC9G;8BACD,MAAC7C;oBAAaiI,WAAWtC,QAAQpD,KAAK;oBAAEqH,mBAAkB;oBAAKC,iBAAgB;oBAAKC,IAAG;;sCACnF,KAACC;4BAAM9B,WAAWtC,QAAQ9C,MAAM;sCAC3BN,MAAMyH,eAAe,GAAGrC,GAAG,CAAC,SAACsC;qDAC1B,KAACpC;8CACIoC,YAAYC,OAAO,CAACvC,GAAG,CAAC,SAACwC;6DACtB,KAACxI;4CAAyBkB,QAAQsH;2CAAzBA,aAAaxB,EAAE;;mCAFvBsB,YAAYtB,EAAE;;;sCAO/B,KAACyB;sCACI3C,KAAKwB,MAAM,GACRxB,qBAEA,KAACI;0CACG,cAAA,KAACY;oCAAGO,SAASxE,QAAQyE,MAAM;8CAAG5E;;8BAErC;;;;gBAGRe;;;;AAIjB,EAAE;AAEFrF,MAAMsK,OAAO,GAAGtJ;AAChBhB,MAAMuK,MAAM,GAAGlJ;AACfrB,MAAMwK,MAAM,GAAGlJ;AACftB,MAAMyK,MAAM,GAAGlJ;AACfvB,MAAM0K,UAAU,GAAGlJ;AACnBxB,MAAM2K,SAAS,GAAGjJ;AAClB1B,MAAM4K,OAAO,GAAGnJ;AAChBzB,MAAM2K,SAAS,GAAGjJ;AAClB1B,MAAM6K,iBAAiB,GAAG3J;AAC1BlB,MAAM8K,eAAe,GAAG7J;AACxBjB,MAAM+K,eAAe,GAAG3J"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import {Box, Center, Collapse, Loader, Skeleton, Table as MantineTable} from '@mantine/core';\nimport {useForm} from '@mantine/form';\nimport {useClickOutside, useDidUpdate} from '@mantine/hooks';\nimport {\n ColumnDef,\n defaultColumnSizing,\n flexRender,\n getCoreRowModel,\n Row,\n TableState,\n useReactTable,\n} from '@tanstack/react-table';\nimport {CoreOptions, InitialTableState, TableOptions} from '@tanstack/table-core';\nimport debounce from 'lodash.debounce';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';\n\nimport useStyles from './Table.styles';\nimport {TableActions} from './TableActions';\nimport {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';\nimport {onTableChangeEvent, TableContext, TableFormType} from './TableContext';\nimport {TableDateRangePicker} from './TableDateRangePicker';\nimport {TableFilter} from './TableFilter';\nimport {TableFooter} from './TableFooter';\nimport {TableHeader} from './TableHeader';\nimport {TablePagination} from './TablePagination';\nimport {TablePerPage} from './TablePerPage';\nimport {TablePredicate} from './TablePredicate';\nimport {TableSelectableColumn} from './TableSelectableColumn';\nimport {Th} from './Th';\nimport {useRowSelection} from './useRowSelection';\n\nexport interface TableProps<T> {\n /**\n * Data to display in the table\n */\n data: T[];\n /**\n * Defines how each row is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.\n */\n getRowId?: CoreOptions<T>['getRowId'];\n /**\n * Columns to display in the table.\n *\n * @see https://tanstack.com/table/v8/docs/guide/column-defs\n */\n columns: Array<ColumnDef<T>>;\n /**\n * Function called when the table mounts\n *\n * @param state the state of the table\n */\n onMount?: onTableChangeEvent;\n /**\n * Function called when the table should update\n *\n * @param state the state of the table\n */\n onChange?: onTableChangeEvent;\n /**\n * Function that generates the expandable content of a row\n * Return null for rows that don't need to be expandable\n *\n * @param datum the row for which the children should be generated.\n */\n getExpandChildren?: (datum: T) => ReactNode;\n /**\n * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table\n */\n noDataChildren?: ReactNode;\n /**\n * Whether the table is loading or not\n *\n * @default false\n */\n loading?: boolean;\n /**\n * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`\n *\n * @example\n * <Table ...>\n * <Table.Header>\n * <div>Hello</div>\n * </Table.Header>\n * </Table>\n */\n children?: ReactNode;\n\n /**\n * Initial state of the table\n */\n initialState?: InitialTableState & Partial<TableFormType>;\n /**\n * Action passed when user double clicks on a row\n */\n doubleClickAction?: (datum: T) => void;\n /**\n * Whether the user can select multiple rows in order to perform actions in bulk\n *\n * @default false\n */\n multiRowSelectionEnabled?: boolean;\n\n options?: Omit<\n Partial<TableOptions<T>>,\n | 'initialState'\n | 'data'\n | 'columns'\n | 'manualPagination'\n | 'enableMultiRowSelection'\n | 'getRowId'\n | 'getRowCanExpand'\n | 'enableRowSelection'\n >;\n}\n\ninterface TableType {\n <T>(props: TableProps<T>): ReactElement;\n Actions: typeof TableActions;\n Filter: typeof TableFilter;\n Footer: typeof TableFooter;\n Header: typeof TableHeader;\n Pagination: typeof TablePagination;\n PerPage: typeof TablePerPage;\n Predicate: typeof TablePredicate;\n DateRangePicker: typeof TableDateRangePicker;\n CollapsibleColumn: typeof TableCollapsibleColumn;\n AccordionColumn: typeof TableAccordionColumn;\n}\n\nexport const Table: TableType = <T,>({\n data,\n getRowId,\n noDataChildren,\n getExpandChildren,\n initialState = {},\n columns,\n onMount,\n onChange,\n children,\n loading = false,\n doubleClickAction,\n multiRowSelectionEnabled,\n options = {},\n}: TableProps<T>) => {\n const convertedChildren = Children.toArray(children) as ReactElement[];\n const header = convertedChildren.find((child) => child.type === TableHeader);\n const footer = convertedChildren.find((child) => child.type === TableFooter);\n\n const {predicates, dateRange, ...initialStateWithoutForm} = initialState;\n const form = useForm<TableFormType>({\n initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},\n });\n const {cx, classes} = useStyles({hasHeader: !!header, multiRowSelectionEnabled});\n\n const table = useReactTable({\n initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),\n data,\n columns: multiRowSelectionEnabled ? [TableSelectableColumn as ColumnDef<T>].concat(columns) : columns,\n getCoreRowModel: getCoreRowModel(),\n manualPagination: options?.getPaginationRowModel === undefined,\n enableMultiRowSelection: !!multiRowSelectionEnabled,\n getRowId,\n getRowCanExpand: (row: Row<T>) => !!getExpandChildren?.(row.original) ?? false,\n enableRowSelection: !loading,\n ...options,\n });\n const [state, setState] = useState<TableState>(table.initialState);\n table.setOptions((prev) => ({\n ...prev,\n state,\n onStateChange: setState,\n }));\n const {clearSelection, getSelectedRow, getSelectedRows} = useRowSelection(table);\n const isFiltered =\n !!state.globalFilter ||\n Object.keys(form.values?.predicates ?? {}).some((predicate) => !!form.values.predicates[predicate]) ||\n !!form.values.dateRange?.[0] ||\n !!form.values.dateRange?.[1];\n\n const triggerChange = debounce(() => onChange?.({...state, ...form.values}), 500);\n\n useEffect(() => {\n onMount?.({...state, ...form.values});\n return () => {\n triggerChange.cancel();\n };\n }, []);\n\n useDidUpdate(() => {\n triggerChange();\n if (!multiRowSelectionEnabled) {\n clearSelection();\n }\n }, [state.globalFilter, state.pagination, state.sorting, form.values]);\n\n const clearFilters = useCallback(() => {\n form.setFieldValue('predicates', initialState.predicates ?? {});\n setState((prevState) => ({...prevState, globalFilter: ''}));\n }, []);\n\n const outsideClickRef = useClickOutside(() => {\n if (!multiRowSelectionEnabled) {\n clearSelection();\n }\n });\n\n if (!data) {\n return (\n <Center sx={{flexGrow: 1}}>\n <Loader />\n </Center>\n );\n }\n\n const rows = table.getRowModel().rows.map((row) => {\n const rowChildren = getExpandChildren?.(row.original) ?? null;\n\n return (\n <Fragment key={row.id}>\n <tr\n onClick={() => row.toggleSelected()}\n onDoubleClick={() => doubleClickAction?.(row.original)}\n className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}\n aria-selected={row.getIsSelected()}\n >\n {row.getVisibleCells().map((cell) => {\n const size = cell.column.getSize();\n const width = size !== defaultColumnSizing.size ? size : undefined;\n return (\n <td\n key={cell.id}\n style={{width}}\n className={cx({\n [classes.rowCollapsibleButtonCell]: cell.column.id === TableCollapsibleColumn.id,\n })}\n >\n <Skeleton visible={loading} sx={!loading ? {borderRadius: 0} : undefined}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Skeleton>\n </td>\n );\n })}\n </tr>\n {rowChildren ? (\n <tr>\n <td\n colSpan={columns.length + 1}\n style={{\n padding: 0,\n borderTop: row.getIsExpanded() ? undefined : 'none',\n borderBottom: row.getIsExpanded() ? undefined : 'none',\n }}\n >\n <Collapse in={row.getIsExpanded()}>\n <Box px=\"sm\" py=\"xs\">\n {rowChildren}\n </Box>\n </Collapse>\n </td>\n </tr>\n ) : null}\n </Fragment>\n );\n });\n\n return (\n <Box ref={outsideClickRef}>\n <TableContext.Provider\n value={{\n onChange: triggerChange,\n state,\n isFiltered,\n setState,\n clearFilters,\n getSelectedRow,\n getSelectedRows,\n clearSelection,\n form,\n containerRef: outsideClickRef,\n multiRowSelectionEnabled,\n getPageCount: table.getPageCount,\n }}\n >\n {!rows.length && !isFiltered && !loading ? (\n noDataChildren\n ) : (\n <>\n {header}\n <MantineTable className={classes.table} horizontalSpacing=\"sm\" verticalSpacing=\"xs\" pb=\"sm\">\n <thead className={classes.header}>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((columnHeader) => (\n <Th key={columnHeader.id} header={columnHeader} />\n ))}\n </tr>\n ))}\n </thead>\n <tbody>\n {rows.length ? (\n rows\n ) : (\n <tr>\n <td colSpan={columns.length}>{noDataChildren}</td>\n </tr>\n )}\n </tbody>\n </MantineTable>\n {footer}\n </>\n )}\n </TableContext.Provider>\n </Box>\n );\n};\n\nTable.Actions = TableActions;\nTable.Filter = TableFilter;\nTable.Footer = TableFooter;\nTable.Header = TableHeader;\nTable.Pagination = TablePagination;\nTable.Predicate = TablePredicate;\nTable.PerPage = TablePerPage;\nTable.Predicate = TablePredicate;\nTable.CollapsibleColumn = TableCollapsibleColumn;\nTable.AccordionColumn = TableAccordionColumn;\nTable.DateRangePicker = TableDateRangePicker;\n"],"names":["Box","Center","Collapse","Loader","Skeleton","Table","MantineTable","useForm","useClickOutside","useDidUpdate","defaultColumnSizing","flexRender","getCoreRowModel","useReactTable","debounce","defaultsDeep","Children","Fragment","useCallback","useEffect","useState","useStyles","TableActions","TableAccordionColumn","TableCollapsibleColumn","TableContext","TableDateRangePicker","TableFilter","TableFooter","TableHeader","TablePagination","TablePerPage","TablePredicate","TableSelectableColumn","Th","useRowSelection","data","getRowId","noDataChildren","getExpandChildren","initialState","columns","onMount","onChange","children","loading","doubleClickAction","multiRowSelectionEnabled","options","form","convertedChildren","toArray","header","find","child","type","footer","predicates","dateRange","initialStateWithoutForm","initialValues","hasHeader","cx","classes","table","pagination","pageSize","DEFAULT_SIZE","concat","manualPagination","getPaginationRowModel","undefined","enableMultiRowSelection","getRowCanExpand","row","original","enableRowSelection","state","setState","setOptions","prev","onStateChange","clearSelection","getSelectedRow","getSelectedRows","isFiltered","globalFilter","Object","keys","values","some","predicate","triggerChange","cancel","sorting","clearFilters","setFieldValue","prevState","outsideClickRef","sx","flexGrow","rows","getRowModel","map","rowChildren","tr","onClick","toggleSelected","onDoubleClick","className","rowSelected","getIsSelected","aria-selected","getVisibleCells","cell","size","column","getSize","width","td","style","rowCollapsibleButtonCell","id","visible","borderRadius","columnDef","getContext","colSpan","length","padding","borderTop","getIsExpanded","borderBottom","in","px","py","ref","Provider","value","containerRef","getPageCount","horizontalSpacing","verticalSpacing","pb","thead","getHeaderGroups","headerGroup","headers","columnHeader","tbody","Actions","Filter","Footer","Header","Pagination","Predicate","PerPage","CollapsibleColumn","AccordionColumn","DateRangePicker"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createStyles } from "@mantine/core";
|
|
2
|
+
var useStyles = createStyles(function(theme, param) {
|
|
3
|
+
var hasHeader = param.hasHeader, multiRowSelectionEnabled = param.multiRowSelectionEnabled;
|
|
4
|
+
var rowBackgroundColor = theme.colorScheme === "dark" ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2) : theme.colors[theme.primaryColor][0];
|
|
5
|
+
return {
|
|
6
|
+
table: {
|
|
7
|
+
width: "100%",
|
|
8
|
+
"& td:first-of-type, th:first-of-type > *": {
|
|
9
|
+
paddingLeft: theme.spacing.xl
|
|
10
|
+
},
|
|
11
|
+
"& tbody td": {
|
|
12
|
+
verticalAlign: "top"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
header: {
|
|
16
|
+
position: "sticky",
|
|
17
|
+
top: hasHeader ? 69 : 0,
|
|
18
|
+
backgroundColor: theme.colorScheme === "dark" ? theme.black : theme.white,
|
|
19
|
+
transition: "box-shadow 150ms ease",
|
|
20
|
+
zIndex: 12,
|
|
21
|
+
"&::after": {
|
|
22
|
+
content: '""',
|
|
23
|
+
position: "absolute",
|
|
24
|
+
left: 0,
|
|
25
|
+
right: 0,
|
|
26
|
+
bottom: 0,
|
|
27
|
+
borderBottom: "1px solid ".concat(theme.colors.gray[2])
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
rowSelected: {
|
|
31
|
+
backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor
|
|
32
|
+
},
|
|
33
|
+
rowCollapsibleButtonCell: {
|
|
34
|
+
textAlign: "right",
|
|
35
|
+
padding: "".concat(theme.spacing.xs / 2, "px ").concat(theme.spacing.sm, "px !important")
|
|
36
|
+
},
|
|
37
|
+
row: {
|
|
38
|
+
"&:hover": {
|
|
39
|
+
backgroundColor: rowBackgroundColor
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
export default useStyles;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=Table.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/Table.styles.ts"],"sourcesContent":["import {createStyles} from '@mantine/core';\n\ninterface TableStylesParams {\n hasHeader: boolean;\n multiRowSelectionEnabled: boolean;\n}\n\nconst useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {\n const rowBackgroundColor =\n theme.colorScheme === 'dark'\n ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)\n : theme.colors[theme.primaryColor][0];\n return {\n table: {\n width: '100%',\n '& td:first-of-type, th:first-of-type > *': {\n paddingLeft: theme.spacing.xl,\n },\n '& tbody td': {\n verticalAlign: 'top',\n },\n },\n\n header: {\n position: 'sticky',\n top: hasHeader ? 69 : 0,\n backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,\n transition: 'box-shadow 150ms ease',\n zIndex: 12, // skeleton is 11\n\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n borderBottom: `1px solid ${theme.colors.gray[2]}`,\n },\n },\n\n rowSelected: {\n backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,\n },\n\n rowCollapsibleButtonCell: {\n textAlign: 'right',\n padding: `${theme.spacing.xs / 2}px ${theme.spacing.sm}px !important`,\n },\n\n row: {\n '&:hover': {\n backgroundColor: rowBackgroundColor,\n },\n },\n };\n});\n\nexport default useStyles;\n"],"names":["createStyles","useStyles","theme","hasHeader","multiRowSelectionEnabled","rowBackgroundColor","colorScheme","fn","rgba","colors","primaryColor","table","width","paddingLeft","spacing","xl","verticalAlign","header","position","top","backgroundColor","black","white","transition","zIndex","content","left","right","bottom","borderBottom","gray","rowSelected","undefined","rowCollapsibleButtonCell","textAlign","padding","xs","sm","row"],"mappings":"AAAA,SAAQA,YAAY,QAAO,gBAAgB;AAO3C,IAAMC,YAAYD,aAAwC,SAACE,cAAiD;QAAzCC,kBAAAA,WAAWC,iCAAAA;IAC1E,IAAMC,qBACFH,MAAMI,WAAW,KAAK,SAChBJ,MAAMK,EAAE,CAACC,IAAI,CAACN,MAAMO,MAAM,CAACP,MAAMQ,YAAY,CAAC,CAAC,EAAE,EAAE,OACnDR,MAAMO,MAAM,CAACP,MAAMQ,YAAY,CAAC,CAAC,EAAE;IAC7C,OAAO;QACHC,OAAO;YACHC,OAAO;YACP,4CAA4C;gBACxCC,aAAaX,MAAMY,OAAO,CAACC,EAAE;YACjC;YACA,cAAc;gBACVC,eAAe;YACnB;QACJ;QAEAC,QAAQ;YACJC,UAAU;YACVC,KAAKhB,YAAY,KAAK,CAAC;YACvBiB,iBAAiBlB,MAAMI,WAAW,KAAK,SAASJ,MAAMmB,KAAK,GAAGnB,MAAMoB,KAAK;YACzEC,YAAY;YACZC,QAAQ;YAER,YAAY;gBACRC,SAAS;gBACTP,UAAU;gBACVQ,MAAM;gBACNC,OAAO;gBACPC,QAAQ;gBACRC,cAAc,AAAC,aAAiC,OAArB3B,MAAMO,MAAM,CAACqB,IAAI,CAAC,EAAE;YACnD;QACJ;QAEAC,aAAa;YACTX,iBAAiBhB,2BAA2B4B,YAAY3B,kBAAkB;QAC9E;QAEA4B,0BAA0B;YACtBC,WAAW;YACXC,SAAS,AAAC,GAA4BjC,OAA1BA,MAAMY,OAAO,CAACsB,EAAE,GAAG,GAAE,OAAsB,OAAjBlC,MAAMY,OAAO,CAACuB,EAAE,EAAC;QAC3D;QAEAC,KAAK;YACD,WAAW;gBACPlB,iBAAiBf;YACrB;QACJ;IACJ;AACJ;AAEA,eAAeJ,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/table/TableContext.tsx"],"sourcesContent":["import {DateRangePickerValue} from '@mantine/dates';\nimport {UseFormReturnType} from '@mantine/form';\nimport {TableState} from '@tanstack/react-table';\nimport {createContext, Dispatch, RefObject} from 'react';\n\nexport type onTableChangeEvent = (params: TableState & TableFormType) => void;\n\nexport type TableFormType = {\n /**\n * Object containing the table predicates and their selected values\n *\n * @example {type: \"LONG\", origin: \"system\"}\n */\n predicates: Record<string, string>;\n /**\n * Selected date range in the table\n *\n * @example [new Date(2022, 0, 1), new Date(2022, 0, 31)]\n */\n dateRange: DateRangePickerValue;\n};\n\ntype TableContextType = {\n /**\n * Function to call when the table needs an update\n */\n onChange: () => void;\n /**\n * Internal state of the table\n *\n * @see https://tanstack.com/table/v8/docs/api/core/table#state\n */\n state: TableState;\n /**\n * Function to update the table state\n */\n setState: Dispatch<(prevState: TableState) => TableState>;\n /**\n * Function that clears the filter and predicates\n */\n clearFilters: () => void;\n /**\n * Function that returns the selected row if any.\n */\n getSelectedRow: () => any | null;\n /**\n * Function that returns an array of the selected rows. Most useful when multi row selection is enabled.\n */\n getSelectedRows: () => any[];\n /**\n * Function that clear the selected row\n */\n clearSelection: () => void;\n /**\n * Form used to handle predicates and dateRange\n */\n form: UseFormReturnType<TableFormType>;\n /**\n * Table container ref\n */\n containerRef: RefObject<HTMLDivElement>;\n multiRowSelectionEnabled: boolean;\n\n /**\n * Function that returns the number of pages\n */\n getPageCount: () => number;\n};\n\nexport const TableContext = createContext<TableContextType | null>(null);\n"],"names":["createContext","TableContext"],"mappings":"AAGA,SAAQA,aAAa,QAA4B,QAAQ;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/table/TableContext.tsx"],"sourcesContent":["import {DateRangePickerValue} from '@mantine/dates';\nimport {UseFormReturnType} from '@mantine/form';\nimport {TableState} from '@tanstack/react-table';\nimport {createContext, Dispatch, RefObject} from 'react';\n\nexport type onTableChangeEvent = (params: TableState & TableFormType) => void;\n\nexport type TableFormType = {\n /**\n * Object containing the table predicates and their selected values\n *\n * @example {type: \"LONG\", origin: \"system\"}\n */\n predicates: Record<string, string>;\n /**\n * Selected date range in the table\n *\n * @example [new Date(2022, 0, 1), new Date(2022, 0, 31)]\n */\n dateRange: DateRangePickerValue;\n};\n\ntype TableContextType = {\n /**\n * Function to call when the table needs an update\n */\n onChange: () => void;\n /**\n * Internal state of the table\n *\n * @see https://tanstack.com/table/v8/docs/api/core/table#state\n */\n state: TableState;\n /**\n * Function to update the table state\n */\n setState: Dispatch<(prevState: TableState) => TableState>;\n /**\n * Whether the table currently as any kind of filter applied.\n * Useful to determine if the noDataChildren is an empty state or just the result of a filter\n */\n isFiltered: boolean;\n /**\n * Function that clears the filter and predicates\n */\n clearFilters: () => void;\n /**\n * Function that returns the selected row if any.\n */\n getSelectedRow: () => any | null;\n /**\n * Function that returns an array of the selected rows. Most useful when multi row selection is enabled.\n */\n getSelectedRows: () => any[];\n /**\n * Function that clear the selected row\n */\n clearSelection: () => void;\n /**\n * Form used to handle predicates and dateRange\n */\n form: UseFormReturnType<TableFormType>;\n /**\n * Table container ref\n */\n containerRef: RefObject<HTMLDivElement>;\n multiRowSelectionEnabled: boolean;\n\n /**\n * Function that returns the number of pages\n */\n getPageCount: () => number;\n};\n\nexport const TableContext = createContext<TableContextType | null>(null);\n"],"names":["createContext","TableContext"],"mappings":"AAGA,SAAQA,aAAa,QAA4B,QAAQ;AAuEzD,OAAO,IAAMC,6BAAeD,cAAuC,IAAI,EAAE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coveord/plasma-mantine",
|
|
3
|
-
"version": "49.3.
|
|
3
|
+
"version": "49.3.5",
|
|
4
4
|
"description": "A Plasma flavoured Mantine theme",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"plasma",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"lodash.defaultsdeep": "4.6.1",
|
|
25
25
|
"monaco-editor": "0.34.0",
|
|
26
26
|
"react-beautiful-dnd": "13.1.1",
|
|
27
|
-
"@coveord/plasma-react-icons": "49.
|
|
27
|
+
"@coveord/plasma-react-icons": "49.3.5",
|
|
28
28
|
"@coveord/plasma-tokens": "48.25.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@mantine/form": "5.9.2",
|
|
36
36
|
"@mantine/hooks": "5.9.2",
|
|
37
37
|
"@mantine/modals": "5.9.2",
|
|
38
|
-
"@swc/cli": "0.1.
|
|
38
|
+
"@swc/cli": "0.1.61",
|
|
39
39
|
"@swc/core": "1.3.31",
|
|
40
40
|
"@swc/jest": "0.2.23",
|
|
41
41
|
"@testing-library/dom": "8.18.1",
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import matchers from '@testing-library/jest-dom/matchers';
|
|
1
|
+
import matchers, {TestingLibraryMatchers} from '@testing-library/jest-dom/matchers';
|
|
2
2
|
import {cleanup} from '@testing-library/react';
|
|
3
|
+
declare global {
|
|
4
|
+
namespace Vi {
|
|
5
|
+
interface JestAssertion<T = any> extends jest.Matchers<void, T>, TestingLibraryMatchers<T, void> {}
|
|
6
|
+
}
|
|
7
|
+
}
|
|
3
8
|
expect.extend(matchers);
|
|
4
9
|
Object.defineProperty(window, 'matchMedia', {
|
|
5
10
|
writable: true,
|
|
@@ -19,7 +19,7 @@ interface CollectionItemSharedProps extends DefaultProps<Selectors<typeof useSty
|
|
|
19
19
|
const RemoveButton: FunctionComponent<{
|
|
20
20
|
onClick: React.MouseEventHandler<HTMLButtonElement>;
|
|
21
21
|
}> = ({onClick}) => (
|
|
22
|
-
<ActionIcon variant="subtle" onClick={onClick} color="action">
|
|
22
|
+
<ActionIcon sx={{alignSelf: 'center'}} variant="subtle" onClick={onClick} color="action">
|
|
23
23
|
<RemoveSize16Px height={16} />
|
|
24
24
|
</ActionIcon>
|
|
25
25
|
);
|
|
@@ -69,7 +69,7 @@ const DraggableCollectionItem: FunctionComponent<PropsWithChildren<CollectionIte
|
|
|
69
69
|
{...provided.draggableProps}
|
|
70
70
|
className={cx(classes.item, {[classes.itemDragging]: isDragging})}
|
|
71
71
|
>
|
|
72
|
-
<div {...provided.dragHandleProps}>
|
|
72
|
+
<div {...provided.dragHandleProps} style={{alignSelf: 'center'}}>
|
|
73
73
|
<DragAndDropSize16Px height={16} />
|
|
74
74
|
</div>
|
|
75
75
|
{children}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {createStyles} from '@mantine/core';
|
|
2
|
+
|
|
3
|
+
interface TableStylesParams {
|
|
4
|
+
hasHeader: boolean;
|
|
5
|
+
multiRowSelectionEnabled: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {
|
|
9
|
+
const rowBackgroundColor =
|
|
10
|
+
theme.colorScheme === 'dark'
|
|
11
|
+
? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)
|
|
12
|
+
: theme.colors[theme.primaryColor][0];
|
|
13
|
+
return {
|
|
14
|
+
table: {
|
|
15
|
+
width: '100%',
|
|
16
|
+
'& td:first-of-type, th:first-of-type > *': {
|
|
17
|
+
paddingLeft: theme.spacing.xl,
|
|
18
|
+
},
|
|
19
|
+
'& tbody td': {
|
|
20
|
+
verticalAlign: 'top',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
header: {
|
|
25
|
+
position: 'sticky',
|
|
26
|
+
top: hasHeader ? 69 : 0,
|
|
27
|
+
backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,
|
|
28
|
+
transition: 'box-shadow 150ms ease',
|
|
29
|
+
zIndex: 12, // skeleton is 11
|
|
30
|
+
|
|
31
|
+
'&::after': {
|
|
32
|
+
content: '""',
|
|
33
|
+
position: 'absolute',
|
|
34
|
+
left: 0,
|
|
35
|
+
right: 0,
|
|
36
|
+
bottom: 0,
|
|
37
|
+
borderBottom: `1px solid ${theme.colors.gray[2]}`,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
rowSelected: {
|
|
42
|
+
backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
rowCollapsibleButtonCell: {
|
|
46
|
+
textAlign: 'right',
|
|
47
|
+
padding: `${theme.spacing.xs / 2}px ${theme.spacing.sm}px !important`,
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
row: {
|
|
51
|
+
'&:hover': {
|
|
52
|
+
backgroundColor: rowBackgroundColor,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
export default useStyles;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Box, Center, Collapse,
|
|
1
|
+
import {Box, Center, Collapse, Loader, Skeleton, Table as MantineTable} from '@mantine/core';
|
|
2
2
|
import {useForm} from '@mantine/form';
|
|
3
3
|
import {useClickOutside, useDidUpdate} from '@mantine/hooks';
|
|
4
4
|
import {
|
|
@@ -15,6 +15,7 @@ import debounce from 'lodash.debounce';
|
|
|
15
15
|
import defaultsDeep from 'lodash.defaultsdeep';
|
|
16
16
|
import {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';
|
|
17
17
|
|
|
18
|
+
import useStyles from './Table.styles';
|
|
18
19
|
import {TableActions} from './TableActions';
|
|
19
20
|
import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
|
|
20
21
|
import {onTableChangeEvent, TableContext, TableFormType} from './TableContext';
|
|
@@ -29,61 +30,6 @@ import {TableSelectableColumn} from './TableSelectableColumn';
|
|
|
29
30
|
import {Th} from './Th';
|
|
30
31
|
import {useRowSelection} from './useRowSelection';
|
|
31
32
|
|
|
32
|
-
interface TableStylesParams {
|
|
33
|
-
hasHeader: boolean;
|
|
34
|
-
multiRowSelectionEnabled: boolean;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {
|
|
38
|
-
const rowBackgroundColor =
|
|
39
|
-
theme.colorScheme === 'dark'
|
|
40
|
-
? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)
|
|
41
|
-
: theme.colors[theme.primaryColor][0];
|
|
42
|
-
return {
|
|
43
|
-
table: {
|
|
44
|
-
width: '100%',
|
|
45
|
-
'& td:first-of-type, th:first-of-type > *': {
|
|
46
|
-
paddingLeft: theme.spacing.xl,
|
|
47
|
-
},
|
|
48
|
-
'& tbody td': {
|
|
49
|
-
verticalAlign: 'top',
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
header: {
|
|
54
|
-
position: 'sticky',
|
|
55
|
-
top: hasHeader ? 69 : 0,
|
|
56
|
-
backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,
|
|
57
|
-
transition: 'box-shadow 150ms ease',
|
|
58
|
-
zIndex: 12, // skeleton is 11
|
|
59
|
-
|
|
60
|
-
'&::after': {
|
|
61
|
-
content: '""',
|
|
62
|
-
position: 'absolute',
|
|
63
|
-
left: 0,
|
|
64
|
-
right: 0,
|
|
65
|
-
bottom: 0,
|
|
66
|
-
borderBottom: `1px solid ${theme.colors.gray[2]}`,
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
rowSelected: {
|
|
71
|
-
backgroundColor: multiRowSelectionEnabled ? undefined : rowBackgroundColor,
|
|
72
|
-
},
|
|
73
|
-
|
|
74
|
-
rowCollapsibleButtonCell: {
|
|
75
|
-
textAlign: 'right',
|
|
76
|
-
padding: `${theme.spacing.xs / 2}px ${theme.spacing.sm}px !important`,
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
row: {
|
|
80
|
-
'&:hover': {
|
|
81
|
-
backgroundColor: rowBackgroundColor,
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
|
|
87
33
|
export interface TableProps<T> {
|
|
88
34
|
/**
|
|
89
35
|
* Data to display in the table
|
|
@@ -226,6 +172,11 @@ export const Table: TableType = <T,>({
|
|
|
226
172
|
onStateChange: setState,
|
|
227
173
|
}));
|
|
228
174
|
const {clearSelection, getSelectedRow, getSelectedRows} = useRowSelection(table);
|
|
175
|
+
const isFiltered =
|
|
176
|
+
!!state.globalFilter ||
|
|
177
|
+
Object.keys(form.values?.predicates ?? {}).some((predicate) => !!form.values.predicates[predicate]) ||
|
|
178
|
+
!!form.values.dateRange?.[0] ||
|
|
179
|
+
!!form.values.dateRange?.[1];
|
|
229
180
|
|
|
230
181
|
const triggerChange = debounce(() => onChange?.({...state, ...form.values}), 500);
|
|
231
182
|
|
|
@@ -244,7 +195,7 @@ export const Table: TableType = <T,>({
|
|
|
244
195
|
}, [state.globalFilter, state.pagination, state.sorting, form.values]);
|
|
245
196
|
|
|
246
197
|
const clearFilters = useCallback(() => {
|
|
247
|
-
form.setFieldValue('predicates', {});
|
|
198
|
+
form.setFieldValue('predicates', initialState.predicates ?? {});
|
|
248
199
|
setState((prevState) => ({...prevState, globalFilter: ''}));
|
|
249
200
|
}, []);
|
|
250
201
|
|
|
@@ -319,6 +270,7 @@ export const Table: TableType = <T,>({
|
|
|
319
270
|
value={{
|
|
320
271
|
onChange: triggerChange,
|
|
321
272
|
state,
|
|
273
|
+
isFiltered,
|
|
322
274
|
setState,
|
|
323
275
|
clearFilters,
|
|
324
276
|
getSelectedRow,
|
|
@@ -330,28 +282,34 @@ export const Table: TableType = <T,>({
|
|
|
330
282
|
getPageCount: table.getPageCount,
|
|
331
283
|
}}
|
|
332
284
|
>
|
|
333
|
-
{
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
285
|
+
{!rows.length && !isFiltered && !loading ? (
|
|
286
|
+
noDataChildren
|
|
287
|
+
) : (
|
|
288
|
+
<>
|
|
289
|
+
{header}
|
|
290
|
+
<MantineTable className={classes.table} horizontalSpacing="sm" verticalSpacing="xs" pb="sm">
|
|
291
|
+
<thead className={classes.header}>
|
|
292
|
+
{table.getHeaderGroups().map((headerGroup) => (
|
|
293
|
+
<tr key={headerGroup.id}>
|
|
294
|
+
{headerGroup.headers.map((columnHeader) => (
|
|
295
|
+
<Th key={columnHeader.id} header={columnHeader} />
|
|
296
|
+
))}
|
|
297
|
+
</tr>
|
|
340
298
|
))}
|
|
341
|
-
</
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
</
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
299
|
+
</thead>
|
|
300
|
+
<tbody>
|
|
301
|
+
{rows.length ? (
|
|
302
|
+
rows
|
|
303
|
+
) : (
|
|
304
|
+
<tr>
|
|
305
|
+
<td colSpan={columns.length}>{noDataChildren}</td>
|
|
306
|
+
</tr>
|
|
307
|
+
)}
|
|
308
|
+
</tbody>
|
|
309
|
+
</MantineTable>
|
|
310
|
+
{footer}
|
|
311
|
+
</>
|
|
312
|
+
)}
|
|
355
313
|
</TableContext.Provider>
|
|
356
314
|
</Box>
|
|
357
315
|
);
|