@coveord/plasma-mantine 52.1.0 → 52.3.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 (201) 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/__tests__/Utils.js +9 -9
  5. package/dist/cjs/__tests__/Utils.js.map +1 -1
  6. package/dist/cjs/__tests__/VitestSetup.js +2 -2
  7. package/dist/cjs/__tests__/VitestSetup.js.map +1 -1
  8. package/dist/cjs/components/blank-slate/BlankSlate.js +3 -3
  9. package/dist/cjs/components/blank-slate/index.js +2 -2
  10. package/dist/cjs/components/blank-slate/index.js.map +1 -1
  11. package/dist/cjs/components/button/Button.js +15 -15
  12. package/dist/cjs/components/button/Button.js.map +1 -1
  13. package/dist/cjs/components/button/ButtonWithDisabledTooltip.js +8 -8
  14. package/dist/cjs/components/button/index.js +2 -2
  15. package/dist/cjs/components/button/index.js.map +1 -1
  16. package/dist/cjs/components/code-editor/CodeEditor.js +30 -30
  17. package/dist/cjs/components/code-editor/CodeEditor.js.map +1 -1
  18. package/dist/cjs/components/code-editor/index.js +2 -2
  19. package/dist/cjs/components/code-editor/index.js.map +1 -1
  20. package/dist/cjs/components/code-editor/languages/xml.js +4 -4
  21. package/dist/cjs/components/code-editor/languages/xml.js.map +1 -1
  22. package/dist/cjs/components/collection/Collection.js +25 -25
  23. package/dist/cjs/components/collection/Collection.js.map +1 -1
  24. package/dist/cjs/components/collection/CollectionItem.js +29 -29
  25. package/dist/cjs/components/collection/CollectionItem.js.map +1 -1
  26. package/dist/cjs/components/collection/index.js +2 -2
  27. package/dist/cjs/components/collection/index.js.map +1 -1
  28. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js +13 -13
  29. package/dist/cjs/components/copyToClipboard/CopyToClipboard.js.map +1 -1
  30. package/dist/cjs/components/copyToClipboard/index.js +2 -2
  31. package/dist/cjs/components/copyToClipboard/index.js.map +1 -1
  32. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js +16 -16
  33. package/dist/cjs/components/date-range-picker/DateRangePickerInlineCalendar.js.map +1 -1
  34. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js +16 -16
  35. package/dist/cjs/components/date-range-picker/DateRangePickerPopoverCalendar.js.map +1 -1
  36. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js +10 -10
  37. package/dist/cjs/components/date-range-picker/DateRangePickerPresetSelect.js.map +1 -1
  38. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js +9 -9
  39. package/dist/cjs/components/date-range-picker/EditableDateRangePicker.js.map +1 -1
  40. package/dist/cjs/components/date-range-picker/index.js +4 -4
  41. package/dist/cjs/components/date-range-picker/index.js.map +1 -1
  42. package/dist/cjs/components/header/Header.js +23 -23
  43. package/dist/cjs/components/header/Header.js.map +1 -1
  44. package/dist/cjs/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  45. package/dist/cjs/components/header/index.js +2 -2
  46. package/dist/cjs/components/header/index.js.map +1 -1
  47. package/dist/cjs/components/index.js +14 -14
  48. package/dist/cjs/components/index.js.map +1 -1
  49. package/dist/cjs/components/inline-confirm/InlineConfirm.js +12 -12
  50. package/dist/cjs/components/inline-confirm/InlineConfirm.js.map +1 -1
  51. package/dist/cjs/components/inline-confirm/InlineConfirmButton.js +5 -5
  52. package/dist/cjs/components/inline-confirm/InlineConfirmMenuItem.js +5 -5
  53. package/dist/cjs/components/inline-confirm/InlineConfirmPrompt.js +4 -4
  54. package/dist/cjs/components/inline-confirm/index.js +4 -4
  55. package/dist/cjs/components/inline-confirm/index.js.map +1 -1
  56. package/dist/cjs/components/inline-confirm/useInlineConfirm.js +2 -2
  57. package/dist/cjs/components/menu/Menu.js +7 -7
  58. package/dist/cjs/components/menu/index.js +2 -2
  59. package/dist/cjs/components/menu/index.js.map +1 -1
  60. package/dist/cjs/components/modal-wizard/ModalWizard.js +31 -26
  61. package/dist/cjs/components/modal-wizard/ModalWizard.js.map +1 -1
  62. package/dist/cjs/components/modal-wizard/ModalWizardStep.js +2 -2
  63. package/dist/cjs/components/modal-wizard/ModalWizardStep.js.map +1 -1
  64. package/dist/cjs/components/modal-wizard/index.js +2 -2
  65. package/dist/cjs/components/modal-wizard/index.js.map +1 -1
  66. package/dist/cjs/components/prompt/Prompt.js +18 -18
  67. package/dist/cjs/components/prompt/PromptFooter.js +7 -7
  68. package/dist/cjs/components/prompt/PromptFooter.js.map +1 -1
  69. package/dist/cjs/components/prompt/index.js +2 -2
  70. package/dist/cjs/components/prompt/index.js.map +1 -1
  71. package/dist/cjs/components/sticky-footer/StickyFooter.js +8 -8
  72. package/dist/cjs/components/sticky-footer/index.js +2 -2
  73. package/dist/cjs/components/sticky-footer/index.js.map +1 -1
  74. package/dist/cjs/components/table/Table.js +96 -86
  75. package/dist/cjs/components/table/Table.js.map +1 -1
  76. package/dist/cjs/components/table/Table.styles.js +30 -7
  77. package/dist/cjs/components/table/Table.styles.js.map +1 -1
  78. package/dist/cjs/components/table/TableActions.js +15 -6
  79. package/dist/cjs/components/table/TableActions.js.map +1 -1
  80. package/dist/cjs/components/table/TableCollapsibleColumn.js +10 -10
  81. package/dist/cjs/components/table/TableCollapsibleColumn.js.map +1 -1
  82. package/dist/cjs/components/table/TableConsumer.js +2 -2
  83. package/dist/cjs/components/table/TableDateRangePicker.js +51 -41
  84. package/dist/cjs/components/table/TableDateRangePicker.js.map +1 -1
  85. package/dist/cjs/components/table/TableFilter.js +31 -25
  86. package/dist/cjs/components/table/TableFilter.js.map +1 -1
  87. package/dist/cjs/components/table/TableFooter.js +6 -6
  88. package/dist/cjs/components/table/TableHeader.js +45 -45
  89. package/dist/cjs/components/table/TableHeader.js.map +1 -1
  90. package/dist/cjs/components/table/TablePagination.js +8 -8
  91. package/dist/cjs/components/table/TablePagination.js.map +1 -1
  92. package/dist/cjs/components/table/TablePerPage.js +9 -9
  93. package/dist/cjs/components/table/TablePerPage.js.map +1 -1
  94. package/dist/cjs/components/table/TablePredicate.js +31 -25
  95. package/dist/cjs/components/table/TablePredicate.js.map +1 -1
  96. package/dist/cjs/components/table/TableSelectableColumn.js +4 -4
  97. package/dist/cjs/components/table/Th.js +17 -17
  98. package/dist/cjs/components/table/index.js +4 -4
  99. package/dist/cjs/components/table/index.js.map +1 -1
  100. package/dist/cjs/components/table/useRowSelection.js +9 -9
  101. package/dist/cjs/components/table/useRowSelection.js.map +1 -1
  102. package/dist/cjs/form/FormProvider.js +4 -4
  103. package/dist/cjs/form/FormProvider.js.map +1 -1
  104. package/dist/cjs/form/index.js +3 -3
  105. package/dist/cjs/form/index.js.map +1 -1
  106. package/dist/cjs/form/useForm.js +4 -4
  107. package/dist/cjs/form/useForm.js.map +1 -1
  108. package/dist/cjs/hooks/index.js +3 -3
  109. package/dist/cjs/hooks/index.js.map +1 -1
  110. package/dist/cjs/hooks/useControlledList.js +5 -5
  111. package/dist/cjs/hooks/useControlledList.js.map +1 -1
  112. package/dist/cjs/hooks/useParentHeight.js +2 -2
  113. package/dist/cjs/hooks/useParentHeight.js.map +1 -1
  114. package/dist/cjs/index.js +9 -9
  115. package/dist/cjs/index.js.map +1 -1
  116. package/dist/cjs/theme/PlasmaColors.js +30 -30
  117. package/dist/cjs/theme/Plasmantine.js +4 -4
  118. package/dist/cjs/theme/Theme.js +13 -13
  119. package/dist/cjs/theme/Theme.js.map +1 -1
  120. package/dist/cjs/theme/index.js +2 -2
  121. package/dist/cjs/theme/index.js.map +1 -1
  122. package/dist/cjs/utils/index.js +3 -3
  123. package/dist/cjs/utils/index.js.map +1 -1
  124. package/dist/cjs/utils/overrideComponent.js +2 -2
  125. package/dist/cjs/utils/overrideComponent.js.map +1 -1
  126. package/dist/definitions/components/header/Header.d.ts.map +1 -1
  127. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts +8 -1
  128. package/dist/definitions/components/modal-wizard/ModalWizard.d.ts.map +1 -1
  129. package/dist/definitions/components/modal-wizard/ModalWizardStep.d.ts +1 -1
  130. package/dist/definitions/components/modal-wizard/ModalWizardStep.d.ts.map +1 -1
  131. package/dist/definitions/components/table/Table.d.ts.map +1 -1
  132. package/dist/definitions/components/table/Table.styles.d.ts +7 -1
  133. package/dist/definitions/components/table/Table.styles.d.ts.map +1 -1
  134. package/dist/definitions/components/table/TableActions.d.ts.map +1 -1
  135. package/dist/definitions/components/table/TableDateRangePicker.d.ts.map +1 -1
  136. package/dist/definitions/components/table/TableFilter.d.ts.map +1 -1
  137. package/dist/definitions/components/table/TableHeader.d.ts +1 -0
  138. package/dist/definitions/components/table/TableHeader.d.ts.map +1 -1
  139. package/dist/definitions/components/table/TablePredicate.d.ts.map +1 -1
  140. package/dist/esm/__tests__/Utils.js +1 -1
  141. package/dist/esm/components/button/Button.js +6 -6
  142. package/dist/esm/components/button/ButtonWithDisabledTooltip.js +3 -3
  143. package/dist/esm/components/code-editor/CodeEditor.js +6 -6
  144. package/dist/esm/components/code-editor/languages/xml.js +2 -2
  145. package/dist/esm/components/collection/Collection.js +3 -3
  146. package/dist/esm/components/collection/CollectionItem.js +4 -4
  147. package/dist/esm/components/copyToClipboard/CopyToClipboard.js +2 -2
  148. package/dist/esm/components/date-range-picker/DateRangePickerInlineCalendar.js +2 -2
  149. package/dist/esm/components/date-range-picker/DateRangePickerPopoverCalendar.js +2 -2
  150. package/dist/esm/components/date-range-picker/DateRangePickerPresetSelect.js +3 -3
  151. package/dist/esm/components/date-range-picker/EditableDateRangePicker.js +1 -1
  152. package/dist/esm/components/header/Header.js +11 -11
  153. package/dist/esm/components/header/Header.js.map +1 -1
  154. package/dist/esm/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  155. package/dist/esm/components/inline-confirm/InlineConfirm.js +1 -1
  156. package/dist/esm/components/inline-confirm/InlineConfirmButton.js +2 -2
  157. package/dist/esm/components/inline-confirm/InlineConfirmMenuItem.js +2 -2
  158. package/dist/esm/components/menu/Menu.js +2 -2
  159. package/dist/esm/components/modal-wizard/ModalWizard.js +14 -9
  160. package/dist/esm/components/modal-wizard/ModalWizard.js.map +1 -1
  161. package/dist/esm/components/modal-wizard/ModalWizardStep.js.map +1 -1
  162. package/dist/esm/components/prompt/Prompt.js +3 -3
  163. package/dist/esm/components/prompt/PromptFooter.js +3 -3
  164. package/dist/esm/components/sticky-footer/StickyFooter.js +3 -3
  165. package/dist/esm/components/table/Table.js +27 -17
  166. package/dist/esm/components/table/Table.js.map +1 -1
  167. package/dist/esm/components/table/Table.styles.js +19 -4
  168. package/dist/esm/components/table/Table.styles.js.map +1 -1
  169. package/dist/esm/components/table/TableActions.js +13 -4
  170. package/dist/esm/components/table/TableActions.js.map +1 -1
  171. package/dist/esm/components/table/TableCollapsibleColumn.js +2 -2
  172. package/dist/esm/components/table/TableDateRangePicker.js +45 -35
  173. package/dist/esm/components/table/TableDateRangePicker.js.map +1 -1
  174. package/dist/esm/components/table/TableFilter.js +26 -20
  175. package/dist/esm/components/table/TableFilter.js.map +1 -1
  176. package/dist/esm/components/table/TableFooter.js +3 -3
  177. package/dist/esm/components/table/TableHeader.js +41 -41
  178. package/dist/esm/components/table/TableHeader.js.map +1 -1
  179. package/dist/esm/components/table/TablePagination.js +2 -2
  180. package/dist/esm/components/table/TablePerPage.js +2 -2
  181. package/dist/esm/components/table/TablePredicate.js +28 -22
  182. package/dist/esm/components/table/TablePredicate.js.map +1 -1
  183. package/dist/esm/components/table/useRowSelection.js +2 -2
  184. package/dist/esm/form/useForm.js +2 -2
  185. package/dist/esm/hooks/useControlledList.js +2 -2
  186. package/dist/esm/hooks/useParentHeight.js +1 -1
  187. package/dist/esm/theme/Theme.js +2 -2
  188. package/dist/esm/utils/overrideComponent.js +1 -1
  189. package/package.json +8 -8
  190. package/src/components/header/Header.tsx +5 -7
  191. package/src/components/header/__tests__/__snapshots__/Header.spec.tsx.snap +4 -8
  192. package/src/components/modal-wizard/ModalWizard.tsx +18 -4
  193. package/src/components/modal-wizard/ModalWizardStep.tsx +1 -1
  194. package/src/components/modal-wizard/__tests__/ModalWizard.spec.tsx +34 -6
  195. package/src/components/table/Table.styles.ts +21 -5
  196. package/src/components/table/Table.tsx +10 -4
  197. package/src/components/table/TableActions.tsx +9 -6
  198. package/src/components/table/TableDateRangePicker.tsx +23 -20
  199. package/src/components/table/TableFilter.tsx +21 -18
  200. package/src/components/table/TableHeader.tsx +35 -23
  201. package/src/components/table/TablePredicate.tsx +15 -12
@@ -54,7 +54,7 @@ export interface ModalWizardProps
54
54
  /**
55
55
  * A callback function that is executed when the user clicks on the next button
56
56
  */
57
- onNext?: (newStep: number) => unknown;
57
+ onNext?: (newStep: number, setCurrentStep?: React.Dispatch<number>) => unknown;
58
58
 
59
59
  /**
60
60
  * A callback function that is executed when the user clicks on the previous button
@@ -82,6 +82,14 @@ export interface ModalWizardProps
82
82
  * Children to display in modal wizard
83
83
  * */
84
84
  children?: Array<ReturnType<typeof ModalWizardStep>>;
85
+
86
+ /**
87
+ * Indicates if step validation should be performed when clicking on to the next step
88
+ * If true, the next step will always be enabled
89
+ *
90
+ * @default false
91
+ */
92
+ isStepValidatedOnNext?: boolean;
85
93
  }
86
94
 
87
95
  interface ModalWizardType {
@@ -106,6 +114,7 @@ export const ModalWizard: ModalWizardType = ({
106
114
  styles,
107
115
  unstyled,
108
116
  children,
117
+ isStepValidatedOnNext,
109
118
  ...modalProps
110
119
  }) => {
111
120
  const {
@@ -126,7 +135,9 @@ export const ModalWizard: ModalWizardType = ({
126
135
  const isLastStep = currentStepIndex === numberOfSteps - 1;
127
136
  const currentStep = modalSteps.filter((step: ReactElement, index: number) => index === currentStepIndex)[0];
128
137
 
129
- const {isValid} = currentStep?.props?.validateStep?.(currentStepIndex, numberOfSteps) ?? {isValid: true};
138
+ const {isValid} = isStepValidatedOnNext
139
+ ? {isValid: true}
140
+ : currentStep?.props?.validateStep?.(currentStepIndex, numberOfSteps) ?? {isValid: true};
130
141
 
131
142
  useEffect(() => {
132
143
  if (opened) {
@@ -224,8 +235,11 @@ export const ModalWizard: ModalWizardType = ({
224
235
  if (isLastStep) {
225
236
  onFinish?.() ?? handleClose(false);
226
237
  } else {
227
- onNext?.(currentStepIndex + 1);
228
- setCurrentStepIndex(currentStepIndex + 1);
238
+ onNext?.(currentStepIndex + 1, setCurrentStepIndex);
239
+
240
+ if (!isStepValidatedOnNext) {
241
+ setCurrentStepIndex(currentStepIndex + 1);
242
+ }
229
243
  }
230
244
  }}
231
245
  >
@@ -27,7 +27,7 @@ export interface ModalWizardStepProps {
27
27
  /**
28
28
  * A function to validate the current step, it determines if the next step should be enabled or not.
29
29
  */
30
- validateStep: (currentStep: any, numberOfSteps: any) => {isValid: boolean; messsage?: unknown};
30
+ validateStep?: (currentStep: any, numberOfSteps: any) => {isValid: boolean; messsage?: unknown};
31
31
 
32
32
  /**
33
33
  * Show progress bar at this step
@@ -79,8 +79,6 @@ describe('ModalWizard', () => {
79
79
 
80
80
  await user.click(nextButton);
81
81
 
82
- expect(onNextSpy).toHaveBeenCalledWith(1);
83
-
84
82
  expect(
85
83
  screen.getByRole('heading', {
86
84
  name: /current step is: 2/i,
@@ -108,8 +106,6 @@ describe('ModalWizard', () => {
108
106
 
109
107
  await user.click(nextButton);
110
108
 
111
- expect(onNextSpy).toHaveBeenCalledWith(2);
112
-
113
109
  expect(
114
110
  screen.getByRole('heading', {
115
111
  name: /current step is: 3/i,
@@ -143,8 +139,6 @@ describe('ModalWizard', () => {
143
139
  })
144
140
  );
145
141
 
146
- expect(onNextSpy).toHaveBeenCalledWith(1);
147
-
148
142
  expect(
149
143
  screen.getByRole('heading', {
150
144
  name: /current step is: 2/i,
@@ -372,4 +366,38 @@ describe('ModalWizard', () => {
372
366
 
373
367
  expect(screen.getByRole('progressbar')).toBeInTheDocument();
374
368
  });
369
+
370
+ it('enables the next step button if isStepValidatedOnNext is provided', async () => {
371
+ render(
372
+ <ModalWizard opened={true} onClose={vi.fn()} isStepValidatedOnNext>
373
+ <ModalWizard.Step title="Step 1" showProgressBar={false} validateStep={() => ({isValid: false})}>
374
+ Content step 1
375
+ </ModalWizard.Step>
376
+ <ModalWizard.Step title="Step 2" validateStep={() => ({isValid: false})}>
377
+ Content step 2
378
+ </ModalWizard.Step>
379
+ </ModalWizard>
380
+ );
381
+
382
+ expect(screen.getByRole('button', {name: /next/i})).toBeEnabled();
383
+ });
384
+
385
+ it('enables the next step button in accordance to validateStep if isStepValidatedOnNext is not provided', async () => {
386
+ const user = userEvent.setup();
387
+
388
+ render(
389
+ <ModalWizard opened={true} onClose={vi.fn()}>
390
+ <ModalWizard.Step title="Step 1" showProgressBar={false} validateStep={() => ({isValid: true})}>
391
+ Content step 1
392
+ </ModalWizard.Step>
393
+ <ModalWizard.Step title="Step 2" validateStep={() => ({isValid: false})}>
394
+ Content step 2
395
+ </ModalWizard.Step>
396
+ </ModalWizard>
397
+ );
398
+
399
+ expect(screen.getByRole('button', {name: /next/i})).toBeEnabled();
400
+ await user.click(screen.getByRole('button', {name: /next/i}));
401
+ expect(screen.getByRole('button', {name: /finish/i})).toBeDisabled();
402
+ });
375
403
  });
@@ -1,11 +1,10 @@
1
1
  import {createStyles} from '@mantine/core';
2
2
 
3
3
  interface TableStylesParams {
4
- hasHeader: boolean;
5
4
  multiRowSelectionEnabled: boolean;
6
5
  }
7
6
 
8
- const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, multiRowSelectionEnabled}) => {
7
+ const useStyles = createStyles<string, TableStylesParams>((theme, {multiRowSelectionEnabled}) => {
9
8
  const rowBackgroundColor =
10
9
  theme.colorScheme === 'dark'
11
10
  ? theme.fn.rgba(theme.colors[theme.primaryColor][7], 0.2)
@@ -13,7 +12,10 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
13
12
  return {
14
13
  table: {
15
14
  width: '100%',
16
- '& td:first-of-type, th:first-of-type > *': {
15
+ '& thead tr th': {
16
+ borderBottom: 'none',
17
+ },
18
+ '& td:first-of-type': {
17
19
  paddingLeft: theme.spacing.xl,
18
20
  },
19
21
  '& tbody td': {
@@ -23,7 +25,7 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
23
25
 
24
26
  header: {
25
27
  position: 'sticky',
26
- top: hasHeader ? 69 : 0,
28
+ top: 0,
27
29
  backgroundColor: theme.colorScheme === 'dark' ? theme.black : theme.white,
28
30
  transition: 'box-shadow 150ms ease',
29
31
  zIndex: 1,
@@ -34,7 +36,13 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
34
36
  left: 0,
35
37
  right: 0,
36
38
  bottom: 0,
37
- borderBottom: `1px solid ${theme.colors.gray[2]}`,
39
+ borderBottom: `1px solid ${theme.colors.gray[3]}`,
40
+ },
41
+ },
42
+
43
+ headerColumns: {
44
+ '& th:first-of-type > *': {
45
+ paddingLeft: theme.spacing.xl,
38
46
  },
39
47
  },
40
48
 
@@ -55,4 +63,12 @@ const useStyles = createStyles<string, TableStylesParams>((theme, {hasHeader, mu
55
63
  };
56
64
  });
57
65
 
66
+ export const TableComponentsOrder = {
67
+ MultiSelectInfo: 5,
68
+ Actions: 4,
69
+ Predicate: 3,
70
+ Filter: 2,
71
+ DateRangePicker: 1,
72
+ };
73
+
58
74
  export default useStyles;
@@ -18,6 +18,7 @@ import useStyles from './Table.styles';
18
18
  import {TableFormType, TableProps, TableState, TableType} from './Table.types';
19
19
  import {TableActions} from './TableActions';
20
20
  import {TableAccordionColumn, TableCollapsibleColumn} from './TableCollapsibleColumn';
21
+ import {TableConsumer} from './TableConsumer';
21
22
  import {TableContext} from './TableContext';
22
23
  import {TableDateRangePicker} from './TableDateRangePicker';
23
24
  import {TableFilter} from './TableFilter';
@@ -26,7 +27,6 @@ import {TableHeader} from './TableHeader';
26
27
  import {TablePagination} from './TablePagination';
27
28
  import {TablePerPage} from './TablePerPage';
28
29
  import {TablePredicate} from './TablePredicate';
29
- import {TableConsumer} from './TableConsumer';
30
30
  import {TableSelectableColumn} from './TableSelectableColumn';
31
31
  import {Th} from './Th';
32
32
  import {useRowSelection} from './useRowSelection';
@@ -62,7 +62,7 @@ export const Table: TableType = <T,>({
62
62
  const form = useForm<TableFormType>({
63
63
  initialValues: {predicates: initialState?.predicates ?? {}, dateRange: initialState?.dateRange ?? [null, null]},
64
64
  });
65
- const {cx, classes} = useStyles({hasHeader: !!header, multiRowSelectionEnabled});
65
+ const {cx, classes} = useStyles({multiRowSelectionEnabled});
66
66
 
67
67
  const table = useReactTable({
68
68
  initialState: defaultsDeep(initialStateWithoutForm, {pagination: {pageSize: TablePerPage.DEFAULT_SIZE}}),
@@ -196,11 +196,17 @@ export const Table: TableType = <T,>({
196
196
  noDataChildren
197
197
  ) : (
198
198
  <>
199
- {header}
200
199
  <MantineTable className={classes.table} horizontalSpacing="sm" verticalSpacing="xs" pb="sm">
201
200
  <thead className={classes.header}>
201
+ {!!header ? (
202
+ <tr>
203
+ <th style={{padding: 0}} colSpan={table.getAllColumns().length}>
204
+ {header}
205
+ </th>
206
+ </tr>
207
+ ) : null}
202
208
  {table.getHeaderGroups().map((headerGroup) => (
203
- <tr key={headerGroup.id}>
209
+ <tr key={headerGroup.id} className={classes.headerColumns}>
204
210
  {headerGroup.headers.map((columnHeader) => (
205
211
  <Th key={columnHeader.id} header={columnHeader} />
206
212
  ))}
@@ -1,5 +1,6 @@
1
- import {Group} from '@mantine/core';
1
+ import {Grid, Group} from '@mantine/core';
2
2
  import {ReactElement, ReactNode} from 'react';
3
+ import {TableComponentsOrder} from './Table.styles';
3
4
 
4
5
  import {useTable} from './TableContext';
5
6
 
@@ -35,10 +36,12 @@ export const TableActions = <T,>({children}: TableActionsProps<T>): ReactElement
35
36
  }
36
37
 
37
38
  return (
38
- <Group spacing="xs">
39
- {multiRowSelectionEnabled
40
- ? (children as (data: T[]) => ReactNode)(selectedRows)
41
- : (children as (datum: T) => ReactNode)(selectedRows[0])}
42
- </Group>
39
+ <Grid.Col span="content" order={TableComponentsOrder.Actions} py="sm">
40
+ <Group spacing="xs" style={{display: 'inline-flex'}}>
41
+ {multiRowSelectionEnabled
42
+ ? (children as (data: T[]) => ReactNode)(selectedRows)
43
+ : (children as (datum: T) => ReactNode)(selectedRows[0])}
44
+ </Group>
45
+ </Grid.Col>
43
46
  );
44
47
  };
@@ -1,5 +1,5 @@
1
1
  import {CalendarSize24Px} from '@coveord/plasma-react-icons';
2
- import {Popover} from '@mantine/core';
2
+ import {Grid, Group, Popover, Text} from '@mantine/core';
3
3
  import dayjs from 'dayjs';
4
4
  import {FunctionComponent, useState} from 'react';
5
5
 
@@ -10,6 +10,7 @@ import {
10
10
  DateRangePickerPreset,
11
11
  DateRangePickerValue,
12
12
  } from '../date-range-picker';
13
+ import {TableComponentsOrder} from './Table.styles';
13
14
  import {useTable} from './TableContext';
14
15
 
15
16
  interface TableDateRangePickerProps
@@ -47,24 +48,26 @@ export const TableDateRangePicker: FunctionComponent<TableDateRangePickerProps>
47
48
  const formatedRange = `${formatDate(form.values.dateRange[0])} - ${formatDate(form.values.dateRange[1])}`;
48
49
 
49
50
  return (
50
- <>
51
- {formatedRange}
52
- <Popover opened={opened} onChange={setOpened}>
53
- <Popover.Target>
54
- <Button variant="outline" color="gray" onClick={() => setOpened(true)} px="xs">
55
- <CalendarSize24Px width={24} height={24} />
56
- </Button>
57
- </Popover.Target>
58
- <Popover.Dropdown p={0}>
59
- <DateRangePickerInlineCalendar
60
- initialRange={form.values.dateRange}
61
- onApply={onApply}
62
- onCancel={onCancel}
63
- presets={presets}
64
- rangeCalendarProps={rangeCalendarProps}
65
- />
66
- </Popover.Dropdown>
67
- </Popover>
68
- </>
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}>
55
+ <Popover.Target>
56
+ <Button variant="outline" color="gray" onClick={() => setOpened(true)} px="xs">
57
+ <CalendarSize24Px width={24} height={24} />
58
+ </Button>
59
+ </Popover.Target>
60
+ <Popover.Dropdown p={0}>
61
+ <DateRangePickerInlineCalendar
62
+ initialRange={form.values.dateRange}
63
+ onApply={onApply}
64
+ onCancel={onCancel}
65
+ presets={presets}
66
+ rangeCalendarProps={rangeCalendarProps}
67
+ />
68
+ </Popover.Dropdown>
69
+ </Popover>
70
+ </Group>
71
+ </Grid.Col>
69
72
  );
70
73
  };
@@ -1,6 +1,7 @@
1
1
  import {CrossSize16Px, SearchSize16Px} from '@coveord/plasma-react-icons';
2
- import {ActionIcon, createStyles, DefaultProps, Selectors, TextInput} from '@mantine/core';
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';
4
5
 
5
6
  import {useTable} from './TableContext';
6
7
 
@@ -53,22 +54,24 @@ export const TableFilter: FunctionComponent<TableFilterProps> = ({
53
54
  };
54
55
 
55
56
  return (
56
- <TextInput
57
- className={classes.wrapper}
58
- placeholder={placeholder}
59
- mb="md"
60
- rightSection={
61
- state.globalFilter ? (
62
- <ActionIcon onClick={handleClear}>
63
- <CrossSize16Px height={16} />
64
- </ActionIcon>
65
- ) : (
66
- <SearchSize16Px height={14} className={classes.empty} />
67
- )
68
- }
69
- value={state.globalFilter}
70
- onChange={handleChange}
71
- {...others}
72
- />
57
+ <Grid.Col span="content" order={TableComponentsOrder.Filter} py="sm">
58
+ <TextInput
59
+ className={classes.wrapper}
60
+ placeholder={placeholder}
61
+ mb="md"
62
+ rightSection={
63
+ state.globalFilter ? (
64
+ <ActionIcon onClick={handleClear}>
65
+ <CrossSize16Px height={16} />
66
+ </ActionIcon>
67
+ ) : (
68
+ <SearchSize16Px height={14} className={classes.empty} />
69
+ )
70
+ }
71
+ value={state.globalFilter}
72
+ onChange={handleChange}
73
+ {...others}
74
+ />
75
+ </Grid.Col>
73
76
  );
74
77
  };
@@ -1,18 +1,21 @@
1
1
  import {CrossSize16Px} from '@coveord/plasma-react-icons';
2
- import {createStyles, DefaultProps, Group, Selectors, Space, Tooltip} from '@mantine/core';
2
+ import {createStyles, DefaultProps, Grid, Selectors, Tooltip} from '@mantine/core';
3
3
  import {FunctionComponent, ReactNode} from 'react';
4
4
 
5
5
  import {Button} from '../button';
6
+ import {TableComponentsOrder} from './Table.styles';
6
7
  import {useTable} from './TableContext';
7
8
 
8
9
  const useStyles = createStyles((theme) => ({
9
10
  root: {
10
- position: 'sticky',
11
- top: 0,
12
- zIndex: 1,
13
- backgroundColor: theme.colors.gray[1],
11
+ flexDirection: 'row-reverse',
12
+ flexWrap: 'wrap-reverse',
13
+ background: `repeating-linear-gradient(${theme.colors.gray[1]}, ${theme.colors.gray[1]} 68px, ${theme.colors.gray[3]} 68px, ${theme.colors.gray[3]} 69px)`,
14
14
  borderBottom: `1px solid ${theme.colors.gray[3]}`,
15
15
  },
16
+ multiSelectInfo: {
17
+ justifySelf: 'flex-start',
18
+ },
16
19
  }));
17
20
 
18
21
  type TableHeaderStylesNames = Selectors<typeof useStyles>;
@@ -30,24 +33,33 @@ export const TableHeader: FunctionComponent<TableHeaderProps> = ({
30
33
  const {getSelectedRows, multiRowSelectionEnabled, clearSelection} = useTable();
31
34
  const {classes} = useStyles(null, {name: 'TableHeader', classNames, styles, unstyled});
32
35
  const selectedRows = getSelectedRows();
33
- return multiRowSelectionEnabled ? (
34
- <Group position="apart" className={classes.root}>
35
- {selectedRows.length > 0 ? (
36
- <Tooltip label="Unselect all">
37
- <Button onClick={clearSelection} ml="lg" variant="subtle" leftIcon={<CrossSize16Px height={16} />}>
38
- {selectedRows.length} selected
39
- </Button>
40
- </Tooltip>
41
- ) : (
42
- <Space />
43
- )}
44
- <Group position="right" spacing="lg" px="md" py="sm" {...others}>
45
- {children}
46
- </Group>
47
- </Group>
48
- ) : (
49
- <Group position="right" spacing="lg" px="md" py="sm" className={classes.root} {...others}>
36
+ return (
37
+ <Grid
38
+ justify="flex-start"
39
+ align="center"
40
+ gutter="sm"
41
+ p={0}
42
+ pl="md"
43
+ pr="lg"
44
+ m={0}
45
+ className={classes.root}
46
+ {...others}
47
+ >
48
+ {multiRowSelectionEnabled && selectedRows.length > 0 ? (
49
+ <Grid.Col
50
+ span="auto"
51
+ py="sm"
52
+ className={classes.multiSelectInfo}
53
+ order={TableComponentsOrder.MultiSelectInfo}
54
+ >
55
+ <Tooltip label="Unselect all">
56
+ <Button onClick={clearSelection} variant="subtle" leftIcon={<CrossSize16Px height={16} />}>
57
+ {selectedRows.length} selected
58
+ </Button>
59
+ </Tooltip>
60
+ </Grid.Col>
61
+ ) : null}
50
62
  {children}
51
- </Group>
63
+ </Grid>
52
64
  );
53
65
  };
@@ -1,5 +1,6 @@
1
- import {Group, Select, SelectItem, Text} from '@mantine/core';
1
+ import {Grid, Group, Select, SelectItem, Text} from '@mantine/core';
2
2
  import {FunctionComponent} from 'react';
3
+ import {TableComponentsOrder} from './Table.styles';
3
4
 
4
5
  import {useTable} from './TableContext';
5
6
 
@@ -29,16 +30,18 @@ export const TablePredicate: FunctionComponent<TablePredicateProps> = ({id, data
29
30
  };
30
31
 
31
32
  return (
32
- <Group spacing="xs">
33
- {label ? <Text>{label}:</Text> : null}
34
- <Select
35
- withinPortal
36
- value={form.values.predicates[id]}
37
- onChange={onUpdate}
38
- data={data}
39
- aria-label={label ?? id}
40
- searchable={data.length > 7}
41
- />
42
- </Group>
33
+ <Grid.Col span="content" order={TableComponentsOrder.Predicate} py="sm">
34
+ <Group spacing="xs">
35
+ {label ? <Text>{label}:</Text> : null}
36
+ <Select
37
+ withinPortal
38
+ value={form.values.predicates[id]}
39
+ onChange={onUpdate}
40
+ data={data}
41
+ aria-label={label ?? id}
42
+ searchable={data.length > 7}
43
+ />
44
+ </Group>
45
+ </Grid.Col>
43
46
  );
44
47
  };