@coveord/plasma-mantine 52.5.0 → 52.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +3 -3
- package/.turbo/turbo-test.log +31 -30
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/blank-slate/BlankSlate.js.map +1 -1
- package/dist/cjs/components/button/Button.js.map +1 -1
- package/dist/cjs/components/button/ButtonWithDisabledTooltip.js.map +1 -1
- package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
- package/dist/cjs/components/code-editor/languages/xml.js.map +1 -1
- package/dist/cjs/components/collection/Collection.js.map +1 -1
- package/dist/cjs/components/collection/Collection.styles.js.map +1 -1
- package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
- package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -1
- package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +5 -5
- package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
- package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
- package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
- package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
- package/dist/cjs/components/header/Header.d.ts.map +1 -1
- package/dist/cjs/components/header/Header.js +3 -0
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirmButton.js.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirmContext.js.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
- package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
- package/dist/cjs/components/inline-confirm/useInlineConfirm.js.map +1 -1
- package/dist/cjs/components/menu/Menu.js.map +1 -1
- package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
- package/dist/cjs/components/modal-wizard/ModalWizardStep.js.map +1 -1
- package/dist/cjs/components/prompt/Prompt.js.map +1 -1
- package/dist/cjs/components/prompt/PromptFooter.js.map +1 -1
- package/dist/cjs/components/sticky-footer/StickyFooter.js.map +1 -1
- package/dist/cjs/components/table/Table.d.ts.map +1 -1
- package/dist/cjs/components/table/Table.js +33 -84
- package/dist/cjs/components/table/Table.js.map +1 -1
- package/dist/cjs/components/table/Table.styles.d.ts +2 -4
- package/dist/cjs/components/table/Table.styles.d.ts.map +1 -1
- package/dist/cjs/components/table/Table.styles.js +7 -25
- package/dist/cjs/components/table/Table.styles.js.map +1 -1
- package/dist/cjs/components/table/Table.types.d.ts +68 -2
- package/dist/cjs/components/table/Table.types.d.ts.map +1 -1
- package/dist/cjs/components/table/TableActions.d.ts +12 -2
- package/dist/cjs/components/table/TableActions.d.ts.map +1 -1
- package/dist/cjs/components/table/TableActions.js +29 -7
- package/dist/cjs/components/table/TableActions.js.map +1 -1
- package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
- package/dist/cjs/components/table/TableContext.js.map +1 -1
- package/dist/cjs/components/table/TableDateRangePicker.d.ts +12 -1
- package/dist/cjs/components/table/TableDateRangePicker.d.ts.map +1 -1
- package/dist/cjs/components/table/TableDateRangePicker.js +38 -12
- package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
- package/dist/cjs/components/table/TableFilter.d.ts +1 -0
- package/dist/cjs/components/table/TableFilter.d.ts.map +1 -1
- package/dist/cjs/components/table/TableFilter.js +3 -1
- package/dist/cjs/components/table/TableFilter.js.map +1 -1
- package/dist/cjs/components/table/TableFooter.js.map +1 -1
- package/dist/cjs/components/table/TableHeader.d.ts.map +1 -1
- package/dist/cjs/components/table/TableHeader.js +5 -2
- package/dist/cjs/components/table/TableHeader.js.map +1 -1
- package/dist/cjs/components/table/TableLayoutControl.d.ts +3 -0
- package/dist/cjs/components/table/TableLayoutControl.d.ts.map +1 -0
- package/dist/cjs/components/table/TableLayoutControl.js +50 -0
- package/dist/cjs/components/table/TableLayoutControl.js.map +1 -0
- package/dist/cjs/components/table/TableLoading.d.ts +4 -0
- package/dist/cjs/components/table/TableLoading.d.ts.map +1 -0
- package/dist/cjs/components/table/TableLoading.js +28 -0
- package/dist/cjs/components/table/TableLoading.js.map +1 -0
- package/dist/cjs/components/table/TablePagination.js.map +1 -1
- package/dist/cjs/components/table/TablePerPage.js.map +1 -1
- package/dist/cjs/components/table/TablePredicate.d.ts +12 -2
- package/dist/cjs/components/table/TablePredicate.d.ts.map +1 -1
- package/dist/cjs/components/table/TablePredicate.js +29 -4
- package/dist/cjs/components/table/TablePredicate.js.map +1 -1
- package/dist/cjs/components/table/TableSelectableColumn.js.map +1 -1
- package/dist/cjs/components/table/Th.d.ts.map +1 -1
- package/dist/cjs/components/table/Th.js +2 -1
- package/dist/cjs/components/table/Th.js.map +1 -1
- package/dist/cjs/components/table/index.d.ts +1 -0
- package/dist/cjs/components/table/index.d.ts.map +1 -1
- package/dist/cjs/components/table/index.js +12 -3
- package/dist/cjs/components/table/index.js.map +1 -1
- package/dist/cjs/components/table/layouts/RowLayout.d.ts +3 -0
- package/dist/cjs/components/table/layouts/RowLayout.d.ts.map +1 -0
- package/dist/cjs/components/table/layouts/RowLayout.js +156 -0
- package/dist/cjs/components/table/layouts/RowLayout.js.map +1 -0
- package/dist/cjs/components/table/layouts/TableLayouts.d.ts +4 -0
- package/dist/cjs/components/table/layouts/TableLayouts.d.ts.map +1 -0
- package/dist/cjs/components/table/layouts/TableLayouts.js +16 -0
- package/dist/cjs/components/table/layouts/TableLayouts.js.map +1 -0
- package/dist/cjs/components/table/useRowSelection.js.map +1 -1
- package/dist/cjs/form/FormProvider.js.map +1 -1
- package/dist/cjs/form/useForm.js.map +1 -1
- package/dist/cjs/hooks/useControlledList.js.map +1 -1
- package/dist/cjs/hooks/useParentHeight.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/theme/PlasmaColors.js.map +1 -1
- package/dist/cjs/theme/Plasmantine.js.map +1 -1
- package/dist/cjs/theme/Theme.js +12 -10
- package/dist/cjs/theme/Theme.js.map +1 -1
- package/dist/cjs/utils/createPolymorphicComponent.js.map +1 -1
- package/dist/cjs/utils/overrideComponent.js.map +1 -1
- package/dist/esm/components/blank-slate/BlankSlate.js.map +1 -1
- package/dist/esm/components/button/Button.js.map +1 -1
- package/dist/esm/components/button/ButtonWithDisabledTooltip.js.map +1 -1
- package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
- package/dist/esm/components/code-editor/languages/xml.js.map +1 -1
- package/dist/esm/components/collection/Collection.js.map +1 -1
- package/dist/esm/components/collection/Collection.styles.js.map +1 -1
- package/dist/esm/components/collection/CollectionItem.js.map +1 -1
- package/dist/esm/components/copyToClipboard/CopyToClipboard.js.map +1 -1
- package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +5 -5
- package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
- package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
- package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
- package/dist/esm/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
- package/dist/esm/components/header/Header.d.ts.map +1 -1
- package/dist/esm/components/header/Header.js +3 -0
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirmButton.js.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirmContext.js.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
- package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
- package/dist/esm/components/inline-confirm/useInlineConfirm.js.map +1 -1
- package/dist/esm/components/menu/Menu.js.map +1 -1
- package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -1
- package/dist/esm/components/modal-wizard/ModalWizardStep.js.map +1 -1
- package/dist/esm/components/prompt/Prompt.js.map +1 -1
- package/dist/esm/components/prompt/PromptFooter.js.map +1 -1
- package/dist/esm/components/sticky-footer/StickyFooter.js.map +1 -1
- package/dist/esm/components/table/Table.d.ts.map +1 -1
- package/dist/esm/components/table/Table.js +36 -87
- package/dist/esm/components/table/Table.js.map +1 -1
- package/dist/esm/components/table/Table.styles.d.ts +2 -4
- package/dist/esm/components/table/Table.styles.d.ts.map +1 -1
- package/dist/esm/components/table/Table.styles.js +7 -25
- package/dist/esm/components/table/Table.styles.js.map +1 -1
- package/dist/esm/components/table/Table.types.d.ts +68 -2
- package/dist/esm/components/table/Table.types.d.ts.map +1 -1
- package/dist/esm/components/table/Table.types.js.map +1 -1
- package/dist/esm/components/table/TableActions.d.ts +12 -2
- package/dist/esm/components/table/TableActions.d.ts.map +1 -1
- package/dist/esm/components/table/TableActions.js +30 -8
- package/dist/esm/components/table/TableActions.js.map +1 -1
- package/dist/esm/components/table/TableCollapsibleColumn.js.map +1 -1
- package/dist/esm/components/table/TableContext.js.map +1 -1
- package/dist/esm/components/table/TableDateRangePicker.d.ts +12 -1
- package/dist/esm/components/table/TableDateRangePicker.d.ts.map +1 -1
- package/dist/esm/components/table/TableDateRangePicker.js +39 -13
- package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
- package/dist/esm/components/table/TableFilter.d.ts +1 -0
- package/dist/esm/components/table/TableFilter.d.ts.map +1 -1
- package/dist/esm/components/table/TableFilter.js +3 -1
- package/dist/esm/components/table/TableFilter.js.map +1 -1
- package/dist/esm/components/table/TableFooter.js.map +1 -1
- package/dist/esm/components/table/TableHeader.d.ts.map +1 -1
- package/dist/esm/components/table/TableHeader.js +5 -2
- package/dist/esm/components/table/TableHeader.js.map +1 -1
- package/dist/esm/components/table/TableLayoutControl.d.ts +3 -0
- package/dist/esm/components/table/TableLayoutControl.d.ts.map +1 -0
- package/dist/esm/components/table/TableLayoutControl.js +40 -0
- package/dist/esm/components/table/TableLayoutControl.js.map +1 -0
- package/dist/esm/components/table/TableLoading.d.ts +4 -0
- package/dist/esm/components/table/TableLoading.d.ts.map +1 -0
- package/dist/esm/components/table/TableLoading.js +18 -0
- package/dist/esm/components/table/TableLoading.js.map +1 -0
- package/dist/esm/components/table/TablePagination.js.map +1 -1
- package/dist/esm/components/table/TablePerPage.js.map +1 -1
- package/dist/esm/components/table/TablePredicate.d.ts +12 -2
- package/dist/esm/components/table/TablePredicate.d.ts.map +1 -1
- package/dist/esm/components/table/TablePredicate.js +30 -5
- package/dist/esm/components/table/TablePredicate.js.map +1 -1
- package/dist/esm/components/table/TableSelectableColumn.js.map +1 -1
- package/dist/esm/components/table/Th.d.ts.map +1 -1
- package/dist/esm/components/table/Th.js +2 -1
- package/dist/esm/components/table/Th.js.map +1 -1
- package/dist/esm/components/table/index.d.ts +1 -0
- package/dist/esm/components/table/index.d.ts.map +1 -1
- package/dist/esm/components/table/index.js +1 -0
- package/dist/esm/components/table/index.js.map +1 -1
- package/dist/esm/components/table/layouts/RowLayout.d.ts +3 -0
- package/dist/esm/components/table/layouts/RowLayout.d.ts.map +1 -0
- package/dist/esm/components/table/layouts/RowLayout.js +146 -0
- package/dist/esm/components/table/layouts/RowLayout.js.map +1 -0
- package/dist/esm/components/table/layouts/TableLayouts.d.ts +4 -0
- package/dist/esm/components/table/layouts/TableLayouts.d.ts.map +1 -0
- package/dist/esm/components/table/layouts/TableLayouts.js +6 -0
- package/dist/esm/components/table/layouts/TableLayouts.js.map +1 -0
- package/dist/esm/components/table/useRowSelection.js.map +1 -1
- package/dist/esm/form/FormProvider.js.map +1 -1
- package/dist/esm/form/useForm.js.map +1 -1
- package/dist/esm/hooks/useControlledList.js.map +1 -1
- package/dist/esm/hooks/useParentHeight.js.map +1 -1
- package/dist/esm/theme/PlasmaColors.js.map +1 -1
- package/dist/esm/theme/Theme.js +12 -10
- package/dist/esm/theme/Theme.js.map +1 -1
- package/dist/esm/utils/overrideComponent.js.map +1 -1
- package/package.json +10 -10
- package/src/__tests__/VitestSetup.ts +7 -5
- package/src/components/date-range-picker/DateRangePickerInlineCalendar.tsx +3 -3
- package/src/components/header/Header.tsx +5 -1
- package/src/components/header/__tests__/Header.spec.tsx +1 -1
- package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
- package/src/components/table/Table.styles.ts +33 -63
- package/src/components/table/Table.tsx +42 -83
- package/src/components/table/Table.types.ts +71 -2
- package/src/components/table/TableActions.tsx +22 -6
- package/src/components/table/TableDateRangePicker.tsx +34 -12
- package/src/components/table/TableFilter.tsx +4 -3
- package/src/components/table/TableHeader.tsx +10 -2
- package/src/components/table/TableLayoutControl.tsx +29 -0
- package/src/components/table/TableLoading.tsx +8 -0
- package/src/components/table/TablePredicate.tsx +24 -7
- package/src/components/table/Th.tsx +1 -0
- package/src/components/table/__tests__/Table.spec.tsx +140 -316
- package/src/components/table/__tests__/TableDateRangePicker.spec.tsx +41 -14
- package/src/components/table/index.ts +1 -0
- package/src/components/table/layouts/RowLayout.tsx +150 -0
- package/src/components/table/layouts/TableLayouts.tsx +5 -0
- package/src/components/table/layouts/__tests__/RowLayout.spec.tsx +296 -0
- package/src/theme/Theme.tsx +10 -10
|
@@ -2,23 +2,27 @@ import {UseFormReturnType} from '@mantine/form';
|
|
|
2
2
|
import {
|
|
3
3
|
ColumnDef,
|
|
4
4
|
CoreOptions,
|
|
5
|
-
|
|
5
|
+
Table,
|
|
6
6
|
TableOptions,
|
|
7
|
+
InitialTableState as TanstackInitialTableState,
|
|
7
8
|
TableState as TanstackTableState,
|
|
8
9
|
} from '@tanstack/table-core';
|
|
9
10
|
import {Dispatch, ReactElement, ReactNode, RefObject} from 'react';
|
|
10
11
|
|
|
12
|
+
import {Icon} from '@coveord/plasma-react-icons';
|
|
11
13
|
import {DateRangePickerValue} from '../date-range-picker/DateRangePickerInlineCalendar';
|
|
12
14
|
import {TableActions} from './TableActions';
|
|
13
15
|
import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
|
|
16
|
+
import {TableConsumer} from './TableConsumer';
|
|
14
17
|
import {TableDateRangePicker} from './TableDateRangePicker';
|
|
15
18
|
import {TableFilter} from './TableFilter';
|
|
16
19
|
import {TableFooter} from './TableFooter';
|
|
17
20
|
import {TableHeader} from './TableHeader';
|
|
21
|
+
import {TableLoading} from './TableLoading';
|
|
18
22
|
import {TablePagination} from './TablePagination';
|
|
19
23
|
import {TablePerPage} from './TablePerPage';
|
|
20
24
|
import {TablePredicate} from './TablePredicate';
|
|
21
|
-
import {
|
|
25
|
+
import {TableLayouts} from './layouts/TableLayouts';
|
|
22
26
|
|
|
23
27
|
export type RowSelectionWithData<TData> = Record<string, TData>;
|
|
24
28
|
export interface RowSelectionState<TData> {
|
|
@@ -34,6 +38,45 @@ export interface InitialTableState<TData>
|
|
|
34
38
|
|
|
35
39
|
export type onTableChangeEvent<TData> = (params: TableState<TData> & TableFormType) => void;
|
|
36
40
|
|
|
41
|
+
export interface TableLayout {
|
|
42
|
+
/**
|
|
43
|
+
* Name of the layout.
|
|
44
|
+
* Will be displayed in the layout control
|
|
45
|
+
*/
|
|
46
|
+
name: string;
|
|
47
|
+
/**
|
|
48
|
+
* Icon illustrating the layout.
|
|
49
|
+
* Will be displayed in the layout control
|
|
50
|
+
*/
|
|
51
|
+
icon?: Icon;
|
|
52
|
+
/**
|
|
53
|
+
* Header portion of the table.
|
|
54
|
+
* In the standard row layout that is where column headers would be displayed.
|
|
55
|
+
*/
|
|
56
|
+
Header: <T>(props: TableLayoutProps<T>) => ReactElement;
|
|
57
|
+
/**
|
|
58
|
+
* Body portion of the table.
|
|
59
|
+
* In the standard row layout that is where the rows would be displayed.
|
|
60
|
+
*/
|
|
61
|
+
Body: <T>(props: TableLayoutProps<T>) => ReactElement;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface TableLayoutProps<T = unknown> {
|
|
65
|
+
table: Table<T>;
|
|
66
|
+
loading?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Action passed when user double clicks on a row
|
|
69
|
+
*/
|
|
70
|
+
doubleClickAction?: (datum: T) => void;
|
|
71
|
+
/**
|
|
72
|
+
* Function that generates the expandable content of a row
|
|
73
|
+
* Return null for rows that don't need to be expandable
|
|
74
|
+
*
|
|
75
|
+
* @param datum the row for which the children should be generated.
|
|
76
|
+
*/
|
|
77
|
+
getExpandChildren?: (datum: T) => ReactNode;
|
|
78
|
+
}
|
|
79
|
+
|
|
37
80
|
export type TableFormType = {
|
|
38
81
|
/**
|
|
39
82
|
* Object containing the table predicates and their selected values
|
|
@@ -47,6 +90,10 @@ export type TableFormType = {
|
|
|
47
90
|
* @example [new Date(2022, 0, 1), new Date(2022, 0, 31)]
|
|
48
91
|
*/
|
|
49
92
|
dateRange: DateRangePickerValue;
|
|
93
|
+
/**
|
|
94
|
+
* Selected layout name
|
|
95
|
+
*/
|
|
96
|
+
layout: TableLayout['name'];
|
|
50
97
|
};
|
|
51
98
|
|
|
52
99
|
export type TableContextType<TData> = {
|
|
@@ -97,10 +144,18 @@ export type TableContextType<TData> = {
|
|
|
97
144
|
* Whether multi row selection is activated
|
|
98
145
|
*/
|
|
99
146
|
multiRowSelectionEnabled: boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Whether row selection is enabled or not
|
|
149
|
+
*/
|
|
150
|
+
disableRowSelection: boolean;
|
|
100
151
|
/**
|
|
101
152
|
* Function that returns the number of pages
|
|
102
153
|
*/
|
|
103
154
|
getPageCount: () => number;
|
|
155
|
+
/**
|
|
156
|
+
* Available layouts. When more than one layout is provided, it will display a layout control to switch between them.
|
|
157
|
+
*/
|
|
158
|
+
layouts: TableLayout[];
|
|
104
159
|
};
|
|
105
160
|
|
|
106
161
|
export interface TableProps<T> {
|
|
@@ -118,6 +173,12 @@ export interface TableProps<T> {
|
|
|
118
173
|
* @see https://tanstack.com/table/v8/docs/guide/column-defs
|
|
119
174
|
*/
|
|
120
175
|
columns: Array<ColumnDef<T>>;
|
|
176
|
+
/**
|
|
177
|
+
* Available layouts
|
|
178
|
+
*
|
|
179
|
+
* @default [Table.Layouts.Rows]
|
|
180
|
+
*/
|
|
181
|
+
layouts?: TableLayout[];
|
|
121
182
|
/**
|
|
122
183
|
* Function called when the table mounts
|
|
123
184
|
*
|
|
@@ -178,6 +239,12 @@ export interface TableProps<T> {
|
|
|
178
239
|
* @default false
|
|
179
240
|
*/
|
|
180
241
|
multiRowSelectionEnabled?: boolean;
|
|
242
|
+
/**
|
|
243
|
+
* Whether row selection is enabled or not
|
|
244
|
+
*
|
|
245
|
+
* @default false
|
|
246
|
+
*/
|
|
247
|
+
disableRowSelection?: boolean;
|
|
181
248
|
/**
|
|
182
249
|
* Additional options that can be passed to the table
|
|
183
250
|
*/
|
|
@@ -208,4 +275,6 @@ export interface TableType {
|
|
|
208
275
|
CollapsibleColumn: typeof TableCollapsibleColumn;
|
|
209
276
|
AccordionColumn: typeof TableAccordionColumn;
|
|
210
277
|
Consumer: typeof TableConsumer;
|
|
278
|
+
Loading: typeof TableLoading;
|
|
279
|
+
Layouts: typeof TableLayouts;
|
|
211
280
|
}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import {Grid, Group} from '@mantine/core';
|
|
1
|
+
import {createStyles, DefaultProps, Grid, Group, Selectors} from '@mantine/core';
|
|
2
2
|
import {ReactElement, ReactNode} from 'react';
|
|
3
|
-
import {TableComponentsOrder} from './Table.styles';
|
|
4
3
|
|
|
4
|
+
import {TableComponentsOrder} from './Table.styles';
|
|
5
5
|
import {useTable} from './TableContext';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const useStyles = createStyles((theme) => ({
|
|
8
|
+
root: {},
|
|
9
|
+
wrapper: {
|
|
10
|
+
display: 'inline-flex',
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
type TableActionsStylesNames = Selectors<typeof useStyles>;
|
|
15
|
+
|
|
16
|
+
interface TableActionsProps<T> extends DefaultProps<TableActionsStylesNames> {
|
|
8
17
|
/**
|
|
9
18
|
* Function that return components for the selected row or selected rows when multi row selection is enabled
|
|
10
19
|
*
|
|
@@ -27,7 +36,14 @@ interface TableActionsProps<T> {
|
|
|
27
36
|
children: ((datum: T) => ReactNode) | ((data: T[]) => ReactNode);
|
|
28
37
|
}
|
|
29
38
|
|
|
30
|
-
export const TableActions = <T,>({
|
|
39
|
+
export const TableActions = <T,>({
|
|
40
|
+
children,
|
|
41
|
+
classNames,
|
|
42
|
+
styles,
|
|
43
|
+
unstyled,
|
|
44
|
+
...others
|
|
45
|
+
}: TableActionsProps<T>): ReactElement => {
|
|
46
|
+
const {classes} = useStyles(null, {name: 'TableActions', classNames, styles, unstyled});
|
|
31
47
|
const {getSelectedRows, multiRowSelectionEnabled} = useTable<T>();
|
|
32
48
|
const selectedRows = getSelectedRows();
|
|
33
49
|
|
|
@@ -36,8 +52,8 @@ export const TableActions = <T,>({children}: TableActionsProps<T>): ReactElement
|
|
|
36
52
|
}
|
|
37
53
|
|
|
38
54
|
return (
|
|
39
|
-
<Grid.Col span="content" order={TableComponentsOrder.Actions} py="sm">
|
|
40
|
-
<Group spacing="xs"
|
|
55
|
+
<Grid.Col span="content" order={TableComponentsOrder.Actions} py="sm" className={classes.root} {...others}>
|
|
56
|
+
<Group spacing="xs" className={classes.wrapper}>
|
|
41
57
|
{multiRowSelectionEnabled
|
|
42
58
|
? (children as (data: T[]) => ReactNode)(selectedRows)
|
|
43
59
|
: (children as (datum: T) => ReactNode)(selectedRows[0])}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {CalendarSize24Px} from '@coveord/plasma-react-icons';
|
|
2
|
-
import {Grid, Group, Popover, Text} from '@mantine/core';
|
|
2
|
+
import {createStyles, DefaultProps, Grid, Group, Popover, Selectors, Text} from '@mantine/core';
|
|
3
|
+
import {useToggle} from '@mantine/hooks';
|
|
3
4
|
import dayjs from 'dayjs';
|
|
4
|
-
import {FunctionComponent
|
|
5
|
+
import {FunctionComponent} from 'react';
|
|
5
6
|
|
|
6
7
|
import {Button} from '../button';
|
|
7
8
|
import {
|
|
@@ -13,8 +14,16 @@ import {
|
|
|
13
14
|
import {TableComponentsOrder} from './Table.styles';
|
|
14
15
|
import {useTable} from './TableContext';
|
|
15
16
|
|
|
17
|
+
const useStyles = createStyles((theme) => ({
|
|
18
|
+
root: {},
|
|
19
|
+
wrapper: {},
|
|
20
|
+
label: {},
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
type TableDateRangePickerStylesNames = Selectors<typeof useStyles>;
|
|
16
24
|
interface TableDateRangePickerProps
|
|
17
|
-
extends Pick<DateRangePickerInlineCalendarProps, 'startProps' | 'endProps' | 'rangeCalendarProps'
|
|
25
|
+
extends Pick<DateRangePickerInlineCalendarProps, 'startProps' | 'endProps' | 'rangeCalendarProps'>,
|
|
26
|
+
DefaultProps<TableDateRangePickerStylesNames> {
|
|
18
27
|
/**
|
|
19
28
|
* An object containing date presets.
|
|
20
29
|
* If empty the preset dropdown won't be shown
|
|
@@ -32,28 +41,41 @@ interface TableDateRangePickerProps
|
|
|
32
41
|
export const TableDateRangePicker: FunctionComponent<TableDateRangePickerProps> = ({
|
|
33
42
|
presets = {},
|
|
34
43
|
rangeCalendarProps,
|
|
44
|
+
classNames,
|
|
45
|
+
styles,
|
|
46
|
+
unstyled,
|
|
47
|
+
...others
|
|
35
48
|
}) => {
|
|
36
|
-
const
|
|
49
|
+
const {classes} = useStyles(null, {name: 'TableDateRangePicker', classNames, styles, unstyled});
|
|
50
|
+
const [opened, toggleOpened] = useToggle();
|
|
37
51
|
const {form} = useTable();
|
|
38
52
|
|
|
39
53
|
const onApply = (dates: DateRangePickerValue) => {
|
|
40
54
|
form.setFieldValue('dateRange', dates);
|
|
41
|
-
|
|
55
|
+
toggleOpened(false);
|
|
42
56
|
};
|
|
43
57
|
const onCancel = () => {
|
|
44
|
-
|
|
58
|
+
toggleOpened(false);
|
|
45
59
|
};
|
|
46
60
|
|
|
47
61
|
const formatDate = (date: Date) => dayjs(date).format('MMM DD, YYYY');
|
|
48
|
-
const
|
|
62
|
+
const formattedRange = `${formatDate(form.values.dateRange[0])} - ${formatDate(form.values.dateRange[1])}`;
|
|
49
63
|
|
|
50
64
|
return (
|
|
51
|
-
<Grid.Col
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
<Grid.Col
|
|
66
|
+
span="content"
|
|
67
|
+
order={TableComponentsOrder.DateRangePicker}
|
|
68
|
+
py="sm"
|
|
69
|
+
className={classes.root}
|
|
70
|
+
{...others}
|
|
71
|
+
>
|
|
72
|
+
<Group spacing="xs" className={classes.wrapper}>
|
|
73
|
+
<Text span className={classes.label}>
|
|
74
|
+
{formattedRange}
|
|
75
|
+
</Text>
|
|
76
|
+
<Popover opened={opened} onChange={toggleOpened} withinPortal>
|
|
55
77
|
<Popover.Target>
|
|
56
|
-
<Button variant="outline" color="gray" onClick={() =>
|
|
78
|
+
<Button variant="outline" color="gray" onClick={() => toggleOpened()} px="xs">
|
|
57
79
|
<CalendarSize24Px width={24} height={24} />
|
|
58
80
|
</Button>
|
|
59
81
|
</Popover.Target>
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';
|
|
2
2
|
import {ActionIcon, createStyles, DefaultProps, Grid, Selectors, TextInput} from '@mantine/core';
|
|
3
3
|
import {ChangeEventHandler, FunctionComponent, MouseEventHandler} from 'react';
|
|
4
|
-
import {TableComponentsOrder} from './Table.styles';
|
|
5
4
|
|
|
5
|
+
import {TableComponentsOrder} from './Table.styles';
|
|
6
6
|
import {useTable} from './TableContext';
|
|
7
7
|
|
|
8
8
|
const useStyles = createStyles((theme) => ({
|
|
9
|
+
root: {},
|
|
9
10
|
wrapper: {
|
|
10
11
|
marginBottom: '0 !important',
|
|
11
12
|
},
|
|
@@ -31,7 +32,7 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
|
31
32
|
unstyled,
|
|
32
33
|
...others
|
|
33
34
|
}) => {
|
|
34
|
-
const {classes} = useStyles(null, {name: '
|
|
35
|
+
const {classes} = useStyles(null, {name: 'TableFilter', classNames, styles, unstyled});
|
|
35
36
|
const {state, setState} = useTable();
|
|
36
37
|
|
|
37
38
|
const changeFilterValue = (value: string) => {
|
|
@@ -54,7 +55,7 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
|
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
return (
|
|
57
|
-
<Grid.Col span="content" order={TableComponentsOrder.Filter} py="sm">
|
|
58
|
+
<Grid.Col span="content" order={TableComponentsOrder.Filter} py="sm" className={classes.root}>
|
|
58
59
|
<TextInput
|
|
59
60
|
className={classes.wrapper}
|
|
60
61
|
placeholder={placeholder}
|
|
@@ -5,6 +5,7 @@ import {FunctionComponent, ReactNode} from 'react';
|
|
|
5
5
|
import {Button} from '../button';
|
|
6
6
|
import {TableComponentsOrder} from './Table.styles';
|
|
7
7
|
import {useTable} from './TableContext';
|
|
8
|
+
import {TableLayoutControl} from './TableLayoutControl';
|
|
8
9
|
|
|
9
10
|
const useStyles = createStyles((theme) => ({
|
|
10
11
|
root: {
|
|
@@ -30,9 +31,10 @@ export const TableHeader: FunctionComponent<TableHeaderProps> = ({
|
|
|
30
31
|
children,
|
|
31
32
|
...others
|
|
32
33
|
}) => {
|
|
33
|
-
const {getSelectedRows, multiRowSelectionEnabled, clearSelection} = useTable();
|
|
34
|
+
const {getSelectedRows, multiRowSelectionEnabled, clearSelection, disableRowSelection} = useTable();
|
|
34
35
|
const {classes} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});
|
|
35
36
|
const selectedRows = getSelectedRows();
|
|
37
|
+
|
|
36
38
|
return (
|
|
37
39
|
<Grid
|
|
38
40
|
justify="flex-start"
|
|
@@ -53,13 +55,19 @@ export const TableHeader: FunctionComponent<TableHeaderProps> = ({
|
|
|
53
55
|
order={TableComponentsOrder.MultiSelectInfo}
|
|
54
56
|
>
|
|
55
57
|
<Tooltip label="Unselect all">
|
|
56
|
-
<Button
|
|
58
|
+
<Button
|
|
59
|
+
onClick={clearSelection}
|
|
60
|
+
variant="subtle"
|
|
61
|
+
disabled={disableRowSelection}
|
|
62
|
+
leftIcon={<CrossSize16Px height={16} />}
|
|
63
|
+
>
|
|
57
64
|
{selectedRows.length} selected
|
|
58
65
|
</Button>
|
|
59
66
|
</Tooltip>
|
|
60
67
|
</Grid.Col>
|
|
61
68
|
) : null}
|
|
62
69
|
{children}
|
|
70
|
+
<TableLayoutControl />
|
|
63
71
|
</Grid>
|
|
64
72
|
);
|
|
65
73
|
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {Box, Center, Grid, SegmentedControl, Space} from '@mantine/core';
|
|
2
|
+
import {TableComponentsOrder} from './Table.styles';
|
|
3
|
+
import {useTable} from './TableContext';
|
|
4
|
+
|
|
5
|
+
export const TableLayoutControl = () => {
|
|
6
|
+
const {form, layouts} = useTable();
|
|
7
|
+
return layouts.length > 1 ? (
|
|
8
|
+
<Grid.Col order={TableComponentsOrder.LayoutControl} span="content">
|
|
9
|
+
<SegmentedControl
|
|
10
|
+
color="action"
|
|
11
|
+
data={layouts.map(({name, icon: Icon}) => ({
|
|
12
|
+
value: name,
|
|
13
|
+
label: (
|
|
14
|
+
<Center>
|
|
15
|
+
{Icon ? (
|
|
16
|
+
<>
|
|
17
|
+
<Icon height={16} />
|
|
18
|
+
<Space w="xs" />
|
|
19
|
+
</>
|
|
20
|
+
) : null}
|
|
21
|
+
<Box>{name}</Box>
|
|
22
|
+
</Center>
|
|
23
|
+
),
|
|
24
|
+
}))}
|
|
25
|
+
{...form.getInputProps('layout')}
|
|
26
|
+
/>
|
|
27
|
+
</Grid.Col>
|
|
28
|
+
) : null;
|
|
29
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {Skeleton, SkeletonProps} from '@mantine/core';
|
|
2
|
+
import {FunctionComponent} from 'react';
|
|
3
|
+
|
|
4
|
+
export const TableLoading: FunctionComponent<SkeletonProps> = (props) => (
|
|
5
|
+
<Skeleton style={{display: 'inline-block'}} {...props} sx={!props.visible ? {borderRadius: 0} : undefined}>
|
|
6
|
+
{props.children}
|
|
7
|
+
</Skeleton>
|
|
8
|
+
);
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
import {Grid, Group, Select, SelectItem, Text} from '@mantine/core';
|
|
1
|
+
import {createStyles, DefaultProps, Grid, Group, Select, SelectItem, Selectors, Text} from '@mantine/core';
|
|
2
2
|
import {FunctionComponent} from 'react';
|
|
3
|
-
import {TableComponentsOrder} from './Table.styles';
|
|
4
3
|
|
|
4
|
+
import {TableComponentsOrder} from './Table.styles';
|
|
5
5
|
import {useTable} from './TableContext';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const useStyles = createStyles((theme) => ({
|
|
8
|
+
root: {},
|
|
9
|
+
wrapper: {},
|
|
10
|
+
label: {},
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
type TablePredicateStylesNames = Selectors<typeof useStyles>;
|
|
14
|
+
|
|
15
|
+
interface TablePredicateProps extends DefaultProps<TablePredicateStylesNames> {
|
|
8
16
|
/**
|
|
9
17
|
* Unique identifier for this predicate. Will be used to access the selected value in the table state
|
|
10
18
|
*/
|
|
@@ -21,7 +29,16 @@ interface TablePredicateProps {
|
|
|
21
29
|
label?: string;
|
|
22
30
|
}
|
|
23
31
|
|
|
24
|
-
export const TablePredicate: FunctionComponent<TablePredicateProps> = ({
|
|
32
|
+
export const TablePredicate: FunctionComponent<TablePredicateProps> = ({
|
|
33
|
+
id,
|
|
34
|
+
data,
|
|
35
|
+
label,
|
|
36
|
+
classNames,
|
|
37
|
+
styles,
|
|
38
|
+
unstyled,
|
|
39
|
+
...others
|
|
40
|
+
}) => {
|
|
41
|
+
const {classes} = useStyles(null, {name: 'TablePredicate', classNames, styles, unstyled});
|
|
25
42
|
const {onChange, form} = useTable();
|
|
26
43
|
|
|
27
44
|
const onUpdate = (newValue: string) => {
|
|
@@ -30,9 +47,9 @@ export const TablePredicate: FunctionComponent<TablePredicateProps> = ({id, data
|
|
|
30
47
|
};
|
|
31
48
|
|
|
32
49
|
return (
|
|
33
|
-
<Grid.Col span="content" order={TableComponentsOrder.Predicate} py="sm">
|
|
34
|
-
<Group spacing="xs">
|
|
35
|
-
{label ? <Text>{label}:</Text> : null}
|
|
50
|
+
<Grid.Col span="content" order={TableComponentsOrder.Predicate} py="sm" className={classes.root} {...others}>
|
|
51
|
+
<Group spacing="xs" className={classes.wrapper}>
|
|
52
|
+
{label ? <Text className={classes.label}>{label}:</Text> : null}
|
|
36
53
|
<Select
|
|
37
54
|
withinPortal
|
|
38
55
|
value={form.values.predicates[id]}
|