@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.
Files changed (223) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-test.log +31 -30
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cjs/components/blank-slate/BlankSlate.js.map +1 -1
  5. package/dist/cjs/components/button/Button.js.map +1 -1
  6. package/dist/cjs/components/button/ButtonWithDisabledTooltip.js.map +1 -1
  7. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  8. package/dist/cjs/components/code-editor/languages/xml.js.map +1 -1
  9. package/dist/cjs/components/collection/Collection.js.map +1 -1
  10. package/dist/cjs/components/collection/Collection.styles.js.map +1 -1
  11. package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
  12. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -1
  13. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +5 -5
  14. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  15. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  16. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  17. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  18. package/dist/cjs/components/header/Header.d.ts.map +1 -1
  19. package/dist/cjs/components/header/Header.js +3 -0
  20. package/dist/cjs/components/header/Header.js.map +1 -1
  21. package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
  22. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
  23. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js.map +1 -1
  24. package/dist/cjs/components/inline-confirm/InlineConfirmContext.js.map +1 -1
  25. package/dist/cjs/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
  26. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  27. package/dist/cjs/components/inline-confirm/useInlineConfirm.js.map +1 -1
  28. package/dist/cjs/components/menu/Menu.js.map +1 -1
  29. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
  30. package/dist/cjs/components/modal-wizard/ModalWizardStep.js.map +1 -1
  31. package/dist/cjs/components/prompt/Prompt.js.map +1 -1
  32. package/dist/cjs/components/prompt/PromptFooter.js.map +1 -1
  33. package/dist/cjs/components/sticky-footer/StickyFooter.js.map +1 -1
  34. package/dist/cjs/components/table/Table.d.ts.map +1 -1
  35. package/dist/cjs/components/table/Table.js +33 -84
  36. package/dist/cjs/components/table/Table.js.map +1 -1
  37. package/dist/cjs/components/table/Table.styles.d.ts +2 -4
  38. package/dist/cjs/components/table/Table.styles.d.ts.map +1 -1
  39. package/dist/cjs/components/table/Table.styles.js +7 -25
  40. package/dist/cjs/components/table/Table.styles.js.map +1 -1
  41. package/dist/cjs/components/table/Table.types.d.ts +68 -2
  42. package/dist/cjs/components/table/Table.types.d.ts.map +1 -1
  43. package/dist/cjs/components/table/TableActions.d.ts +12 -2
  44. package/dist/cjs/components/table/TableActions.d.ts.map +1 -1
  45. package/dist/cjs/components/table/TableActions.js +29 -7
  46. package/dist/cjs/components/table/TableActions.js.map +1 -1
  47. package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
  48. package/dist/cjs/components/table/TableContext.js.map +1 -1
  49. package/dist/cjs/components/table/TableDateRangePicker.d.ts +12 -1
  50. package/dist/cjs/components/table/TableDateRangePicker.d.ts.map +1 -1
  51. package/dist/cjs/components/table/TableDateRangePicker.js +38 -12
  52. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
  53. package/dist/cjs/components/table/TableFilter.d.ts +1 -0
  54. package/dist/cjs/components/table/TableFilter.d.ts.map +1 -1
  55. package/dist/cjs/components/table/TableFilter.js +3 -1
  56. package/dist/cjs/components/table/TableFilter.js.map +1 -1
  57. package/dist/cjs/components/table/TableFooter.js.map +1 -1
  58. package/dist/cjs/components/table/TableHeader.d.ts.map +1 -1
  59. package/dist/cjs/components/table/TableHeader.js +5 -2
  60. package/dist/cjs/components/table/TableHeader.js.map +1 -1
  61. package/dist/cjs/components/table/TableLayoutControl.d.ts +3 -0
  62. package/dist/cjs/components/table/TableLayoutControl.d.ts.map +1 -0
  63. package/dist/cjs/components/table/TableLayoutControl.js +50 -0
  64. package/dist/cjs/components/table/TableLayoutControl.js.map +1 -0
  65. package/dist/cjs/components/table/TableLoading.d.ts +4 -0
  66. package/dist/cjs/components/table/TableLoading.d.ts.map +1 -0
  67. package/dist/cjs/components/table/TableLoading.js +28 -0
  68. package/dist/cjs/components/table/TableLoading.js.map +1 -0
  69. package/dist/cjs/components/table/TablePagination.js.map +1 -1
  70. package/dist/cjs/components/table/TablePerPage.js.map +1 -1
  71. package/dist/cjs/components/table/TablePredicate.d.ts +12 -2
  72. package/dist/cjs/components/table/TablePredicate.d.ts.map +1 -1
  73. package/dist/cjs/components/table/TablePredicate.js +29 -4
  74. package/dist/cjs/components/table/TablePredicate.js.map +1 -1
  75. package/dist/cjs/components/table/TableSelectableColumn.js.map +1 -1
  76. package/dist/cjs/components/table/Th.d.ts.map +1 -1
  77. package/dist/cjs/components/table/Th.js +2 -1
  78. package/dist/cjs/components/table/Th.js.map +1 -1
  79. package/dist/cjs/components/table/index.d.ts +1 -0
  80. package/dist/cjs/components/table/index.d.ts.map +1 -1
  81. package/dist/cjs/components/table/index.js +12 -3
  82. package/dist/cjs/components/table/index.js.map +1 -1
  83. package/dist/cjs/components/table/layouts/RowLayout.d.ts +3 -0
  84. package/dist/cjs/components/table/layouts/RowLayout.d.ts.map +1 -0
  85. package/dist/cjs/components/table/layouts/RowLayout.js +156 -0
  86. package/dist/cjs/components/table/layouts/RowLayout.js.map +1 -0
  87. package/dist/cjs/components/table/layouts/TableLayouts.d.ts +4 -0
  88. package/dist/cjs/components/table/layouts/TableLayouts.d.ts.map +1 -0
  89. package/dist/cjs/components/table/layouts/TableLayouts.js +16 -0
  90. package/dist/cjs/components/table/layouts/TableLayouts.js.map +1 -0
  91. package/dist/cjs/components/table/useRowSelection.js.map +1 -1
  92. package/dist/cjs/form/FormProvider.js.map +1 -1
  93. package/dist/cjs/form/useForm.js.map +1 -1
  94. package/dist/cjs/hooks/useControlledList.js.map +1 -1
  95. package/dist/cjs/hooks/useParentHeight.js.map +1 -1
  96. package/dist/cjs/index.js.map +1 -1
  97. package/dist/cjs/theme/PlasmaColors.js.map +1 -1
  98. package/dist/cjs/theme/Plasmantine.js.map +1 -1
  99. package/dist/cjs/theme/Theme.js +12 -10
  100. package/dist/cjs/theme/Theme.js.map +1 -1
  101. package/dist/cjs/utils/createPolymorphicComponent.js.map +1 -1
  102. package/dist/cjs/utils/overrideComponent.js.map +1 -1
  103. package/dist/esm/components/blank-slate/BlankSlate.js.map +1 -1
  104. package/dist/esm/components/button/Button.js.map +1 -1
  105. package/dist/esm/components/button/ButtonWithDisabledTooltip.js.map +1 -1
  106. package/dist/esm/components/code-editor/CodeEditor.js.map +1 -1
  107. package/dist/esm/components/code-editor/languages/xml.js.map +1 -1
  108. package/dist/esm/components/collection/Collection.js.map +1 -1
  109. package/dist/esm/components/collection/Collection.styles.js.map +1 -1
  110. package/dist/esm/components/collection/CollectionItem.js.map +1 -1
  111. package/dist/esm/components/copyToClipboard/CopyToClipboard.js.map +1 -1
  112. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +5 -5
  113. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  114. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  115. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  116. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  117. package/dist/esm/components/header/Header.d.ts.map +1 -1
  118. package/dist/esm/components/header/Header.js +3 -0
  119. package/dist/esm/components/header/Header.js.map +1 -1
  120. package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
  121. package/dist/esm/components/inline-confirm/InlineConfirm.js.map +1 -1
  122. package/dist/esm/components/inline-confirm/InlineConfirmButton.js.map +1 -1
  123. package/dist/esm/components/inline-confirm/InlineConfirmContext.js.map +1 -1
  124. package/dist/esm/components/inline-confirm/InlineConfirmMenuItem.js.map +1 -1
  125. package/dist/esm/components/inline-confirm/InlineConfirmPrompt.js.map +1 -1
  126. package/dist/esm/components/inline-confirm/useInlineConfirm.js.map +1 -1
  127. package/dist/esm/components/menu/Menu.js.map +1 -1
  128. package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -1
  129. package/dist/esm/components/modal-wizard/ModalWizardStep.js.map +1 -1
  130. package/dist/esm/components/prompt/Prompt.js.map +1 -1
  131. package/dist/esm/components/prompt/PromptFooter.js.map +1 -1
  132. package/dist/esm/components/sticky-footer/StickyFooter.js.map +1 -1
  133. package/dist/esm/components/table/Table.d.ts.map +1 -1
  134. package/dist/esm/components/table/Table.js +36 -87
  135. package/dist/esm/components/table/Table.js.map +1 -1
  136. package/dist/esm/components/table/Table.styles.d.ts +2 -4
  137. package/dist/esm/components/table/Table.styles.d.ts.map +1 -1
  138. package/dist/esm/components/table/Table.styles.js +7 -25
  139. package/dist/esm/components/table/Table.styles.js.map +1 -1
  140. package/dist/esm/components/table/Table.types.d.ts +68 -2
  141. package/dist/esm/components/table/Table.types.d.ts.map +1 -1
  142. package/dist/esm/components/table/Table.types.js.map +1 -1
  143. package/dist/esm/components/table/TableActions.d.ts +12 -2
  144. package/dist/esm/components/table/TableActions.d.ts.map +1 -1
  145. package/dist/esm/components/table/TableActions.js +30 -8
  146. package/dist/esm/components/table/TableActions.js.map +1 -1
  147. package/dist/esm/components/table/TableCollapsibleColumn.js.map +1 -1
  148. package/dist/esm/components/table/TableContext.js.map +1 -1
  149. package/dist/esm/components/table/TableDateRangePicker.d.ts +12 -1
  150. package/dist/esm/components/table/TableDateRangePicker.d.ts.map +1 -1
  151. package/dist/esm/components/table/TableDateRangePicker.js +39 -13
  152. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
  153. package/dist/esm/components/table/TableFilter.d.ts +1 -0
  154. package/dist/esm/components/table/TableFilter.d.ts.map +1 -1
  155. package/dist/esm/components/table/TableFilter.js +3 -1
  156. package/dist/esm/components/table/TableFilter.js.map +1 -1
  157. package/dist/esm/components/table/TableFooter.js.map +1 -1
  158. package/dist/esm/components/table/TableHeader.d.ts.map +1 -1
  159. package/dist/esm/components/table/TableHeader.js +5 -2
  160. package/dist/esm/components/table/TableHeader.js.map +1 -1
  161. package/dist/esm/components/table/TableLayoutControl.d.ts +3 -0
  162. package/dist/esm/components/table/TableLayoutControl.d.ts.map +1 -0
  163. package/dist/esm/components/table/TableLayoutControl.js +40 -0
  164. package/dist/esm/components/table/TableLayoutControl.js.map +1 -0
  165. package/dist/esm/components/table/TableLoading.d.ts +4 -0
  166. package/dist/esm/components/table/TableLoading.d.ts.map +1 -0
  167. package/dist/esm/components/table/TableLoading.js +18 -0
  168. package/dist/esm/components/table/TableLoading.js.map +1 -0
  169. package/dist/esm/components/table/TablePagination.js.map +1 -1
  170. package/dist/esm/components/table/TablePerPage.js.map +1 -1
  171. package/dist/esm/components/table/TablePredicate.d.ts +12 -2
  172. package/dist/esm/components/table/TablePredicate.d.ts.map +1 -1
  173. package/dist/esm/components/table/TablePredicate.js +30 -5
  174. package/dist/esm/components/table/TablePredicate.js.map +1 -1
  175. package/dist/esm/components/table/TableSelectableColumn.js.map +1 -1
  176. package/dist/esm/components/table/Th.d.ts.map +1 -1
  177. package/dist/esm/components/table/Th.js +2 -1
  178. package/dist/esm/components/table/Th.js.map +1 -1
  179. package/dist/esm/components/table/index.d.ts +1 -0
  180. package/dist/esm/components/table/index.d.ts.map +1 -1
  181. package/dist/esm/components/table/index.js +1 -0
  182. package/dist/esm/components/table/index.js.map +1 -1
  183. package/dist/esm/components/table/layouts/RowLayout.d.ts +3 -0
  184. package/dist/esm/components/table/layouts/RowLayout.d.ts.map +1 -0
  185. package/dist/esm/components/table/layouts/RowLayout.js +146 -0
  186. package/dist/esm/components/table/layouts/RowLayout.js.map +1 -0
  187. package/dist/esm/components/table/layouts/TableLayouts.d.ts +4 -0
  188. package/dist/esm/components/table/layouts/TableLayouts.d.ts.map +1 -0
  189. package/dist/esm/components/table/layouts/TableLayouts.js +6 -0
  190. package/dist/esm/components/table/layouts/TableLayouts.js.map +1 -0
  191. package/dist/esm/components/table/useRowSelection.js.map +1 -1
  192. package/dist/esm/form/FormProvider.js.map +1 -1
  193. package/dist/esm/form/useForm.js.map +1 -1
  194. package/dist/esm/hooks/useControlledList.js.map +1 -1
  195. package/dist/esm/hooks/useParentHeight.js.map +1 -1
  196. package/dist/esm/theme/PlasmaColors.js.map +1 -1
  197. package/dist/esm/theme/Theme.js +12 -10
  198. package/dist/esm/theme/Theme.js.map +1 -1
  199. package/dist/esm/utils/overrideComponent.js.map +1 -1
  200. package/package.json +10 -10
  201. package/src/__tests__/VitestSetup.ts +7 -5
  202. package/src/components/date-range-picker/DateRangePickerInlineCalendar.tsx +3 -3
  203. package/src/components/header/Header.tsx +5 -1
  204. package/src/components/header/__tests__/Header.spec.tsx +1 -1
  205. package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +1 -1
  206. package/src/components/table/Table.styles.ts +33 -63
  207. package/src/components/table/Table.tsx +42 -83
  208. package/src/components/table/Table.types.ts +71 -2
  209. package/src/components/table/TableActions.tsx +22 -6
  210. package/src/components/table/TableDateRangePicker.tsx +34 -12
  211. package/src/components/table/TableFilter.tsx +4 -3
  212. package/src/components/table/TableHeader.tsx +10 -2
  213. package/src/components/table/TableLayoutControl.tsx +29 -0
  214. package/src/components/table/TableLoading.tsx +8 -0
  215. package/src/components/table/TablePredicate.tsx +24 -7
  216. package/src/components/table/Th.tsx +1 -0
  217. package/src/components/table/__tests__/Table.spec.tsx +140 -316
  218. package/src/components/table/__tests__/TableDateRangePicker.spec.tsx +41 -14
  219. package/src/components/table/index.ts +1 -0
  220. package/src/components/table/layouts/RowLayout.tsx +150 -0
  221. package/src/components/table/layouts/TableLayouts.tsx +5 -0
  222. package/src/components/table/layouts/__tests__/RowLayout.spec.tsx +296 -0
  223. 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
- InitialTableState as TanstackInitialTableState,
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 {TableConsumer} from './TableConsumer';
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
- interface TableActionsProps<T> {
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,>({children}: TableActionsProps<T>): ReactElement => {
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" style={{display: 'inline-flex'}}>
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, useState} from 'react';
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 [opened, setOpened] = useState(false);
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
- setOpened(false);
55
+ toggleOpened(false);
42
56
  };
43
57
  const onCancel = () => {
44
- setOpened(false);
58
+ toggleOpened(false);
45
59
  };
46
60
 
47
61
  const formatDate = (date: Date) => dayjs(date).format('MMM DD, YYYY');
48
- const formatedRange = `${formatDate(form.values.dateRange[0])} - ${formatDate(form.values.dateRange[1])}`;
62
+ const formattedRange = `${formatDate(form.values.dateRange[0])} - ${formatDate(form.values.dateRange[1])}`;
49
63
 
50
64
  return (
51
- <Grid.Col span="content" order={TableComponentsOrder.DateRangePicker} py="sm">
52
- <Group spacing="xs">
53
- <Text span>{formatedRange}</Text>
54
- <Popover opened={opened} onChange={setOpened} withinPortal>
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={() => setOpened(true)} px="xs">
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: 'TableHeader', classNames, styles, unstyled});
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 onClick={clearSelection} variant="subtle" leftIcon={<CrossSize16Px height={16} />}>
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
- interface TablePredicateProps {
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> = ({id, data, label}) => {
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]}
@@ -7,6 +7,7 @@ const useStyles = createStyles((theme) => ({
7
7
  fontWeight: '400 !important' as any,
8
8
  padding: '0 !important',
9
9
  verticalAlign: 'middle',
10
+ whiteSpace: 'nowrap',
10
11
  },
11
12
 
12
13
  control: {