@coveord/plasma-mantine 49.3.5 → 49.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +29 -29
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/table/Table.js +8 -10
  5. package/dist/cjs/components/table/Table.js.map +1 -1
  6. package/dist/cjs/components/table/Table.types.js +6 -0
  7. package/dist/cjs/components/table/Table.types.js.map +1 -0
  8. package/dist/cjs/components/table/TableActions.js +3 -3
  9. package/dist/cjs/components/table/TableActions.js.map +1 -1
  10. package/dist/cjs/components/table/TableContext.js +18 -3
  11. package/dist/cjs/components/table/TableContext.js.map +1 -1
  12. package/dist/cjs/components/table/TableDateRangePicker.js +2 -2
  13. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
  14. package/dist/cjs/components/table/TableFilter.js +2 -2
  15. package/dist/cjs/components/table/TableFilter.js.map +1 -1
  16. package/dist/cjs/components/table/TableHeader.js +2 -2
  17. package/dist/cjs/components/table/TableHeader.js.map +1 -1
  18. package/dist/cjs/components/table/TablePagination.js +2 -2
  19. package/dist/cjs/components/table/TablePagination.js.map +1 -1
  20. package/dist/cjs/components/table/TablePerPage.js +2 -2
  21. package/dist/cjs/components/table/TablePerPage.js.map +1 -1
  22. package/dist/cjs/components/table/TablePredicate.js +2 -2
  23. package/dist/cjs/components/table/TablePredicate.js.map +1 -1
  24. package/dist/cjs/components/table/index.js +7 -1
  25. package/dist/cjs/components/table/index.js.map +1 -1
  26. package/dist/cjs/components/table/useRowSelection.js +27 -17
  27. package/dist/cjs/components/table/useRowSelection.js.map +1 -1
  28. package/dist/cjs/index.js.map +1 -1
  29. package/dist/definitions/components/table/Table.d.ts +1 -98
  30. package/dist/definitions/components/table/Table.d.ts.map +1 -1
  31. package/dist/definitions/components/table/Table.types.d.ts +177 -0
  32. package/dist/definitions/components/table/Table.types.d.ts.map +1 -0
  33. package/dist/definitions/components/table/TableActions.d.ts.map +1 -1
  34. package/dist/definitions/components/table/TableContext.d.ts +4 -71
  35. package/dist/definitions/components/table/TableContext.d.ts.map +1 -1
  36. package/dist/definitions/components/table/TableFilter.d.ts.map +1 -1
  37. package/dist/definitions/components/table/TablePagination.d.ts.map +1 -1
  38. package/dist/definitions/components/table/TablePerPage.d.ts.map +1 -1
  39. package/dist/definitions/components/table/TablePredicate.d.ts.map +1 -1
  40. package/dist/definitions/components/table/index.d.ts +2 -2
  41. package/dist/definitions/components/table/index.d.ts.map +1 -1
  42. package/dist/definitions/components/table/useRowSelection.d.ts +4 -1
  43. package/dist/definitions/components/table/useRowSelection.d.ts.map +1 -1
  44. package/dist/definitions/index.d.ts +1 -1
  45. package/dist/definitions/index.d.ts.map +1 -1
  46. package/dist/esm/components/table/Table.js +9 -11
  47. package/dist/esm/components/table/Table.js.map +1 -1
  48. package/dist/esm/components/table/Table.types.js +3 -0
  49. package/dist/esm/components/table/Table.types.js.map +1 -0
  50. package/dist/esm/components/table/TableActions.js +2 -2
  51. package/dist/esm/components/table/TableActions.js.map +1 -1
  52. package/dist/esm/components/table/TableContext.js +8 -1
  53. package/dist/esm/components/table/TableContext.js.map +1 -1
  54. package/dist/esm/components/table/TableDateRangePicker.js +1 -1
  55. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
  56. package/dist/esm/components/table/TableFilter.js +1 -1
  57. package/dist/esm/components/table/TableFilter.js.map +1 -1
  58. package/dist/esm/components/table/TableHeader.js +1 -1
  59. package/dist/esm/components/table/TableHeader.js.map +1 -1
  60. package/dist/esm/components/table/TablePagination.js +1 -1
  61. package/dist/esm/components/table/TablePagination.js.map +1 -1
  62. package/dist/esm/components/table/TablePerPage.js +1 -1
  63. package/dist/esm/components/table/TablePerPage.js.map +1 -1
  64. package/dist/esm/components/table/TablePredicate.js +2 -2
  65. package/dist/esm/components/table/TablePredicate.js.map +1 -1
  66. package/dist/esm/components/table/index.js +1 -1
  67. package/dist/esm/components/table/index.js.map +1 -1
  68. package/dist/esm/components/table/useRowSelection.js +26 -17
  69. package/dist/esm/components/table/useRowSelection.js.map +1 -1
  70. package/dist/esm/index.js.map +1 -1
  71. package/package.json +5 -4
  72. package/src/components/table/Table.tsx +16 -117
  73. package/src/components/table/Table.types.ts +203 -0
  74. package/src/components/table/TableActions.tsx +10 -3
  75. package/src/components/table/TableContext.tsx +9 -70
  76. package/src/components/table/TableDateRangePicker.tsx +1 -1
  77. package/src/components/table/TableFilter.tsx +2 -3
  78. package/src/components/table/TableHeader.tsx +1 -1
  79. package/src/components/table/TablePagination.tsx +3 -3
  80. package/src/components/table/TablePerPage.tsx +2 -3
  81. package/src/components/table/TablePredicate.tsx +3 -2
  82. package/src/components/table/__tests__/Table.spec.tsx +59 -22
  83. package/src/components/table/index.ts +2 -2
  84. package/src/components/table/useRowSelection.ts +36 -21
  85. package/src/index.ts +2 -0
  86. package/dist/cjs/components/table/useTable.js +0 -21
  87. package/dist/cjs/components/table/useTable.js.map +0 -1
  88. package/dist/definitions/components/table/useTable.d.ts +0 -16
  89. package/dist/definitions/components/table/useTable.d.ts.map +0 -1
  90. package/dist/esm/components/table/useTable.js +0 -11
  91. package/dist/esm/components/table/useTable.js.map +0 -1
  92. package/src/components/table/useTable.tsx +0 -11
@@ -1,24 +1,24 @@
1
1
  import {Box, Center, Collapse, Loader, Skeleton, Table as MantineTable} from '@mantine/core';
2
2
  import {useForm} from '@mantine/form';
3
- import {useClickOutside, useDidUpdate} from '@mantine/hooks';
3
+ import {useDidUpdate} from '@mantine/hooks';
4
4
  import {
5
5
  ColumnDef,
6
6
  defaultColumnSizing,
7
7
  flexRender,
8
8
  getCoreRowModel,
9
9
  Row,
10
- TableState,
10
+ TableState as TanstackTableState,
11
11
  useReactTable,
12
12
  } from '@tanstack/react-table';
13
- import {CoreOptions, InitialTableState, TableOptions} from '@tanstack/table-core';
14
13
  import debounce from 'lodash.debounce';
15
14
  import defaultsDeep from 'lodash.defaultsdeep';
16
- import {Children, Fragment, ReactElement, ReactNode, useCallback, useEffect, useState} from 'react';
15
+ import {Children, Dispatch, Fragment, ReactElement, useCallback, useEffect, useState} from 'react';
17
16
 
18
17
  import useStyles from './Table.styles';
18
+ import {TableFormType, TableProps, TableState, TableType} from './Table.types';
19
19
  import {TableActions} from './TableActions';
20
20
  import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
21
- import {onTableChangeEvent, TableContext, TableFormType} from './TableContext';
21
+ import {TableContext} from './TableContext';
22
22
  import {TableDateRangePicker} from './TableDateRangePicker';
23
23
  import {TableFilter} from './TableFilter';
24
24
  import {TableFooter} from './TableFooter';
@@ -30,104 +30,6 @@ import {TableSelectableColumn} from './TableSelectableColumn';
30
30
  import {Th} from './Th';
31
31
  import {useRowSelection} from './useRowSelection';
32
32
 
33
- export interface TableProps<T> {
34
- /**
35
- * Data to display in the table
36
- */
37
- data: T[];
38
- /**
39
- * Defines how each row is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.
40
- */
41
- getRowId?: CoreOptions<T>['getRowId'];
42
- /**
43
- * Columns to display in the table.
44
- *
45
- * @see https://tanstack.com/table/v8/docs/guide/column-defs
46
- */
47
- columns: Array<ColumnDef<T>>;
48
- /**
49
- * Function called when the table mounts
50
- *
51
- * @param state the state of the table
52
- */
53
- onMount?: onTableChangeEvent;
54
- /**
55
- * Function called when the table should update
56
- *
57
- * @param state the state of the table
58
- */
59
- onChange?: onTableChangeEvent;
60
- /**
61
- * Function that generates the expandable content of a row
62
- * Return null for rows that don't need to be expandable
63
- *
64
- * @param datum the row for which the children should be generated.
65
- */
66
- getExpandChildren?: (datum: T) => ReactNode;
67
- /**
68
- * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table
69
- */
70
- noDataChildren?: ReactNode;
71
- /**
72
- * Whether the table is loading or not
73
- *
74
- * @default false
75
- */
76
- loading?: boolean;
77
- /**
78
- * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`
79
- *
80
- * @example
81
- * <Table ...>
82
- * <Table.Header>
83
- * <div>Hello</div>
84
- * </Table.Header>
85
- * </Table>
86
- */
87
- children?: ReactNode;
88
-
89
- /**
90
- * Initial state of the table
91
- */
92
- initialState?: InitialTableState & Partial<TableFormType>;
93
- /**
94
- * Action passed when user double clicks on a row
95
- */
96
- doubleClickAction?: (datum: T) => void;
97
- /**
98
- * Whether the user can select multiple rows in order to perform actions in bulk
99
- *
100
- * @default false
101
- */
102
- multiRowSelectionEnabled?: boolean;
103
-
104
- options?: Omit<
105
- Partial<TableOptions<T>>,
106
- | 'initialState'
107
- | 'data'
108
- | 'columns'
109
- | 'manualPagination'
110
- | 'enableMultiRowSelection'
111
- | 'getRowId'
112
- | 'getRowCanExpand'
113
- | 'enableRowSelection'
114
- >;
115
- }
116
-
117
- interface TableType {
118
- <T>(props: TableProps<T>): ReactElement;
119
- Actions: typeof TableActions;
120
- Filter: typeof TableFilter;
121
- Footer: typeof TableFooter;
122
- Header: typeof TableHeader;
123
- Pagination: typeof TablePagination;
124
- PerPage: typeof TablePerPage;
125
- Predicate: typeof TablePredicate;
126
- DateRangePicker: typeof TableDateRangePicker;
127
- CollapsibleColumn: typeof TableCollapsibleColumn;
128
- AccordionColumn: typeof TableAccordionColumn;
129
- }
130
-
131
33
  export const Table: TableType = <T,>({
132
34
  data,
133
35
  getRowId,
@@ -165,13 +67,15 @@ export const Table: TableType = <T,>({
165
67
  enableRowSelection: !loading,
166
68
  ...options,
167
69
  });
168
- const [state, setState] = useState<TableState>(table.initialState);
70
+ const [state, setState] = useState<TableState<T>>(table.initialState as TableState<T>);
169
71
  table.setOptions((prev) => ({
170
72
  ...prev,
171
- state,
172
- onStateChange: setState,
73
+ state: state as TanstackTableState,
74
+ onStateChange: setState as Dispatch<React.SetStateAction<TanstackTableState>>,
173
75
  }));
174
- const {clearSelection, getSelectedRow, getSelectedRows} = useRowSelection(table);
76
+ const {clearSelection, getSelectedRow, getSelectedRows, outsideClickRef} = useRowSelection(table, {
77
+ multiRowSelectionEnabled,
78
+ });
175
79
  const isFiltered =
176
80
  !!state.globalFilter ||
177
81
  Object.keys(form.values?.predicates ?? {}).some((predicate) => !!form.values.predicates[predicate]) ||
@@ -199,12 +103,6 @@ export const Table: TableType = <T,>({
199
103
  setState((prevState) => ({...prevState, globalFilter: ''}));
200
104
  }, []);
201
105
 
202
- const outsideClickRef = useClickOutside(() => {
203
- if (!multiRowSelectionEnabled) {
204
- clearSelection();
205
- }
206
- });
207
-
208
106
  if (!data) {
209
107
  return (
210
108
  <Center sx={{flexGrow: 1}}>
@@ -215,14 +113,15 @@ export const Table: TableType = <T,>({
215
113
 
216
114
  const rows = table.getRowModel().rows.map((row) => {
217
115
  const rowChildren = getExpandChildren?.(row.original) ?? null;
116
+ const isSelected = !!row.getIsSelected();
218
117
 
219
118
  return (
220
119
  <Fragment key={row.id}>
221
120
  <tr
222
121
  onClick={() => row.toggleSelected()}
223
122
  onDoubleClick={() => doubleClickAction?.(row.original)}
224
- className={cx(classes.row, {[classes.rowSelected]: row.getIsSelected()})}
225
- aria-selected={row.getIsSelected()}
123
+ className={cx(classes.row, {[classes.rowSelected]: isSelected})}
124
+ aria-selected={isSelected}
226
125
  >
227
126
  {row.getVisibleCells().map((cell) => {
228
127
  const size = cell.column.getSize();
@@ -245,7 +144,7 @@ export const Table: TableType = <T,>({
245
144
  {rowChildren ? (
246
145
  <tr>
247
146
  <td
248
- colSpan={columns.length + 1}
147
+ colSpan={table.getAllColumns().length}
249
148
  style={{
250
149
  padding: 0,
251
150
  borderTop: row.getIsExpanded() ? undefined : 'none',
@@ -302,7 +201,7 @@ export const Table: TableType = <T,>({
302
201
  rows
303
202
  ) : (
304
203
  <tr>
305
- <td colSpan={columns.length}>{noDataChildren}</td>
204
+ <td colSpan={table.getAllColumns().length}>{noDataChildren}</td>
306
205
  </tr>
307
206
  )}
308
207
  </tbody>
@@ -0,0 +1,203 @@
1
+ import {DateRangePickerValue} from '@mantine/dates';
2
+ import {UseFormReturnType} from '@mantine/form';
3
+ import {
4
+ ColumnDef,
5
+ CoreOptions,
6
+ InitialTableState as TanstackInitialTableState,
7
+ TableOptions,
8
+ TableState as TanstackTableState,
9
+ } from '@tanstack/table-core';
10
+ import {Dispatch, ReactElement, ReactNode, RefObject} from 'react';
11
+
12
+ import {TableActions} from './TableActions';
13
+ import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
14
+ import {TableDateRangePicker} from './TableDateRangePicker';
15
+ import {TableFilter} from './TableFilter';
16
+ import {TableFooter} from './TableFooter';
17
+ import {TableHeader} from './TableHeader';
18
+ import {TablePagination} from './TablePagination';
19
+ import {TablePerPage} from './TablePerPage';
20
+ import {TablePredicate} from './TablePredicate';
21
+
22
+ export type RowSelectionWithData<TData> = Record<string, TData>;
23
+ export interface RowSelectionState<TData> {
24
+ rowSelection: RowSelectionWithData<TData>;
25
+ }
26
+
27
+ export interface TableState<TData> extends Omit<TanstackTableState, 'rowSelection'>, RowSelectionState<TData> {}
28
+
29
+ export interface InitialTableState<TData>
30
+ extends Omit<TanstackInitialTableState, 'rowSelection'>,
31
+ Partial<RowSelectionState<TData>>,
32
+ Partial<TableFormType> {}
33
+
34
+ export type onTableChangeEvent<TData> = (params: TableState<TData> & TableFormType) => void;
35
+
36
+ export type TableFormType = {
37
+ /**
38
+ * Object containing the table predicates and their selected values
39
+ *
40
+ * @example {type: "LONG", origin: "system"}
41
+ */
42
+ predicates: Record<string, string>;
43
+ /**
44
+ * Selected date range in the table
45
+ *
46
+ * @example [new Date(2022, 0, 1), new Date(2022, 0, 31)]
47
+ */
48
+ dateRange: DateRangePickerValue;
49
+ };
50
+
51
+ export type TableContextType<TData> = {
52
+ /**
53
+ * Function to call when the table needs an update
54
+ */
55
+ onChange: () => void;
56
+ /**
57
+ * Internal state of the table
58
+ *
59
+ * @see https://tanstack.com/table/v8/docs/api/core/table#state
60
+ */
61
+ state: TableState<TData>;
62
+ /**
63
+ * Function to update the table state
64
+ */
65
+ setState: Dispatch<(prevState: TableState<TData>) => TableState<TData>>;
66
+ /**
67
+ * Whether the table currently as any kind of filter applied.
68
+ * Useful to determine if the noDataChildren is an empty state or just the result of a filter
69
+ */
70
+ isFiltered: boolean;
71
+ /**
72
+ * Function that clears the filter and predicates
73
+ */
74
+ clearFilters: () => void;
75
+ /**
76
+ * Function that returns the selected row if any.
77
+ */
78
+ getSelectedRow: () => TData | null;
79
+ /**
80
+ * Function that returns an array of the selected rows. Most useful when multi row selection is enabled.
81
+ */
82
+ getSelectedRows: () => TData[];
83
+ /**
84
+ * Function that clear the selected row
85
+ */
86
+ clearSelection: () => void;
87
+ /**
88
+ * Form used to handle predicates and dateRange
89
+ */
90
+ form: UseFormReturnType<TableFormType>;
91
+ /**
92
+ * Table container ref
93
+ */
94
+ containerRef: RefObject<HTMLDivElement>;
95
+ /**
96
+ * Whether multi row selection is activated
97
+ */
98
+ multiRowSelectionEnabled: boolean;
99
+ /**
100
+ * Function that returns the number of pages
101
+ */
102
+ getPageCount: () => number;
103
+ };
104
+
105
+ export interface TableProps<T> {
106
+ /**
107
+ * Data to display in the table
108
+ */
109
+ data: T[];
110
+ /**
111
+ * Defines how each row is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.
112
+ */
113
+ getRowId?: CoreOptions<T>['getRowId'];
114
+ /**
115
+ * Columns to display in the table.
116
+ *
117
+ * @see https://tanstack.com/table/v8/docs/guide/column-defs
118
+ */
119
+ columns: Array<ColumnDef<T>>;
120
+ /**
121
+ * Function called when the table mounts
122
+ *
123
+ * @param state the state of the table
124
+ */
125
+ onMount?: onTableChangeEvent<T>;
126
+ /**
127
+ * Function called when the table should update
128
+ *
129
+ * @param state the state of the table
130
+ */
131
+ onChange?: onTableChangeEvent<T>;
132
+ /**
133
+ * Function that generates the expandable content of a row
134
+ * Return null for rows that don't need to be expandable
135
+ *
136
+ * @param datum the row for which the children should be generated.
137
+ */
138
+ getExpandChildren?: (datum: T) => ReactNode;
139
+ /**
140
+ * React children to show when the table has no rows to show. You can leverage useTable to get the state of the table
141
+ */
142
+ noDataChildren?: ReactNode;
143
+ /**
144
+ * Whether the table is loading or not
145
+ *
146
+ * @default false
147
+ */
148
+ loading?: boolean;
149
+ /**
150
+ * Childrens to display in the table. They need to be wrap in either `Table.Header` or `Table.Footer`
151
+ *
152
+ * @example
153
+ * <Table ...>
154
+ * <Table.Header>
155
+ * <div>Hello</div>
156
+ * </Table.Header>
157
+ * </Table>
158
+ */
159
+ children?: ReactNode;
160
+ /**
161
+ * Initial state of the table
162
+ */
163
+ initialState?: InitialTableState<T>;
164
+ /**
165
+ * Action passed when user double clicks on a row
166
+ */
167
+ doubleClickAction?: (datum: T) => void;
168
+ /**
169
+ * Whether the user can select multiple rows in order to perform actions in bulk
170
+ *
171
+ * @default false
172
+ */
173
+ multiRowSelectionEnabled?: boolean;
174
+ /**
175
+ * Additional options that can be passed to the table
176
+ */
177
+ options?: Omit<
178
+ Partial<TableOptions<T>>,
179
+ | 'initialState'
180
+ | 'data'
181
+ | 'columns'
182
+ | 'manualPagination'
183
+ | 'enableMultiRowSelection'
184
+ | 'getRowId'
185
+ | 'getRowCanExpand'
186
+ | 'enableRowSelection'
187
+ | 'onRowSelectionChange'
188
+ >;
189
+ }
190
+
191
+ export interface TableType {
192
+ <T>(props: TableProps<T>): ReactElement;
193
+ Actions: typeof TableActions;
194
+ Filter: typeof TableFilter;
195
+ Footer: typeof TableFooter;
196
+ Header: typeof TableHeader;
197
+ Pagination: typeof TablePagination;
198
+ PerPage: typeof TablePerPage;
199
+ Predicate: typeof TablePredicate;
200
+ DateRangePicker: typeof TableDateRangePicker;
201
+ CollapsibleColumn: typeof TableCollapsibleColumn;
202
+ AccordionColumn: typeof TableAccordionColumn;
203
+ }
@@ -1,6 +1,7 @@
1
1
  import {Group} from '@mantine/core';
2
2
  import {ReactElement, ReactNode} from 'react';
3
- import {useTable} from './useTable';
3
+
4
+ import {useTable} from './TableContext';
4
5
 
5
6
  interface TableActionsProps<T> {
6
7
  /**
@@ -26,12 +27,18 @@ interface TableActionsProps<T> {
26
27
  }
27
28
 
28
29
  export const TableActions = <T,>({children}: TableActionsProps<T>): ReactElement => {
29
- const {getSelectedRows, multiRowSelectionEnabled} = useTable();
30
+ const {getSelectedRows, multiRowSelectionEnabled} = useTable<T>();
30
31
  const selectedRows = getSelectedRows();
31
32
 
32
33
  if (selectedRows.length <= 0) {
33
34
  return null;
34
35
  }
35
36
 
36
- return <Group spacing="xs">{children(multiRowSelectionEnabled ? selectedRows : selectedRows[0])}</Group>;
37
+ return (
38
+ <Group spacing="xs">
39
+ {multiRowSelectionEnabled
40
+ ? (children as (data: T[]) => ReactNode)(selectedRows)
41
+ : (children as (datum: T) => ReactNode)(selectedRows[0])}
42
+ </Group>
43
+ );
37
44
  };
@@ -1,75 +1,14 @@
1
- import {DateRangePickerValue} from '@mantine/dates';
2
- import {UseFormReturnType} from '@mantine/form';
3
- import {TableState} from '@tanstack/react-table';
4
- import {createContext, Dispatch, RefObject} from 'react';
1
+ import {createContext, useContext} from 'react';
5
2
 
6
- export type onTableChangeEvent = (params: TableState & TableFormType) => void;
3
+ import {TableContextType} from './Table.types';
7
4
 
8
- export type TableFormType = {
9
- /**
10
- * Object containing the table predicates and their selected values
11
- *
12
- * @example {type: "LONG", origin: "system"}
13
- */
14
- predicates: Record<string, string>;
15
- /**
16
- * Selected date range in the table
17
- *
18
- * @example [new Date(2022, 0, 1), new Date(2022, 0, 31)]
19
- */
20
- dateRange: DateRangePickerValue;
21
- };
5
+ export const TableContext = createContext<TableContextType<any> | null>(null);
22
6
 
23
- type TableContextType = {
24
- /**
25
- * Function to call when the table needs an update
26
- */
27
- onChange: () => void;
28
- /**
29
- * Internal state of the table
30
- *
31
- * @see https://tanstack.com/table/v8/docs/api/core/table#state
32
- */
33
- state: TableState;
34
- /**
35
- * Function to update the table state
36
- */
37
- setState: Dispatch<(prevState: TableState) => TableState>;
38
- /**
39
- * Whether the table currently as any kind of filter applied.
40
- * Useful to determine if the noDataChildren is an empty state or just the result of a filter
41
- */
42
- isFiltered: boolean;
43
- /**
44
- * Function that clears the filter and predicates
45
- */
46
- clearFilters: () => void;
47
- /**
48
- * Function that returns the selected row if any.
49
- */
50
- getSelectedRow: () => any | null;
51
- /**
52
- * Function that returns an array of the selected rows. Most useful when multi row selection is enabled.
53
- */
54
- getSelectedRows: () => any[];
55
- /**
56
- * Function that clear the selected row
57
- */
58
- clearSelection: () => void;
59
- /**
60
- * Form used to handle predicates and dateRange
61
- */
62
- form: UseFormReturnType<TableFormType>;
63
- /**
64
- * Table container ref
65
- */
66
- containerRef: RefObject<HTMLDivElement>;
67
- multiRowSelectionEnabled: boolean;
7
+ export const useTable = <T,>(): TableContextType<T> => {
8
+ const ctx = useContext(TableContext);
9
+ if (ctx === null) {
10
+ throw new Error('useTable must be used inside of a TableContext.Provider');
11
+ }
68
12
 
69
- /**
70
- * Function that returns the number of pages
71
- */
72
- getPageCount: () => number;
13
+ return ctx;
73
14
  };
74
-
75
- export const TableContext = createContext<TableContextType | null>(null);
@@ -7,7 +7,7 @@ import {FunctionComponent, useState} from 'react';
7
7
  import {Button} from '../button';
8
8
  import {DateRangePickerInlineCalendar, DateRangePickerInlineCalendarProps} from '../date-range-picker';
9
9
  import {DateRangePickerPreset} from '../date-range-picker/DateRangePickerPresetSelect';
10
- import {useTable} from './useTable';
10
+ import {useTable} from './TableContext';
11
11
 
12
12
  interface TableDateRangePickerProps
13
13
  extends Pick<DateRangePickerInlineCalendarProps, 'startProps' | 'endProps' | 'rangeCalendarProps'> {
@@ -1,9 +1,8 @@
1
1
  import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';
2
2
  import {ActionIcon, createStyles, DefaultProps, Selectors, TextInput} from '@mantine/core';
3
- import {TableState} from '@tanstack/react-table';
4
3
  import {ChangeEventHandler, FunctionComponent, MouseEventHandler} from 'react';
5
4
 
6
- import {useTable} from './useTable';
5
+ import {useTable} from './TableContext';
7
6
 
8
7
  const useStyles = createStyles((theme) => ({
9
8
  wrapper: {
@@ -35,7 +34,7 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
35
34
  const {state, setState} = useTable();
36
35
 
37
36
  const changeFilterValue = (value: string) => {
38
- setState((prevState: TableState) => ({
37
+ setState((prevState) => ({
39
38
  ...prevState,
40
39
  pagination: prevState.pagination
41
40
  ? {pageIndex: 0, pageSize: prevState.pagination.pageSize}
@@ -3,7 +3,7 @@ import {createStyles, DefaultProps, Group, Selectors, Space, Tooltip} from '@man
3
3
  import {FunctionComponent, ReactNode} from 'react';
4
4
 
5
5
  import {Button} from '../button';
6
- import {useTable} from './useTable';
6
+ import {useTable} from './TableContext';
7
7
 
8
8
  const useStyles = createStyles((theme) => ({
9
9
  root: {
@@ -1,7 +1,7 @@
1
1
  import {Pagination} from '@mantine/core';
2
- import {TableState} from '@tanstack/react-table';
3
2
  import {FunctionComponent} from 'react';
4
- import {useTable} from './useTable';
3
+
4
+ import {useTable} from './TableContext';
5
5
 
6
6
  interface TablePaginationProps {
7
7
  /**
@@ -13,7 +13,7 @@ interface TablePaginationProps {
13
13
  export const TablePagination: FunctionComponent<TablePaginationProps> = ({totalPages}) => {
14
14
  const {state, setState, containerRef, getPageCount} = useTable();
15
15
  const updatePage = (newPage: number) => {
16
- setState((prevState: TableState) => ({
16
+ setState((prevState) => ({
17
17
  ...prevState,
18
18
  pagination: {...prevState.pagination, pageIndex: newPage - 1},
19
19
  }));
@@ -1,8 +1,7 @@
1
1
  import {Group, SegmentedControl, Text} from '@mantine/core';
2
- import {TableState} from '@tanstack/react-table';
3
2
  import {FunctionComponent} from 'react';
4
3
 
5
- import {useTable} from './useTable';
4
+ import {useTable} from './TableContext';
6
5
 
7
6
  interface TablePerPageProps {
8
7
  /**
@@ -26,7 +25,7 @@ export const TablePerPage: FunctionComponent<TablePerPageProps> & {DEFAULT_SIZE:
26
25
  const {state, setState} = useTable();
27
26
 
28
27
  const updatePerPage = (newPerPage: string) => {
29
- setState((prevState: TableState) => ({
28
+ setState((prevState) => ({
30
29
  ...prevState,
31
30
  pagination: {pageIndex: 0, pageSize: parseInt(newPerPage, 10)},
32
31
  }));
@@ -1,6 +1,7 @@
1
- import {Select, SelectItem, Group, Text} from '@mantine/core';
1
+ import {Group, Select, SelectItem, Text} from '@mantine/core';
2
2
  import {FunctionComponent} from 'react';
3
- import {useTable} from './useTable';
3
+
4
+ import {useTable} from './TableContext';
4
5
 
5
6
  interface TablePredicateProps {
6
7
  /**